| 3215 | } |
| 3216 | |
| 3217 | void fxTemplateExpression(txParser* parser) |
| 3218 | { |
| 3219 | txInteger aCount = 0; |
| 3220 | txInteger aLine = parser->states[0].line; |
| 3221 | fxPushStringNode(parser, parser->states[0].stringLength, parser->states[0].string, aLine); |
| 3222 | fxPushRawNode(parser, parser->states[0].rawLength, parser->states[0].raw, aLine); |
| 3223 | fxPushNodeStruct(parser, 2, XS_TOKEN_TEMPLATE_MIDDLE, aLine); |
| 3224 | aCount++; |
| 3225 | for (;;) { |
| 3226 | fxGetNextToken(parser); |
| 3227 | if (parser->states[0].token != XS_TOKEN_RIGHT_BRACE) { |
| 3228 | fxCommaExpression(parser); |
| 3229 | aCount++; |
| 3230 | } |
| 3231 | if (parser->states[0].token != XS_TOKEN_RIGHT_BRACE) { |
| 3232 | fxReportParserError(parser, parser->states[0].line, "missing }"); |
| 3233 | } |
| 3234 | fxGetNextTokenTemplate(parser); |
| 3235 | fxPushStringNode(parser, parser->states[0].stringLength, parser->states[0].string, aLine); |
| 3236 | fxPushRawNode(parser, parser->states[0].rawLength, parser->states[0].raw, aLine); |
| 3237 | fxPushNodeStruct(parser, 2, XS_TOKEN_TEMPLATE_MIDDLE, aLine); |
| 3238 | aCount++; |
| 3239 | if (parser->states[0].token == XS_TOKEN_TEMPLATE_TAIL) { |
| 3240 | fxGetNextToken(parser); |
| 3241 | break; |
| 3242 | } |
| 3243 | } |
| 3244 | fxPushNodeList(parser, aCount); |
| 3245 | } |
| 3246 | |
| 3247 | void fxYieldExpression(txParser* parser) |
| 3248 | { |
no test coverage detected