Differences From Artifact [938c50799bdecb51]:
- File
jim.c
-
2011-11-07 05:31:41
- part of checkin
[42d776e90b]
on branch trunk
- Allow building with MSVC on windows
Signed-off-by: Steve Bennett <steveb@workware.net.au> (user: steveb@workware.net.au
-
2011-11-07 05:31:41
- part of checkin
[42d776e90b]
on branch trunk
- Allow building with MSVC on windows
To Artifact [ccc7e4e3eedc208e]:
- File
jim.c
-
2011-11-08 21:18:24
- part of checkin
[7ade67234d]
on branch trunk
- Fix a parsing bug for quoted orphan $
Signed-off-by: Steve Bennett <steveb@workware.net.au> (user: steveb@workware.net.au
-
2011-11-08 21:18:24
- part of checkin
[7ade67234d]
on branch trunk
- Fix a parsing bug for quoted orphan $
1192 1192 return JIM_OK;
1193 1193 }
1194 1194 switch (*(pc->p)) {
1195 1195 case '\\':
1196 1196 if (*(pc->p + 1) == '\n' && pc->state == JIM_PS_DEF) {
1197 1197 return JimParseSep(pc);
1198 1198 }
1199 - else {
1200 - pc->comment = 0;
1201 - return JimParseStr(pc);
1202 - }
1203 - break;
1199 + pc->comment = 0;
1200 + return JimParseStr(pc);
1204 1201 case ' ':
1205 1202 case '\t':
1206 1203 case '\r':
1207 1204 if (pc->state == JIM_PS_DEF)
1208 1205 return JimParseSep(pc);
1209 - else {
1210 - pc->comment = 0;
1211 - return JimParseStr(pc);
1212 - }
1213 - break;
1206 + pc->comment = 0;
1207 + return JimParseStr(pc);
1214 1208 case '\n':
1215 1209 case ';':
1216 1210 pc->comment = 1;
1217 1211 if (pc->state == JIM_PS_DEF)
1218 1212 return JimParseEol(pc);
1219 - else
1220 - return JimParseStr(pc);
1221 - break;
1213 + return JimParseStr(pc);
1222 1214 case '[':
1223 1215 pc->comment = 0;
1224 1216 return JimParseCmd(pc);
1225 - break;
1226 1217 case '$':
1227 1218 pc->comment = 0;
1228 1219 if (JimParseVar(pc) == JIM_ERR) {
1220 + /* An orphan $. Create as a separate token */
1229 1221 pc->tstart = pc->tend = pc->p++;
1230 1222 pc->len--;
1231 - pc->tline = pc->linenr;
1232 - pc->tt = JIM_TT_STR;
1233 - return JIM_OK;
1223 + pc->tt = JIM_TT_ESC;
1234 1224 }
1235 - else
1236 - return JIM_OK;
1237 - break;
1225 + return JIM_OK;
1238 1226 case '#':
1239 1227 if (pc->comment) {
1240 1228 JimParseComment(pc);
1241 1229 continue;
1242 1230 }
1243 - else {
1244 - return JimParseStr(pc);
1245 - }
1231 + return JimParseStr(pc);
1246 1232 default:
1247 1233 pc->comment = 0;
1248 1234 return JimParseStr(pc);
1249 - break;
1250 1235 }
1251 1236 return JIM_OK;
1252 1237 }
1253 1238 }
1254 1239
1255 1240 static int JimParseSep(struct JimParserCtx *pc)
1256 1241 {
................................................................................
1606 1591 return JIM_ERR;
1607 1592 }
1608 1593 return JIM_OK;
1609 1594 }
1610 1595
1611 1596 static int JimParseStr(struct JimParserCtx *pc)
1612 1597 {
1613 - int newword = (pc->tt == JIM_TT_SEP || pc->tt == JIM_TT_EOL ||
1614 - pc->tt == JIM_TT_NONE || pc->tt == JIM_TT_STR);
1615 - if (newword && *pc->p == '{') {
1616 - return JimParseBrace(pc);
1617 - }
1618 - else if (newword && *pc->p == '"') {
1619 - pc->state = JIM_PS_QUOTE;
1620 - pc->p++;
1621 - pc->len--;
1622 - /* In case the end quote is missing */
1623 - pc->missingline = pc->tline;
1598 + if (pc->tt == JIM_TT_SEP || pc->tt == JIM_TT_EOL ||
1599 + pc->tt == JIM_TT_NONE || pc->tt == JIM_TT_STR) {
1600 + /* Starting a new word */
1601 + if (*pc->p == '{') {
1602 + return JimParseBrace(pc);
1603 + }
1604 + if (*pc->p == '"') {
1605 + pc->state = JIM_PS_QUOTE;
1606 + pc->p++;
1607 + pc->len--;
1608 + /* In case the end quote is missing */
1609 + pc->missingline = pc->tline;
1610 + }
1624 1611 }
1625 1612 pc->tstart = pc->p;
1626 1613 pc->tline = pc->linenr;
1627 1614 while (1) {
1628 1615 if (pc->len == 0) {
1629 1616 if (pc->state == JIM_PS_QUOTE) {
1630 1617 pc->missing = '"';