MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxLiteralExpression

Function fxLiteralExpression

xs/sources/xsSyntaxical.c:2287–2520  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2285}
2286
2287void fxLiteralExpression(txParser* parser, txUnsigned flag)
2288{
2289 int escaped;
2290 txSymbol* aSymbol;
2291 txInteger aLine = parser->states[0].line;
2292 txUnsigned flags = 0;
2293 char c = 0;
2294 fxCheckParserStack(parser, aLine);
2295 switch (parser->states[0].token) {
2296 case XS_TOKEN_NULL:
2297 case XS_TOKEN_TRUE:
2298 case XS_TOKEN_FALSE:
2299 fxPushNodeStruct(parser, 0, parser->states[0].token, aLine);
2300 fxMatchToken(parser, parser->states[0].token);
2301 break;
2302 case XS_TOKEN_IMPORT:
2303 fxMatchToken(parser, XS_TOKEN_IMPORT);
2304 if (!flag && (parser->states[0].token == XS_TOKEN_LEFT_PARENTHESIS)) {
2305 txUnsigned flags = parser->flags & mxForFlag;
2306 fxGetNextToken(parser);
2307 parser->flags &= ~mxForFlag;
2308 fxAssignmentExpression(parser);
2309 if (parser->states[0].token == XS_TOKEN_COMMA) {
2310 fxGetNextToken(parser);
2311 if (gxTokenFlags[parser->states[0].token] & XS_TOKEN_BEGIN_EXPRESSION) {
2312 fxAssignmentExpression(parser);
2313 if (parser->states[0].token == XS_TOKEN_COMMA)
2314 fxGetNextToken(parser);
2315 }
2316 else
2317 fxPushNULL(parser);
2318 }
2319 else
2320 fxPushNULL(parser);
2321 parser->flags |= flags;
2322 fxMatchToken(parser, XS_TOKEN_RIGHT_PARENTHESIS);
2323 fxPushNodeStruct(parser, 2, XS_TOKEN_IMPORT_CALL, aLine);
2324 }
2325 else if (parser->states[0].token == XS_TOKEN_DOT) {
2326 fxGetNextToken(parser);
2327 if ((parser->states[0].token == XS_TOKEN_IDENTIFIER) && (parser->states[0].symbol == parser->metaSymbol) && (!parser->states[0].escaped)) {
2328 fxGetNextToken(parser);
2329 if (parser->flags & mxProgramFlag)
2330 fxReportParserError(parser, parser->states[0].line, "invalid import.meta");
2331 else
2332 fxPushNodeStruct(parser, 0, XS_TOKEN_IMPORT_META, aLine);
2333 }
2334 else
2335 fxReportParserError(parser, parser->states[0].line, "invalid import.");
2336 }
2337 else
2338 fxReportParserError(parser, parser->states[0].line, "invalid import");
2339 break;
2340 case XS_TOKEN_SUPER:
2341 fxMatchToken(parser, XS_TOKEN_SUPER);
2342 if (parser->states[0].token == XS_TOKEN_LEFT_PARENTHESIS) {
2343 if (parser->flags & mxDerivedFlag) {
2344 fxParameters(parser);

Callers 2

fxCallExpressionFunction · 0.85
fxNewExpressionFunction · 0.85

Calls 15

fxCheckParserStackFunction · 0.85
fxPushNodeStructFunction · 0.85
fxMatchTokenFunction · 0.85
fxGetNextTokenFunction · 0.85
fxAssignmentExpressionFunction · 0.85
fxPushNULLFunction · 0.85
fxReportParserErrorFunction · 0.85
fxParametersFunction · 0.85
fxPushIntegerNodeFunction · 0.85
fxPushNumberNodeFunction · 0.85
fxPushBigIntNodeFunction · 0.85
fxGetNextRegExpFunction · 0.85

Tested by

no test coverage detected