Changeset 273931 in webkit for trunk/Source/JavaScriptCore/bytecompiler
- Timestamp:
- Mar 4, 2021, 4:18:23 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r273649 r273931 348 348 , m_expressionTooDeep(false) 349 349 , m_isBuiltinFunction(codeBlock->isBuiltinFunction()) 350 , m_usesNonStrictEval( codeBlock->usesEval() && !ecmaMode.isStrict())350 , m_usesNonStrictEval(functionNode->usesEval() && !ecmaMode.isStrict()) 351 351 // FIXME: We should be able to have tail call elimination with the profiler 352 352 // enabled. This is currently not possible because the profiler expects … … 380 380 SourceParseMode parseMode = codeBlock->parseMode(); 381 381 382 bool containsArrowOrEvalButNotInArrowBlock = ((functionNode->usesArrowFunction() && functionNode->doAnyInnerArrowFunctionsUseAnyFeature()) || functionNode->usesEval()) && !m_codeBlock->isArrowFunction();382 bool containsArrowOrEvalButNotInArrowBlock = ((functionNode->usesArrowFunction() && functionNode->doAnyInnerArrowFunctionsUseAnyFeature()) || usesEval()) && !m_codeBlock->isArrowFunction(); 383 383 bool shouldCaptureSomeOfTheThings = shouldEmitDebugHooks() || functionNode->needsActivation() || containsArrowOrEvalButNotInArrowBlock; 384 384 385 bool shouldCaptureAllOfTheThings = shouldEmitDebugHooks() || codeBlock->usesEval();386 bool needsArguments = ((functionNode->usesArguments() && !codeBlock->isArrowFunction()) || codeBlock->usesEval() || (functionNode->usesArrowFunction() && !codeBlock->isArrowFunction() && isArgumentsUsedInInnerArrowFunction())) && parseMode != SourceParseMode::ClassFieldInitializerMode;385 bool shouldCaptureAllOfTheThings = shouldEmitDebugHooks() || usesEval(); 386 bool needsArguments = ((functionNode->usesArguments() && !codeBlock->isArrowFunction()) || usesEval() || (functionNode->usesArrowFunction() && !codeBlock->isArrowFunction() && isArgumentsUsedInInnerArrowFunction())) && parseMode != SourceParseMode::ClassFieldInitializerMode; 387 387 388 388 if (isGeneratorOrAsyncFunctionBodyParseMode(parseMode)) { … … 446 446 ASSERT(parseMode != SourceParseMode::GeneratorBodyMode); 447 447 ASSERT(!isAsyncFunctionBodyParseMode(parseMode)); 448 bool isDynamicScope = functionNameScopeIsDynamic( codeBlock->usesEval(), ecmaMode.isStrict());448 bool isDynamicScope = functionNameScopeIsDynamic(usesEval(), ecmaMode.isStrict()); 449 449 bool isFunctionNameCaptured = captures(functionNode->ident().impl()); 450 450 bool markAsCaptured = isDynamicScope || isFunctionNameCaptured; … … 643 643 644 644 645 if (functionNode->needsNewTargetRegisterForThisScope() || isNewTargetUsedInInnerArrowFunction() || codeBlock->usesEval())645 if (functionNode->needsNewTargetRegisterForThisScope() || isNewTargetUsedInInnerArrowFunction() || usesEval()) 646 646 m_newTargetRegister = addVar(); 647 647 … … 725 725 case ConstructorKind::None: { 726 726 bool shouldEmitToThis = false; 727 if (functionNode->usesThis() || codeBlock->usesEval() || m_scopeNode->doAnyInnerArrowFunctionsUseThis() || m_scopeNode->doAnyInnerArrowFunctionsUseEval())727 if (functionNode->usesThis() || usesEval() || m_scopeNode->doAnyInnerArrowFunctionsUseThis() || m_scopeNode->doAnyInnerArrowFunctionsUseEval()) 728 728 shouldEmitToThis = true; 729 729 else if ((functionNode->usesSuperProperty() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperProperty()) && !ecmaMode.isStrict()) { … … 856 856 , m_expressionTooDeep(false) 857 857 , m_isBuiltinFunction(false) 858 , m_usesNonStrictEval( codeBlock->usesEval() && !ecmaMode.isStrict())858 , m_usesNonStrictEval(evalNode->usesEval() && !ecmaMode.isStrict()) 859 859 , m_inTailPosition(false) 860 860 , m_needsToUpdateArrowFunctionContext(evalNode->usesArrowFunction() || evalNode->usesEval()) … … 932 932 moduleEnvironmentSymbolTable->setScopeType(SymbolTable::ScopeType::LexicalScope); 933 933 934 bool shouldCaptureAllOfTheThings = shouldEmitDebugHooks() || codeBlock->usesEval();934 bool shouldCaptureAllOfTheThings = shouldEmitDebugHooks() || usesEval(); 935 935 if (shouldCaptureAllOfTheThings) 936 936 moduleProgramNode->varDeclarations().markAllVariablesAsCaptured(); … … 3451 3451 ASSERT(dst); 3452 3452 ASSERT(dst != ignoredResult()); 3453 if constexpr (opcodeID == op_call_eval) 3453 if constexpr (opcodeID == op_call_eval) { 3454 m_codeBlock->setUsesCallEval(); 3454 3455 CallOp::emit(this, dst, func, callArguments.argumentCountIncludingThis(), callArguments.stackOffset(), ecmaMode()); 3455 else3456 } else 3456 3457 CallOp::emit(this, dst, func, callArguments.argumentCountIncludingThis(), callArguments.stackOffset()); 3457 3458 … … 4633 4634 bool BytecodeGenerator::isThisUsedInInnerArrowFunction() 4634 4635 { 4635 return m_scopeNode->doAnyInnerArrowFunctionsUseThis() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperProperty() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || m_codeBlock->usesEval();4636 return m_scopeNode->doAnyInnerArrowFunctionsUseThis() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperProperty() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || usesEval(); 4636 4637 } 4637 4638 … … 4643 4644 bool BytecodeGenerator::isNewTargetUsedInInnerArrowFunction() 4644 4645 { 4645 return m_scopeNode->doAnyInnerArrowFunctionsUseNewTarget() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || m_codeBlock->usesEval();4646 return m_scopeNode->doAnyInnerArrowFunctionsUseNewTarget() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || usesEval(); 4646 4647 } 4647 4648 4648 4649 bool BytecodeGenerator::isSuperUsedInInnerArrowFunction() 4649 4650 { 4650 return m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperProperty() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || m_codeBlock->usesEval();4651 return m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseSuperProperty() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || usesEval(); 4651 4652 } 4652 4653 4653 4654 bool BytecodeGenerator::isSuperCallUsedInInnerArrowFunction() 4654 4655 { 4655 return m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || m_codeBlock->usesEval();4656 return m_scopeNode->doAnyInnerArrowFunctionsUseSuperCall() || m_scopeNode->doAnyInnerArrowFunctionsUseEval() || usesEval(); 4656 4657 } 4657 4658
Note:
See TracChangeset
for help on using the changeset viewer.