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

Function fxJSXElement

xs/sources/xsSyntaxical.c:4449–4559  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4447}
4448
4449void fxJSXElement(txParser* parser)
4450{
4451 txBoolean closed = 0;
4452 txInteger line = parser->states[0].line;
4453 txNode* name = NULL;
4454 txInteger nodeCount = parser->nodeCount;
4455 txInteger propertyCount = 0;
4456 fxCheckParserStack(parser, line);
4457 fxPushSymbol(parser, parser->__jsx__Symbol);
4458 fxPushNodeStruct(parser, 1, XS_TOKEN_ACCESS, parser->states[0].line);
4459 if (parser->states[0].token == XS_TOKEN_IDENTIFIER) {
4460 fxJSXElementName(parser);
4461 name = parser->root;
4462 }
4463 else {
4464 fxReportParserError(parser, parser->states[0].line, "missing identifier");
4465 fxPushNULL(parser);
4466 }
4467 for (;;) {
4468 if (parser->states[0].token == XS_TOKEN_MORE)
4469 break;
4470 if (parser->states[0].token == XS_TOKEN_DIVIDE) {
4471 fxGetNextToken(parser);
4472 if (parser->states[0].token != XS_TOKEN_MORE)
4473 fxReportParserError(parser, parser->states[0].line, "missing >");
4474 closed = 1;
4475 break;
4476 }
4477 if (gxTokenFlags[parser->states[0].token] & XS_TOKEN_IDENTIFIER_NAME) {
4478 fxJSXAttributeName(parser);
4479 if (parser->states[0].token == XS_TOKEN_ASSIGN)
4480 fxJSXAttributeValue(parser);
4481 else
4482 fxPushNodeStruct(parser, 0, XS_TOKEN_TRUE, parser->states[0].line);
4483 fxPushNodeStruct(parser, 2, XS_TOKEN_PROPERTY, parser->states[0].line);
4484 propertyCount++;
4485 }
4486 else if (parser->states[0].token == XS_TOKEN_LEFT_BRACE) {
4487 fxGetNextToken(parser);
4488 if (parser->states[0].token == XS_TOKEN_SPREAD) {
4489 fxGetNextToken(parser);
4490 fxAssignmentExpression(parser);
4491 if (parser->states[0].token == XS_TOKEN_RIGHT_BRACE)
4492 fxGetNextToken(parser);
4493 else
4494 fxReportParserError(parser, parser->states[0].line, "missing }");
4495 fxPushNodeStruct(parser, 1, XS_TOKEN_SPREAD, parser->states[0].line);
4496 propertyCount++;
4497 }
4498 else
4499 fxReportParserError(parser, parser->states[0].line, "invalid %s", gxTokenNames[parser->states[0].token]);
4500 }
4501 else {
4502 fxReportParserError(parser, parser->states[0].line, "invalid %s", gxTokenNames[parser->states[0].token]);
4503 break;
4504 }
4505 }
4506 if (propertyCount > 0) {

Callers 1

fxLiteralExpressionFunction · 0.85

Calls 15

fxCheckParserStackFunction · 0.85
fxPushSymbolFunction · 0.85
fxPushNodeStructFunction · 0.85
fxJSXElementNameFunction · 0.85
fxReportParserErrorFunction · 0.85
fxPushNULLFunction · 0.85
fxGetNextTokenFunction · 0.85
fxJSXAttributeNameFunction · 0.85
fxJSXAttributeValueFunction · 0.85
fxAssignmentExpressionFunction · 0.85
fxPushNodeListFunction · 0.85
fxGetNextTokenJSXChildFunction · 0.85

Tested by

no test coverage detected