| 4270 | } |
| 4271 | |
| 4272 | void fxReturnNodeCode(void* it, void* param) |
| 4273 | { |
| 4274 | txStatementNode* self = it; |
| 4275 | txCoder* coder = param; |
| 4276 | if (coder->programFlag) |
| 4277 | fxReportParserError(coder->parser, self->line, "invalid return"); |
| 4278 | if (self->expression) { |
| 4279 | if (((self->flags & (mxStrictFlag | mxGeneratorFlag)) == mxStrictFlag) && (coder->returnTarget->original == NULL)) |
| 4280 | self->expression->flags |= mxTailRecursionFlag; |
| 4281 | fxNodeDispatchCode(self->expression, param); |
| 4282 | if ((self->flags & (mxAsyncFlag | mxGeneratorFlag)) == (mxAsyncFlag | mxGeneratorFlag)) { |
| 4283 | fxCoderAddByte(param, 0, XS_CODE_AWAIT); |
| 4284 | fxCoderAddByte(coder, 0, XS_CODE_THROW_STATUS); |
| 4285 | } |
| 4286 | fxCoderAddByte(param, -1, XS_CODE_SET_RESULT); |
| 4287 | } |
| 4288 | else if ((self->flags & (mxAsyncFlag | mxGeneratorFlag)) != (mxAsyncFlag | mxGeneratorFlag)) { |
| 4289 | fxCoderAddByte(param, 1, XS_CODE_UNDEFINED); |
| 4290 | fxCoderAddByte(param, -1, XS_CODE_SET_RESULT); |
| 4291 | } |
| 4292 | fxCoderAdjustEnvironment(coder, coder->returnTarget); |
| 4293 | fxCoderAdjustScope(coder, coder->returnTarget); |
| 4294 | fxCoderAddBranch(param, 0, XS_CODE_BRANCH_1, coder->returnTarget); |
| 4295 | } |
| 4296 | |
| 4297 | void fxSpreadNodeCode(void* it, void* param, txInteger counter) |
| 4298 | { |
nothing calls this directly
no test coverage detected