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

Function fxFunctionNodeCode

xs/sources/xsCode.c:3376–3505  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3374}
3375
3376void fxFunctionNodeCode(void* it, void* param)
3377{
3378 txFunctionNode* self = it;
3379 txCoder* coder = param;
3380 txInteger environmentLevel = coder->environmentLevel;
3381 txBoolean evalFlag = coder->evalFlag;
3382 txInteger line = coder->line;
3383 txBoolean programFlag = coder->programFlag;
3384 txInteger scopeLevel = coder->scopeLevel;
3385 txTargetCode* firstBreakTarget = coder->firstBreakTarget;
3386 txTargetCode* firstContinueTarget = coder->firstContinueTarget;
3387 txTargetCode* returnTarget = coder->returnTarget;
3388 txSymbol* name = self->symbol;
3389 txTargetCode* target = fxCoderCreateTarget(param);
3390
3391 if ((self->flags & mxEvalFlag) && !(self->flags & mxStrictFlag))
3392 coder->evalFlag = 1;
3393 coder->line = -1;
3394 coder->programFlag = 0;
3395 coder->scopeLevel = 0;
3396 coder->firstBreakTarget = NULL;
3397 coder->firstContinueTarget = NULL;
3398
3399 if (name) {
3400 if (self->flags & mxGetterFlag) {
3401 txString buffer = coder->parser->buffer;
3402 c_strcpy(buffer, "get ");
3403 c_strcat(buffer, name->string);
3404 name = fxNewParserSymbol(coder->parser, buffer);
3405 }
3406 else if (self->flags & mxSetterFlag) {
3407 txString buffer = coder->parser->buffer;
3408 c_strcpy(buffer, "set ");
3409 c_strcat(buffer, name->string);
3410 name = fxNewParserSymbol(coder->parser, buffer);
3411 }
3412 }
3413
3414 if (self->flags & mxAsyncFlag) {
3415 if (self->flags & mxGeneratorFlag)
3416 fxCoderAddSymbol(param, 1, XS_CODE_ASYNC_GENERATOR_FUNCTION, name);
3417 else
3418 fxCoderAddSymbol(param, 1, XS_CODE_ASYNC_FUNCTION, name);
3419 }
3420 else if (self->flags & mxGeneratorFlag)
3421 fxCoderAddSymbol(param, 1, XS_CODE_GENERATOR_FUNCTION, name);
3422 else if (self->flags & (mxArrowFlag | mxMethodFlag | mxGetterFlag | mxSetterFlag))
3423 fxCoderAddSymbol(param, 1, XS_CODE_FUNCTION, name);
3424 else
3425 fxCoderAddSymbol(param, 1, XS_CODE_CONSTRUCTOR_FUNCTION, name);
3426 if (coder->parser->flags & mxDebugFlag)
3427 fxCoderAddByte(param, 0, XS_CODE_PROFILE);
3428 fxCoderAddBranch(param, 0, XS_CODE_CODE_1, target);
3429 if (self->flags & mxFieldFlag)
3430 fxCoderAddIndex(param, 0, XS_CODE_BEGIN_STRICT_FIELD, fxCoderCountParameters(coder, self->params));
3431 else if (self->flags & mxDerivedFlag)
3432 fxCoderAddIndex(param, 0, XS_CODE_BEGIN_STRICT_DERIVED, fxCoderCountParameters(coder, self->params));
3433 else if (self->flags & mxBaseFlag)

Callers

nothing calls this directly

Calls 15

fxCoderCreateTargetFunction · 0.85
fxNewParserSymbolFunction · 0.85
fxCoderAddSymbolFunction · 0.85
fxCoderAddByteFunction · 0.85
fxCoderAddBranchFunction · 0.85
fxCoderAddIndexFunction · 0.85
fxCoderCountParametersFunction · 0.85
fxCoderAddLineFunction · 0.85
fxScopeCodeRetrieveFunction · 0.85
fxScopeCodingParamsFunction · 0.85
fxCoderAddIntegerFunction · 0.85
fxNodeDispatchCodeFunction · 0.85

Tested by

no test coverage detected