Changeset 199084 in webkit
- Timestamp:
- Apr 5, 2016 4:50:34 PM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 deleted
- 40 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r199081 r199084 1 2016-04-05 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r199073. 4 https://bugs.webkit.org/show_bug.cgi?id=156261 5 6 This change broke internal Mac builds (Requested by ryanhaddad 7 on #webkit). 8 9 Reverted changeset: 10 11 "We should support the ability to do a non-effectful getById" 12 https://bugs.webkit.org/show_bug.cgi?id=156116 13 http://trac.webkit.org/changeset/199073 14 1 15 2016-04-05 Youenn Fablet <youenn.fablet@crf.canon.fr> 2 16 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r199076 r199084 2514 2514 0F46809D14BA7F8200BFE272 /* LLIntExceptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LLIntExceptions.cpp; path = llint/LLIntExceptions.cpp; sourceTree = "<group>"; }; 2515 2515 0F46809E14BA7F8200BFE272 /* LLIntExceptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLIntExceptions.h; path = llint/LLIntExceptions.h; sourceTree = "<group>"; }; 2516 0F46809F14BA7F8200BFE272 /* LLIntSlowPaths.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = LLIntSlowPaths.cpp; path = llint/LLIntSlowPaths.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };2517 0F4680A014BA7F8200BFE272 /* LLIntSlowPaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = LLIntSlowPaths.h; path = llint/LLIntSlowPaths.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };2516 0F46809F14BA7F8200BFE272 /* LLIntSlowPaths.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LLIntSlowPaths.cpp; path = llint/LLIntSlowPaths.cpp; sourceTree = "<group>"; }; 2517 0F4680A014BA7F8200BFE272 /* LLIntSlowPaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLIntSlowPaths.h; path = llint/LLIntSlowPaths.h; sourceTree = "<group>"; }; 2518 2518 0F4680A114BA7F8200BFE272 /* LLIntOffsetsExtractor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LLIntOffsetsExtractor.cpp; path = llint/LLIntOffsetsExtractor.cpp; sourceTree = "<group>"; }; 2519 2519 0F4680C514BBB16900BFE272 /* LLIntCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLIntCommon.h; path = llint/LLIntCommon.h; sourceTree = "<group>"; }; … … 2650 2650 0F8364B5164B0C0E0053329A /* DFGBranchDirection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGBranchDirection.h; path = dfg/DFGBranchDirection.h; sourceTree = "<group>"; }; 2651 2651 0F86AE1F1C5311C5006BE8EC /* B3ComputeDivisionMagic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = B3ComputeDivisionMagic.h; path = b3/B3ComputeDivisionMagic.h; sourceTree = "<group>"; }; 2652 0F885E101849A3BE00F1E3FA /* BytecodeUseDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = BytecodeUseDef.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };2652 0F885E101849A3BE00F1E3FA /* BytecodeUseDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BytecodeUseDef.h; sourceTree = "<group>"; }; 2653 2653 0F893BDA1936E23C001211F4 /* DFGStructureAbstractValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGStructureAbstractValue.cpp; path = dfg/DFGStructureAbstractValue.cpp; sourceTree = "<group>"; }; 2654 2654 0F898F2F1B27689F0083A33C /* DFGIntegerRangeOptimizationPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGIntegerRangeOptimizationPhase.cpp; path = dfg/DFGIntegerRangeOptimizationPhase.cpp; sourceTree = "<group>"; }; … … 3129 3129 1429D8DB0ED2205B00B89619 /* CallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallFrame.cpp; sourceTree = "<group>"; }; 3130 3130 1429D8DC0ED2205B00B89619 /* CallFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CallFrame.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 3131 1429D92D0ED22D7000B89619 /* JIT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = JIT.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };3132 1429D92E0ED22D7000B89619 /* JIT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = JIT.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };3131 1429D92D0ED22D7000B89619 /* JIT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JIT.cpp; sourceTree = "<group>"; }; 3132 1429D92E0ED22D7000B89619 /* JIT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JIT.h; sourceTree = "<group>"; }; 3133 3133 142D3938103E4560007DCB52 /* NumericStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumericStrings.h; sourceTree = "<group>"; }; 3134 3134 142D6F0613539A2800B02E86 /* MarkedBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedBlock.cpp; sourceTree = "<group>"; }; … … 3342 3342 651122E5140469BA002B101D /* testRegExp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = testRegExp.cpp; sourceTree = "<group>"; }; 3343 3343 6511230514046A4C002B101D /* testRegExp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testRegExp; sourceTree = BUILT_PRODUCTS_DIR; }; 3344 6514F21718B3E1670098FF8B /* Bytecodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Bytecodes.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };3345 6514F21818B3E1670098FF8B /* InitBytecodes.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; lineEnding = 0; path = InitBytecodes.asm; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = "<none>"; };3344 6514F21718B3E1670098FF8B /* Bytecodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bytecodes.h; sourceTree = "<group>"; }; 3345 6514F21818B3E1670098FF8B /* InitBytecodes.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; path = InitBytecodes.asm; sourceTree = "<group>"; }; 3346 3346 6529FB3018B2D63900C61102 /* generate-bytecode-files */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = "generate-bytecode-files"; sourceTree = "<group>"; }; 3347 6529FB3118B2D99900C61102 /* BytecodeList.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; path = BytecodeList.json; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.javascript; };3347 6529FB3118B2D99900C61102 /* BytecodeList.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BytecodeList.json; sourceTree = "<group>"; }; 3348 3348 652A3A201651C66100A80AFE /* ARM64Disassembler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ARM64Disassembler.cpp; path = disassembler/ARM64Disassembler.cpp; sourceTree = "<group>"; }; 3349 3349 652A3A221651C69700A80AFE /* A64DOpcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = A64DOpcode.cpp; path = disassembler/ARM64/A64DOpcode.cpp; sourceTree = "<group>"; }; … … 3434 3434 70DC3E071B2DF2C700054299 /* IteratorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IteratorPrototype.cpp; sourceTree = "<group>"; }; 3435 3435 70DC3E081B2DF2C700054299 /* IteratorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorPrototype.h; sourceTree = "<group>"; }; 3436 70DE9A081BE7D670005D89D9 /* LLIntAssembly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = LLIntAssembly.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };3436 70DE9A081BE7D670005D89D9 /* LLIntAssembly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLIntAssembly.h; sourceTree = "<group>"; }; 3437 3437 70EC0EBC1AA0D7DA00B6AAFA /* JSStringIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSStringIterator.cpp; sourceTree = "<group>"; }; 3438 3438 70EC0EBD1AA0D7DA00B6AAFA /* JSStringIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStringIterator.h; sourceTree = "<group>"; }; … … 3508 3508 8603CEF214C7546400AE59E3 /* CodeProfiling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CodeProfiling.cpp; sourceTree = "<group>"; }; 3509 3509 8603CEF314C7546400AE59E3 /* CodeProfiling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeProfiling.h; sourceTree = "<group>"; }; 3510 8604F4F2143A6C4400B295F5 /* ChangeLog */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; path = ChangeLog; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = "<none>";};3510 8604F4F2143A6C4400B295F5 /* ChangeLog */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; path = ChangeLog; sourceTree = "<group>"; }; 3511 3511 8606DDE918DA44AB00A383D0 /* IdentifierInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IdentifierInlines.h; sourceTree = "<group>"; }; 3512 3512 8612E4CB1522918400C836BE /* MatchResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MatchResult.h; sourceTree = "<group>"; }; … … 3536 3536 868916A9155F285400CB2B9A /* PrivateName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivateName.h; sourceTree = "<group>"; }; 3537 3537 869EBCB60E8C6D4A008722CC /* ResultType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResultType.h; sourceTree = "<group>"; }; 3538 86A054461556451B00445157 /* LowLevelInterpreter.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; lineEnding = 0; name = LowLevelInterpreter.asm; path = llint/LowLevelInterpreter.asm; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = "<none>"; };3538 86A054461556451B00445157 /* LowLevelInterpreter.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; name = LowLevelInterpreter.asm; path = llint/LowLevelInterpreter.asm; sourceTree = "<group>"; }; 3539 3539 86A054471556451B00445157 /* LowLevelInterpreter32_64.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; lineEnding = 0; name = LowLevelInterpreter32_64.asm; path = llint/LowLevelInterpreter32_64.asm; sourceTree = "<group>"; }; 3540 3540 86A054481556451B00445157 /* LowLevelInterpreter64.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; lineEnding = 0; name = LowLevelInterpreter64.asm; path = llint/LowLevelInterpreter64.asm; sourceTree = "<group>"; }; … … 3557 3557 86CC85A00EE79A4700288682 /* JITInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITInlines.h; sourceTree = "<group>"; }; 3558 3558 86CC85A20EE79B7400288682 /* JITCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITCall.cpp; sourceTree = "<group>"; }; 3559 86CC85C30EE7A89400288682 /* JITPropertyAccess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = JITPropertyAccess.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };3559 86CC85C30EE7A89400288682 /* JITPropertyAccess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITPropertyAccess.cpp; sourceTree = "<group>"; }; 3560 3560 86CCEFDD0F413F8900FD7F9E /* JITCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITCode.h; sourceTree = "<group>"; }; 3561 3561 86D22219167EF9440024C804 /* testapi.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = testapi.mm; path = API/tests/testapi.mm; sourceTree = "<group>"; }; … … 3639 3639 9688CB130ED12B4E001D649F /* AssemblerBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AssemblerBuffer.h; sourceTree = "<group>"; }; 3640 3640 9688CB140ED12B4E001D649F /* X86Assembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = X86Assembler.h; sourceTree = "<group>"; }; 3641 969A07200ED1CE3300F1F681 /* BytecodeGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = BytecodeGenerator.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };3641 969A07200ED1CE3300F1F681 /* BytecodeGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BytecodeGenerator.cpp; sourceTree = "<group>"; }; 3642 3642 969A07210ED1CE3300F1F681 /* BytecodeGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BytecodeGenerator.h; sourceTree = "<group>"; }; 3643 3643 969A07270ED1CE6900F1F681 /* Label.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Label.h; sourceTree = "<group>"; }; 3644 3644 969A07280ED1CE6900F1F681 /* RegisterID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterID.h; sourceTree = "<group>"; }; 3645 969A07900ED1D3AE00F1F681 /* CodeBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = CodeBlock.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };3645 969A07900ED1D3AE00F1F681 /* CodeBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CodeBlock.cpp; sourceTree = "<group>"; }; 3646 3646 969A07910ED1D3AE00F1F681 /* CodeBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeBlock.h; sourceTree = "<group>"; }; 3647 3647 969A07920ED1D3AE00F1F681 /* EvalCodeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EvalCodeCache.h; sourceTree = "<group>"; }; … … 3987 3987 A7C0C4AA167C08CD0017011D /* JSScriptRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSScriptRef.cpp; sourceTree = "<group>"; }; 3988 3988 A7C0C4AB167C08CD0017011D /* JSScriptRefPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScriptRefPrivate.h; sourceTree = "<group>"; }; 3989 A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = JITPropertyAccess32_64.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };3989 A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITPropertyAccess32_64.cpp; sourceTree = "<group>"; }; 3990 3990 A7C1EAEB17987AB600299DB2 /* JSStackInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStackInlines.h; sourceTree = "<group>"; }; 3991 3991 A7C1EAEC17987AB600299DB2 /* StackVisitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = StackVisitor.cpp; sourceTree = "<group>"; }; -
trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.cpp
r199073 r199084 36 36 namespace JSC { 37 37 38 static UnlinkedFunctionExecutable* createExecutableInternal(VM&, const SourceCode&, const Identifier&, ConstructorKind, ConstructAbility); 39 38 40 BuiltinExecutables::BuiltinExecutables(VM& vm) 39 41 : m_vm(vm) … … 53 55 break; 54 56 case ConstructorKind::Base: 55 return createExecutable (m_vm, makeSource(baseConstructorCode), name, constructorKind, ConstructAbility::CanConstruct);57 return createExecutableInternal(m_vm, makeSource(baseConstructorCode), name, constructorKind, ConstructAbility::CanConstruct); 56 58 case ConstructorKind::Derived: 57 return createExecutable (m_vm, makeSource(derivedConstructorCode), name, constructorKind, ConstructAbility::CanConstruct);59 return createExecutableInternal(m_vm, makeSource(derivedConstructorCode), name, constructorKind, ConstructAbility::CanConstruct); 58 60 } 59 61 ASSERT_NOT_REACHED(); … … 63 65 UnlinkedFunctionExecutable* BuiltinExecutables::createBuiltinExecutable(const SourceCode& code, const Identifier& name, ConstructAbility constructAbility) 64 66 { 65 return createExecutable (m_vm, code, name, ConstructorKind::None, constructAbility);67 return createExecutableInternal(m_vm, code, name, ConstructorKind::None, constructAbility); 66 68 } 67 69 68 70 UnlinkedFunctionExecutable* createBuiltinExecutable(VM& vm, const SourceCode& code, const Identifier& name, ConstructAbility constructAbility) 69 71 { 70 return BuiltinExecutables::createExecutable(vm, code, name, ConstructorKind::None, constructAbility);72 return createExecutableInternal(vm, code, name, ConstructorKind::None, constructAbility); 71 73 } 72 74 73 UnlinkedFunctionExecutable* BuiltinExecutables::createExecutable(VM& vm, const SourceCode& source, const Identifier& name, ConstructorKind constructorKind, ConstructAbility constructAbility)75 UnlinkedFunctionExecutable* createExecutableInternal(VM& vm, const SourceCode& source, const Identifier& name, ConstructorKind constructorKind, ConstructAbility constructAbility) 74 76 { 75 77 JSTextPosition positionBeforeLastNewline; -
trunk/Source/JavaScriptCore/builtins/BuiltinExecutables.h
r199073 r199084 53 53 UnlinkedFunctionExecutable* createDefaultConstructor(ConstructorKind, const Identifier& name); 54 54 55 JS_EXPORT_PRIVATE static UnlinkedFunctionExecutable* createExecutable(VM&, const SourceCode&, const Identifier&, ConstructorKind, ConstructAbility);56 55 private: 57 56 void finalize(Handle<Unknown>, void* context) override; -
trunk/Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.h
r199073 r199084 42 42 macro(assert) \ 43 43 macro(isObject) \ 44 macro(tryGetById) \45 44 macro(putByValDirect) \ 46 45 macro(toString) -
trunk/Source/JavaScriptCore/bytecode/BytecodeList.json
r199076 r199084 58 58 { "name" : "op_is_function", "length" : 3 }, 59 59 { "name" : "op_in", "length" : 4 }, 60 { "name" : "op_try_get_by_id", "length" : 4 },61 60 { "name" : "op_get_by_id", "length" : 9 }, 62 61 { "name" : "op_get_array_length", "length" : 9 }, -
trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h
r199076 r199084 144 144 case op_get_from_scope: 145 145 case op_to_primitive: 146 case op_try_get_by_id:147 146 case op_get_by_id: 148 147 case op_get_array_length: … … 369 368 case op_call_eval: 370 369 case op_construct: 371 case op_try_get_by_id:372 370 case op_get_by_id: 373 371 case op_get_array_length: -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp
r199076 r199084 1094 1094 case op_in: { 1095 1095 printBinaryOp(out, exec, location, it, "in"); 1096 break;1097 }1098 case op_try_get_by_id: {1099 int r0 = (++it)->u.operand;1100 int r1 = (++it)->u.operand;1101 int id0 = (++it)->u.operand;1102 printLocationAndOp(out, exec, location, it, "try_get_by_id");1103 out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data());1104 1096 break; 1105 1097 } -
trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp
r199073 r199084 160 160 } 161 161 162 std::unique_ptr<AccessCase> AccessCase::tryGet(163 VM& vm, JSCell* owner, AccessType type, PropertyOffset offset, Structure* structure,164 const ObjectPropertyConditionSet& conditionSet, bool viaProxy, WatchpointSet* additionalSet)165 {166 std::unique_ptr<AccessCase> result(new AccessCase());167 168 result->m_type = type;169 result->m_offset = offset;170 result->m_structure.set(vm, owner, structure);171 result->m_conditionSet = conditionSet;172 173 if (viaProxy || additionalSet) {174 result->m_rareData = std::make_unique<RareData>();175 result->m_rareData->viaProxy = viaProxy;176 result->m_rareData->additionalSet = additionalSet;177 }178 179 return result;180 }181 182 162 std::unique_ptr<AccessCase> AccessCase::get( 183 163 VM& vm, JSCell* owner, AccessType type, PropertyOffset offset, Structure* structure, … … 706 686 707 687 case Load: 708 case GetGetter:709 688 case Getter: 710 689 case Setter: … … 742 721 GPRReg loadedValueGPR = InvalidGPRReg; 743 722 if (m_type != CustomValueGetter && m_type != CustomAccessorGetter && m_type != CustomValueSetter && m_type != CustomAccessorSetter) { 744 if (m_type == Load || m_type == GetGetter)723 if (m_type == Load) 745 724 loadedValueGPR = valueRegs.payloadGPR(); 746 725 else … … 761 740 CCallHelpers::Address(storageGPR, offsetRelativeToBase(m_offset)), loadedValueGPR); 762 741 #else 763 if (m_type == Load || m_type == GetGetter) {742 if (m_type == Load) { 764 743 jit.load32( 765 744 CCallHelpers::Address(storageGPR, offsetRelativeToBase(m_offset) + TagOffset), … … 772 751 } 773 752 774 if (m_type == Load || m_type == GetGetter) {753 if (m_type == Load) { 775 754 state.succeed(); 776 755 return; … … 1643 1622 out.print("Miss"); 1644 1623 return; 1645 case AccessCase::GetGetter:1646 out.print("GetGetter");1647 return;1648 1624 case AccessCase::Getter: 1649 1625 out.print("Getter"); -
trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.h
r199073 r199084 58 58 Replace, 59 59 Miss, 60 GetGetter,61 60 Getter, 62 61 Setter, … … 72 71 }; 73 72 74 static std::unique_ptr<AccessCase> tryGet( 75 VM&, JSCell* owner, AccessType, PropertyOffset, Structure*, 76 const ObjectPropertyConditionSet& = ObjectPropertyConditionSet(), 77 bool viaProxy = false, 78 WatchpointSet* additionalSet = nullptr); 73 static bool isGet(AccessType type) 74 { 75 switch (type) { 76 case Transition: 77 case Replace: 78 case Setter: 79 case CustomValueSetter: 80 case CustomAccessorSetter: 81 case InHit: 82 case InMiss: 83 return false; 84 case Load: 85 case MegamorphicLoad: 86 case Miss: 87 case Getter: 88 case CustomValueGetter: 89 case CustomAccessorGetter: 90 case IntrinsicGetter: 91 case ArrayLength: 92 case StringLength: 93 return true; 94 } 95 } 96 97 static bool isPut(AccessType type) 98 { 99 switch (type) { 100 case Load: 101 case MegamorphicLoad: 102 case Miss: 103 case Getter: 104 case CustomValueGetter: 105 case CustomAccessorGetter: 106 case IntrinsicGetter: 107 case InHit: 108 case InMiss: 109 case ArrayLength: 110 case StringLength: 111 return false; 112 case Transition: 113 case Replace: 114 case Setter: 115 case CustomValueSetter: 116 case CustomAccessorSetter: 117 return true; 118 } 119 } 120 121 static bool isIn(AccessType type) 122 { 123 switch (type) { 124 case Load: 125 case MegamorphicLoad: 126 case Miss: 127 case Getter: 128 case CustomValueGetter: 129 case CustomAccessorGetter: 130 case IntrinsicGetter: 131 case Transition: 132 case Replace: 133 case Setter: 134 case CustomValueSetter: 135 case CustomAccessorSetter: 136 case ArrayLength: 137 case StringLength: 138 return false; 139 case InHit: 140 case InMiss: 141 return true; 142 } 143 } 79 144 80 145 static std::unique_ptr<AccessCase> get( -
trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.cpp
r199073 r199084 149 149 150 150 switch (accessType) { 151 case AccessType::GetPure:152 resetGetByID(codeBlock, *this, GetByIDKind::Pure);153 break;154 151 case AccessType::Get: 155 resetGetByID(codeBlock, *this , GetByIDKind::Normal);152 resetGetByID(codeBlock, *this); 156 153 break; 157 154 case AccessType::Put: -
trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h
r199073 r199084 48 48 enum class AccessType : int8_t { 49 49 Get, 50 GetPure,51 50 Put, 52 51 In -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r199076 r199084 2358 2358 instructions().append(constructor->index()); 2359 2359 instructions().append(hasInstanceValue->index()); 2360 return dst;2361 }2362 2363 RegisterID* BytecodeGenerator::emitTryGetById(RegisterID* dst, RegisterID* base, const Identifier& property)2364 {2365 ASSERT_WITH_MESSAGE(!parseIndex(property), "Indexed properties are not supported with tryGetById.");2366 2367 emitOpcode(op_try_get_by_id);2368 instructions().append(kill(dst));2369 instructions().append(base->index());2370 instructions().append(addConstant(property));2371 2360 return dst; 2372 2361 } -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
r199076 r199084 541 541 RegisterID* emitIn(RegisterID* dst, RegisterID* property, RegisterID* base) { return emitBinaryOp(op_in, dst, property, base, OperandTypes()); } 542 542 543 RegisterID* emitTryGetById(RegisterID* dst, RegisterID* base, const Identifier& property);544 543 RegisterID* emitGetById(RegisterID* dst, RegisterID* base, const Identifier& property); 545 544 RegisterID* emitPutById(RegisterID* base, const Identifier& property, RegisterID* value); -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r199073 r199084 841 841 842 842 return generator.moveToDestinationIfNeeded(dst, generator.emitDirectPutByVal(base.get(), index.get(), value.get())); 843 }844 845 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_tryGetById(BytecodeGenerator& generator, RegisterID* dst)846 {847 ArgumentListNode* node = m_args->m_listNode;848 RefPtr<RegisterID> base = generator.emitNode(node);849 node = node->m_next;850 851 // Since this is a builtin we expect the creator to use a string literal as the second argument.852 ASSERT(node->m_expr->isString());853 const Identifier& ident = static_cast<StringNode*>(node->m_expr)->value();854 ASSERT(!node->m_next);855 856 RegisterID* finalDest = generator.finalDestination(dst);857 return generator.emitTryGetById(finalDest, base.get(), ident);858 843 } 859 844 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r199076 r199084 195 195 m_jit.codeBlock(), codeOrigin, callSite, usedRegisters, 196 196 JSValueRegs(baseTagGPROrNone, basePayloadGPR), 197 JSValueRegs(resultTagGPR, resultPayloadGPR) , AccessType::Get);197 JSValueRegs(resultTagGPR, resultPayloadGPR)); 198 198 199 199 gen.generateFastPath(m_jit); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r199076 r199084 165 165 JITGetByIdGenerator gen( 166 166 m_jit.codeBlock(), codeOrigin, callSite, usedRegisters, JSValueRegs(baseGPR), 167 JSValueRegs(resultGPR) , AccessType::Get);167 JSValueRegs(resultGPR)); 168 168 gen.generateFastPath(m_jit); 169 169 -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r199076 r199084 7332 7332 jit.codeBlock(), node->origin.semantic, callSiteIndex, 7333 7333 params.unavailableRegisters(), JSValueRegs(params[1].gpr()), 7334 JSValueRegs(params[0].gpr()) , AccessType::Get);7334 JSValueRegs(params[0].gpr())); 7335 7335 7336 7336 generator->generateFastPath(jit); -
trunk/Source/JavaScriptCore/jit/JIT.cpp
r199076 r199084 229 229 DEFINE_OP(op_eq) 230 230 DEFINE_OP(op_eq_null) 231 DEFINE_OP(op_try_get_by_id)232 231 case op_get_array_length: 233 232 DEFINE_OP(op_get_by_id) … … 408 407 DEFINE_SLOWCASE_OP(op_div) 409 408 DEFINE_SLOWCASE_OP(op_eq) 410 DEFINE_SLOWCASE_OP(op_try_get_by_id)411 409 case op_get_array_length: 412 410 DEFINE_SLOWCASE_OP(op_get_by_id) -
trunk/Source/JavaScriptCore/jit/JIT.h
r199076 r199084 503 503 void emit_op_eq(Instruction*); 504 504 void emit_op_eq_null(Instruction*); 505 void emit_op_try_get_by_id(Instruction*);506 505 void emit_op_get_by_id(Instruction*); 507 506 void emit_op_get_arguments_length(Instruction*); … … 616 615 void emitSlow_op_eq(Instruction*, Vector<SlowCaseEntry>::iterator&); 617 616 void emitSlow_op_get_callee(Instruction*, Vector<SlowCaseEntry>::iterator&); 618 void emitSlow_op_try_get_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&);619 617 void emitSlow_op_get_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&); 620 618 void emitSlow_op_get_arguments_length(Instruction*, Vector<SlowCaseEntry>::iterator&); … … 741 739 MacroAssembler::Call callOperation(J_JITOperation_EJ, int, GPRReg); 742 740 #if USE(JSVALUE64) 743 MacroAssembler::Call callOperation(J_JITOperation_ESsiJI, int, StructureStubInfo*, GPRReg, UniquedStringImpl*);744 741 MacroAssembler::Call callOperation(WithProfileTag, J_JITOperation_ESsiJI, int, StructureStubInfo*, GPRReg, UniquedStringImpl*); 745 742 #else 746 MacroAssembler::Call callOperation(J_JITOperation_ESsiJI, int, StructureStubInfo*, GPRReg, GPRReg, UniquedStringImpl*);747 743 MacroAssembler::Call callOperation(WithProfileTag, J_JITOperation_ESsiJI, int, StructureStubInfo*, GPRReg, GPRReg, UniquedStringImpl*); 748 744 #endif -
trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp
r199073 r199084 105 105 JITGetByIdGenerator::JITGetByIdGenerator( 106 106 CodeBlock* codeBlock, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters, 107 JSValueRegs base, JSValueRegs value , AccessType accessType)107 JSValueRegs base, JSValueRegs value) 108 108 : JITByIdGenerator( 109 codeBlock, codeOrigin, callSite, accessType, usedRegisters, base, value)109 codeBlock, codeOrigin, callSite, AccessType::Get, usedRegisters, base, value) 110 110 { 111 111 RELEASE_ASSERT(base.payloadGPR() != value.tagGPR()); -
trunk/Source/JavaScriptCore/jit/JITInlineCacheGenerator.h
r199073 r199084 97 97 JITGetByIdGenerator( 98 98 CodeBlock*, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, JSValueRegs base, 99 JSValueRegs value , AccessType);99 JSValueRegs value); 100 100 101 101 void generateFastPath(MacroAssembler&); -
trunk/Source/JavaScriptCore/jit/JITInlines.h
r199076 r199084 460 460 } 461 461 462 ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_ESsiJI operation, int dst, StructureStubInfo* stubInfo, GPRReg arg1, UniquedStringImpl* uid)463 {464 setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1, TrustedImmPtr(uid));465 return appendCallWithExceptionCheckSetJSValueResult(operation, dst);466 }467 468 462 ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(JIT::WithProfileTag, J_JITOperation_ESsiJI operation, int dst, StructureStubInfo* stubInfo, GPRReg arg1, UniquedStringImpl* uid) 469 463 { … … 646 640 { 647 641 setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 648 return appendCallWithExceptionCheckSetJSValueResult(operation, dst);649 }650 651 ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_ESsiJI operation, int dst, StructureStubInfo* stubInfo, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)652 {653 setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1Payload, arg1Tag, TrustedImmPtr(uid));654 642 return appendCallWithExceptionCheckSetJSValueResult(operation, dst); 655 643 } -
trunk/Source/JavaScriptCore/jit/JITOperations.cpp
r199076 r199084 155 155 } 156 156 157 EncodedJSValue JIT_OPERATION operationTryGetById(ExecState* exec, StructureStubInfo* stubInfo, EncodedJSValue base, UniquedStringImpl* uid)158 {159 VM* vm = &exec->vm();160 NativeCallFrameTracer tracer(vm, exec);161 Identifier ident = Identifier::fromUid(vm, uid);162 stubInfo->tookSlowPath = true;163 164 JSValue baseValue = JSValue::decode(base);165 PropertySlot slot(baseValue, PropertySlot::InternalMethodType::VMInquiry);166 baseValue.getPropertySlot(exec, ident, slot);167 168 return JSValue::encode(slot.getPureResult());169 }170 171 EncodedJSValue JIT_OPERATION operationTryGetByIdOptimize(ExecState* exec, StructureStubInfo* stubInfo, EncodedJSValue base, UniquedStringImpl* uid)172 {173 VM* vm = &exec->vm();174 NativeCallFrameTracer tracer(vm, exec);175 Identifier ident = Identifier::fromUid(vm, uid);176 177 JSValue baseValue = JSValue::decode(base);178 PropertySlot slot(baseValue, PropertySlot::InternalMethodType::VMInquiry);179 180 baseValue.getPropertySlot(exec, ident, slot);181 if (stubInfo->considerCaching() && !slot.isTaintedByProxy() && (slot.isCacheableValue() || slot.isCacheableGetter() || slot.isUnset()))182 repatchGetByID(exec, baseValue, ident, slot, *stubInfo, GetByIDKind::Pure);183 184 return JSValue::encode(slot.getPureResult());185 }186 187 157 EncodedJSValue JIT_OPERATION operationGetById(ExecState* exec, StructureStubInfo* stubInfo, EncodedJSValue base, UniquedStringImpl* uid) 188 158 { … … 220 190 bool hasResult = baseValue.getPropertySlot(exec, ident, slot); 221 191 if (stubInfo->considerCaching()) 222 repatchGetByID(exec, baseValue, ident, slot, *stubInfo , GetByIDKind::Normal);192 repatchGetByID(exec, baseValue, ident, slot, *stubInfo); 223 193 224 194 return JSValue::encode(hasResult? slot.getValue(exec, ident) : jsUndefined()); -
trunk/Source/JavaScriptCore/jit/JITOperations.h
r199076 r199084 288 288 int32_t JIT_OPERATION operationCallArityCheck(ExecState*) WTF_INTERNAL; 289 289 int32_t JIT_OPERATION operationConstructArityCheck(ExecState*) WTF_INTERNAL; 290 EncodedJSValue JIT_OPERATION operationTryGetById(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;291 EncodedJSValue JIT_OPERATION operationTryGetByIdOptimize(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL;292 290 EncodedJSValue JIT_OPERATION operationGetById(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; 293 291 EncodedJSValue JIT_OPERATION operationGetByIdGeneric(ExecState*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; 292 EncodedJSValue JIT_OPERATION operationGetByIdBuildList(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; 294 293 EncodedJSValue JIT_OPERATION operationGetByIdOptimize(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; 295 294 EncodedJSValue JIT_OPERATION operationInOptimize(ExecState*, StructureStubInfo*, JSCell*, UniquedStringImpl*) WTF_INTERNAL; -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r199073 r199084 214 214 JITGetByIdGenerator gen( 215 215 m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::stubUnavailableRegisters(), 216 JSValueRegs(regT0), JSValueRegs(regT0) , AccessType::Get);216 JSValueRegs(regT0), JSValueRegs(regT0)); 217 217 gen.generateFastPath(*this); 218 218 … … 532 532 } 533 533 534 void JIT::emit_op_try_get_by_id(Instruction* currentInstruction) 535 { 536 int resultVReg = currentInstruction[1].u.operand; 537 int baseVReg = currentInstruction[2].u.operand; 538 539 emitGetVirtualRegister(baseVReg, regT0); 540 541 emitJumpSlowCaseIfNotJSCell(regT0, baseVReg); 542 543 JITGetByIdGenerator gen( 544 m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::stubUnavailableRegisters(), 545 JSValueRegs(regT0), JSValueRegs(regT0), AccessType::GetPure); 546 gen.generateFastPath(*this); 547 addSlowCase(gen.slowPathJump()); 548 m_getByIds.append(gen); 549 550 emitPutVirtualRegister(resultVReg); 551 } 552 553 void JIT::emitSlow_op_try_get_by_id(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter) 534 void JIT::emit_op_get_by_id(Instruction* currentInstruction) 554 535 { 555 536 int resultVReg = currentInstruction[1].u.operand; … … 557 538 const Identifier* ident = &(m_codeBlock->identifier(currentInstruction[3].u.operand)); 558 539 559 linkSlowCaseIfNotJSCell(iter, baseVReg);560 linkSlowCase(iter);561 562 JITGetByIdGenerator& gen = m_getByIds[m_getByIdIndex++];563 564 Label coldPathBegin = label();565 566 Call call = callOperation(operationTryGetByIdOptimize, resultVReg, gen.stubInfo(), regT0, ident->impl());567 568 gen.reportSlowPathCall(coldPathBegin, call);569 }570 571 void JIT::emit_op_get_by_id(Instruction* currentInstruction)572 {573 int resultVReg = currentInstruction[1].u.operand;574 int baseVReg = currentInstruction[2].u.operand;575 const Identifier* ident = &(m_codeBlock->identifier(currentInstruction[3].u.operand));576 577 540 emitGetVirtualRegister(baseVReg, regT0); 578 541 … … 584 547 JITGetByIdGenerator gen( 585 548 m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(m_bytecodeOffset), RegisterSet::stubUnavailableRegisters(), 586 JSValueRegs(regT0), JSValueRegs(regT0) , AccessType::Get);549 JSValueRegs(regT0), JSValueRegs(regT0)); 587 550 gen.generateFastPath(*this); 588 551 addSlowCase(gen.slowPathJump()); -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
r199073 r199084 283 283 JITGetByIdGenerator gen( 284 284 m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::stubUnavailableRegisters(), 285 JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0) , AccessType::Get);285 JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0)); 286 286 gen.generateFastPath(*this); 287 287 … … 574 574 } 575 575 576 void JIT::emit_op_try_get_by_id(Instruction* currentInstruction)577 {578 int dst = currentInstruction[1].u.operand;579 int base = currentInstruction[2].u.operand;580 581 emitLoad(base, regT1, regT0);582 emitJumpSlowCaseIfNotJSCell(base, regT1);583 584 JITGetByIdGenerator gen(585 m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::stubUnavailableRegisters(),586 JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0), AccessType::GetPure);587 gen.generateFastPath(*this);588 addSlowCase(gen.slowPathJump());589 m_getByIds.append(gen);590 591 emitStore(dst, regT1, regT0);592 }593 594 void JIT::emitSlow_op_try_get_by_id(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)595 {596 int resultVReg = currentInstruction[1].u.operand;597 int baseVReg = currentInstruction[2].u.operand;598 const Identifier* ident = &(m_codeBlock->identifier(currentInstruction[3].u.operand));599 600 linkSlowCaseIfNotJSCell(iter, baseVReg);601 linkSlowCase(iter);602 603 JITGetByIdGenerator& gen = m_getByIds[m_getByIdIndex++];604 605 Label coldPathBegin = label();606 607 Call call = callOperation(operationTryGetByIdOptimize, resultVReg, gen.stubInfo(), regT1, regT0, ident->impl());608 609 gen.reportSlowPathCall(coldPathBegin, call);610 }611 612 613 576 void JIT::emit_op_get_by_id(Instruction* currentInstruction) 614 577 { … … 625 588 JITGetByIdGenerator gen( 626 589 m_codeBlock, CodeOrigin(m_bytecodeOffset), CallSiteIndex(currentInstruction), RegisterSet::stubUnavailableRegisters(), 627 JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0) , AccessType::Get);590 JSValueRegs::payloadOnly(regT0), JSValueRegs(regT1, regT0)); 628 591 gen.generateFastPath(*this); 629 592 addSlowCase(gen.slowPathJump()); -
trunk/Source/JavaScriptCore/jit/Repatch.cpp
r199073 r199084 94 94 static void repatchByIdSelfAccess( 95 95 CodeBlock* codeBlock, StructureStubInfo& stubInfo, Structure* structure, 96 PropertyOffset offset, const FunctionPtr &slowPathFunction,96 PropertyOffset offset, const FunctionPtr &slowPathFunction, 97 97 bool compact) 98 98 { … … 214 214 } 215 215 216 inline J_JITOperation_ESsiJI appropriateOptimizingGetByIdFunction(GetByIDKind kind) 217 { 218 if (kind == GetByIDKind::Normal) 219 return operationGetByIdOptimize; 220 return operationTryGetByIdOptimize; 221 } 222 223 inline J_JITOperation_ESsiJI appropriateGenericGetByIdFunction(GetByIDKind kind) 224 { 225 if (kind == GetByIDKind::Normal) 226 return operationGetById; 227 return operationTryGetById; 228 } 229 230 static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo, GetByIDKind kind) 216 static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo) 231 217 { 232 218 if (forceICFailure(exec)) … … 277 263 && !loadTargetFromProxy) { 278 264 structure->startWatchingPropertyForReplacements(vm, slot.cachedOffset()); 279 repatchByIdSelfAccess(codeBlock, stubInfo, structure, slot.cachedOffset(), appropriateOptimizingGetByIdFunction(kind), true);265 repatchByIdSelfAccess(codeBlock, stubInfo, structure, slot.cachedOffset(), operationGetByIdOptimize, true); 280 266 stubInfo.initGetByIdSelf(codeBlock, structure, slot.cachedOffset()); 281 267 return RetryCacheLater; … … 310 296 getter = jsDynamicCast<JSFunction*>(slot.getterSetter()->getter()); 311 297 312 if (kind == GetByIDKind::Pure) { 313 AccessCase::AccessType type; 314 if (slot.isCacheableValue()) 315 type = AccessCase::Load; 316 else if (slot.isUnset()) 317 type = AccessCase::Miss; 318 else if (slot.isCacheableGetter()) 319 type = AccessCase::GetGetter; 320 else 321 RELEASE_ASSERT_NOT_REACHED(); 322 323 newCase = AccessCase::tryGet(vm, codeBlock, type, offset, structure, conditionSet, loadTargetFromProxy, slot.watchpointSet()); 324 } else if (!loadTargetFromProxy && getter && AccessCase::canEmitIntrinsicGetter(getter, structure)) 298 if (!loadTargetFromProxy && getter && AccessCase::canEmitIntrinsicGetter(getter, structure)) 325 299 newCase = AccessCase::getIntrinsic(vm, codeBlock, getter, slot.cachedOffset(), structure, conditionSet); 326 300 else { … … 357 331 } 358 332 359 void repatchGetByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo , GetByIDKind kind)333 void repatchGetByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo) 360 334 { 361 335 GCSafeConcurrentJITLocker locker(exec->codeBlock()->m_lock, exec->vm().heap); 362 336 363 if (tryCacheGetByID(exec, baseValue, propertyName, slot, stubInfo , kind) == GiveUpOnCache)364 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, appropriateGenericGetByIdFunction(kind));337 if (tryCacheGetByID(exec, baseValue, propertyName, slot, stubInfo) == GiveUpOnCache) 338 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, operationGetById); 365 339 } 366 340 … … 937 911 } 938 912 939 void resetGetByID(CodeBlock* codeBlock, StructureStubInfo& stubInfo , GetByIDKind kind)940 { 941 repatchCall(codeBlock, stubInfo.callReturnLocation, appropriateOptimizingGetByIdFunction(kind));913 void resetGetByID(CodeBlock* codeBlock, StructureStubInfo& stubInfo) 914 { 915 repatchCall(codeBlock, stubInfo.callReturnLocation, operationGetByIdOptimize); 942 916 resetGetByIDCheckAndLoad(stubInfo); 943 917 MacroAssembler::repatchJump(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase)); -
trunk/Source/JavaScriptCore/jit/Repatch.h
r199073 r199084 36 36 namespace JSC { 37 37 38 enum class GetByIDKind { 39 Normal, 40 Pure 41 }; 42 43 void repatchGetByID(ExecState*, JSValue, const Identifier&, const PropertySlot&, StructureStubInfo&, GetByIDKind); 38 void repatchGetByID(ExecState*, JSValue, const Identifier&, const PropertySlot&, StructureStubInfo&); 44 39 void buildGetByIDList(ExecState*, JSValue, const Identifier&, const PropertySlot&, StructureStubInfo&); 45 40 void buildGetByIDProtoList(ExecState*, JSValue, const Identifier&, const PropertySlot&, StructureStubInfo&); … … 52 47 void linkVirtualFor(ExecState*, CallLinkInfo&); 53 48 void linkPolymorphicCall(ExecState*, CallLinkInfo&, CallVariant); 54 void resetGetByID(CodeBlock*, StructureStubInfo& , GetByIDKind);49 void resetGetByID(CodeBlock*, StructureStubInfo&); 55 50 void resetPutByID(CodeBlock*, StructureStubInfo&); 56 51 void resetIn(CodeBlock*, StructureStubInfo&); -
trunk/Source/JavaScriptCore/jsc.cpp
r199076 r199084 24 24 25 25 #include "ArrayPrototype.h" 26 #include "BuiltinExecutables.h"27 26 #include "ButterflyInlines.h" 28 27 #include "BytecodeGenerator.h" … … 34 33 #include "Exception.h" 35 34 #include "ExceptionHelpers.h" 36 #include "GetterSetter.h"37 35 #include "HeapProfiler.h" 38 36 #include "HeapSnapshotBuilder.h" … … 555 553 static EncodedJSValue JSC_HOST_CALL functionCreateImpureGetter(ExecState*); 556 554 static EncodedJSValue JSC_HOST_CALL functionCreateCustomGetterObject(ExecState*); 557 static EncodedJSValue JSC_HOST_CALL functionCreateBuiltin(ExecState*);558 555 static EncodedJSValue JSC_HOST_CALL functionSetImpureGetterDelegate(ExecState*); 559 556 … … 576 573 static EncodedJSValue JSC_HOST_CALL functionHeapSize(ExecState*); 577 574 static EncodedJSValue JSC_HOST_CALL functionAddressOf(ExecState*); 578 static EncodedJSValue JSC_HOST_CALL functionGetGetterSetter(ExecState*);579 575 #ifndef NDEBUG 580 576 static EncodedJSValue JSC_HOST_CALL functionDumpCallFrame(ExecState*); … … 748 744 addFunction(vm, "gcHeapSize", functionHeapSize, 0); 749 745 addFunction(vm, "addressOf", functionAddressOf, 1); 750 addFunction(vm, "getGetterSetter", functionGetGetterSetter, 2);751 746 #ifndef NDEBUG 752 747 addFunction(vm, "dumpCallFrame", functionDumpCallFrame, 0); … … 798 793 addFunction(vm, "createImpureGetter", functionCreateImpureGetter, 1); 799 794 addFunction(vm, "createCustomGetterObject", functionCreateCustomGetterObject, 0); 800 addFunction(vm, "createBuiltin", functionCreateBuiltin, 2);801 795 addFunction(vm, "setImpureGetterDelegate", functionSetImpureGetterDelegate, 2); 802 796 … … 1339 1333 } 1340 1334 1341 static EncodedJSValue JSC_HOST_CALL functionGetGetterSetter(ExecState* exec)1342 {1343 JSValue value = exec->argument(0);1344 if (!value.isObject())1345 return JSValue::encode(jsUndefined());1346 1347 JSValue property = exec->argument(1);1348 if (!property.isString())1349 return JSValue::encode(jsUndefined());1350 1351 Identifier ident = Identifier::fromString(&exec->vm(), property.toString(exec)->value(exec));1352 1353 PropertySlot slot(value, PropertySlot::InternalMethodType::VMInquiry);1354 value.getPropertySlot(exec, ident, slot);1355 1356 JSValue result;1357 if (slot.isCacheableGetter())1358 result = slot.getterSetter();1359 else1360 result = jsNull();1361 1362 return JSValue::encode(result);1363 }1364 1365 1335 EncodedJSValue JSC_HOST_CALL functionVersion(ExecState*) 1366 1336 { … … 1750 1720 return JSValue::encode(exec->vm().throwException(exec, error)); 1751 1721 return JSValue::encode(jsUndefined()); 1752 }1753 1754 EncodedJSValue JSC_HOST_CALL functionCreateBuiltin(ExecState* exec)1755 {1756 if (exec->argumentCount() < 1 || !exec->argument(0).isString())1757 return JSValue::encode(jsUndefined());1758 1759 String functionText = exec->argument(0).toString(exec)->value(exec);1760 if (exec->hadException())1761 return JSValue::encode(JSValue());1762 1763 VM& vm = exec->vm();1764 const SourceCode& source = makeSource(functionText);1765 JSFunction* func = JSFunction::createBuiltinFunction(vm, BuiltinExecutables::createExecutable(vm, source, Identifier::fromString(&vm, "foo"), ConstructorKind::None, ConstructAbility::CannotConstruct)->link(vm, source), exec->lexicalGlobalObject());1766 1767 return JSValue::encode(func);1768 1722 } 1769 1723 -
trunk/Source/JavaScriptCore/llint/LLIntData.cpp
r199073 r199084 145 145 STATIC_ASSERT(StringType == 6); 146 146 STATIC_ASSERT(SymbolType == 7); 147 STATIC_ASSERT(ObjectType == 2 0);148 STATIC_ASSERT(FinalObjectType == 2 1);149 STATIC_ASSERT(JSFunctionType == 2 3);147 STATIC_ASSERT(ObjectType == 21); 148 STATIC_ASSERT(FinalObjectType == 22); 149 STATIC_ASSERT(JSFunctionType == 24); 150 150 STATIC_ASSERT(MasqueradesAsUndefined == 1); 151 151 STATIC_ASSERT(ImplementsDefaultHasInstance == 2); -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r199076 r199084 546 546 } 547 547 548 LLINT_SLOW_PATH_DECL(slow_path_try_get_by_id)549 {550 LLINT_BEGIN();551 CodeBlock* codeBlock = exec->codeBlock();552 const Identifier& ident = codeBlock->identifier(pc[3].u.operand);553 JSValue baseValue = LLINT_OP_C(2).jsValue();554 PropertySlot slot(baseValue, PropertySlot::PropertySlot::InternalMethodType::VMInquiry);555 556 baseValue.getPropertySlot(exec, ident, slot);557 558 LLINT_RETURN(slot.getPureResult());559 }560 561 548 LLINT_SLOW_PATH_DECL(slow_path_get_by_id) 562 549 { -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.h
r199076 r199084 70 70 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_instanceof); 71 71 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_instanceof_custom); 72 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_try_get_by_id);73 72 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_by_id); 74 73 LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_get_arguments_length); -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
r199076 r199084 327 327 const StringType = 6 328 328 const SymbolType = 7 329 const ObjectType = 2 0330 const FinalObjectType = 2 1331 const JSFunctionType = 2 3329 const ObjectType = 21 330 const FinalObjectType = 22 331 const JSFunctionType = 24 332 332 333 333 # Type flags constants. … … 1302 1302 1303 1303 1304 _llint_op_try_get_by_id:1305 traceExecution()1306 callSlowPath(_llint_slow_path_try_get_by_id)1307 dispatch(4)1308 1309 1310 1304 _llint_op_del_by_id: 1311 1305 traceExecution() -
trunk/Source/JavaScriptCore/runtime/GetterSetter.cpp
r199073 r199084 34 34 STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(GetterSetter); 35 35 36 const ClassInfo GetterSetter::s_info = { "GetterSetter", &Base::s_info, 0, CREATE_METHOD_TABLE(GetterSetter) };36 const ClassInfo GetterSetter::s_info = { "GetterSetter", 0, 0, CREATE_METHOD_TABLE(GetterSetter) }; 37 37 38 38 void GetterSetter::visitChildren(JSCell* cell, SlotVisitor& visitor) -
trunk/Source/JavaScriptCore/runtime/GetterSetter.h
r199073 r199084 42 42 // that constant is observed to have a non-null setter (or getter) then we can 43 43 // constant fold that setter (or getter). 44 class GetterSetter final : public JS NonFinalObject{44 class GetterSetter final : public JSCell { 45 45 friend class JIT; 46 typedef JSNonFinalObject Base; 46 47 47 private: 48 48 GetterSetter(VM& vm, JSGlobalObject* globalObject) 49 : Base(vm, vm.getterSetterStructure.get())49 : JSCell(vm, vm.getterSetterStructure.get()) 50 50 { 51 51 m_getter.set(vm, this, globalObject->nullGetterFunction()); … … 54 54 55 55 public: 56 57 static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot |StructureIsImmortal;56 typedef JSCell Base; 57 static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal; 58 58 59 59 static GetterSetter* create(VM& vm, JSGlobalObject* globalObject) … … 129 129 } 130 130 131 DECLARE_EXPORT_INFO; 132 133 static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&) { RELEASE_ASSERT_NOT_REACHED(); return false; } 134 static bool put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&) { RELEASE_ASSERT_NOT_REACHED(); return false; } 135 static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool) { RELEASE_ASSERT_NOT_REACHED(); return false; } 136 static bool deleteProperty(JSCell*, ExecState*, PropertyName) { RELEASE_ASSERT_NOT_REACHED(); return false; } 131 DECLARE_INFO; 137 132 138 133 private: -
trunk/Source/JavaScriptCore/runtime/JSType.h
r199073 r199084 36 36 SymbolType, 37 37 38 GetterSetterType, 38 39 CustomGetterSetterType, 39 40 APIValueWrapperType, … … 75 76 DataViewType, 76 77 77 GetterSetterType,78 78 GlobalObjectType, 79 79 LexicalEnvironmentType, -
trunk/Source/JavaScriptCore/runtime/PropertySlot.cpp
r199073 r199084 40 40 } 41 41 42 JSValue PropertySlot::getPureResult() const43 {44 JSValue result;45 if (isTaintedByProxy())46 result = jsNull();47 else if (isCacheableValue())48 result = JSValue::decode(m_data.value);49 else if (isCacheableGetter())50 result = getterSetter();51 else if (isUnset())52 result = jsUndefined();53 else54 result = jsNull();55 56 return result;57 }58 59 42 } // namespace JSC -
trunk/Source/JavaScriptCore/runtime/PropertySlot.h
r199073 r199084 95 95 JSValue getValue(ExecState*, PropertyName) const; 96 96 JSValue getValue(ExecState*, unsigned propertyName) const; 97 JSValue getPureResult() const;98 97 99 98 bool isCacheable() const { return m_cacheability == CachingAllowed && m_offset != invalidOffset; } -
trunk/Source/JavaScriptCore/runtime/ProxyObject.cpp
r199073 r199084 333 333 { 334 334 slot.disableCaching(); 335 slot.setIsTaintedByProxy(); 335 if (slot.internalMethodType() != PropertySlot::InternalMethodType::VMInquiry) 336 slot.setIsTaintedByProxy(); 336 337 switch (slot.internalMethodType()) { 337 338 case PropertySlot::InternalMethodType::Get:
Note: See TracChangeset
for help on using the changeset viewer.