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

Function fxScopeCodingEval

xs/sources/xsCode.c:1510–1591  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1508}
1509
1510void fxScopeCodingEval(txScope* self, txCoder* coder)
1511{
1512 txProgramNode* programNode = (txProgramNode*)self->node;
1513 txDeclareNode* node;
1514 if (self->flags & mxStrictFlag) {
1515 if (programNode->scopeCount) {
1516 fxCoderAddIndex(coder, 0, XS_CODE_RESERVE_1, programNode->scopeCount);
1517 fxScopeCodingBlock(self, coder);
1518 node = self->firstDeclareNode;
1519 while (node) {
1520 if (node->description->token == XS_TOKEN_PRIVATE) {
1521 fxCoderAddSymbol(coder, 1, XS_CODE_EVAL_PRIVATE, node->symbol);
1522 fxCoderAddIndex(coder, 0, XS_CODE_CONST_CLOSURE_1, node->index);
1523 fxCoderAddByte(coder, -1, XS_CODE_POP);
1524 }
1525 node = node->nextDeclareNode;
1526 }
1527 }
1528 }
1529 else {
1530 txInteger count = 0;
1531 node = self->firstDeclareNode;
1532 while (node) {
1533 if ((node->description->token == XS_TOKEN_DEFINE) || (node->description->token == XS_TOKEN_VAR))
1534 count++;
1535 node = node->nextDeclareNode;
1536 }
1537 if (count) {
1538 fxCoderAddIndex(coder, 0, XS_CODE_RESERVE_1, count);
1539 node = self->firstDeclareNode;
1540 while (node) {
1541 if (node->description->token == XS_TOKEN_DEFINE) {
1542 node->index = coder->scopeLevel++;
1543 fxCoderAddVariable(coder, 0, XS_CODE_NEW_LOCAL, node->symbol, node->index);
1544 fxCoderAddByte(coder, 1, XS_CODE_NULL);
1545 fxCoderAddIndex(coder, 0, XS_CODE_VAR_LOCAL_1, node->index);
1546 fxCoderAddByte(coder, -1, XS_CODE_POP);
1547 }
1548 else if (node->description->token == XS_TOKEN_VAR) {
1549 node->index = coder->scopeLevel++;
1550 fxCoderAddVariable(coder, 0, XS_CODE_NEW_LOCAL, node->symbol, node->index);
1551 fxCoderAddByte(coder, 1, XS_CODE_UNDEFINED);
1552 fxCoderAddIndex(coder, 0, XS_CODE_VAR_LOCAL_1, node->index);
1553 fxCoderAddByte(coder, -1, XS_CODE_POP);
1554 }
1555 node = node->nextDeclareNode;
1556 }
1557 }
1558 fxCoderAddByte(coder, 0, XS_CODE_EVAL_ENVIRONMENT);
1559 coder->scopeLevel = 0;
1560 if (programNode->scopeCount) {
1561 fxCoderAddIndex(coder, 0, XS_CODE_RESERVE_1, programNode->scopeCount);
1562 if (self->declareNodeCount) {
1563 node = self->firstDeclareNode;
1564 while (node) {
1565 if ((node->description->token != XS_TOKEN_DEFINE) && (node->description->token != XS_TOKEN_VAR)) {
1566 node->index = coder->scopeLevel++;
1567 if (node->flags & mxDeclareNodeClosureFlag) {

Callers 1

fxProgramNodeCodeFunction · 0.85

Calls 5

fxCoderAddIndexFunction · 0.85
fxScopeCodingBlockFunction · 0.85
fxCoderAddSymbolFunction · 0.85
fxCoderAddByteFunction · 0.85
fxCoderAddVariableFunction · 0.85

Tested by

no test coverage detected