Jim Tcl
Diff
Not logged in

Differences From Artifact [938c50799bdecb51]:

To Artifact [ccc7e4e3eedc208e]:


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 = '"';