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

Function fxScopeCodeUsed

xs/sources/xsCode.c:1831–1869  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1829}
1830
1831void fxScopeCodeUsed(txScope* self, txCoder* coder, txUsingContext* context)
1832{
1833 txTargetCode* normalTarget = fxCoderCreateTarget(coder);
1834 txTargetCode* uncatchTarget = fxCoderCreateTarget(coder);
1835 txTargetCode* finallyTarget = fxCoderCreateTarget(coder);
1836 txTargetCode* elseTarget = fxCoderCreateTarget(coder);
1837 txInteger selection;
1838
1839 fxCoderAddBranch(coder, 0, XS_CODE_BRANCH_1, normalTarget);
1840 fxCoderAdd(coder, 0, context->catchTarget);
1841 fxCoderAddByte(coder, 1, XS_CODE_EXCEPTION);
1842 fxCoderAddIndex(coder, 0, XS_CODE_PULL_LOCAL_1, context->exception);
1843 fxCoderAddInteger(coder, 1, XS_CODE_INTEGER_1, 0);
1844 fxCoderAddIndex(coder, -1, XS_CODE_PULL_LOCAL_1, context->selector);
1845 fxCoderAddBranch(coder, 0, XS_CODE_BRANCH_1, finallyTarget);
1846 selection = 1;
1847 coder->firstBreakTarget = fxCoderFinalizeTargets(coder, coder->firstBreakTarget, context->selector, &selection, uncatchTarget);
1848 coder->firstContinueTarget = fxCoderFinalizeTargets(coder, coder->firstContinueTarget, context->selector, &selection, uncatchTarget);
1849 coder->returnTarget = fxCoderFinalizeTargets(coder, coder->returnTarget, context->selector, &selection, uncatchTarget);
1850 fxCoderAdd(coder, 0, normalTarget);
1851 fxCoderAddInteger(coder, 1, XS_CODE_INTEGER_1, selection);
1852 fxCoderAddIndex(coder, -1, XS_CODE_PULL_LOCAL_1, context->selector);
1853 fxCoderAdd(coder, 0, uncatchTarget);
1854 fxCoderAddByte(coder, 0, XS_CODE_UNCATCH);
1855 fxCoderAdd(coder, 0, finallyTarget);
1856
1857 fxScopeCodeUsedReverse(self, coder, self->firstDeclareNode, context->exception, context->selector);
1858
1859 fxCoderAddIndex(coder, 1, XS_CODE_GET_LOCAL_1, context->selector);
1860 fxCoderAddBranch(coder, -1, XS_CODE_BRANCH_IF_1, elseTarget);
1861 fxCoderAddIndex(coder, 1, XS_CODE_GET_LOCAL_1, context->exception);
1862 fxCoderAddByte(coder, -1, XS_CODE_THROW);
1863 fxCoderAdd(coder, 0, elseTarget);
1864 selection = 1;
1865 fxCoderJumpTargets(coder, coder->firstBreakTarget, context->selector, &selection);
1866 fxCoderJumpTargets(coder, coder->firstContinueTarget, context->selector, &selection);
1867 fxCoderJumpTargets(coder, coder->returnTarget, context->selector, &selection);
1868 fxCoderUnuseTemporaryVariables(coder, 2);
1869}
1870
1871void fxScopeCodeUsedReverse(txScope* self, txCoder* coder, txDeclareNode* node, txInteger exception, txInteger selector)
1872{

Callers 4

fxForNodeCodeFunction · 0.85
fxModuleNodeCodeFunction · 0.85
fxSwitchNodeCodeFunction · 0.85

Calls 10

fxCoderCreateTargetFunction · 0.85
fxCoderAddBranchFunction · 0.85
fxCoderAddFunction · 0.85
fxCoderAddByteFunction · 0.85
fxCoderAddIndexFunction · 0.85
fxCoderAddIntegerFunction · 0.85
fxCoderFinalizeTargetsFunction · 0.85
fxScopeCodeUsedReverseFunction · 0.85
fxCoderJumpTargetsFunction · 0.85

Tested by

no test coverage detected