Changeset 181664 in webkit
- Timestamp:
- Mar 17, 2015, 2:15:03 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 16 edited
-
API/JSScriptRef.cpp (modified) (1 diff)
-
ChangeLog (modified) (1 diff)
-
builtins/BuiltinExecutables.cpp (modified) (1 diff)
-
bytecode/UnlinkedCodeBlock.cpp (modified) (3 diffs)
-
bytecode/UnlinkedCodeBlock.h (modified) (2 diffs)
-
parser/Lexer.cpp (modified) (1 diff)
-
parser/Lexer.h (modified) (1 diff)
-
parser/Parser.cpp (modified) (3 diffs)
-
parser/Parser.h (modified) (4 diffs)
-
parser/ParserModes.h (modified) (1 diff)
-
runtime/CodeCache.cpp (modified) (4 diffs)
-
runtime/CodeCache.h (modified) (3 diffs)
-
runtime/Completion.cpp (modified) (1 diff)
-
runtime/Executable.cpp (modified) (2 diffs)
-
runtime/Executable.h (modified) (2 diffs)
-
runtime/JSGlobalObject.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/API/JSScriptRef.cpp
r180637 r181664 69 69 static bool parseScript(VM* vm, const SourceCode& source, ParserError& error) 70 70 { 71 return !!JSC::parse<JSC::ProgramNode>(vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error); 71 return !!JSC::parse<JSC::ProgramNode>( 72 vm, source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 73 JSParserStrictMode::NotStrict, JSParserCodeType::Program, 74 error); 72 75 } 73 76 -
trunk/Source/JavaScriptCore/ChangeLog
r181650 r181664 1 2015-03-17 Geoffrey Garen <ggaren@apple.com> 2 3 Built-in functions should know that they use strict mode 4 https://bugs.webkit.org/show_bug.cgi?id=142788 5 6 Reviewed by Mark Lam. 7 8 Even though all of our builtin functions use strict mode, the parser 9 thinks that they don't. This is because Executable::toStrictness treats 10 builtin-ness and strict-ness as mutually exclusive. 11 12 The fix is to disambiguate builtin-ness from strict-ness. 13 14 This bug is currently unobservable because of some other parser bugs. But 15 it causes lots of test failures once those other bugs are fixed. 16 17 * API/JSScriptRef.cpp: 18 (parseScript): 19 * builtins/BuiltinExecutables.cpp: 20 (JSC::BuiltinExecutables::createBuiltinExecutable): Adopt the new API 21 for a separate value to indicate builtin-ness vs strict-ness. 22 23 * bytecode/UnlinkedCodeBlock.cpp: 24 (JSC::generateFunctionCodeBlock): 25 (JSC::UnlinkedFunctionExecutable::codeBlockFor): Ditto. 26 27 * bytecode/UnlinkedCodeBlock.h: 28 (JSC::UnlinkedFunctionExecutable::toStrictness): Deleted. This function 29 was misleading since it pretended that no builtin function was ever 30 strict, which is the opposite of true. 31 32 * parser/Lexer.cpp: 33 (JSC::Lexer<T>::Lexer): 34 * parser/Lexer.h: 35 * parser/Parser.cpp: 36 (JSC::Parser<LexerType>::Parser): 37 * parser/Parser.h: 38 (JSC::parse): Adopt the new API. 39 40 * parser/ParserModes.h: Added JSParserBuiltinMode, and tried to give 41 existing modes clearer names. 42 43 * runtime/CodeCache.cpp: 44 (JSC::CodeCache::getGlobalCodeBlock): 45 (JSC::CodeCache::getProgramCodeBlock): 46 (JSC::CodeCache::getEvalCodeBlock): 47 (JSC::CodeCache::getFunctionExecutableFromGlobalCode): Adopt the new API. 48 49 * runtime/CodeCache.h: 50 (JSC::SourceCodeKey::SourceCodeKey): Be sure to treat strict-ness and 51 bulitin-ness as separate pieces of the code cache key. We would not want 52 a user function to match a built-in function in the cache, even if they 53 agreed about strictness, since builtin functions have different lexing 54 rules. 55 56 * runtime/Completion.cpp: 57 (JSC::checkSyntax): 58 * runtime/Executable.cpp: 59 (JSC::FunctionExecutable::FunctionExecutable): 60 (JSC::ProgramExecutable::checkSyntax): 61 * runtime/Executable.h: 62 (JSC::FunctionExecutable::create): 63 * runtime/JSGlobalObject.cpp: 64 (JSC::JSGlobalObject::createProgramCodeBlock): 65 (JSC::JSGlobalObject::createEvalCodeBlock): Adopt the new API. 66 1 67 2015-03-16 Filip Pizlo <fpizlo@apple.com> 2 68 -
trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp
r181611 r181664 66 66 ParserError error; 67 67 bool isParsingDefaultConstructor = constructorKind != ConstructorKind::None; 68 JSParser Strictness strictness = isParsingDefaultConstructor ? JSParseNormal : JSParseBuiltin;68 JSParserBuiltinMode builtinMode = isParsingDefaultConstructor ? JSParserBuiltinMode::NotBuiltin : JSParserBuiltinMode::Builtin; 69 69 UnlinkedFunctionKind kind = isParsingDefaultConstructor ? UnlinkedNormalFunction : UnlinkedBuiltinFunction; 70 70 RefPtr<SourceProvider> sourceOverride = isParsingDefaultConstructor ? source.provider() : nullptr; 71 std::unique_ptr<ProgramNode> program = parse<ProgramNode>(&m_vm, source, 0, Identifier(), strictness, JSParseProgramCode, 71 std::unique_ptr<ProgramNode> program = parse<ProgramNode>( 72 &m_vm, source, 0, Identifier(), builtinMode, 73 JSParserStrictMode::NotStrict, 74 JSParserCodeType::Program, 72 75 error, &positionBeforeLastNewline, false, constructorKind); 73 76 -
trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp
r181611 r181664 50 50 const ClassInfo UnlinkedFunctionCodeBlock::s_info = { "UnlinkedFunctionCodeBlock", &Base::s_info, 0, CREATE_METHOD_TABLE(UnlinkedFunctionCodeBlock) }; 51 51 52 static UnlinkedFunctionCodeBlock* generateFunctionCodeBlock(VM& vm, UnlinkedFunctionExecutable* executable, const SourceCode& source, CodeSpecializationKind kind, DebuggerMode debuggerMode, ProfilerMode profilerMode, UnlinkedFunctionKind functionKind, bool bodyIncludesBraces, ParserError& error) 53 { 54 std::unique_ptr<FunctionNode> function = parse<FunctionNode>(&vm, source, executable->parameters(), executable->name(), executable->toStrictness(), JSParseFunctionCode, error, 0, bodyIncludesBraces); 52 static UnlinkedFunctionCodeBlock* generateFunctionCodeBlock( 53 VM& vm, UnlinkedFunctionExecutable* executable, const SourceCode& source, 54 CodeSpecializationKind kind, DebuggerMode debuggerMode, ProfilerMode profilerMode, 55 UnlinkedFunctionKind functionKind, bool bodyIncludesBraces, ParserError& error) 56 { 57 JSParserBuiltinMode builtinMode = executable->isBuiltinFunction() ? JSParserBuiltinMode::Builtin : JSParserBuiltinMode::NotBuiltin; 58 JSParserStrictMode strictMode = executable->isInStrictContext() ? JSParserStrictMode::Strict : JSParserStrictMode::NotStrict; 59 std::unique_ptr<FunctionNode> function = parse<FunctionNode>( 60 &vm, source, executable->parameters(), executable->name(), builtinMode, 61 strictMode, JSParserCodeType::Function, error, 0, bodyIncludesBraces); 55 62 56 63 if (!function) { … … 178 185 } 179 186 180 UnlinkedFunctionCodeBlock* UnlinkedFunctionExecutable::codeBlockFor(VM& vm, const SourceCode& source, CodeSpecializationKind specializationKind, DebuggerMode debuggerMode, ProfilerMode profilerMode, bool bodyIncludesBraces, ParserError& error) 187 UnlinkedFunctionCodeBlock* UnlinkedFunctionExecutable::codeBlockFor( 188 VM& vm, const SourceCode& source, CodeSpecializationKind specializationKind, 189 DebuggerMode debuggerMode, ProfilerMode profilerMode, bool bodyIncludesBraces, 190 ParserError& error) 181 191 { 182 192 switch (specializationKind) { … … 191 201 } 192 202 193 UnlinkedFunctionCodeBlock* result = generateFunctionCodeBlock(vm, this, source, specializationKind, debuggerMode, profilerMode, isBuiltinFunction() ? UnlinkedBuiltinFunction : UnlinkedNormalFunction, bodyIncludesBraces, error); 203 UnlinkedFunctionCodeBlock* result = generateFunctionCodeBlock( 204 vm, this, source, specializationKind, debuggerMode, profilerMode, 205 isBuiltinFunction() ? UnlinkedBuiltinFunction : UnlinkedNormalFunction, 206 bodyIncludesBraces, error); 194 207 195 208 if (error.isValid()) -
trunk/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h
r181611 r181664 122 122 bool isInStrictContext() const { return m_isInStrictContext; } 123 123 FunctionMode functionMode() const { return m_functionMode; } 124 JSParserStrictness toStrictness() const125 {126 if (m_isBuiltinFunction)127 return JSParseBuiltin;128 if (m_isInStrictContext)129 return JSParseStrict;130 return JSParseNormal;131 }132 124 ConstructorKind constructorKind() const { return static_cast<ConstructorKind>(m_constructorKind); } 133 125 … … 142 134 String paramString() const; 143 135 144 UnlinkedFunctionCodeBlock* codeBlockFor(VM&, const SourceCode&, CodeSpecializationKind, DebuggerMode, ProfilerMode, bool bodyIncludesBraces, ParserError&); 136 UnlinkedFunctionCodeBlock* codeBlockFor( 137 VM&, const SourceCode&, CodeSpecializationKind, DebuggerMode, ProfilerMode, 138 bool bodyIncludesBraces, ParserError&); 145 139 146 140 static UnlinkedFunctionExecutable* fromGlobalCode(const Identifier&, ExecState&, const SourceCode&, JSObject*& exception); -
trunk/Source/JavaScriptCore/parser/Lexer.cpp
r181497 r181664 489 489 490 490 template <typename T> 491 Lexer<T>::Lexer(VM* vm, JSParser Strictness strictness)491 Lexer<T>::Lexer(VM* vm, JSParserBuiltinMode builtinMode) 492 492 : m_isReparsing(false) 493 493 , m_vm(vm) 494 , m_parsingBuiltinFunction( strictness == JSParseBuiltin)494 , m_parsingBuiltinFunction(builtinMode == JSParserBuiltinMode::Builtin) 495 495 { 496 496 } -
trunk/Source/JavaScriptCore/parser/Lexer.h
r181497 r181664 72 72 73 73 public: 74 Lexer(VM*, JSParser Strictness);74 Lexer(VM*, JSParserBuiltinMode); 75 75 ~Lexer(); 76 76 -
trunk/Source/JavaScriptCore/parser/Parser.cpp
r181611 r181664 191 191 192 192 template <typename LexerType> 193 Parser<LexerType>::Parser(VM* vm, const SourceCode& source, FunctionParameters* parameters, const Identifier& name, JSParserStrictness strictness, JSParserMode parserMode, ConstructorKind defaultConstructorKind) 193 Parser<LexerType>::Parser( 194 VM* vm, const SourceCode& source, FunctionParameters* parameters, 195 const Identifier& name, JSParserBuiltinMode builtinMode, 196 JSParserStrictMode strictMode, JSParserCodeType codeType, 197 ConstructorKind defaultConstructorKind) 194 198 : m_vm(vm) 195 199 , m_source(&source) … … 204 208 , m_lastFunctionName(nullptr) 205 209 , m_sourceElements(0) 206 , m_parsingBuiltin( strictness == JSParseBuiltin)210 , m_parsingBuiltin(builtinMode == JSParserBuiltinMode::Builtin) 207 211 , m_defaultConstructorKind(defaultConstructorKind) 208 212 { 209 m_lexer = std::make_unique<LexerType>(vm, strictness);213 m_lexer = std::make_unique<LexerType>(vm, builtinMode); 210 214 m_lexer->setCode(source, &m_parserArena); 211 215 m_token.m_location.line = source.firstLine(); … … 215 219 m_functionCache = vm->addSourceProviderCache(source.provider()); 216 220 ScopeRef scope = pushScope(); 217 if ( parserMode == JSParseFunctionCode)221 if (codeType == JSParserCodeType::Function) 218 222 scope->setIsFunction(); 219 if (strict ness == JSParseStrict)223 if (strictMode == JSParserStrictMode::Strict) 220 224 scope->setStrictMode(); 221 225 if (parameters) { -
trunk/Source/JavaScriptCore/parser/Parser.h
r181611 r181664 427 427 428 428 public: 429 Parser(VM*, const SourceCode&, FunctionParameters*, const Identifier&, JSParserStrictness, JSParserMode, 429 Parser( 430 VM*, const SourceCode&, FunctionParameters*, const Identifier&, 431 JSParserBuiltinMode, JSParserStrictMode, JSParserCodeType, 430 432 ConstructorKind defaultConstructorKind = ConstructorKind::None); 431 433 ~Parser(); … … 982 984 983 985 template <class ParsedNode> 984 std::unique_ptr<ParsedNode> parse(VM* vm, const SourceCode& source, FunctionParameters* parameters, const Identifier& name, 985 JSParserStrictness strictness, JSParserMode parserMode, ParserError& error, JSTextPosition* positionBeforeLastNewline = 0, 986 bool needReparsingAdjustment = false, ConstructorKind defaultConstructorKind = ConstructorKind::None) 986 std::unique_ptr<ParsedNode> parse( 987 VM* vm, const SourceCode& source, FunctionParameters* parameters, 988 const Identifier& name, JSParserBuiltinMode builtinMode, 989 JSParserStrictMode strictMode, JSParserCodeType codeType, 990 ParserError& error, JSTextPosition* positionBeforeLastNewline = 0, 991 bool needReparsingAdjustment = false, 992 ConstructorKind defaultConstructorKind = ConstructorKind::None) 987 993 { 988 994 SamplingRegion samplingRegion("Parsing"); … … 990 996 ASSERT(!source.provider()->source().isNull()); 991 997 if (source.provider()->source().is8Bit()) { 992 Parser<Lexer<LChar>> parser(vm, source, parameters, name, strictness, parserMode, defaultConstructorKind);998 Parser<Lexer<LChar>> parser(vm, source, parameters, name, builtinMode, strictMode, codeType, defaultConstructorKind); 993 999 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, needReparsingAdjustment); 994 1000 if (positionBeforeLastNewline) 995 1001 *positionBeforeLastNewline = parser.positionBeforeLastNewline(); 996 if ( strictness == JSParseBuiltin) {1002 if (builtinMode == JSParserBuiltinMode::Builtin) { 997 1003 if (!result) 998 1004 WTF::dataLog("Error compiling builtin: ", error.message(), "\n"); … … 1002 1008 return result; 1003 1009 } 1004 Parser<Lexer<UChar>> parser(vm, source, parameters, name, strictness, parserMode);1010 Parser<Lexer<UChar>> parser(vm, source, parameters, name, builtinMode, strictMode, codeType); 1005 1011 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, needReparsingAdjustment); 1006 1012 if (positionBeforeLastNewline) -
trunk/Source/JavaScriptCore/parser/ParserModes.h
r181490 r181664 32 32 namespace JSC { 33 33 34 enum JSParserStrictness { JSParseNormal, JSParseBuiltin, JSParseStrict }; 35 enum JSParserMode { JSParseProgramCode, JSParseFunctionCode }; 34 enum class JSParserStrictMode { NotStrict, Strict }; 35 enum class JSParserBuiltinMode { NotBuiltin, Builtin }; 36 enum class JSParserCodeType { Program, Function }; 36 37 37 38 enum class ConstructorKind { None, Base, Derived }; -
trunk/Source/JavaScriptCore/runtime/CodeCache.cpp
r181482 r181664 76 76 77 77 template <class UnlinkedCodeBlockType, class ExecutableType> 78 UnlinkedCodeBlockType* CodeCache::getGlobalCodeBlock(VM& vm, ExecutableType* executable, const SourceCode& source, JSParser Strictness strictness, DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error)78 UnlinkedCodeBlockType* CodeCache::getGlobalCodeBlock(VM& vm, ExecutableType* executable, const SourceCode& source, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode, DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error) 79 79 { 80 SourceCodeKey key = SourceCodeKey(source, String(), CacheTypes<UnlinkedCodeBlockType>::codeType, strictness);80 SourceCodeKey key = SourceCodeKey(source, String(), CacheTypes<UnlinkedCodeBlockType>::codeType, builtinMode, strictMode); 81 81 SourceCodeValue* cache = m_sourceCode.findCacheAndUpdateAge(key); 82 82 bool canCache = debuggerMode == DebuggerOff && profilerMode == ProfilerOff && !vm.typeProfiler() && !vm.controlFlowProfiler(); … … 93 93 94 94 typedef typename CacheTypes<UnlinkedCodeBlockType>::RootNode RootNode; 95 std::unique_ptr<RootNode> rootNode = parse<RootNode>(&vm, source, 0, Identifier(), strictness, JSParseProgramCode, error); 95 std::unique_ptr<RootNode> rootNode = parse<RootNode>( 96 &vm, source, 0, Identifier(), builtinMode, strictMode, 97 JSParserCodeType::Program, error); 96 98 if (!rootNode) 97 99 return nullptr; … … 119 121 } 120 122 121 UnlinkedProgramCodeBlock* CodeCache::getProgramCodeBlock(VM& vm, ProgramExecutable* executable, const SourceCode& source, JSParser Strictness strictness, DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error)123 UnlinkedProgramCodeBlock* CodeCache::getProgramCodeBlock(VM& vm, ProgramExecutable* executable, const SourceCode& source, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode, DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error) 122 124 { 123 return getGlobalCodeBlock<UnlinkedProgramCodeBlock>(vm, executable, source, strictness, debuggerMode, profilerMode, error);125 return getGlobalCodeBlock<UnlinkedProgramCodeBlock>(vm, executable, source, builtinMode, strictMode, debuggerMode, profilerMode, error); 124 126 } 125 127 126 UnlinkedEvalCodeBlock* CodeCache::getEvalCodeBlock(VM& vm, EvalExecutable* executable, const SourceCode& source, JSParser Strictness strictness, DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error)128 UnlinkedEvalCodeBlock* CodeCache::getEvalCodeBlock(VM& vm, EvalExecutable* executable, const SourceCode& source, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode, DebuggerMode debuggerMode, ProfilerMode profilerMode, ParserError& error) 127 129 { 128 return getGlobalCodeBlock<UnlinkedEvalCodeBlock>(vm, executable, source, strictness, debuggerMode, profilerMode, error);130 return getGlobalCodeBlock<UnlinkedEvalCodeBlock>(vm, executable, source, builtinMode, strictMode, debuggerMode, profilerMode, error); 129 131 } 130 132 131 133 UnlinkedFunctionExecutable* CodeCache::getFunctionExecutableFromGlobalCode(VM& vm, const Identifier& name, const SourceCode& source, ParserError& error) 132 134 { 133 SourceCodeKey key = SourceCodeKey(source, name.string(), SourceCodeKey::FunctionType, JSParseNormal); 135 SourceCodeKey key = SourceCodeKey( 136 source, name.string(), SourceCodeKey::FunctionType, 137 JSParserBuiltinMode::NotBuiltin, 138 JSParserStrictMode::NotStrict); 134 139 SourceCodeValue* cache = m_sourceCode.findCacheAndUpdateAge(key); 135 140 if (cache) … … 137 142 138 143 JSTextPosition positionBeforeLastNewline; 139 std::unique_ptr<ProgramNode> program = parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error, &positionBeforeLastNewline); 144 std::unique_ptr<ProgramNode> program = parse<ProgramNode>( 145 &vm, source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 146 JSParserStrictMode::NotStrict, JSParserCodeType::Program, 147 error, &positionBeforeLastNewline); 140 148 if (!program) { 141 149 RELEASE_ASSERT(error.isValid()); -
trunk/Source/JavaScriptCore/runtime/CodeCache.h
r181482 r181664 62 62 } 63 63 64 SourceCodeKey(const SourceCode& sourceCode, const String& name, CodeType codeType, JSParser Strictness jsParserStrictness)64 SourceCodeKey(const SourceCode& sourceCode, const String& name, CodeType codeType, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode) 65 65 : m_sourceCode(sourceCode) 66 66 , m_name(name) 67 , m_flags((codeType << 2) | jsParserStrictness) 67 , m_flags( 68 (static_cast<unsigned>(codeType) << 2) 69 | (static_cast<unsigned>(builtinMode) << 1) 70 | static_cast<unsigned>(strictMode)) 68 71 , m_hash(string().impl()->hash()) 69 72 { … … 250 253 ~CodeCache(); 251 254 252 UnlinkedProgramCodeBlock* getProgramCodeBlock(VM&, ProgramExecutable*, const SourceCode&, JSParser Strictness, DebuggerMode, ProfilerMode, ParserError&);253 UnlinkedEvalCodeBlock* getEvalCodeBlock(VM&, EvalExecutable*, const SourceCode&, JSParser Strictness, DebuggerMode, ProfilerMode, ParserError&);255 UnlinkedProgramCodeBlock* getProgramCodeBlock(VM&, ProgramExecutable*, const SourceCode&, JSParserBuiltinMode, JSParserStrictMode, DebuggerMode, ProfilerMode, ParserError&); 256 UnlinkedEvalCodeBlock* getEvalCodeBlock(VM&, EvalExecutable*, const SourceCode&, JSParserBuiltinMode, JSParserStrictMode, DebuggerMode, ProfilerMode, ParserError&); 254 257 UnlinkedFunctionExecutable* getFunctionExecutableFromGlobalCode(VM&, const Identifier&, const SourceCode&, ParserError&); 255 258 … … 261 264 private: 262 265 template <class UnlinkedCodeBlockType, class ExecutableType> 263 UnlinkedCodeBlockType* getGlobalCodeBlock(VM&, ExecutableType*, const SourceCode&, JSParser Strictness, DebuggerMode, ProfilerMode, ParserError&);266 UnlinkedCodeBlockType* getGlobalCodeBlock(VM&, ExecutableType*, const SourceCode&, JSParserBuiltinMode, JSParserStrictMode, DebuggerMode, ProfilerMode, ParserError&); 264 267 265 268 CodeCacheMap m_sourceCode; -
trunk/Source/JavaScriptCore/runtime/Completion.cpp
r176825 r181664 56 56 JSLockHolder lock(vm); 57 57 RELEASE_ASSERT(vm.atomicStringTable() == wtfThreadData().atomicStringTable()); 58 return !!parse<ProgramNode>(&vm, source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error); 58 return !!parse<ProgramNode>( 59 &vm, source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 60 JSParserStrictMode::NotStrict, JSParserCodeType::Program, error); 59 61 } 60 62 -
trunk/Source/JavaScriptCore/runtime/Executable.cpp
r181213 r181664 395 395 const ClassInfo FunctionExecutable::s_info = { "FunctionExecutable", &ScriptExecutable::s_info, 0, CREATE_METHOD_TABLE(FunctionExecutable) }; 396 396 397 FunctionExecutable::FunctionExecutable(VM& vm, const SourceCode& source, UnlinkedFunctionExecutable* unlinkedExecutable, unsigned firstLine, unsigned lastLine, unsigned startColumn, unsigned endColumn, bool bodyIncludesBraces) 397 FunctionExecutable::FunctionExecutable(VM& vm, const SourceCode& source, 398 UnlinkedFunctionExecutable* unlinkedExecutable, unsigned firstLine, 399 unsigned lastLine, unsigned startColumn, unsigned endColumn, 400 bool bodyIncludesBraces) 398 401 : ScriptExecutable(vm.functionExecutableStructure.get(), vm, source, unlinkedExecutable->isInStrictContext()) 399 402 , m_unlinkedExecutable(vm, this, unlinkedExecutable) … … 466 469 VM* vm = &exec->vm(); 467 470 JSGlobalObject* lexicalGlobalObject = exec->lexicalGlobalObject(); 468 std::unique_ptr<ProgramNode> programNode = parse<ProgramNode>(vm, m_source, 0, Identifier(), JSParseNormal, JSParseProgramCode, error); 471 std::unique_ptr<ProgramNode> programNode = parse<ProgramNode>( 472 vm, m_source, 0, Identifier(), JSParserBuiltinMode::NotBuiltin, 473 JSParserStrictMode::NotStrict, JSParserCodeType::Program, error); 469 474 if (programNode) 470 475 return 0; -
trunk/Source/JavaScriptCore/runtime/Executable.h
r181490 r181664 542 542 typedef ScriptExecutable Base; 543 543 544 static FunctionExecutable* create(VM& vm, const SourceCode& source, UnlinkedFunctionExecutable* unlinkedExecutable, unsigned firstLine, unsigned lastLine, unsigned startColumn, unsigned endColumn, bool bodyIncludesBraces = true) 544 static FunctionExecutable* create( 545 VM& vm, const SourceCode& source, UnlinkedFunctionExecutable* unlinkedExecutable, 546 unsigned firstLine, unsigned lastLine, unsigned startColumn, unsigned endColumn, 547 bool bodyIncludesBraces = true) 545 548 { 546 549 FunctionExecutable* executable = new (NotNull, allocateCell<FunctionExecutable>(vm.heap)) FunctionExecutable(vm, source, unlinkedExecutable, firstLine, lastLine, startColumn, endColumn, bodyIncludesBraces); … … 644 647 645 648 private: 646 FunctionExecutable(VM&, const SourceCode&, UnlinkedFunctionExecutable*, unsigned firstLine, unsigned lastLine, unsigned startColumn, unsigned endColumn, bool bodyIncludesBraces); 649 FunctionExecutable( 650 VM&, const SourceCode&, UnlinkedFunctionExecutable*, unsigned firstLine, 651 unsigned lastLine, unsigned startColumn, unsigned endColumn, 652 bool bodyIncludesBraces); 647 653 648 654 bool isCompiling() -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r181297 r181664 784 784 { 785 785 ParserError error; 786 JSParserStrict ness strictness = executable->isStrictMode() ? JSParseStrict : JSParseNormal;786 JSParserStrictMode strictMode = executable->isStrictMode() ? JSParserStrictMode::Strict : JSParserStrictMode::NotStrict; 787 787 DebuggerMode debuggerMode = hasDebugger() ? DebuggerOn : DebuggerOff; 788 788 ProfilerMode profilerMode = hasProfiler() ? ProfilerOn : ProfilerOff; 789 UnlinkedProgramCodeBlock* unlinkedCodeBlock = vm().codeCache()->getProgramCodeBlock(vm(), executable, executable->source(), strictness, debuggerMode, profilerMode, error); 789 UnlinkedProgramCodeBlock* unlinkedCodeBlock = vm().codeCache()->getProgramCodeBlock( 790 vm(), executable, executable->source(), JSParserBuiltinMode::NotBuiltin, strictMode, 791 debuggerMode, profilerMode, error); 790 792 791 793 if (hasDebugger()) … … 803 805 { 804 806 ParserError error; 805 JSParserStrict ness strictness = executable->isStrictMode() ? JSParseStrict : JSParseNormal;807 JSParserStrictMode strictMode = executable->isStrictMode() ? JSParserStrictMode::Strict : JSParserStrictMode::NotStrict; 806 808 DebuggerMode debuggerMode = hasDebugger() ? DebuggerOn : DebuggerOff; 807 809 ProfilerMode profilerMode = hasProfiler() ? ProfilerOn : ProfilerOff; 808 UnlinkedEvalCodeBlock* unlinkedCodeBlock = vm().codeCache()->getEvalCodeBlock(vm(), executable, executable->source(), strictness, debuggerMode, profilerMode, error); 810 UnlinkedEvalCodeBlock* unlinkedCodeBlock = vm().codeCache()->getEvalCodeBlock( 811 vm(), executable, executable->source(), JSParserBuiltinMode::NotBuiltin, strictMode, 812 debuggerMode, profilerMode, error); 809 813 810 814 if (hasDebugger())
Note:
See TracChangeset
for help on using the changeset viewer.