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

Function fxNewExpression

xs/sources/xsSyntaxical.c:3058–3122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3056}
3057
3058void fxNewExpression(txParser* parser)
3059{
3060 txInteger aLine = parser->states[0].line;
3061 fxMatchToken(parser, XS_TOKEN_NEW);
3062 if (parser->states[0].token == XS_TOKEN_DOT) {
3063 fxGetNextToken(parser);
3064 if (fxIsKeyword(parser, parser->targetSymbol)) {
3065 if (!(parser->flags & mxTargetFlag))
3066 fxReportParserError(parser, parser->states[0].line, "invalid new.target");
3067 fxGetNextToken(parser);
3068 fxPushNodeStruct(parser, 0, XS_TOKEN_TARGET, aLine);
3069 }
3070 else
3071 fxReportParserError(parser, parser->states[0].line, "missing target");
3072 return;
3073 }
3074 fxLiteralExpression(parser, 1);
3075 fxCheckArrowFunction(parser, 1);
3076 for (;;) {
3077 txInteger aMemberLine = parser->states[0].line;
3078 if (parser->states[0].token == XS_TOKEN_DOT) {
3079 fxGetNextToken(parser);
3080 if (parser->states[0].token == XS_TOKEN_IDENTIFIER) {
3081 fxPushSymbol(parser, parser->states[0].symbol);
3082 fxPushNodeStruct(parser, 2, XS_TOKEN_MEMBER, aMemberLine);
3083 fxGetNextToken(parser);
3084 }
3085 else if (parser->states[0].token == XS_TOKEN_PRIVATE_IDENTIFIER) {
3086 fxPushSymbol(parser, parser->states[0].symbol);
3087 fxSwapNodes(parser);
3088 fxPushNodeStruct(parser, 2, XS_TOKEN_PRIVATE_MEMBER, aMemberLine);
3089 fxGetNextToken(parser);
3090 }
3091 else
3092 fxReportParserError(parser, parser->states[0].line, "missing property");
3093 }
3094 else if (parser->states[0].token == XS_TOKEN_LEFT_BRACKET) {
3095 fxGetNextToken(parser);
3096 fxCommaExpression(parser);
3097 fxPushNodeStruct(parser, 2, XS_TOKEN_MEMBER_AT, aMemberLine);
3098 fxMatchToken(parser, XS_TOKEN_RIGHT_BRACKET);
3099 }
3100 else if (parser->states[0].token == XS_TOKEN_TEMPLATE) {
3101 fxPushStringNode(parser, parser->states[0].stringLength, parser->states[0].string, aLine);
3102 fxPushRawNode(parser, parser->states[0].rawLength, parser->states[0].raw, aLine);
3103 fxPushNodeStruct(parser, 2, XS_TOKEN_TEMPLATE_MIDDLE, aLine);
3104 fxGetNextToken(parser);
3105 fxPushNodeList(parser, 1);
3106 fxPushNodeStruct(parser, 2, XS_TOKEN_TEMPLATE, aLine);
3107 }
3108 else if (parser->states[0].token == XS_TOKEN_TEMPLATE_HEAD) {
3109 fxTemplateExpression(parser);
3110 fxPushNodeStruct(parser, 2, XS_TOKEN_TEMPLATE, aLine);
3111 }
3112 else
3113 break;
3114 }
3115 if (parser->states[0].token == XS_TOKEN_LEFT_PARENTHESIS)

Callers 1

fxLiteralExpressionFunction · 0.85

Calls 15

fxMatchTokenFunction · 0.85
fxGetNextTokenFunction · 0.85
fxReportParserErrorFunction · 0.85
fxPushNodeStructFunction · 0.85
fxLiteralExpressionFunction · 0.85
fxCheckArrowFunctionFunction · 0.85
fxPushSymbolFunction · 0.85
fxSwapNodesFunction · 0.85
fxCommaExpressionFunction · 0.85
fxPushStringNodeFunction · 0.85
fxPushRawNodeFunction · 0.85
fxPushNodeListFunction · 0.85

Tested by

no test coverage detected