Changeset 278588 in webkit for trunk/Source/JavaScriptCore/bytecompiler
- Timestamp:
- Jun 7, 2021, 6:43:14 PM (4 years ago)
- Location:
- trunk/Source/JavaScriptCore/bytecompiler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r278340 r278588 290 290 } 291 291 292 BytecodeGenerator::BytecodeGenerator(VM& vm, ProgramNode* programNode, UnlinkedProgramCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* , ECMAMode ecmaMode)292 BytecodeGenerator::BytecodeGenerator(VM& vm, ProgramNode* programNode, UnlinkedProgramCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment*) 293 293 : BytecodeGeneratorBase(makeUnique<UnlinkedCodeBlockGenerator>(vm, codeBlock), CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters()) 294 294 , m_codeGenerationMode(codeGenerationMode) … … 303 303 , m_inTailPosition(false) 304 304 , m_needsToUpdateArrowFunctionContext(programNode->usesArrowFunction() || programNode->usesEval()) 305 , m_ecmaMode( ecmaMode)305 , m_ecmaMode(ECMAMode::fromBool(programNode->isStrictMode())) 306 306 { 307 307 ASSERT_UNUSED(parentScopeTDZVariables, !parentScopeTDZVariables); … … 337 337 } 338 338 339 BytecodeGenerator::BytecodeGenerator(VM& vm, FunctionNode* functionNode, UnlinkedFunctionCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* parentPrivateNameEnvironment , ECMAMode ecmaMode)339 BytecodeGenerator::BytecodeGenerator(VM& vm, FunctionNode* functionNode, UnlinkedFunctionCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* parentPrivateNameEnvironment) 340 340 : BytecodeGeneratorBase(makeUnique<UnlinkedCodeBlockGenerator>(vm, codeBlock), CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters()) 341 341 , m_codeGenerationMode(codeGenerationMode) … … 347 347 , m_expressionTooDeep(false) 348 348 , m_isBuiltinFunction(codeBlock->isBuiltinFunction()) 349 , m_usesNonStrictEval(functionNode->usesEval() && ! ecmaMode.isStrict())349 , m_usesNonStrictEval(functionNode->usesEval() && !functionNode->isStrictMode()) 350 350 // FIXME: We should be able to have tail call elimination with the profiler 351 351 // enabled. This is currently not possible because the profiler expects … … 355 355 // 356 356 // Note that we intentionally enable tail call for naked constructors since it does not have special code for "return". 357 , m_inTailPosition(Options::useTailCalls() && !isConstructor() && constructorKind() == ConstructorKind::None && ecmaMode.isStrict())357 , m_inTailPosition(Options::useTailCalls() && !isConstructor() && constructorKind() == ConstructorKind::None && functionNode->isStrictMode()) 358 358 , m_needsToUpdateArrowFunctionContext(functionNode->usesArrowFunction() || functionNode->usesEval()) 359 , m_ecmaMode( ecmaMode)359 , m_ecmaMode(ECMAMode::fromBool(functionNode->isStrictMode())) 360 360 , m_derivedContextType(codeBlock->derivedContextType()) 361 361 { 362 ECMAMode ecmaMode = m_ecmaMode; 362 363 pushPrivateAccessNames(parentPrivateNameEnvironment); 363 364 … … 845 846 } 846 847 847 BytecodeGenerator::BytecodeGenerator(VM& vm, EvalNode* evalNode, UnlinkedEvalCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* parentPrivateNameEnvironment , ECMAMode ecmaMode)848 BytecodeGenerator::BytecodeGenerator(VM& vm, EvalNode* evalNode, UnlinkedEvalCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* parentPrivateNameEnvironment) 848 849 : BytecodeGeneratorBase(makeUnique<UnlinkedCodeBlockGenerator>(vm, codeBlock), CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters()) 849 850 , m_codeGenerationMode(codeGenerationMode) … … 855 856 , m_expressionTooDeep(false) 856 857 , m_isBuiltinFunction(false) 857 , m_usesNonStrictEval(evalNode->usesEval() && !e cmaMode.isStrict())858 , m_usesNonStrictEval(evalNode->usesEval() && !evalNode->isStrictMode()) 858 859 , m_inTailPosition(false) 859 860 , m_needsToUpdateArrowFunctionContext(evalNode->usesArrowFunction() || evalNode->usesEval()) 860 , m_ecmaMode( ecmaMode)861 , m_ecmaMode(ECMAMode::fromBool(evalNode->isStrictMode())) 861 862 , m_derivedContextType(codeBlock->derivedContextType()) 862 863 { … … 910 911 } 911 912 912 BytecodeGenerator::BytecodeGenerator(VM& vm, ModuleProgramNode* moduleProgramNode, UnlinkedModuleProgramCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* , ECMAMode ecmaMode)913 BytecodeGenerator::BytecodeGenerator(VM& vm, ModuleProgramNode* moduleProgramNode, UnlinkedModuleProgramCodeBlock* codeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment*) 913 914 : BytecodeGeneratorBase(makeUnique<UnlinkedCodeBlockGenerator>(vm, codeBlock), CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters()) 914 915 , m_codeGenerationMode(codeGenerationMode) … … 923 924 , m_inTailPosition(false) 924 925 , m_needsToUpdateArrowFunctionContext(moduleProgramNode->usesArrowFunction() || moduleProgramNode->usesEval()) 925 , m_ecmaMode( ecmaMode)926 , m_ecmaMode(ECMAMode::strict()) 926 927 { 927 928 ASSERT_UNUSED(parentScopeTDZVariables, !parentScopeTDZVariables); … … 3270 3271 ConstructAbility constructAbility = ConstructAbility::CannotConstruct; 3271 3272 3272 const bool alwaysStrictInClass = true; 3273 FunctionMetadataNode metadata(parserArena(), JSTokenLocation(), JSTokenLocation(), 0, 0, 0, 0, 0, alwaysStrictInClass, ConstructorKind::None, superBinding, 0, parseMode, false); 3273 FunctionMetadataNode metadata(parserArena(), JSTokenLocation(), JSTokenLocation(), 0, 0, 0, 0, 0, StrictModeLexicalFeature, ConstructorKind::None, superBinding, 0, parseMode, false); 3274 3274 metadata.finishParsing(m_scopeNode->source(), Identifier(), FunctionMode::MethodDefinition); 3275 3275 auto initializer = UnlinkedFunctionExecutable::create(m_vm, m_scopeNode->source(), &metadata, isBuiltinFunction() ? UnlinkedBuiltinFunction : UnlinkedNormalFunction, constructAbility, scriptMode(), WTFMove(variablesUnderTDZ), WTFMove(parentPrivateNameEnvironment), newDerivedContextType, NeedsClassFieldInitializer::No, PrivateBrandRequirement::None); -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r278340 r278588 410 410 typedef DeclarationStacks::FunctionStack FunctionStack; 411 411 412 BytecodeGenerator(VM&, ProgramNode*, UnlinkedProgramCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment* , ECMAMode);413 BytecodeGenerator(VM&, FunctionNode*, UnlinkedFunctionCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment* , ECMAMode);414 BytecodeGenerator(VM&, EvalNode*, UnlinkedEvalCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment* , ECMAMode);415 BytecodeGenerator(VM&, ModuleProgramNode*, UnlinkedModuleProgramCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment* , ECMAMode);412 BytecodeGenerator(VM&, ProgramNode*, UnlinkedProgramCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment*); 413 BytecodeGenerator(VM&, FunctionNode*, UnlinkedFunctionCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment*); 414 BytecodeGenerator(VM&, EvalNode*, UnlinkedEvalCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment*); 415 BytecodeGenerator(VM&, ModuleProgramNode*, UnlinkedModuleProgramCodeBlock*, OptionSet<CodeGenerationMode>, const RefPtr<TDZEnvironmentLink>&, const PrivateNameEnvironment*); 416 416 417 417 ~BytecodeGenerator(); … … 427 427 bool usesEval() const { return m_scopeNode->usesEval(); } 428 428 bool usesThis() const { return m_scopeNode->usesThis(); } 429 LexicalScopeFeatures lexicalScopeFeatures() const { return m_scopeNode->lexicalScopeFeatures(); } 429 430 PrivateBrandRequirement privateBrandRequirement() const { return m_codeBlock->privateBrandRequirement(); } 430 431 ConstructorKind constructorKind() const { return m_codeBlock->constructorKind(); } … … 434 435 435 436 template<typename Node, typename UnlinkedCodeBlock> 436 static ParserError generate(VM& vm, Node* node, const SourceCode& sourceCode, UnlinkedCodeBlock* unlinkedCodeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* privateNameEnvironment , ECMAMode ecmaMode)437 static ParserError generate(VM& vm, Node* node, const SourceCode& sourceCode, UnlinkedCodeBlock* unlinkedCodeBlock, OptionSet<CodeGenerationMode> codeGenerationMode, const RefPtr<TDZEnvironmentLink>& parentScopeTDZVariables, const PrivateNameEnvironment* privateNameEnvironment) 437 438 { 438 439 MonotonicTime before; … … 441 442 442 443 DeferGC deferGC(vm.heap); 443 auto bytecodeGenerator = makeUnique<BytecodeGenerator>(vm, node, unlinkedCodeBlock, codeGenerationMode, parentScopeTDZVariables, privateNameEnvironment , ecmaMode);444 auto bytecodeGenerator = makeUnique<BytecodeGenerator>(vm, node, unlinkedCodeBlock, codeGenerationMode, parentScopeTDZVariables, privateNameEnvironment); 444 445 auto result = bytecodeGenerator->generate(); 445 446
Note:
See TracChangeset
for help on using the changeset viewer.