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

Function fxScopeCodingProgram

xs/sources/xsCode.c:1634–1675  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1632}
1633
1634void fxScopeCodingProgram(txScope* self, txCoder* coder)
1635{
1636 txProgramNode* programNode = (txProgramNode*)self->node;
1637 txDeclareNode* node;
1638 txInteger count = 0;
1639 if (programNode->variableCount) {
1640 fxCoderAddIndex(coder, 0, XS_CODE_RESERVE_1, programNode->variableCount);
1641 node = self->firstDeclareNode;
1642 while (node) {
1643 if ((node->description->token != XS_TOKEN_DEFINE) && (node->description->token != XS_TOKEN_VAR)) {
1644 node->index = coder->scopeLevel++;
1645 fxCoderAddVariable(coder, 0, XS_CODE_NEW_CLOSURE, node->symbol, node->index);
1646 }
1647 node = node->nextDeclareNode;
1648 }
1649 count = coder->scopeLevel;
1650 node = self->firstDeclareNode;
1651 while (node) {
1652 if (node->description->token == XS_TOKEN_DEFINE) {
1653 // closure -> global property
1654 node->index = coder->scopeLevel++;
1655 fxCoderAddVariable(coder, 0, XS_CODE_NEW_LOCAL, node->symbol, node->index);
1656 fxCoderAddByte(coder, 1, XS_CODE_NULL);
1657 fxCoderAddIndex(coder, 0, XS_CODE_VAR_LOCAL_1, node->index);
1658 fxCoderAddByte(coder, -1, XS_CODE_POP);
1659 }
1660 else if (node->description->token == XS_TOKEN_VAR) {
1661 // closure -> global property
1662 node->index = coder->scopeLevel++;
1663 fxCoderAddVariable(coder, 0, XS_CODE_NEW_LOCAL, node->symbol, node->index);
1664 fxCoderAddByte(coder, 1, XS_CODE_UNDEFINED);
1665 fxCoderAddIndex(coder, 0, XS_CODE_VAR_LOCAL_1, node->index);
1666 fxCoderAddByte(coder, -1, XS_CODE_POP);
1667 }
1668 node = node->nextDeclareNode;
1669 }
1670 fxCoderAddByte(coder, 0, XS_CODE_PROGRAM_ENVIRONMENT);
1671 coder->scopeLevel = count;
1672 }
1673 if (programNode->scopeCount > count)
1674 fxCoderAddIndex(coder, 0, XS_CODE_RESERVE_1, programNode->scopeCount - count);
1675}
1676
1677void fxScopeCodeDefineNodes(txScope* self, txCoder* coder)
1678{

Callers 1

fxProgramNodeCodeFunction · 0.85

Calls 3

fxCoderAddIndexFunction · 0.85
fxCoderAddVariableFunction · 0.85
fxCoderAddByteFunction · 0.85

Tested by

no test coverage detected