Merge r169628 from ftlopt.
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Jul 2014 04:33:37 +0000 (04:33 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Jul 2014 04:33:37 +0000 (04:33 +0000)
    2014-06-04  Matthew Mirman  <mmirman@apple.com>

    Added system for inlining native functions via the FTL.
    https://bugs.webkit.org/show_bug.cgi?id=131515

    Reviewed by Filip Pizlo.

    Also fixed the build to not compress the bitcode and to
    include all of the relevant runtime. With GCC_GENERATE_DEBUGGING_SYMBOLS = NO,
    the produced bitcode files are a 100th the size they were before.
    Now we can include all of the relevant runtime files with only a 3mb overhead.
    This is the same overhead as for two compressed files before,
    but done more efficiently (on both ends) and with less code.

    Deciding whether to inline native functions is left up to LLVM.
    The entire module containing the function is linked into the current
    compiled JS so that inlining the native functions shouldn't make them smaller.

    Rather than loading Runtime.symtbl at runtime FTLState.cpp now generates a file
    InlineRuntimeSymbolTable.h which statically builds the symbol table hash table.

    * JavaScriptCore.xcodeproj/project.pbxproj: Added back runtime files to compile.
    * build-symbol-table-index.py: Changed bitcode suffix.
    Added inclusion of only tested symbols.
    Added output to InlineRuntimeSymbolTable.h.
    * build-symbol-table-index.sh: Changed bitcode suffix.
    * copy-llvm-ir-to-derived-sources.sh: Removed gzip compression.
    * tested-symbols.symlst: Added.
    * dfg/DFGByteCodeParser.cpp:
    (JSC::DFG::ByteCodeParser::handleCall):
    Now sets the knownFunction of the call node if such a function exists
    and emits a check that during runtime the callee is in fact known.
    * dfg/DFGNode.h:
    Added functions to set the known function of a call node.
    (JSC::DFG::Node::canBeKnownFunction): Added.
    (JSC::DFG::Node::hasKnownFunction): Added.
    (JSC::DFG::Node::knownFunction): Added.
    (JSC::DFG::Node::giveKnownFunction): Added.
    * ftl/FTLAbbreviatedTypes.h: Added a typedef for LLVMMemoryBufferRef
    * ftl/FTLAbbreviations.h: Added some abbreviations.
    * ftl/FTLLowerDFGToLLVM.cpp:
    (JSC::FTL::LowerDFGToLLVM::isInlinableSize): Added. Hardcoded threshold to 275.
    (JSC::FTL::LowerDFGToLLVM::getModuleByPathForSymbol): Added.
    (JSC::FTL::LowerDFGToLLVM::getFunctionBySymbol): Added.
    (JSC::FTL::LowerDFGToLLVM::possiblyCompileInlineableNativeCall): Added.
    (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):
    Added call to possiblyCompileInlineableNativeCall
    * ftl/FTLOutput.h:
    (JSC::FTL::Output::allocaName):  Added. Useful for debugging.
    * ftl/FTLState.cpp:
    (JSC::FTL::State::State): Added an include for InlineRuntimeSymbolTable.h
    * ftl/FTLState.h: Added symbol table hash table.
    * ftl/FTLCompile.cpp:
    (JSC::FTL::compile): Added inlining and dead function elimination passes.
    * heap/HandleStack.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
    * llvm/InitializeLLVMMac.mm: Deleted.
    * llvm/InitializeLLVMMac.cpp: Added.
    * llvm/LLVMAPIFunctions.h: Added macros to include Bitcode parsing and linking functions.
    * llvm/LLVMHeaders.h: Added includes for Bitcode parsing and linking.
    * runtime/BundlePath.h: Added.
    * runtime/BundlePath.mm: Added.
    * runtime/DateInstance.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
    * runtime/DateInstance.h: ditto.
    * runtime/DateConversion.h: ditto.
    * runtime/ExceptionHelpers.h: ditto.
    * runtime/JSCJSValue.h: ditto.
    * runtime/JSArray.h: ditto.
    * runtime/JSDateMath.h: ditto.
    * runtime/JSObject.h: ditto.
    * runtime/JSObject.h: ditto.
    * runtime/RegExp.h: ditto.
    * runtime/Structure.h: ditto.
    * runtime/Options.h:  Added maximumLLVMInstructionCountForNativeInlining.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@171391 268f45cc-cd09-0410-ab3c-d52691b4dbfc

33 files changed:
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Source/JavaScriptCore/build-symbol-table-index.py
Source/JavaScriptCore/build-symbol-table-index.sh
Source/JavaScriptCore/copy-llvm-ir-to-derived-sources.sh
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
Source/JavaScriptCore/dfg/DFGNode.h
Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h
Source/JavaScriptCore/ftl/FTLAbbreviations.h
Source/JavaScriptCore/ftl/FTLCompile.cpp
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
Source/JavaScriptCore/ftl/FTLState.cpp
Source/JavaScriptCore/ftl/FTLState.h
Source/JavaScriptCore/heap/HandleStack.h
Source/JavaScriptCore/llvm/InitializeLLVM.h
Source/JavaScriptCore/llvm/InitializeLLVMMac.cpp [moved from Source/JavaScriptCore/llvm/InitializeLLVMMac.mm with 75% similarity]
Source/JavaScriptCore/llvm/LLVMAPIFunctions.h
Source/JavaScriptCore/llvm/LLVMHeaders.h
Source/JavaScriptCore/runtime/BundlePath.h [new file with mode: 0644]
Source/JavaScriptCore/runtime/BundlePath.mm [new file with mode: 0644]
Source/JavaScriptCore/runtime/DateConversion.h
Source/JavaScriptCore/runtime/DateInstance.h
Source/JavaScriptCore/runtime/ExceptionHelpers.h
Source/JavaScriptCore/runtime/JSArray.h
Source/JavaScriptCore/runtime/JSCJSValue.h
Source/JavaScriptCore/runtime/JSDateMath.h
Source/JavaScriptCore/runtime/JSObject.h
Source/JavaScriptCore/runtime/JSWrapperObject.h
Source/JavaScriptCore/runtime/Options.h
Source/JavaScriptCore/runtime/RegExp.h
Source/JavaScriptCore/runtime/StringObject.h
Source/JavaScriptCore/runtime/Structure.h
Source/JavaScriptCore/tested-symbols.symlst [new file with mode: 0644]

index 0d7b504..485b4e7 100644 (file)
@@ -1,3 +1,81 @@
+2014-07-22  Filip Pizlo  <fpizlo@apple.com>
+
+        Merge r169628 from ftlopt.
+
+    2014-06-04  Matthew Mirman  <mmirman@apple.com>
+    
+            Added system for inlining native functions via the FTL.
+            https://bugs.webkit.org/show_bug.cgi?id=131515
+    
+            Reviewed by Filip Pizlo.
+    
+            Also fixed the build to not compress the bitcode and to 
+            include all of the relevant runtime. With GCC_GENERATE_DEBUGGING_SYMBOLS = NO, 
+            the produced bitcode files are a 100th the size they were before.  
+            Now we can include all of the relevant runtime files with only a 3mb overhead. 
+            This is the same overhead as for two compressed files before, 
+            but done more efficiently (on both ends) and with less code.
+            
+            Deciding whether to inline native functions is left up to LLVM. 
+            The entire module containing the function is linked into the current 
+            compiled JS so that inlining the native functions shouldn't make them smaller.
+            
+            Rather than loading Runtime.symtbl at runtime FTLState.cpp now generates a file 
+            InlineRuntimeSymbolTable.h which statically builds the symbol table hash table.  
+            
+            * JavaScriptCore.xcodeproj/project.pbxproj: Added back runtime files to compile.
+            * build-symbol-table-index.py: Changed bitcode suffix. 
+            Added inclusion of only tested symbols.  
+            Added output to InlineRuntimeSymbolTable.h. 
+            * build-symbol-table-index.sh: Changed bitcode suffix.
+            * copy-llvm-ir-to-derived-sources.sh: Removed gzip compression.
+            * tested-symbols.symlst: Added.
+            * dfg/DFGByteCodeParser.cpp:
+            (JSC::DFG::ByteCodeParser::handleCall):  
+            Now sets the knownFunction of the call node if such a function exists 
+            and emits a check that during runtime the callee is in fact known.
+            * dfg/DFGNode.h:
+            Added functions to set the known function of a call node.
+            (JSC::DFG::Node::canBeKnownFunction): Added.
+            (JSC::DFG::Node::hasKnownFunction): Added.
+            (JSC::DFG::Node::knownFunction): Added.
+            (JSC::DFG::Node::giveKnownFunction): Added.
+            * ftl/FTLAbbreviatedTypes.h: Added a typedef for LLVMMemoryBufferRef
+            * ftl/FTLAbbreviations.h: Added some abbreviations.
+            * ftl/FTLLowerDFGToLLVM.cpp:
+            (JSC::FTL::LowerDFGToLLVM::isInlinableSize): Added. Hardcoded threshold to 275.
+            (JSC::FTL::LowerDFGToLLVM::getModuleByPathForSymbol): Added.
+            (JSC::FTL::LowerDFGToLLVM::getFunctionBySymbol): Added.
+            (JSC::FTL::LowerDFGToLLVM::possiblyCompileInlineableNativeCall): Added.
+            (JSC::FTL::LowerDFGToLLVM::compileCallOrConstruct):  
+            Added call to possiblyCompileInlineableNativeCall
+            * ftl/FTLOutput.h:
+            (JSC::FTL::Output::allocaName):  Added. Useful for debugging.
+            * ftl/FTLState.cpp:
+            (JSC::FTL::State::State): Added an include for InlineRuntimeSymbolTable.h
+            * ftl/FTLState.h: Added symbol table hash table.
+            * ftl/FTLCompile.cpp:
+            (JSC::FTL::compile): Added inlining and dead function elimination passes.
+            * heap/HandleStack.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
+            * llvm/InitializeLLVMMac.mm: Deleted.
+            * llvm/InitializeLLVMMac.cpp: Added.
+            * llvm/LLVMAPIFunctions.h: Added macros to include Bitcode parsing and linking functions.
+            * llvm/LLVMHeaders.h: Added includes for Bitcode parsing and linking.
+            * runtime/BundlePath.h: Added.
+            * runtime/BundlePath.mm: Added.
+            * runtime/DateInstance.h: Added JS_EXPORT_PRIVATE to a few functions to get inlining to compile.
+            * runtime/DateInstance.h: ditto.
+            * runtime/DateConversion.h: ditto.
+            * runtime/ExceptionHelpers.h: ditto.
+            * runtime/JSCJSValue.h: ditto.
+            * runtime/JSArray.h: ditto.
+            * runtime/JSDateMath.h: ditto.
+            * runtime/JSObject.h: ditto.
+            * runtime/JSObject.h: ditto.
+            * runtime/RegExp.h: ditto.
+            * runtime/Structure.h: ditto.
+            * runtime/Options.h:  Added maximumLLVMInstructionCountForNativeInlining.
+    
 2014-07-22  Mark Lam  <mark.lam@apple.com>
 
         Array.concat() should work on runtime arrays too.
index 356ec95..02100c4 100644 (file)
                0FCEFAAB1804C13E00472CE4 /* FTLSaveRestore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAA91804C13E00472CE4 /* FTLSaveRestore.cpp */; };
                0FCEFAAC1804C13E00472CE4 /* FTLSaveRestore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAAA1804C13E00472CE4 /* FTLSaveRestore.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0FCEFAB01805CA6D00472CE4 /* InitializeLLVM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAAE1805CA6D00472CE4 /* InitializeLLVM.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               0FCEFAB11805CA6D00472CE4 /* InitializeLLVMMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAAF1805CA6D00472CE4 /* InitializeLLVMMac.mm */; };
                0FCEFAC11805D94E00472CE4 /* LLVMOverrides.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC01805D94100472CE4 /* LLVMOverrides.cpp */; };
                0FCEFAC31805E74000472CE4 /* LLVMExports.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC21805E74000472CE4 /* LLVMExports.cpp */; };
                0FCEFACA1805E75500472CE4 /* InitializeLLVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC41805E75500472CE4 /* InitializeLLVM.cpp */; };
-               0FCEFACB1805E75500472CE4 /* InitializeLLVMPOSIX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC51805E75500472CE4 /* InitializeLLVMPOSIX.cpp */; };
                0FCEFACC1805E75500472CE4 /* InitializeLLVMPOSIX.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAC61805E75500472CE4 /* InitializeLLVMPOSIX.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0FCEFACD1805E75500472CE4 /* LLVMAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC71805E75500472CE4 /* LLVMAPI.cpp */; };
                0FCEFACE1805E75500472CE4 /* LLVMAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FCEFAC81805E75500472CE4 /* LLVMAPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
                4443AE3316E188D90076F110 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51F0EB6105C86C6B00E6DF1B /* Foundation.framework */; };
                451539B912DC994500EF7AC4 /* Yarr.h in Headers */ = {isa = PBXBuildFile; fileRef = 451539B812DC994500EF7AC4 /* Yarr.h */; settings = {ATTRIBUTES = (Private, ); }; };
                5510502618EB827500001F3E /* JSCallbackFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1440F88F0A508B100005F061 /* JSCallbackFunction.h */; };
+               552EA70C1908704800A66F2F /* JSDataViewPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */; };
                5540757218DA58AD00EFF7F2 /* ArgList.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF605120E203EF800B9A64D /* ArgList.h */; };
                5540757318DA58AD00EFF7F2 /* Arguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BC257DE60E1F51C50016B6C9 /* Arguments.h */; };
                5540757418DA58AD00EFF7F2 /* ArgumentsIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A76140C8182982CB00750624 /* ArgumentsIteratorConstructor.h */; };
                554078AF18DA58AD00EFF7F2 /* ArrayPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A84D0255597D01FF60F7 /* ArrayPrototype.cpp */; };
                55407A3818DA58AD00EFF7F2 /* NumberConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C20E16D4E900A06E92 /* NumberConstructor.cpp */; };
                55407A3A18DA58AD00EFF7F2 /* NumberPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C40E16D4E900A06E92 /* NumberPrototype.cpp */; };
+               556A35C8190842BC00B56747 /* SetConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7299DA317D12858005F5FF9 /* SetConstructor.cpp */; };
+               556A35C9190842D500B56747 /* NativeErrorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9080E1839DB000F9297 /* NativeErrorConstructor.cpp */; };
+               556A35CA190842DD00B56747 /* Arguments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC257DE50E1F51C50016B6C9 /* Arguments.cpp */; };
+               556A35CB190842E800B56747 /* ArgumentsIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A76140C9182982CB00750624 /* ArgumentsIteratorPrototype.cpp */; };
+               556A35CC190842F300B56747 /* ArrayIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAEC217F4EA1400F6140C /* ArrayIteratorPrototype.cpp */; };
+               556A35CD190842FD00B56747 /* BooleanConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952320E15EB5600A898AB /* BooleanConstructor.cpp */; };
+               556A35CE1908430B00B56747 /* BooleanPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952340E15EB5600A898AB /* BooleanPrototype.cpp */; };
+               556A35CF1908431600B56747 /* DateConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD203450E17135E002C7E82 /* DateConstructor.cpp */; };
+               556A35D01908432000B56747 /* DatePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD203470E17135E002C7E82 /* DatePrototype.cpp */; };
+               556A35D11908432900B56747 /* ErrorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9040E1839DB000F9297 /* ErrorConstructor.cpp */; };
+               556A35D21908433300B56747 /* ErrorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9060E1839DB000F9297 /* ErrorPrototype.cpp */; };
+               556A35D31908434300B56747 /* FunctionConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C00E16D4E900A06E92 /* FunctionConstructor.cpp */; };
+               556A35D41908434D00B56747 /* FunctionPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A85C0255597D01FF60F7 /* FunctionPrototype.cpp */; };
+               556A35D51908436800B56747 /* JSArrayBufferConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B617B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp */; };
+               556A35D61908437500B56747 /* JSArrayBufferPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B817B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp */; };
+               556A35D71908438A00B56747 /* JSArrayIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAEC417F4EA1400F6140C /* JSArrayIterator.cpp */; };
+               556A35D81908439D00B56747 /* JSBoundFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */; };
+               556A35D9190843B100B56747 /* JSFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A85E0255597D01FF60F7 /* JSFunction.cpp */; };
+               556A35DA190843C200B56747 /* JSGlobalObjectFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */; };
+               556A35DB190843CF00B56747 /* JSONObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7F9935E0FD7325100A0B2D0 /* JSONObject.cpp */; };
+               556A35DC190843E700B56747 /* JSPromiseConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C184E2017BEE240007CB63A /* JSPromiseConstructor.cpp */; };
+               556A35DD190843E700B56747 /* JSPromiseFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C008CD0186F8A9300955C24 /* JSPromiseFunctions.cpp */; };
+               556A35DE190843E700B56747 /* JSPromisePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C184E1C17BEE22E007CB63A /* JSPromisePrototype.cpp */; };
+               556A35DF190843F300B56747 /* ConsolePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A53CE08118BC1A5600BEDF76 /* ConsolePrototype.cpp */; };
+               556A35E01908441D00B56747 /* MapConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A700873717CBE85300C3E643 /* MapConstructor.cpp */; };
+               556A35E11908441D00B56747 /* MapIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A74DEF8D182D991400522C22 /* MapIteratorPrototype.cpp */; };
+               556A35E21908441D00B56747 /* MapPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A700873B17CBE8D300C3E643 /* MapPrototype.cpp */; };
+               556A35E31908442A00B56747 /* MathObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A86A0255597D01FF60F7 /* MathObject.cpp */; };
+               556A35E41908443700B56747 /* NameConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86EBF2F91560F036008E9222 /* NameConstructor.cpp */; };
+               556A35E51908443700B56747 /* NamePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86EBF2FD1560F036008E9222 /* NamePrototype.cpp */; };
+               556A35E61908444900B56747 /* ObjectConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C60E16D4E900A06E92 /* ObjectConstructor.cpp */; };
+               556A35E71908444900B56747 /* ObjectPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C80E16D4E900A06E92 /* ObjectPrototype.cpp */; };
+               556A35E81908448000B56747 /* RegExpConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BD0E1706A7002C7E82 /* RegExpConstructor.cpp */; };
+               556A35E91908448000B56747 /* RegExpPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BF0E1706A7002C7E82 /* RegExpPrototype.cpp */; };
+               556A35EA190844A000B56747 /* SetIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A790DD67182F499700588807 /* SetIteratorPrototype.cpp */; };
+               556A35EB190844A000B56747 /* SetPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7299D9F17D12848005F5FF9 /* SetPrototype.cpp */; };
+               556A35EC190844AA00B56747 /* StringConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C00E16EE3300B34460 /* StringConstructor.cpp */; };
+               556A35ED190844B500B56747 /* WeakMapConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7CA3ADD17DA41AE006538AF /* WeakMapConstructor.cpp */; };
+               556A35EE190844C000B56747 /* WeakMapPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7CA3ADF17DA41AE006538AF /* WeakMapPrototype.cpp */; };
+               55A04E211908653D0024E40C /* StringPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C50E16EE3300B34460 /* StringPrototype.cpp */; };
                5D53726F0E1C54880021E549 /* Tracing.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D53726E0E1C54880021E549 /* Tracing.h */; };
                5D5D8AD10E0D0EBE00F9C692 /* libedit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D5D8AD00E0D0EBE00F9C692 /* libedit.dylib */; };
                5DBB151B131D0B310056AD36 /* testapi.js in Copy Support Script */ = {isa = PBXBuildFile; fileRef = 14D857740A4696C80032146C /* testapi.js */; };
                99E45A2618A1B2590026D88F /* EncodedValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A2118A1B2590026D88F /* EncodedValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
                99E45A2718A1B2590026D88F /* InputCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A2218A1B2590026D88F /* InputCursor.h */; settings = {ATTRIBUTES = (Private, ); }; };
                99E45A2818A1B2590026D88F /* NondeterministicInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E45A2318A1B2590026D88F /* NondeterministicInput.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               9E729407190F01A5001A91B5 /* InitializeThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E178636C0D9BEEC300D74E75 /* InitializeThreading.cpp */; };
+               9E729408190F021E001A91B5 /* InitializeLLVMPOSIX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCEFAC51805E75500472CE4 /* InitializeLLVMPOSIX.cpp */; };
+               9E72940B190F0514001A91B5 /* BundlePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E72940A190F0514001A91B5 /* BundlePath.h */; };
+               9E8791E0193FB6800076CA78 /* Arguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BC257DE60E1F51C50016B6C9 /* Arguments.h */; };
+               9E8791E1193FB6800076CA78 /* ArgumentsIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A76140C8182982CB00750624 /* ArgumentsIteratorConstructor.h */; };
+               9E8791E2193FB6800076CA78 /* ArgumentsIteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A76140CA182982CB00750624 /* ArgumentsIteratorPrototype.h */; };
+               9E8791E3193FB6800076CA78 /* ArrayConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7952070E15E8A800A898AB /* ArrayConstructor.h */; };
+               9E8791E4193FB6800076CA78 /* ArrayIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDAEC117F4EA1400F6140C /* ArrayIteratorConstructor.h */; };
+               9E8791E5193FB6800076CA78 /* ArrayIteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDAEC317F4EA1400F6140C /* ArrayIteratorPrototype.h */; };
+               9E8791E6193FB6800076CA78 /* BatchedTransitionOptimizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 147B83AA0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h */; };
+               9E8791E7193FB6800076CA78 /* BigInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 866739D013BFDE710023D87C /* BigInteger.h */; };
+               9E8791E8193FB6800076CA78 /* CommonSlowPathsExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6553A33017A1F1EE008CF6F3 /* CommonSlowPathsExceptions.h */; };
+               9E8791E9193FB6800076CA78 /* JSConsole.h in Headers */ = {isa = PBXBuildFile; fileRef = A53CE08418BC1A5600BEDF76 /* JSConsole.h */; };
+               9E8791EA193FB6800076CA78 /* DateConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD203460E17135E002C7E82 /* DateConstructor.h */; };
+               9E8791EB193FB6800076CA78 /* DateConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = D21202290AD4310C00ED79B6 /* DateConversion.h */; };
+               9E8791EC193FB6800076CA78 /* DatePrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD203480E17135E002C7E82 /* DatePrototype.h */; };
+               9E8791ED193FB6800076CA78 /* ErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9050E1839DB000F9297 /* ErrorConstructor.h */; };
+               9E8791EE193FB6800076CA78 /* ConsolePrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A53CE08218BC1A5600BEDF76 /* ConsolePrototype.h */; };
+               9E8791EF193FB6800076CA78 /* JSActivation.h in Headers */ = {isa = PBXBuildFile; fileRef = 14DA818E0D99FD2000B0A4FB /* JSActivation.h */; settings = {ATTRIBUTES = (); }; };
+               9E8791F0193FB6800076CA78 /* JSArgumentsIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A76140CC182982CB00750624 /* JSArgumentsIterator.h */; };
+               9E8791F1193FB6800076CA78 /* JSArrayIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BDAEC517F4EA1400F6140C /* JSArrayIterator.h */; };
+               9E8791F2193FB6800076CA78 /* (null) in Headers */ = {isa = PBXBuildFile; };
+               9E8791F3193FB6800076CA78 /* JSGlobalObjectDebuggable.h in Headers */ = {isa = PBXBuildFile; fileRef = A59455911824744700CC3843 /* JSGlobalObjectDebuggable.h */; };
+               9E8791F4193FB6800076CA78 /* JSGlobalObjectFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = BC756FC70E2031B200DE7D12 /* JSGlobalObjectFunctions.h */; };
+               9E8791F5193FB6800076CA78 /* JSMapIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A74DEF90182D991400522C22 /* JSMapIterator.h */; };
+               9E8791F6193FB6800076CA78 /* JSPromiseConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C184E2117BEE240007CB63A /* JSPromiseConstructor.h */; };
+               9E8791F7193FB6800076CA78 /* JSPromisePrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C184E1D17BEE22E007CB63A /* JSPromisePrototype.h */; };
+               9E8791F8193FB6800076CA78 /* JSPromiseReaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CDD1871258D00955C24 /* JSPromiseReaction.h */; };
+               9E8791F9193FB6800076CA78 /* JSSetIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A790DD6A182F499700588807 /* JSSetIterator.h */; };
+               9E8791FA193FB6800076CA78 /* JSStackInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C1EAEB17987AB600299DB2 /* JSStackInlines.h */; };
+               9E8791FB193FB6800076CA78 /* JSStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 86E85538111B9968001AF51E /* JSStringBuilder.h */; };
+               9E8791FC193FB6800076CA78 /* JSStringJoiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2600B5A5152BAAA70091EE5F /* JSStringJoiner.h */; };
+               9E8791FD193FB6800076CA78 /* JSWeakMap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CA3AE217DA41AE006538AF /* JSWeakMap.h */; };
+               9E8791FE193FB6800076CA78 /* LiteralParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E2EA690FB460CF00601F06 /* LiteralParser.h */; };
+               9E8791FF193FB6800076CA78 /* MapConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A700873817CBE85300C3E643 /* MapConstructor.h */; };
+               9E879200193FB6800076CA78 /* MapIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A74DEF8C182D991400522C22 /* MapIteratorConstructor.h */; };
+               9E879201193FB6800076CA78 /* MapIteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A74DEF8E182D991400522C22 /* MapIteratorPrototype.h */; };
+               9E879202193FB6800076CA78 /* MapPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A700873C17CBE8D300C3E643 /* MapPrototype.h */; };
+               9E879203193FB6800076CA78 /* NameConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EBF2FA1560F036008E9222 /* NameConstructor.h */; };
+               9E879204193FB6800076CA78 /* NameInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EBF2FC1560F036008E9222 /* NameInstance.h */; };
+               9E879205193FB6800076CA78 /* NamePrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EBF2FE1560F036008E9222 /* NamePrototype.h */; };
+               9E879206193FB6800076CA78 /* NativeErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9090E1839DB000F9297 /* NativeErrorConstructor.h */; };
+               9E879207193FB6800076CA78 /* NativeErrorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E90B0E1839DB000F9297 /* NativeErrorPrototype.h */; };
+               9E879208193FB6800076CA78 /* NumberConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2680C30E16D4E900A06E92 /* NumberConstructor.h */; };
+               9E879209193FB6800076CA78 /* StructureIDBlob.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */; };
+               9E87920A193FB6800076CA78 /* ArrayBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2617ADB5F3005AB174 /* ArrayBuffer.h */; };
+               9E87920B193FB6800076CA78 /* ArrayBufferNeuteringWatchpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FFC99D3184EE318009C10AB /* ArrayBufferNeuteringWatchpoint.h */; };
+               9E87920C193FB6800076CA78 /* ArrayBufferView.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2817ADB5F3005AB174 /* ArrayBufferView.h */; };
+               9E87920D193FB6800076CA78 /* ArrayConventions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38915ED8E3800F167B2 /* ArrayConventions.h */; };
+               9E87920E193FB6800076CA78 /* ArrayPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A84E0255597D01FF60F7 /* ArrayPrototype.h */; };
+               9E87920F193FB6800076CA78 /* StructureIDTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF7382B18BBBF92008A5A37 /* StructureIDTable.h */; };
+               9E879210193FB6800076CA78 /* ArrayStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38A15ED8E3800F167B2 /* ArrayStorage.h */; };
+               9E879211193FB6800076CA78 /* BooleanObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 704FD35305697E6D003DBED9 /* BooleanObject.h */; };
+               9E879212193FB6800076CA78 /* Butterfly.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38B15ED8E3800F167B2 /* Butterfly.h */; };
+               9E879213193FB6800076CA78 /* ButterflyInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38C15ED8E3800F167B2 /* ButterflyInlines.h */; };
+               9E879214193FB6800076CA78 /* CallData.h in Headers */ = {isa = PBXBuildFile; fileRef = 145C507F0D9DF63B0088F6B9 /* CallData.h */; };
+               9E879215193FB6800076CA78 /* ClassInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6AAAE40E1F426500AD87D8 /* ClassInfo.h */; };
+               9E879216193FB6800076CA78 /* CodeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A77F1820164088B200640A47 /* CodeCache.h */; };
+               9E879217193FB6800076CA78 /* CodeSpecializationKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F21C27914BE727300ADC64B /* CodeSpecializationKind.h */; };
+               9E879218193FB6800076CA78 /* CommonIdentifiers.h in Headers */ = {isa = PBXBuildFile; fileRef = 65EA73630BAE35D1001BB560 /* CommonIdentifiers.h */; };
+               9E879219193FB6800076CA78 /* CommonSlowPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F15F15D14B7A73A005DE37D /* CommonSlowPaths.h */; };
+               9E87921A193FB6800076CA78 /* CompilationResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E5A3A61797432D00E893C0 /* CompilationResult.h */; };
+               9E87921B193FB6800076CA78 /* Completion.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BB2BC5030F772101FCFE1D /* Completion.h */; };
+               9E87921C193FB6800076CA78 /* ConcurrentJITLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDB2CE9174896C7007B3C1B /* ConcurrentJITLock.h */; };
+               9E87921D193FB6800076CA78 /* ConsoleTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FD0071189B038C00633231 /* ConsoleTypes.h */; };
+               9E87921E193FB6800076CA78 /* ConstantMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FFC99D0184EC8AD009C10AB /* ConstantMode.h */; };
+               9E87921F193FB6800076CA78 /* ConstructData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8F3CCF0DAF17BA00577A80 /* ConstructData.h */; };
+               9E879220193FB6800076CA78 /* DataView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B117B6B5AB00A7AE3F /* DataView.h */; };
+               9E879221193FB6800076CA78 /* DateInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1166010E1997B1008066DD /* DateInstance.h */; };
+               9E879222193FB6800076CA78 /* DateInstanceCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A1563010966365006FA260 /* DateInstanceCache.h */; };
+               9E879223193FB6800076CA78 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A8590255597D01FF60F7 /* Debugger.h */; };
+               9E879224193FB6800076CA78 /* DumpContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A70447EC17A0BD7000F5898E /* DumpContext.h */; };
+               9E879225193FB6800076CA78 /* Error.h in Headers */ = {isa = PBXBuildFile; fileRef = BC3046060E1F497F003232CF /* Error.h */; };
+               9E879226193FB6800076CA78 /* ErrorHandlingScope.h in Headers */ = {isa = PBXBuildFile; fileRef = FEB58C13187B8B160098EF0B /* ErrorHandlingScope.h */; };
+               9E879227193FB6800076CA78 /* ErrorInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E98B0E183E38000F9297 /* ErrorInstance.h */; };
+               9E879228193FB6800076CA78 /* ErrorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9070E1839DB000F9297 /* ErrorPrototype.h */; };
+               9E879229193FB6800076CA78 /* ExceptionHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = A72701B30DADE94900E548D7 /* ExceptionHelpers.h */; };
+               9E87922A193FB6800076CA78 /* Executable.h in Headers */ = {isa = PBXBuildFile; fileRef = 86CAFEE21035DDE60028A609 /* Executable.h */; };
+               9E87922B193FB6800076CA78 /* Float32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2917ADB5F3005AB174 /* Float32Array.h */; };
+               9E87922C193FB6800076CA78 /* Float64Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2A17ADB5F3005AB174 /* Float64Array.h */; };
+               9E87922D193FB6800076CA78 /* ConsoleClient.h in Headers */ = {isa = PBXBuildFile; fileRef = A53CE08918BC21C300BEDF76 /* ConsoleClient.h */; };
+               9E87922E193FB6800076CA78 /* FunctionConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2680C10E16D4E900A06E92 /* FunctionConstructor.h */; };
+               9E87922F193FB6800076CA78 /* FunctionExecutableDump.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB4B52216B6278D003F696B /* FunctionExecutableDump.h */; };
+               9E879230193FB6800076CA78 /* FunctionPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A85D0255597D01FF60F7 /* FunctionPrototype.h */; };
+               9E879231193FB6800076CA78 /* GenericTypedArrayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B217B6B5AB00A7AE3F /* GenericTypedArrayView.h */; };
+               9E879232193FB6800076CA78 /* GenericTypedArrayViewInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B317B6B5AB00A7AE3F /* GenericTypedArrayViewInlines.h */; };
+               9E879233193FB6800076CA78 /* Identifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 933A349A038AE7C6008635CE /* Identifier.h */; };
+               9E879234193FB6800076CA78 /* IndexingHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38D15ED8E3800F167B2 /* IndexingHeader.h */; };
+               9E879235193FB6800076CA78 /* IndexingHeaderInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38E15ED8E3800F167B2 /* IndexingHeaderInlines.h */; };
+               9E879236193FB6800076CA78 /* IndexingType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F38F15ED8E3800F167B2 /* IndexingType.h */; };
+               9E879237193FB6800076CA78 /* InitializeThreading.h in Headers */ = {isa = PBXBuildFile; fileRef = E178633F0D9BEC0000D74E75 /* InitializeThreading.h */; };
+               9E879238193FB6800076CA78 /* Int16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */; };
+               9E879239193FB6800076CA78 /* Int32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */; };
+               9E87923A193FB6800076CA78 /* Int8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */; };
+               9E87923B193FB6800076CA78 /* IntendedStructureChain.h in Headers */ = {isa = PBXBuildFile; fileRef = A78853F817972629001440E4 /* IntendedStructureChain.h */; };
+               9E87923C193FB6800076CA78 /* InternalFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = BC11667A0E199C05008066DD /* InternalFunction.h */; };
+               9E87923D193FB6800076CA78 /* Intrinsic.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BF642A148DB2B5004DE36A /* Intrinsic.h */; };
+               9E87923E193FB6800076CA78 /* JSAPIValueWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = BC0894D60FAFBA2D00001865 /* JSAPIValueWrapper.h */; };
+               9E87923F193FB6800076CA78 /* JSArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 938772E5038BFE19008635CE /* JSArray.h */; };
+               9E879240193FB6800076CA78 /* JSArrayBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B517B6B5AB00A7AE3F /* JSArrayBuffer.h */; };
+               9E879241193FB6800076CA78 /* JSArrayBufferConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B717B6B5AB00A7AE3F /* JSArrayBufferConstructor.h */; };
+               9E879242193FB6800076CA78 /* JSArrayBufferPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66B917B6B5AB00A7AE3F /* JSArrayBufferPrototype.h */; };
+               9E879243193FB6800076CA78 /* JSArrayBufferView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66BB17B6B5AB00A7AE3F /* JSArrayBufferView.h */; };
+               9E879244193FB6800076CA78 /* JSArrayBufferViewInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66BC17B6B5AB00A7AE3F /* JSArrayBufferViewInlines.h */; };
+               9E879245193FB6800076CA78 /* JSCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1167D80E19BCC9008066DD /* JSCell.h */; };
+               9E879246193FB6800076CA78 /* JSCellInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F97496F1687ADE200A4FF6A /* JSCellInlines.h */; };
+               9E879247193FB6800076CA78 /* JSCInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F1DD84918A945BE0026F3FA /* JSCInlines.h */; };
+               9E879248193FB6800076CA78 /* JSCJSValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 14ABB36E099C076400E2A24F /* JSCJSValue.h */; };
+               9E879249193FB6800076CA78 /* JSCJSValueInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 865A30F0135007E100CDB49E /* JSCJSValueInlines.h */; };
+               9E87924A193FB6800076CA78 /* JSDataView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66BE17B6B5AB00A7AE3F /* JSDataView.h */; };
+               9E87924B193FB6800076CA78 /* JSDataViewPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C017B6B5AB00A7AE3F /* JSDataViewPrototype.h */; };
+               9E87924C193FB6800076CA78 /* JSDateMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 9788FC231471AD0C0068CE2D /* JSDateMath.h */; };
+               9E87924D193FB6800076CA78 /* JSDestructibleObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A7F687160432D400F76B98 /* JSDestructibleObject.h */; };
+               9E87924E193FB6800076CA78 /* JSExportMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B4ACAE1484C9CE00B38A36 /* JSExportMacros.h */; };
+               9E87924F193FB6800076CA78 /* JSFloat32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C117B6B5AB00A7AE3F /* JSFloat32Array.h */; };
+               9E879250193FB6800076CA78 /* JSFloat64Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C217B6B5AB00A7AE3F /* JSFloat64Array.h */; };
+               9E879251193FB6800076CA78 /* JSFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A85F0255597D01FF60F7 /* JSFunction.h */; };
+               9E879252193FB6800076CA78 /* JSFunctionInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = A72028B91797603D0098028C /* JSFunctionInlines.h */; };
+               9E879253193FB6800076CA78 /* JSGenericTypedArrayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C317B6B5AB00A7AE3F /* JSGenericTypedArrayView.h */; };
+               9E879254193FB6800076CA78 /* JSGenericTypedArrayViewConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C417B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructor.h */; };
+               9E879255193FB6800076CA78 /* JSGenericTypedArrayViewConstructorInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C517B6B5AB00A7AE3F /* JSGenericTypedArrayViewConstructorInlines.h */; };
+               9E879256193FB6800076CA78 /* JSGenericTypedArrayViewInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C617B6B5AB00A7AE3F /* JSGenericTypedArrayViewInlines.h */; };
+               9E879257193FB6800076CA78 /* JSGenericTypedArrayViewPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C717B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototype.h */; };
+               9E879258193FB6800076CA78 /* JSGenericTypedArrayViewPrototypeInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C817B6B5AB00A7AE3F /* JSGenericTypedArrayViewPrototypeInlines.h */; };
+               9E879259193FB6800076CA78 /* JSGlobalObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E894330CD0603F00367179 /* JSGlobalObject.h */; };
+               9E87925A193FB6800076CA78 /* JSInt16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */; };
+               9E87925B193FB6800076CA78 /* JSInt32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */; };
+               9E87925C193FB6800076CA78 /* JSInt8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */; };
+               9E87925D193FB6800076CA78 /* JSLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 65EA4C9A092AF9E20093D800 /* JSLock.h */; };
+               9E87925E193FB6800076CA78 /* JSMap.h in Headers */ = {isa = PBXBuildFile; fileRef = A700874017CBE8EB00C3E643 /* JSMap.h */; };
+               9E87925F193FB6800076CA78 /* JSNameScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 14874AE015EBDE4A002E3587 /* JSNameScope.h */; };
+               9E879260193FB6800076CA78 /* JSObject.h in Headers */ = {isa = PBXBuildFile; fileRef = BC22A3990E16E14800AF21C8 /* JSObject.h */; };
+               9E879261193FB6800076CA78 /* JSONObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F9935D0FD7325100A0B2D0 /* JSONObject.h */; };
+               9E879262193FB6800076CA78 /* JSPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C184E1917BEDBD3007CB63A /* JSPromise.h */; };
+               9E879263193FB6800076CA78 /* JSPromiseDeferred.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CD9187124BB00955C24 /* JSPromiseDeferred.h */; };
+               9E879264193FB6800076CA78 /* JSPromiseFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CD1186F8A9300955C24 /* JSPromiseFunctions.h */; };
+               9E879265193FB6800076CA78 /* JSProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 862553CF16136AA5009F17D0 /* JSProxy.h */; };
+               9E879266193FB6800076CA78 /* JSScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 14874AE215EBDE4A002E3587 /* JSScope.h */; };
+               9E879267193FB6800076CA78 /* JSSegmentedVariableObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F919D0F157F3327004A4E7D /* JSSegmentedVariableObject.h */; };
+               9E879268193FB6800076CA78 /* JSSet.h in Headers */ = {isa = PBXBuildFile; fileRef = A7299D9C17D12837005F5FF9 /* JSSet.h */; };
+               9E879269193FB6800076CA78 /* JSString.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A8620255597D01FF60F7 /* JSString.h */; };
+               9E87926A193FB6800076CA78 /* JSSymbolTableObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F919D0A157EE09D004A4E7D /* JSSymbolTableObject.h */; };
+               9E87926B193FB6800076CA78 /* JSType.h in Headers */ = {isa = PBXBuildFile; fileRef = 14ABB454099C2A0F00E2A24F /* JSType.h */; };
+               9E87926C193FB6800076CA78 /* JSTypedArrayConstructors.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CD17B6B5AB00A7AE3F /* JSTypedArrayConstructors.h */; };
+               9E87926D193FB6800076CA78 /* JSTypedArrayPrototypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66CF17B6B5AB00A7AE3F /* JSTypedArrayPrototypes.h */; };
+               9E87926E193FB6800076CA78 /* JSTypedArrays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D117B6B5AB00A7AE3F /* JSTypedArrays.h */; };
+               9E87926F193FB6800076CA78 /* JSTypeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6507D2970E871E4A00D7D896 /* JSTypeInfo.h */; };
+               9E879270193FB6800076CA78 /* JSUint16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */; };
+               9E879271193FB6800076CA78 /* JSUint32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */; };
+               9E879272193FB6800076CA78 /* JSUint8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */; };
+               9E879273193FB6800076CA78 /* JSUint8ClampedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */; };
+               9E879274193FB6800076CA78 /* JSVariableObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F252560D08DD8D004ECFFF /* JSVariableObject.h */; };
+               9E879275193FB6800076CA78 /* JSWithScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 1442566015EDE98D0066A49B /* JSWithScope.h */; };
+               9E879276193FB6800076CA78 /* JSWrapperObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C7A1720A8EAACB00FA37EA /* JSWrapperObject.h */; };
+               9E879277193FB6800076CA78 /* Lookup.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A8690255597D01FF60F7 /* Lookup.h */; };
+               9E879278193FB6800076CA78 /* MapData.h in Headers */ = {isa = PBXBuildFile; fileRef = A78507D517CBC6FD0011F6E7 /* MapData.h */; };
+               9E879279193FB6800076CA78 /* MatchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 8612E4CB1522918400C836BE /* MatchResult.h */; };
+               9E87927A193FB6800076CA78 /* MathObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A86B0255597D01FF60F7 /* MathObject.h */; };
+               9E87927B193FB6800076CA78 /* MemoryStatistics.h in Headers */ = {isa = PBXBuildFile; fileRef = 90213E3C123A40C200D422F3 /* MemoryStatistics.h */; };
+               9E87927C193FB6800076CA78 /* Microtask.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CE5187631B600955C24 /* Microtask.h */; };
+               9E87927D193FB6800076CA78 /* NumberObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A8710255597D01FF60F7 /* NumberObject.h */; };
+               9E87927E193FB6800076CA78 /* NumberPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2680C50E16D4E900A06E92 /* NumberPrototype.h */; };
+               9E87927F193FB6800076CA78 /* NumericStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D3938103E4560007DCB52 /* NumericStrings.h */; };
+               9E879280193FB6800076CA78 /* ObjectConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2680C70E16D4E900A06E92 /* ObjectConstructor.h */; };
+               9E879281193FB6800076CA78 /* ObjectPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2680C90E16D4E900A06E92 /* ObjectPrototype.h */; };
+               9E879282193FB6800076CA78 /* Operations.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A8780255597D01FF60F7 /* Operations.h */; };
+               9E879283193FB6800076CA78 /* Options.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE228EB1436AB2300196C48 /* Options.h */; };
+               9E879284193FB6800076CA78 /* PrivateName.h in Headers */ = {isa = PBXBuildFile; fileRef = 868916A9155F285400CB2B9A /* PrivateName.h */; };
+               9E879285193FB6800076CA78 /* PropertyDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FB604B103F5EAB0017A286 /* PropertyDescriptor.h */; };
+               9E879286193FB6800076CA78 /* PropertyMapHashTable.h in Headers */ = {isa = PBXBuildFile; fileRef = BC95437C0EBA70FD0072B6D3 /* PropertyMapHashTable.h */; };
+               9E879287193FB6800076CA78 /* PropertyName.h in Headers */ = {isa = PBXBuildFile; fileRef = 86158AB2155C8B3F00B45C9C /* PropertyName.h */; };
+               9E879288193FB6800076CA78 /* PropertyNameArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 65400C100A69BAF200509887 /* PropertyNameArray.h */; };
+               9E879289193FB6800076CA78 /* PropertyOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF7168A15A3B231008F5DAA /* PropertyOffset.h */; };
+               9E87928A193FB6800076CA78 /* PropertySlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 65621E6C089E859700760F35 /* PropertySlot.h */; };
+               9E87928B193FB6800076CA78 /* PropertyStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F39015ED8E3800F167B2 /* PropertyStorage.h */; };
+               9E87928C193FB6800076CA78 /* Protect.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C02FBB0637462A003E7EE6 /* Protect.h */; };
+               9E87928D193FB6800076CA78 /* PrototypeMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D844A316AA2C7000A65AF0 /* PrototypeMap.h */; };
+               9E87928E193FB6800076CA78 /* PutDirectIndexMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F0CD4C015F1A6040032F1C0 /* PutDirectIndexMode.h */; };
+               9E87928F193FB6800076CA78 /* PutPropertySlot.h in Headers */ = {isa = PBXBuildFile; fileRef = 147B84620E6DE6B1004775A4 /* PutPropertySlot.h */; };
+               9E879290193FB6800076CA78 /* RegExp.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A87E0255597D01FF60F7 /* RegExp.h */; };
+               9E879291193FB6800076CA78 /* RegExpCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B3E11C7B228007A5315 /* RegExpCache.h */; };
+               9E879292193FB6800076CA78 /* RegExpKey.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B4011C7B235007A5315 /* RegExpKey.h */; };
+               9E879293193FB6800076CA78 /* RegExpObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F692A87C0255597D01FF60F7 /* RegExpObject.h */; };
+               9E879294193FB6800076CA78 /* RegisterPreservationMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6B1CB81861244C00845D97 /* RegisterPreservationMode.h */; };
+               9E879295193FB6800076CA78 /* Reject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F39115ED8E3800F167B2 /* Reject.h */; };
+               9E879296193FB6800076CA78 /* SamplingCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F77008E1402FDD60078EB39 /* SamplingCounter.h */; };
+               9E879297193FB6800076CA78 /* SimpleTypedArrayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D717B6B5AB00A7AE3F /* SimpleTypedArrayController.h */; };
+               9E879298193FB6800076CA78 /* SmallStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 93303FEA0E6A72C000786E6A /* SmallStrings.h */; };
+               9E879299193FB6800076CA78 /* SparseArrayValueMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB7F39215ED8E3800F167B2 /* SparseArrayValueMap.h */; };
+               9E87929A193FB6800076CA78 /* StackAlignment.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3AC751183EA1040032029F /* StackAlignment.h */; };
+               9E87929B193FB6800076CA78 /* StringObject.h in Headers */ = {isa = PBXBuildFile; fileRef = BC18C3C30E16EE3300B34460 /* StringObject.h */; };
+               9E87929C193FB6800076CA78 /* StringPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BC18C3C60E16EE3300B34460 /* StringPrototype.h */; };
+               9E87929D193FB6800076CA78 /* Structure.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDE3AB10E6C82CF001453A7 /* Structure.h */; };
+               9E87929E193FB6800076CA78 /* StructureChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4EE7080EBB7963005934AA /* StructureChain.h */; };
+               9E87929F193FB6800076CA78 /* StructureInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD2C92316D01EE900C7803F /* StructureInlines.h */; };
+               9E8792A0193FB6800076CA78 /* StructureRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = C2FE18A316BAEC4000AF3061 /* StructureRareData.h */; };
+               9E8792A1193FB6800076CA78 /* StructureRareDataInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = C20BA92C16BB1C1500B3AEA2 /* StructureRareDataInlines.h */; };
+               9E8792A2193FB6800076CA78 /* StructureTransitionTable.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9041470EB9250900FE26FA /* StructureTransitionTable.h */; };
+               9E8792A3193FB6800076CA78 /* SymbolTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A396A60CD2933100B5B4FF /* SymbolTable.h */; };
+               9E8792A4193FB6800076CA78 /* TestRunnerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FA2C17A17D7CF84009D015F /* TestRunnerUtils.h */; };
+               9E8792A5193FB6800076CA78 /* ToNativeFromValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F55989717C86C5600A1E543 /* ToNativeFromValue.h */; };
+               9E8792A6193FB6800076CA78 /* TypedArrayAdaptors.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66D817B6B5AB00A7AE3F /* TypedArrayAdaptors.h */; };
+               9E8792A7193FB6800076CA78 /* TypedArrayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66DA17B6B5AB00A7AE3F /* TypedArrayController.h */; };
+               9E8792A8193FB6800076CA78 /* TypedArrayInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4B94DB17B9F07500DD03A4 /* TypedArrayInlines.h */; };
+               9E8792A9193FB6800076CA78 /* TypedArrays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66DB17B6B5AB00A7AE3F /* TypedArrays.h */; };
+               9E8792AA193FB6800076CA78 /* TypedArrayType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2B66DD17B6B5AB00A7AE3F /* TypedArrayType.h */; };
+               9E8792AB193FB6800076CA78 /* Uint16Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */; };
+               9E8792AC193FB6800076CA78 /* Uint32Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3317ADB5F3005AB174 /* Uint32Array.h */; };
+               9E8792AD193FB6800076CA78 /* Uint8Array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */; };
+               9E8792AE193FB6800076CA78 /* Uint8ClampedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */; };
+               9E8792AF193FB6800076CA78 /* VM.h in Headers */ = {isa = PBXBuildFile; fileRef = E18E3A560DF9278C00D90B34 /* VM.h */; };
+               9E8792B0193FB6800076CA78 /* VMEntryScope.h in Headers */ = {isa = PBXBuildFile; fileRef = FE5932A6183C5A2600A1ECCC /* VMEntryScope.h */; };
+               9E8792B1193FB6800076CA78 /* Watchdog.h in Headers */ = {isa = PBXBuildFile; fileRef = FED94F2C171E3E2300BE77A4 /* Watchdog.h */; };
+               9E8792B2193FB6800076CA78 /* WeakGCMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14BFCE6810CDB1FC00364CCE /* WeakGCMap.h */; };
+               9E8792B3193FB6800076CA78 /* WeakRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 1420BE7A10AA6DDB00F455D2 /* WeakRandom.h */; };
+               9E8792B4193FB6800076CA78 /* WriteBarrier.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DCB77912E3D90500911940 /* WriteBarrier.h */; };
+               9E8792B5193FB6800076CA78 /* WriteBarrierInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B6D75218A33793004A9301 /* WriteBarrierInlines.h */; };
+               9E8792B6193FB6800076CA78 /* ArityCheckMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6B1CB71861244C00845D97 /* ArityCheckMode.h */; };
+               9E8792B7193FB6800076CA78 /* ArgList.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF605120E203EF800B9A64D /* ArgList.h */; };
+               9E8792B8193FB6800076CA78 /* JSCallbackFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1440F88F0A508B100005F061 /* JSCallbackFunction.h */; };
+               9E8792B9193FB6800076CA78 /* RegExpConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD202BE0E1706A7002C7E82 /* RegExpConstructor.h */; };
+               9E8792BA193FB6800076CA78 /* RegExpPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD202C00E1706A7002C7E82 /* RegExpPrototype.h */; };
+               9E8792BB193FB6800076CA78 /* SetConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7299DA417D12858005F5FF9 /* SetConstructor.h */; };
+               9E8792BC193FB6800076CA78 /* SetIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A790DD66182F499700588807 /* SetIteratorConstructor.h */; };
+               9E8792BD193FB6800076CA78 /* SetIteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A790DD68182F499700588807 /* SetIteratorPrototype.h */; };
+               9E8792BE193FB6800076CA78 /* SetPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A7299DA017D12848005F5FF9 /* SetPrototype.h */; };
+               9E8792BF193FB6800076CA78 /* StrictEvalActivation.h in Headers */ = {isa = PBXBuildFile; fileRef = A730B6101250068F009D25B1 /* StrictEvalActivation.h */; };
+               9E8792C0193FB6800076CA78 /* StringConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC18C3C10E16EE3300B34460 /* StringConstructor.h */; };
+               9E8792C1193FB6800076CA78 /* Tracing.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D53726E0E1C54880021E549 /* Tracing.h */; };
+               9E8792C2193FB6800076CA78 /* Uint16WithFraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 866739D113BFDE710023D87C /* Uint16WithFraction.h */; };
+               9E8792C3193FB6800076CA78 /* WeakMapConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CA3ADE17DA41AE006538AF /* WeakMapConstructor.h */; };
+               9E8792C4193FB6800076CA78 /* WeakMapData.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CA3AEA17DA5168006538AF /* WeakMapData.h */; };
+               9E8792C5193FB6800076CA78 /* WeakMapPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CA3AE017DA41AE006538AF /* WeakMapPrototype.h */; };
+               9E8792C7193FB6800076CA78 /* JSDataViewPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66BF17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp */; };
+               9E8792C8193FB6800076CA78 /* StringPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C50E16EE3300B34460 /* StringPrototype.cpp */; };
+               9E8792C9193FB6800076CA78 /* WeakMapPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7CA3ADF17DA41AE006538AF /* WeakMapPrototype.cpp */; };
+               9E8792CA193FB6800076CA78 /* WeakMapConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7CA3ADD17DA41AE006538AF /* WeakMapConstructor.cpp */; };
+               9E8792CB193FB6800076CA78 /* StringConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC18C3C00E16EE3300B34460 /* StringConstructor.cpp */; };
+               9E8792CC193FB6800076CA78 /* SetIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A790DD67182F499700588807 /* SetIteratorPrototype.cpp */; };
+               9E8792CD193FB6800076CA78 /* SetPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7299D9F17D12848005F5FF9 /* SetPrototype.cpp */; };
+               9E8792CE193FB6800076CA78 /* RegExpConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BD0E1706A7002C7E82 /* RegExpConstructor.cpp */; };
+               9E8792CF193FB6800076CA78 /* RegExpPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD202BF0E1706A7002C7E82 /* RegExpPrototype.cpp */; };
+               9E8792D0193FB6800076CA78 /* ObjectConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C60E16D4E900A06E92 /* ObjectConstructor.cpp */; };
+               9E8792D1193FB6800076CA78 /* ObjectPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C80E16D4E900A06E92 /* ObjectPrototype.cpp */; };
+               9E8792D2193FB6800076CA78 /* NameConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86EBF2F91560F036008E9222 /* NameConstructor.cpp */; };
+               9E8792D3193FB6800076CA78 /* NamePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86EBF2FD1560F036008E9222 /* NamePrototype.cpp */; };
+               9E8792D4193FB6800076CA78 /* MathObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A86A0255597D01FF60F7 /* MathObject.cpp */; };
+               9E8792D5193FB6800076CA78 /* MapConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A700873717CBE85300C3E643 /* MapConstructor.cpp */; };
+               9E8792D6193FB6800076CA78 /* MapIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A74DEF8D182D991400522C22 /* MapIteratorPrototype.cpp */; };
+               9E8792D7193FB6800076CA78 /* MapPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A700873B17CBE8D300C3E643 /* MapPrototype.cpp */; };
+               9E8792D8193FB6800076CA78 /* ConsolePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A53CE08118BC1A5600BEDF76 /* ConsolePrototype.cpp */; };
+               9E8792D9193FB6800076CA78 /* JSPromiseConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C184E2017BEE240007CB63A /* JSPromiseConstructor.cpp */; };
+               9E8792DA193FB6800076CA78 /* JSPromiseFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C008CD0186F8A9300955C24 /* JSPromiseFunctions.cpp */; };
+               9E8792DB193FB6800076CA78 /* JSPromisePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C184E1C17BEE22E007CB63A /* JSPromisePrototype.cpp */; };
+               9E8792DC193FB6800076CA78 /* JSONObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7F9935E0FD7325100A0B2D0 /* JSONObject.cpp */; };
+               9E8792DD193FB6800076CA78 /* JSGlobalObjectFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC756FC60E2031B200DE7D12 /* JSGlobalObjectFunctions.cpp */; };
+               9E8792DE193FB6800076CA78 /* JSFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A85E0255597D01FF60F7 /* JSFunction.cpp */; };
+               9E8792DF193FB6800076CA78 /* JSBoundFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86FA9E8F142BBB2D001773B7 /* JSBoundFunction.cpp */; };
+               9E8792E0193FB6800076CA78 /* JSArrayIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAEC417F4EA1400F6140C /* JSArrayIterator.cpp */; };
+               9E8792E1193FB6800076CA78 /* JSArrayBufferPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B817B6B5AB00A7AE3F /* JSArrayBufferPrototype.cpp */; };
+               9E8792E2193FB6800076CA78 /* JSArrayBufferConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2B66B617B6B5AB00A7AE3F /* JSArrayBufferConstructor.cpp */; };
+               9E8792E3193FB6800076CA78 /* FunctionPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A85C0255597D01FF60F7 /* FunctionPrototype.cpp */; };
+               9E8792E4193FB6800076CA78 /* FunctionConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C00E16D4E900A06E92 /* FunctionConstructor.cpp */; };
+               9E8792E5193FB6800076CA78 /* ErrorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9060E1839DB000F9297 /* ErrorPrototype.cpp */; };
+               9E8792E6193FB6800076CA78 /* ErrorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9040E1839DB000F9297 /* ErrorConstructor.cpp */; };
+               9E8792E7193FB6800076CA78 /* DatePrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD203470E17135E002C7E82 /* DatePrototype.cpp */; };
+               9E8792E8193FB6800076CA78 /* DateConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCD203450E17135E002C7E82 /* DateConstructor.cpp */; };
+               9E8792E9193FB6800076CA78 /* BooleanPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952340E15EB5600A898AB /* BooleanPrototype.cpp */; };
+               9E8792EA193FB6800076CA78 /* BooleanConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952320E15EB5600A898AB /* BooleanConstructor.cpp */; };
+               9E8792EB193FB6800076CA78 /* ArrayIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BDAEC217F4EA1400F6140C /* ArrayIteratorPrototype.cpp */; };
+               9E8792EC193FB6800076CA78 /* ArgumentsIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A76140C9182982CB00750624 /* ArgumentsIteratorPrototype.cpp */; };
+               9E8792ED193FB6800076CA78 /* Arguments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC257DE50E1F51C50016B6C9 /* Arguments.cpp */; };
+               9E8792EE193FB6800076CA78 /* NativeErrorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC02E9080E1839DB000F9297 /* NativeErrorConstructor.cpp */; };
+               9E8792EF193FB6800076CA78 /* SetConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7299DA317D12858005F5FF9 /* SetConstructor.cpp */; };
+               9E8792F0193FB6800076CA78 /* ArrayConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7952060E15E8A800A898AB /* ArrayConstructor.cpp */; };
+               9E8792F1193FB6800076CA78 /* ArrayPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A84D0255597D01FF60F7 /* ArrayPrototype.cpp */; };
+               9E8792F2193FB6800076CA78 /* NumberConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C20E16D4E900A06E92 /* NumberConstructor.cpp */; };
+               9E8792F3193FB6800076CA78 /* NumberPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2680C40E16D4E900A06E92 /* NumberPrototype.cpp */; };
+               9EA5C7A1190F084200508EBE /* BundlePath.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9E729409190F0306001A91B5 /* BundlePath.mm */; };
+               9EA5C7A2190F088700508EBE /* InitializeLLVMMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9EA5C7A0190F05D200508EBE /* InitializeLLVMMac.cpp */; };
                A1712B3B11C7B212007A5315 /* RegExpCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1712B3A11C7B212007A5315 /* RegExpCache.cpp */; };
                A1712B3F11C7B228007A5315 /* RegExpCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B3E11C7B228007A5315 /* RegExpCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A1712B4111C7B235007A5315 /* RegExpKey.h in Headers */ = {isa = PBXBuildFile; fileRef = A1712B4011C7B235007A5315 /* RegExpKey.h */; settings = {ATTRIBUTES = (Private, ); }; };
                C2FE18A416BAEC4000AF3061 /* StructureRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = C2FE18A316BAEC4000AF3061 /* StructureRareData.h */; settings = {ATTRIBUTES = (Private, ); }; };
                E124A8F70E555775003091F1 /* OpaqueJSString.h in Headers */ = {isa = PBXBuildFile; fileRef = E124A8F50E555775003091F1 /* OpaqueJSString.h */; settings = {ATTRIBUTES = (Private, ); }; };
                E124A8F80E555775003091F1 /* OpaqueJSString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E124A8F60E555775003091F1 /* OpaqueJSString.cpp */; };
-               E178636D0D9BEEC300D74E75 /* InitializeThreading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E178636C0D9BEEC300D74E75 /* InitializeThreading.cpp */; };
                E18E3A590DF9278C00D90B34 /* VM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E18E3A570DF9278C00D90B34 /* VM.cpp */; };
                E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E49DC15512EF277200184A1F /* SourceProviderCache.cpp */; };
                E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC15112EF272200184A1F /* SourceProviderCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
                        remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
                        remoteInfo = "Generate Derived Sources";
                };
-               55F8FC2B18EB937B00783E6E /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = 5540756218DA58AD00EFF7F2;
-                       remoteInfo = CompileRuntimeToLLVMIR;
-               };
                5D69E911152BE5470028D720 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
                        remoteGlobalIDString = 932F5B3E0822A1C700736975;
                        remoteInfo = "JavaScriptCore (Upgraded)";
                };
+               9E8791DA193FB6800076CA78 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 0FCEFAB51805D61600472CE4;
+                       remoteInfo = llvmForJSC;
+               };
+               9E8791DC193FB6800076CA78 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 65788A9D18B409EB00C189FF;
+                       remoteInfo = "Offline Assembler";
+               };
+               9E8791DE193FB6800076CA78 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
+                       remoteInfo = "Generate Derived Sources";
+               };
+               9E8792FB193FB69F0076CA78 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 5540756218DA58AD00EFF7F2;
+                       remoteInfo = "Compile Runtime to LLVM IR";
+               };
+               9E8792FD193FB6A60076CA78 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 9E8791D8193FB6800076CA78;
+                       remoteInfo = "Compile Runtime to Binary";
+               };
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
                0FCEFAA91804C13E00472CE4 /* FTLSaveRestore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLSaveRestore.cpp; path = ftl/FTLSaveRestore.cpp; sourceTree = "<group>"; };
                0FCEFAAA1804C13E00472CE4 /* FTLSaveRestore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLSaveRestore.h; path = ftl/FTLSaveRestore.h; sourceTree = "<group>"; };
                0FCEFAAE1805CA6D00472CE4 /* InitializeLLVM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InitializeLLVM.h; path = llvm/InitializeLLVM.h; sourceTree = "<group>"; };
-               0FCEFAAF1805CA6D00472CE4 /* InitializeLLVMMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InitializeLLVMMac.mm; path = llvm/InitializeLLVMMac.mm; sourceTree = "<group>"; };
                0FCEFAB61805D61600472CE4 /* libllvmForJSC.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libllvmForJSC.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                0FCEFABE1805D86900472CE4 /* LLVMForJSC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = LLVMForJSC.xcconfig; sourceTree = "<group>"; };
                0FCEFAC01805D94100472CE4 /* LLVMOverrides.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LLVMOverrides.cpp; sourceTree = "<group>"; };
                99E45A2118A1B2590026D88F /* EncodedValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EncodedValue.h; sourceTree = "<group>"; };
                99E45A2218A1B2590026D88F /* InputCursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputCursor.h; sourceTree = "<group>"; };
                99E45A2318A1B2590026D88F /* NondeterministicInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NondeterministicInput.h; sourceTree = "<group>"; };
+               9E729409190F0306001A91B5 /* BundlePath.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundlePath.mm; sourceTree = "<group>"; };
+               9E72940A190F0514001A91B5 /* BundlePath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BundlePath.h; sourceTree = "<group>"; };
+               9E8792FA193FB6800076CA78 /* libCompile Runtime to Binary.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libCompile Runtime to Binary.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+               9EA5C7A0190F05D200508EBE /* InitializeLLVMMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InitializeLLVMMac.cpp; path = llvm/InitializeLLVMMac.cpp; sourceTree = "<group>"; };
                A1712B3A11C7B212007A5315 /* RegExpCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegExpCache.cpp; sourceTree = "<group>"; };
                A1712B3E11C7B228007A5315 /* RegExpCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpCache.h; sourceTree = "<group>"; };
                A1712B4011C7B235007A5315 /* RegExpKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExpKey.h; sourceTree = "<group>"; };
                                14BD59BF0A3E8F9000BAF59C /* testapi */,
                                6511230514046A4C002B101D /* testRegExp */,
                                55407AC818DA58AD00EFF7F2 /* libCompileRuntimeToLLVMIR.a */,
+                               9E8792FA193FB6800076CA78 /* libCompile Runtime to Binary.a */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                0FCEFAAD1805CA4400472CE4 /* llvm */ = {
                        isa = PBXGroup;
                        children = (
+                               9EA5C7A0190F05D200508EBE /* InitializeLLVMMac.cpp */,
                                0FCEFABF1805D94100472CE4 /* library */,
                                0FCEFAC41805E75500472CE4 /* InitializeLLVM.cpp */,
                                0FCEFAAE1805CA6D00472CE4 /* InitializeLLVM.h */,
-                               0FCEFAAF1805CA6D00472CE4 /* InitializeLLVMMac.mm */,
                                0FCEFAC51805E75500472CE4 /* InitializeLLVMPOSIX.cpp */,
                                0FCEFAC61805E75500472CE4 /* InitializeLLVMPOSIX.h */,
                                0FCEFAC71805E75500472CE4 /* LLVMAPI.cpp */,
                7EF6E0BB0EB7A1EC0079AFAF /* runtime */ = {
                        isa = PBXGroup;
                        children = (
+                               9E72940A190F0514001A91B5 /* BundlePath.h */,
+                               9E729409190F0306001A91B5 /* BundlePath.mm */,
                                BCF605110E203EF800B9A64D /* ArgList.cpp */,
                                BCF605120E203EF800B9A64D /* ArgList.h */,
                                BC257DE50E1F51C50016B6C9 /* Arguments.cpp */,
                                0F235BDE17178E1C00690C7F /* FTLOSRExitCompilationInfo.h in Headers */,
                                0F235BE017178E1C00690C7F /* FTLOSRExitCompiler.h in Headers */,
                                0FEA0A11170513DB00BB722C /* FTLOutput.h in Headers */,
+                               9E72940B190F0514001A91B5 /* BundlePath.h in Headers */,
                                0F48532A187DFDEC0083B687 /* FTLRecoveryOpcode.h in Headers */,
                                0F6B1CC41862C47800845D97 /* FTLRegisterAtOffset.h in Headers */,
                                0FCEFAAC1804C13E00472CE4 /* FTLSaveRestore.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               9E8791DF193FB6800076CA78 /* Headers */ = {
+                       isa = PBXHeadersBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               9E8791E0193FB6800076CA78 /* Arguments.h in Headers */,
+                               9E8791E1193FB6800076CA78 /* ArgumentsIteratorConstructor.h in Headers */,
+                               9E8791E2193FB6800076CA78 /* ArgumentsIteratorPrototype.h in Headers */,
+                               9E8791E3193FB6800076CA78 /* ArrayConstructor.h in Headers */,
+                               9E8791E4193FB6800076CA78 /* ArrayIteratorConstructor.h in Headers */,
+                               9E8791E5193FB6800076CA78 /* ArrayIteratorPrototype.h in Headers */,
+                               9E8791E6193FB6800076CA78 /* BatchedTransitionOptimizer.h in Headers */,
+                               9E8791E7193FB6800076CA78 /* BigInteger.h in Headers */,
+                               9E8791E8193FB6800076CA78 /* CommonSlowPathsExceptions.h in Headers */,
+                               9E8791E9193FB6800076CA78 /* JSConsole.h in Headers */,
+                               9E8791EA193FB6800076CA78 /* DateConstructor.h in Headers */,
+                               9E8791EB193FB6800076CA78 /* DateConversion.h in Headers */,
+                               9E8791EC193FB6800076CA78 /* DatePrototype.h in Headers */,
+                               9E8791ED193FB6800076CA78 /* ErrorConstructor.h in Headers */,
+                               9E8791EE193FB6800076CA78 /* ConsolePrototype.h in Headers */,
+                               9E8791EF193FB6800076CA78 /* JSActivation.h in Headers */,
+                               9E8791F0193FB6800076CA78 /* JSArgumentsIterator.h in Headers */,
+                               9E8791F1193FB6800076CA78 /* JSArrayIterator.h in Headers */,
+                               9E8791F2193FB6800076CA78 /* (null) in Headers */,
+                               9E8791F3193FB6800076CA78 /* JSGlobalObjectDebuggable.h in Headers */,
+                               9E8791F4193FB6800076CA78 /* JSGlobalObjectFunctions.h in Headers */,
+                               9E8791F5193FB6800076CA78 /* JSMapIterator.h in Headers */,
+                               9E8791F6193FB6800076CA78 /* JSPromiseConstructor.h in Headers */,
+                               9E8791F7193FB6800076CA78 /* JSPromisePrototype.h in Headers */,
+                               9E8791F8193FB6800076CA78 /* JSPromiseReaction.h in Headers */,
+                               9E8791F9193FB6800076CA78 /* JSSetIterator.h in Headers */,
+                               9E8791FA193FB6800076CA78 /* JSStackInlines.h in Headers */,
+                               9E8791FB193FB6800076CA78 /* JSStringBuilder.h in Headers */,
+                               9E8791FC193FB6800076CA78 /* JSStringJoiner.h in Headers */,
+                               9E8791FD193FB6800076CA78 /* JSWeakMap.h in Headers */,
+                               9E8791FE193FB6800076CA78 /* LiteralParser.h in Headers */,
+                               9E8791FF193FB6800076CA78 /* MapConstructor.h in Headers */,
+                               9E879200193FB6800076CA78 /* MapIteratorConstructor.h in Headers */,
+                               9E879201193FB6800076CA78 /* MapIteratorPrototype.h in Headers */,
+                               9E879202193FB6800076CA78 /* MapPrototype.h in Headers */,
+                               9E879203193FB6800076CA78 /* NameConstructor.h in Headers */,
+                               9E879204193FB6800076CA78 /* NameInstance.h in Headers */,
+                               9E879205193FB6800076CA78 /* NamePrototype.h in Headers */,
+                               9E879206193FB6800076CA78 /* NativeErrorConstructor.h in Headers */,
+                               9E879207193FB6800076CA78 /* NativeErrorPrototype.h in Headers */,
+                               9E879208193FB6800076CA78 /* NumberConstructor.h in Headers */,
+                               9E879209193FB6800076CA78 /* StructureIDBlob.h in Headers */,
+                               9E87920A193FB6800076CA78 /* ArrayBuffer.h in Headers */,
+                               9E87920B193FB6800076CA78 /* ArrayBufferNeuteringWatchpoint.h in Headers */,
+                               9E87920C193FB6800076CA78 /* ArrayBufferView.h in Headers */,
+                               9E87920D193FB6800076CA78 /* ArrayConventions.h in Headers */,
+                               9E87920E193FB6800076CA78 /* ArrayPrototype.h in Headers */,
+                               9E87920F193FB6800076CA78 /* StructureIDTable.h in Headers */,
+                               9E879210193FB6800076CA78 /* ArrayStorage.h in Headers */,
+                               9E879211193FB6800076CA78 /* BooleanObject.h in Headers */,
+                               9E879212193FB6800076CA78 /* Butterfly.h in Headers */,
+                               9E879213193FB6800076CA78 /* ButterflyInlines.h in Headers */,
+                               9E879214193FB6800076CA78 /* CallData.h in Headers */,
+                               9E879215193FB6800076CA78 /* ClassInfo.h in Headers */,
+                               9E879216193FB6800076CA78 /* CodeCache.h in Headers */,
+                               9E879217193FB6800076CA78 /* CodeSpecializationKind.h in Headers */,
+                               9E879218193FB6800076CA78 /* CommonIdentifiers.h in Headers */,
+                               9E879219193FB6800076CA78 /* CommonSlowPaths.h in Headers */,
+                               9E87921A193FB6800076CA78 /* CompilationResult.h in Headers */,
+                               9E87921B193FB6800076CA78 /* Completion.h in Headers */,
+                               9E87921C193FB6800076CA78 /* ConcurrentJITLock.h in Headers */,
+                               9E87921D193FB6800076CA78 /* ConsoleTypes.h in Headers */,
+                               9E87921E193FB6800076CA78 /* ConstantMode.h in Headers */,
+                               9E87921F193FB6800076CA78 /* ConstructData.h in Headers */,
+                               9E879220193FB6800076CA78 /* DataView.h in Headers */,
+                               9E879221193FB6800076CA78 /* DateInstance.h in Headers */,
+                               9E879222193FB6800076CA78 /* DateInstanceCache.h in Headers */,
+                               9E879223193FB6800076CA78 /* Debugger.h in Headers */,
+                               9E879224193FB6800076CA78 /* DumpContext.h in Headers */,
+                               9E879225193FB6800076CA78 /* Error.h in Headers */,
+                               9E879226193FB6800076CA78 /* ErrorHandlingScope.h in Headers */,
+                               9E879227193FB6800076CA78 /* ErrorInstance.h in Headers */,
+                               9E879228193FB6800076CA78 /* ErrorPrototype.h in Headers */,
+                               9E879229193FB6800076CA78 /* ExceptionHelpers.h in Headers */,
+                               9E87922A193FB6800076CA78 /* Executable.h in Headers */,
+                               9E87922B193FB6800076CA78 /* Float32Array.h in Headers */,
+                               9E87922C193FB6800076CA78 /* Float64Array.h in Headers */,
+                               9E87922D193FB6800076CA78 /* ConsoleClient.h in Headers */,
+                               9E87922E193FB6800076CA78 /* FunctionConstructor.h in Headers */,
+                               9E87922F193FB6800076CA78 /* FunctionExecutableDump.h in Headers */,
+                               9E879230193FB6800076CA78 /* FunctionPrototype.h in Headers */,
+                               9E879231193FB6800076CA78 /* GenericTypedArrayView.h in Headers */,
+                               9E879232193FB6800076CA78 /* GenericTypedArrayViewInlines.h in Headers */,
+                               9E879233193FB6800076CA78 /* Identifier.h in Headers */,
+                               9E879234193FB6800076CA78 /* IndexingHeader.h in Headers */,
+                               9E879235193FB6800076CA78 /* IndexingHeaderInlines.h in Headers */,
+                               9E879236193FB6800076CA78 /* IndexingType.h in Headers */,
+                               9E879237193FB6800076CA78 /* InitializeThreading.h in Headers */,
+                               9E879238193FB6800076CA78 /* Int16Array.h in Headers */,
+                               9E879239193FB6800076CA78 /* Int32Array.h in Headers */,
+                               9E87923A193FB6800076CA78 /* Int8Array.h in Headers */,
+                               9E87923B193FB6800076CA78 /* IntendedStructureChain.h in Headers */,
+                               9E87923C193FB6800076CA78 /* InternalFunction.h in Headers */,
+                               9E87923D193FB6800076CA78 /* Intrinsic.h in Headers */,
+                               9E87923E193FB6800076CA78 /* JSAPIValueWrapper.h in Headers */,
+                               9E87923F193FB6800076CA78 /* JSArray.h in Headers */,
+                               9E879240193FB6800076CA78 /* JSArrayBuffer.h in Headers */,
+                               9E879241193FB6800076CA78 /* JSArrayBufferConstructor.h in Headers */,
+                               9E879242193FB6800076CA78 /* JSArrayBufferPrototype.h in Headers */,
+                               9E879243193FB6800076CA78 /* JSArrayBufferView.h in Headers */,
+                               9E879244193FB6800076CA78 /* JSArrayBufferViewInlines.h in Headers */,
+                               9E879245193FB6800076CA78 /* JSCell.h in Headers */,
+                               9E879246193FB6800076CA78 /* JSCellInlines.h in Headers */,
+                               9E879247193FB6800076CA78 /* JSCInlines.h in Headers */,
+                               9E879248193FB6800076CA78 /* JSCJSValue.h in Headers */,
+                               9E879249193FB6800076CA78 /* JSCJSValueInlines.h in Headers */,
+                               9E87924A193FB6800076CA78 /* JSDataView.h in Headers */,
+                               9E87924B193FB6800076CA78 /* JSDataViewPrototype.h in Headers */,
+                               9E87924C193FB6800076CA78 /* JSDateMath.h in Headers */,
+                               9E87924D193FB6800076CA78 /* JSDestructibleObject.h in Headers */,
+                               9E87924E193FB6800076CA78 /* JSExportMacros.h in Headers */,
+                               9E87924F193FB6800076CA78 /* JSFloat32Array.h in Headers */,
+                               9E879250193FB6800076CA78 /* JSFloat64Array.h in Headers */,
+                               9E879251193FB6800076CA78 /* JSFunction.h in Headers */,
+                               9E879252193FB6800076CA78 /* JSFunctionInlines.h in Headers */,
+                               9E879253193FB6800076CA78 /* JSGenericTypedArrayView.h in Headers */,
+                               9E879254193FB6800076CA78 /* JSGenericTypedArrayViewConstructor.h in Headers */,
+                               9E879255193FB6800076CA78 /* JSGenericTypedArrayViewConstructorInlines.h in Headers */,
+                               9E879256193FB6800076CA78 /* JSGenericTypedArrayViewInlines.h in Headers */,
+                               9E879257193FB6800076CA78 /* JSGenericTypedArrayViewPrototype.h in Headers */,
+                               9E879258193FB6800076CA78 /* JSGenericTypedArrayViewPrototypeInlines.h in Headers */,
+                               9E879259193FB6800076CA78 /* JSGlobalObject.h in Headers */,
+                               9E87925A193FB6800076CA78 /* JSInt16Array.h in Headers */,
+                               9E87925B193FB6800076CA78 /* JSInt32Array.h in Headers */,
+                               9E87925C193FB6800076CA78 /* JSInt8Array.h in Headers */,
+                               9E87925D193FB6800076CA78 /* JSLock.h in Headers */,
+                               9E87925E193FB6800076CA78 /* JSMap.h in Headers */,
+                               9E87925F193FB6800076CA78 /* JSNameScope.h in Headers */,
+                               9E879260193FB6800076CA78 /* JSObject.h in Headers */,
+                               9E879261193FB6800076CA78 /* JSONObject.h in Headers */,
+                               9E879262193FB6800076CA78 /* JSPromise.h in Headers */,
+                               9E879263193FB6800076CA78 /* JSPromiseDeferred.h in Headers */,
+                               9E879264193FB6800076CA78 /* JSPromiseFunctions.h in Headers */,
+                               9E879265193FB6800076CA78 /* JSProxy.h in Headers */,
+                               9E879266193FB6800076CA78 /* JSScope.h in Headers */,
+                               9E879267193FB6800076CA78 /* JSSegmentedVariableObject.h in Headers */,
+                               9E879268193FB6800076CA78 /* JSSet.h in Headers */,
+                               9E879269193FB6800076CA78 /* JSString.h in Headers */,
+                               9E87926A193FB6800076CA78 /* JSSymbolTableObject.h in Headers */,
+                               9E87926B193FB6800076CA78 /* JSType.h in Headers */,
+                               9E87926C193FB6800076CA78 /* JSTypedArrayConstructors.h in Headers */,
+                               9E87926D193FB6800076CA78 /* JSTypedArrayPrototypes.h in Headers */,
+                               9E87926E193FB6800076CA78 /* JSTypedArrays.h in Headers */,
+                               9E87926F193FB6800076CA78 /* JSTypeInfo.h in Headers */,
+                               9E879270193FB6800076CA78 /* JSUint16Array.h in Headers */,
+                               9E879271193FB6800076CA78 /* JSUint32Array.h in Headers */,
+                               9E879272193FB6800076CA78 /* JSUint8Array.h in Headers */,
+                               9E879273193FB6800076CA78 /* JSUint8ClampedArray.h in Headers */,
+                               9E879274193FB6800076CA78 /* JSVariableObject.h in Headers */,
+                               9E879275193FB6800076CA78 /* JSWithScope.h in Headers */,
+                               9E879276193FB6800076CA78 /* JSWrapperObject.h in Headers */,
+                               9E879277193FB6800076CA78 /* Lookup.h in Headers */,
+                               9E879278193FB6800076CA78 /* MapData.h in Headers */,
+                               9E879279193FB6800076CA78 /* MatchResult.h in Headers */,
+                               9E87927A193FB6800076CA78 /* MathObject.h in Headers */,
+                               9E87927B193FB6800076CA78 /* MemoryStatistics.h in Headers */,
+                               9E87927C193FB6800076CA78 /* Microtask.h in Headers */,
+                               9E87927D193FB6800076CA78 /* NumberObject.h in Headers */,
+                               9E87927E193FB6800076CA78 /* NumberPrototype.h in Headers */,
+                               9E87927F193FB6800076CA78 /* NumericStrings.h in Headers */,
+                               9E879280193FB6800076CA78 /* ObjectConstructor.h in Headers */,
+                               9E879281193FB6800076CA78 /* ObjectPrototype.h in Headers */,
+                               9E879282193FB6800076CA78 /* Operations.h in Headers */,
+                               9E879283193FB6800076CA78 /* Options.h in Headers */,
+                               9E879284193FB6800076CA78 /* PrivateName.h in Headers */,
+                               9E879285193FB6800076CA78 /* PropertyDescriptor.h in Headers */,
+                               9E879286193FB6800076CA78 /* PropertyMapHashTable.h in Headers */,
+                               9E879287193FB6800076CA78 /* PropertyName.h in Headers */,
+                               9E879288193FB6800076CA78 /* PropertyNameArray.h in Headers */,
+                               9E879289193FB6800076CA78 /* PropertyOffset.h in Headers */,
+                               9E87928A193FB6800076CA78 /* PropertySlot.h in Headers */,
+                               9E87928B193FB6800076CA78 /* PropertyStorage.h in Headers */,
+                               9E87928C193FB6800076CA78 /* Protect.h in Headers */,
+                               9E87928D193FB6800076CA78 /* PrototypeMap.h in Headers */,
+                               9E87928E193FB6800076CA78 /* PutDirectIndexMode.h in Headers */,
+                               9E87928F193FB6800076CA78 /* PutPropertySlot.h in Headers */,
+                               9E879290193FB6800076CA78 /* RegExp.h in Headers */,
+                               9E879291193FB6800076CA78 /* RegExpCache.h in Headers */,
+                               9E879292193FB6800076CA78 /* RegExpKey.h in Headers */,
+                               9E879293193FB6800076CA78 /* RegExpObject.h in Headers */,
+                               9E879294193FB6800076CA78 /* RegisterPreservationMode.h in Headers */,
+                               9E879295193FB6800076CA78 /* Reject.h in Headers */,
+                               9E879296193FB6800076CA78 /* SamplingCounter.h in Headers */,
+                               9E879297193FB6800076CA78 /* SimpleTypedArrayController.h in Headers */,
+                               9E879298193FB6800076CA78 /* SmallStrings.h in Headers */,
+                               9E879299193FB6800076CA78 /* SparseArrayValueMap.h in Headers */,
+                               9E87929A193FB6800076CA78 /* StackAlignment.h in Headers */,
+                               9E87929B193FB6800076CA78 /* StringObject.h in Headers */,
+                               9E87929C193FB6800076CA78 /* StringPrototype.h in Headers */,
+                               9E87929D193FB6800076CA78 /* Structure.h in Headers */,
+                               9E87929E193FB6800076CA78 /* StructureChain.h in Headers */,
+                               9E87929F193FB6800076CA78 /* StructureInlines.h in Headers */,
+                               9E8792A0193FB6800076CA78 /* StructureRareData.h in Headers */,
+                               9E8792A1193FB6800076CA78 /* StructureRareDataInlines.h in Headers */,
+                               9E8792A2193FB6800076CA78 /* StructureTransitionTable.h in Headers */,
+                               9E8792A3193FB6800076CA78 /* SymbolTable.h in Headers */,
+                               9E8792A4193FB6800076CA78 /* TestRunnerUtils.h in Headers */,
+                               9E8792A5193FB6800076CA78 /* ToNativeFromValue.h in Headers */,
+                               9E8792A6193FB6800076CA78 /* TypedArrayAdaptors.h in Headers */,
+                               9E8792A7193FB6800076CA78 /* TypedArrayController.h in Headers */,
+                               9E8792A8193FB6800076CA78 /* TypedArrayInlines.h in Headers */,
+                               9E8792A9193FB6800076CA78 /* TypedArrays.h in Headers */,
+                               9E8792AA193FB6800076CA78 /* TypedArrayType.h in Headers */,
+                               9E8792AB193FB6800076CA78 /* Uint16Array.h in Headers */,
+                               9E8792AC193FB6800076CA78 /* Uint32Array.h in Headers */,
+                               9E8792AD193FB6800076CA78 /* Uint8Array.h in Headers */,
+                               9E8792AE193FB6800076CA78 /* Uint8ClampedArray.h in Headers */,
+                               9E8792AF193FB6800076CA78 /* VM.h in Headers */,
+                               9E8792B0193FB6800076CA78 /* VMEntryScope.h in Headers */,
+                               9E8792B1193FB6800076CA78 /* Watchdog.h in Headers */,
+                               9E8792B2193FB6800076CA78 /* WeakGCMap.h in Headers */,
+                               9E8792B3193FB6800076CA78 /* WeakRandom.h in Headers */,
+                               9E8792B4193FB6800076CA78 /* WriteBarrier.h in Headers */,
+                               9E8792B5193FB6800076CA78 /* WriteBarrierInlines.h in Headers */,
+                               9E8792B6193FB6800076CA78 /* ArityCheckMode.h in Headers */,
+                               9E8792B7193FB6800076CA78 /* ArgList.h in Headers */,
+                               9E8792B8193FB6800076CA78 /* JSCallbackFunction.h in Headers */,
+                               9E8792B9193FB6800076CA78 /* RegExpConstructor.h in Headers */,
+                               9E8792BA193FB6800076CA78 /* RegExpPrototype.h in Headers */,
+                               9E8792BB193FB6800076CA78 /* SetConstructor.h in Headers */,
+                               9E8792BC193FB6800076CA78 /* SetIteratorConstructor.h in Headers */,
+                               9E8792BD193FB6800076CA78 /* SetIteratorPrototype.h in Headers */,
+                               9E8792BE193FB6800076CA78 /* SetPrototype.h in Headers */,
+                               9E8792BF193FB6800076CA78 /* StrictEvalActivation.h in Headers */,
+                               9E8792C0193FB6800076CA78 /* StringConstructor.h in Headers */,
+                               9E8792C1193FB6800076CA78 /* Tracing.h in Headers */,
+                               9E8792C2193FB6800076CA78 /* Uint16WithFraction.h in Headers */,
+                               9E8792C3193FB6800076CA78 /* WeakMapConstructor.h in Headers */,
+                               9E8792C4193FB6800076CA78 /* WeakMapData.h in Headers */,
+                               9E8792C5193FB6800076CA78 /* WeakMapPrototype.h in Headers */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
 /* End PBXHeadersBuildPhase section */
 
 /* Begin PBXNativeTarget section */
                                5D29D8BE0E9860B400C3D2D0 /* Check For Weak VTables and Externals */,
                                3713F014142905240036387F /* Check For Inappropriate Objective-C Class Names */,
                                A55DEAA416703DF7003DB841 /* Check For Inappropriate Macros in External Headers */,
-                               55850CA118F4842000F81829 /* Build Symbol Index Table */,
                        );
                        buildRules = (
                        );
                        dependencies = (
-                               55F8FC2C18EB937B00783E6E /* PBXTargetDependency */,
+                               9E8792FE193FB6A60076CA78 /* PBXTargetDependency */,
                                0FCEFABD1805D66300472CE4 /* PBXTargetDependency */,
                                65788AAD18B40A7B00C189FF /* PBXTargetDependency */,
                                65FB3F7E09D11EF300F49DEB /* PBXTargetDependency */,
                        productReference = 932F5BE10822A1C700736975 /* jsc */;
                        productType = "com.apple.product-type.tool";
                };
+               9E8791D8193FB6800076CA78 /* Compile Runtime to Binary */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 9E8792F5193FB6800076CA78 /* Build configuration list for PBXNativeTarget "Compile Runtime to Binary" */;
+                       buildPhases = (
+                               9E8791DF193FB6800076CA78 /* Headers */,
+                               9E8792C6193FB6800076CA78 /* Sources */,
+                               9E8792F4193FB6800076CA78 /* Build Symbol Index Table */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               9E8792FC193FB69F0076CA78 /* PBXTargetDependency */,
+                               9E8791D9193FB6800076CA78 /* PBXTargetDependency */,
+                               9E8791DB193FB6800076CA78 /* PBXTargetDependency */,
+                               9E8791DD193FB6800076CA78 /* PBXTargetDependency */,
+                       );
+                       name = "Compile Runtime to Binary";
+                       productName = JavaScriptCore;
+                       productReference = 9E8792FA193FB6800076CA78 /* libCompile Runtime to Binary.a */;
+                       productType = "com.apple.product-type.library.static";
+               };
 /* End PBXNativeTarget section */
 
 /* Begin PBXProject section */
                        targets = (
                                932F5BE30822A1C700736975 /* All */,
                                5540756218DA58AD00EFF7F2 /* Compile Runtime to LLVM IR */,
+                               9E8791D8193FB6800076CA78 /* Compile Runtime to Binary */,
                                932F5B3E0822A1C700736975 /* JavaScriptCore */,
                                0FCEFAB51805D61600472CE4 /* llvmForJSC */,
                                0F4680A914BA7FD900BFE272 /* LLInt Offsets */,
                        shellPath = /bin/sh;
                        shellScript = "exec ${SRCROOT}/postprocess-headers.sh";
                };
-               55850CA118F4842000F81829 /* Build Symbol Index Table */ = {
-                       isa = PBXShellScriptBuildPhase;
-                       buildActionMask = 2147483647;
-                       files = (
-                       );
-                       inputPaths = (
-                       );
-                       name = "Build Symbol Index Table";
-                       outputPaths = (
-                               "$(BUILT_PRODUCTS_DIR)/$(JAVASCRIPTCORE_RESOURCES_DIR)/Runtime.symtbl",
-                       );
-                       runOnlyForDeploymentPostprocessing = 0;
-                       shellPath = /bin/sh;
-                       shellScript = "${SRCROOT}/build-symbol-table-index.sh";
-               };
                559CD06A18F487A800F9ADC0 /* Copy LLVM IR */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellPath = /bin/sh;
                        shellScript = "set -e\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\"\ncd \"${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\"\n\n/bin/ln -sfh \"${SRCROOT}\" JavaScriptCore\nexport JavaScriptCore=\"JavaScriptCore\"\nexport BUILT_PRODUCTS_DIR=\"../..\"\n\nmake --no-builtin-rules -f \"JavaScriptCore/DerivedSources.make\" -j `/usr/sbin/sysctl -n hw.ncpu`\n";
                };
+               9E8792F4193FB6800076CA78 /* Build Symbol Index Table */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Build Symbol Index Table";
+                       outputPaths = (
+                               "$(BUILT_PRODUCTS_DIR)/$(JAVASCRIPTCORE_RESOURCES_DIR)/Runtime.symtbl",
+                               "$(SHARED_DERIVED_FILE_DIR)/JavaScriptCore/InlineRuntimeSymbolTable.h",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "${SRCROOT}/build-symbol-table-index.sh";
+               };
                A55DEAA416703DF7003DB841 /* Check For Inappropriate Macros in External Headers */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               552EA70C1908704800A66F2F /* JSDataViewPrototype.cpp in Sources */,
+                               55A04E211908653D0024E40C /* StringPrototype.cpp in Sources */,
+                               556A35EE190844C000B56747 /* WeakMapPrototype.cpp in Sources */,
+                               556A35ED190844B500B56747 /* WeakMapConstructor.cpp in Sources */,
+                               556A35EC190844AA00B56747 /* StringConstructor.cpp in Sources */,
+                               556A35EA190844A000B56747 /* SetIteratorPrototype.cpp in Sources */,
+                               556A35EB190844A000B56747 /* SetPrototype.cpp in Sources */,
+                               556A35E81908448000B56747 /* RegExpConstructor.cpp in Sources */,
+                               556A35E91908448000B56747 /* RegExpPrototype.cpp in Sources */,
+                               556A35E61908444900B56747 /* ObjectConstructor.cpp in Sources */,
+                               556A35E71908444900B56747 /* ObjectPrototype.cpp in Sources */,
+                               556A35E41908443700B56747 /* NameConstructor.cpp in Sources */,
+                               556A35E51908443700B56747 /* NamePrototype.cpp in Sources */,
+                               556A35E31908442A00B56747 /* MathObject.cpp in Sources */,
+                               556A35E01908441D00B56747 /* MapConstructor.cpp in Sources */,
+                               556A35E11908441D00B56747 /* MapIteratorPrototype.cpp in Sources */,
+                               556A35E21908441D00B56747 /* MapPrototype.cpp in Sources */,
+                               556A35DF190843F300B56747 /* ConsolePrototype.cpp in Sources */,
+                               556A35DC190843E700B56747 /* JSPromiseConstructor.cpp in Sources */,
+                               556A35DD190843E700B56747 /* JSPromiseFunctions.cpp in Sources */,
+                               556A35DE190843E700B56747 /* JSPromisePrototype.cpp in Sources */,
+                               556A35DB190843CF00B56747 /* JSONObject.cpp in Sources */,
+                               556A35DA190843C200B56747 /* JSGlobalObjectFunctions.cpp in Sources */,
+                               556A35D9190843B100B56747 /* JSFunction.cpp in Sources */,
+                               556A35D81908439D00B56747 /* JSBoundFunction.cpp in Sources */,
+                               556A35D71908438A00B56747 /* JSArrayIterator.cpp in Sources */,
+                               556A35D61908437500B56747 /* JSArrayBufferPrototype.cpp in Sources */,
+                               556A35D51908436800B56747 /* JSArrayBufferConstructor.cpp in Sources */,
+                               556A35D41908434D00B56747 /* FunctionPrototype.cpp in Sources */,
+                               556A35D31908434300B56747 /* FunctionConstructor.cpp in Sources */,
+                               556A35D21908433300B56747 /* ErrorPrototype.cpp in Sources */,
+                               556A35D11908432900B56747 /* ErrorConstructor.cpp in Sources */,
+                               556A35D01908432000B56747 /* DatePrototype.cpp in Sources */,
+                               556A35CF1908431600B56747 /* DateConstructor.cpp in Sources */,
+                               556A35CE1908430B00B56747 /* BooleanPrototype.cpp in Sources */,
+                               556A35CD190842FD00B56747 /* BooleanConstructor.cpp in Sources */,
+                               556A35CC190842F300B56747 /* ArrayIteratorPrototype.cpp in Sources */,
+                               556A35CB190842E800B56747 /* ArgumentsIteratorPrototype.cpp in Sources */,
+                               556A35CA190842DD00B56747 /* Arguments.cpp in Sources */,
+                               556A35C9190842D500B56747 /* NativeErrorConstructor.cpp in Sources */,
+                               556A35C8190842BC00B56747 /* SetConstructor.cpp in Sources */,
                                554078AB18DA58AD00EFF7F2 /* ArrayConstructor.cpp in Sources */,
                                554078AF18DA58AD00EFF7F2 /* ArrayPrototype.cpp in Sources */,
                                55407A3818DA58AD00EFF7F2 /* NumberConstructor.cpp in Sources */,
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               9EA5C7A2190F088700508EBE /* InitializeLLVMMac.cpp in Sources */,
+                               9EA5C7A1190F084200508EBE /* BundlePath.mm in Sources */,
+                               9E729408190F021E001A91B5 /* InitializeLLVMPOSIX.cpp in Sources */,
+                               9E729407190F01A5001A91B5 /* InitializeThreading.cpp in Sources */,
                                0FFA549716B8835000B3A982 /* A64DOpcode.cpp in Sources */,
                                0F55F0F414D1063900AC7649 /* AbstractPC.cpp in Sources */,
                                147F39BD107EC37600427A48 /* ArgList.cpp in Sources */,
                                C25F8BCD157544A900245B71 /* IncrementalSweeper.cpp in Sources */,
                                0F13E04E16164A1F00DC8DE7 /* IndexingType.cpp in Sources */,
                                0FCEFACA1805E75500472CE4 /* InitializeLLVM.cpp in Sources */,
-                               0FCEFAB11805CA6D00472CE4 /* InitializeLLVMMac.mm in Sources */,
-                               0FCEFACB1805E75500472CE4 /* InitializeLLVMPOSIX.cpp in Sources */,
-                               E178636D0D9BEEC300D74E75 /* InitializeThreading.cpp in Sources */,
                                A513E5B7185B8BD3007E95AD /* InjectedScript.cpp in Sources */,
                                A514B2C2185A684400F3C7CB /* InjectedScriptBase.cpp in Sources */,
                                A58E35911860DECF001F24FE /* InjectedScriptHost.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               9E8792C6193FB6800076CA78 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               9E8792C7193FB6800076CA78 /* JSDataViewPrototype.cpp in Sources */,
+                               9E8792C8193FB6800076CA78 /* StringPrototype.cpp in Sources */,
+                               9E8792C9193FB6800076CA78 /* WeakMapPrototype.cpp in Sources */,
+                               9E8792CA193FB6800076CA78 /* WeakMapConstructor.cpp in Sources */,
+                               9E8792CB193FB6800076CA78 /* StringConstructor.cpp in Sources */,
+                               9E8792CC193FB6800076CA78 /* SetIteratorPrototype.cpp in Sources */,
+                               9E8792CD193FB6800076CA78 /* SetPrototype.cpp in Sources */,
+                               9E8792CE193FB6800076CA78 /* RegExpConstructor.cpp in Sources */,
+                               9E8792CF193FB6800076CA78 /* RegExpPrototype.cpp in Sources */,
+                               9E8792D0193FB6800076CA78 /* ObjectConstructor.cpp in Sources */,
+                               9E8792D1193FB6800076CA78 /* ObjectPrototype.cpp in Sources */,
+                               9E8792D2193FB6800076CA78 /* NameConstructor.cpp in Sources */,
+                               9E8792D3193FB6800076CA78 /* NamePrototype.cpp in Sources */,
+                               9E8792D4193FB6800076CA78 /* MathObject.cpp in Sources */,
+                               9E8792D5193FB6800076CA78 /* MapConstructor.cpp in Sources */,
+                               9E8792D6193FB6800076CA78 /* MapIteratorPrototype.cpp in Sources */,
+                               9E8792D7193FB6800076CA78 /* MapPrototype.cpp in Sources */,
+                               9E8792D8193FB6800076CA78 /* ConsolePrototype.cpp in Sources */,
+                               9E8792D9193FB6800076CA78 /* JSPromiseConstructor.cpp in Sources */,
+                               9E8792DA193FB6800076CA78 /* JSPromiseFunctions.cpp in Sources */,
+                               9E8792DB193FB6800076CA78 /* JSPromisePrototype.cpp in Sources */,
+                               9E8792DC193FB6800076CA78 /* JSONObject.cpp in Sources */,
+                               9E8792DD193FB6800076CA78 /* JSGlobalObjectFunctions.cpp in Sources */,
+                               9E8792DE193FB6800076CA78 /* JSFunction.cpp in Sources */,
+                               9E8792DF193FB6800076CA78 /* JSBoundFunction.cpp in Sources */,
+                               9E8792E0193FB6800076CA78 /* JSArrayIterator.cpp in Sources */,
+                               9E8792E1193FB6800076CA78 /* JSArrayBufferPrototype.cpp in Sources */,
+                               9E8792E2193FB6800076CA78 /* JSArrayBufferConstructor.cpp in Sources */,
+                               9E8792E3193FB6800076CA78 /* FunctionPrototype.cpp in Sources */,
+                               9E8792E4193FB6800076CA78 /* FunctionConstructor.cpp in Sources */,
+                               9E8792E5193FB6800076CA78 /* ErrorPrototype.cpp in Sources */,
+                               9E8792E6193FB6800076CA78 /* ErrorConstructor.cpp in Sources */,
+                               9E8792E7193FB6800076CA78 /* DatePrototype.cpp in Sources */,
+                               9E8792E8193FB6800076CA78 /* DateConstructor.cpp in Sources */,
+                               9E8792E9193FB6800076CA78 /* BooleanPrototype.cpp in Sources */,
+                               9E8792EA193FB6800076CA78 /* BooleanConstructor.cpp in Sources */,
+                               9E8792EB193FB6800076CA78 /* ArrayIteratorPrototype.cpp in Sources */,
+                               9E8792EC193FB6800076CA78 /* ArgumentsIteratorPrototype.cpp in Sources */,
+                               9E8792ED193FB6800076CA78 /* Arguments.cpp in Sources */,
+                               9E8792EE193FB6800076CA78 /* NativeErrorConstructor.cpp in Sources */,
+                               9E8792EF193FB6800076CA78 /* SetConstructor.cpp in Sources */,
+                               9E8792F0193FB6800076CA78 /* ArrayConstructor.cpp in Sources */,
+                               9E8792F1193FB6800076CA78 /* ArrayPrototype.cpp in Sources */,
+                               9E8792F2193FB6800076CA78 /* NumberConstructor.cpp in Sources */,
+                               9E8792F3193FB6800076CA78 /* NumberPrototype.cpp in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
                        target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
                        targetProxy = 5540756818DA58AD00EFF7F2 /* PBXContainerItemProxy */;
                };
-               55F8FC2C18EB937B00783E6E /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = 5540756218DA58AD00EFF7F2 /* Compile Runtime to LLVM IR */;
-                       targetProxy = 55F8FC2B18EB937B00783E6E /* PBXContainerItemProxy */;
-               };
                5D69E912152BE5470028D720 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 932F5BDA0822A1C700736975 /* jsc */;
                        target = 932F5B3E0822A1C700736975 /* JavaScriptCore */;
                        targetProxy = 932F5BE60822A1C700736975 /* PBXContainerItemProxy */;
                };
+               9E8791D9193FB6800076CA78 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 0FCEFAB51805D61600472CE4 /* llvmForJSC */;
+                       targetProxy = 9E8791DA193FB6800076CA78 /* PBXContainerItemProxy */;
+               };
+               9E8791DB193FB6800076CA78 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 65788A9D18B409EB00C189FF /* Offline Assembler */;
+                       targetProxy = 9E8791DC193FB6800076CA78 /* PBXContainerItemProxy */;
+               };
+               9E8791DD193FB6800076CA78 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
+                       targetProxy = 9E8791DE193FB6800076CA78 /* PBXContainerItemProxy */;
+               };
+               9E8792FC193FB69F0076CA78 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 5540756218DA58AD00EFF7F2 /* Compile Runtime to LLVM IR */;
+                       targetProxy = 9E8792FB193FB69F0076CA78 /* PBXContainerItemProxy */;
+               };
+               9E8792FE193FB6A60076CA78 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 9E8791D8193FB6800076CA78 /* Compile Runtime to Binary */;
+                       targetProxy = 9E8792FD193FB6A60076CA78 /* PBXContainerItemProxy */;
+               };
 /* End PBXTargetDependency section */
 
 /* Begin XCBuildConfiguration section */
                        };
                        name = Production;
                };
+               9E8792F6193FB6800076CA78 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 5540758418F4A37500602A5D /* CompileRuntimeToLLVMIR.xcconfig */;
+                       buildSettings = {
+                               OTHER_CFLAGS = "";
+                               OTHER_CPLUSPLUSFLAGS = "";
+                               PRODUCT_NAME = "Compile Runtime to Binary";
+                       };
+                       name = Debug;
+               };
+               9E8792F7193FB6800076CA78 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 5540758418F4A37500602A5D /* CompileRuntimeToLLVMIR.xcconfig */;
+                       buildSettings = {
+                               OTHER_CFLAGS = "";
+                               OTHER_CPLUSPLUSFLAGS = "";
+                               PRODUCT_NAME = "Compile Runtime to Binary";
+                       };
+                       name = Release;
+               };
+               9E8792F8193FB6800076CA78 /* Profiling */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 5540758418F4A37500602A5D /* CompileRuntimeToLLVMIR.xcconfig */;
+                       buildSettings = {
+                               OTHER_CFLAGS = "";
+                               OTHER_CPLUSPLUSFLAGS = "";
+                               PRODUCT_NAME = "Compile Runtime to Binary";
+                       };
+                       name = Profiling;
+               };
+               9E8792F9193FB6800076CA78 /* Production */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 5540758418F4A37500602A5D /* CompileRuntimeToLLVMIR.xcconfig */;
+                       buildSettings = {
+                               OTHER_CFLAGS = "";
+                               OTHER_CPLUSPLUSFLAGS = "";
+                               PRODUCT_NAME = "Compile Runtime to Binary";
+                       };
+                       name = Production;
+               };
                A761483D0E6402F700E357FA /* Profiling */ = {
                        isa = XCBuildConfiguration;
                        baseConfigurationReference = 1C9051440BA9E8A70081E9D0 /* DebugRelease.xcconfig */;
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Production;
                };
+               9E8792F5193FB6800076CA78 /* Build configuration list for PBXNativeTarget "Compile Runtime to Binary" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               9E8792F6193FB6800076CA78 /* Debug */,
+                               9E8792F7193FB6800076CA78 /* Release */,
+                               9E8792F8193FB6800076CA78 /* Profiling */,
+                               9E8792F9193FB6800076CA78 /* Production */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Production;
+               };
 /* End XCConfigurationList section */
        };
        rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
index fe8469f..36b6268 100755 (executable)
@@ -4,6 +4,7 @@ import glob
 import os
 import subprocess
 import sys
+from sets import Set
 from operator import itemgetter
 
 
@@ -22,6 +23,7 @@ if not os.path.isdir(binary_file_directory):
 
 framework_directory = os.path.join(os.getenv("BUILT_PRODUCTS_DIR"), os.getenv("JAVASCRIPTCORE_RESOURCES_DIR"), "Runtime", current_arch)
 
+
 symbol_table_location = os.path.join(framework_directory, "Runtime.symtbl")
 
 symbol_table = {}
@@ -33,9 +35,20 @@ symbol_table_modification_time = 0
 if os.path.isfile(symbol_table_location):
     symbol_table_modification_time = os.path.getmtime(symbol_table_location)
 
-file_suffix = "bc.gz"
+file_suffix = "bc"
 file_suffix_length = len(file_suffix)
 
+tested_symbols_location = "./tested-symbols.symlst"
+include_symbol_table_location = os.path.join(os.getenv("SHARED_DERIVED_FILE_DIR"), "JavaScriptCore/InlineRuntimeSymbolTable.h")
+
+tested_symbols = Set([])
+
+if os.path.isfile(tested_symbols_location):
+    with open(tested_symbols_location, 'r') as file:
+        print("Loading tested symbols")
+        for line in file:
+            tested_symbols.add(line[:-1])
+
 for bitcode_file in glob.iglob(os.path.join(framework_directory, "*." + file_suffix)):
     bitcode_basename = os.path.basename(bitcode_file)
     binary_file = os.path.join(binary_file_directory, bitcode_basename[:-file_suffix_length] + "o")
@@ -48,8 +61,8 @@ for bitcode_file in glob.iglob(os.path.join(framework_directory, "*." + file_suf
     lines = subprocess.check_output(["nm", "-U", "-j", binary_file]).splitlines()
 
     for symbol in lines:
-        if symbol[:2] == "__" and symbol[-3:] != ".eh":
-            symbol_table[symbol] = bitcode_basename[1:]
+        if symbol[:2] == "__" and symbol[-3:] != ".eh" and symbol in tested_symbols:
+            symbol_table[symbol[1:]] = bitcode_basename
 
 if not symbol_table_is_out_of_date:
     sys.exit()
@@ -67,8 +80,11 @@ symbol_list = symbol_table.items()
 
 print("Writing symbol table")
 
-with open(symbol_table_location, "w") as file:
-    for symbol, location in symbol_list:
-        file.write("{} {}\n".format(symbol, location))
-
+with open(symbol_table_location, "w") as symbol_file:
+    with open(include_symbol_table_location, "w") as include_file:
+        include_file.write("#define FOR_EACH_LIBRARY_SYMBOL(macro)")
+        for symbol, location in symbol_list:
+            symbol_file.write("{} {}\n".format(symbol, location))
+            include_file.write(" \\\nmacro(\"{}\", \"{}\")".format(symbol, location))
+        include_file.write("\n")
 print("Done")
index 89610d2..d79f7aa 100755 (executable)
@@ -31,7 +31,7 @@ do
     if [ -d "$RUNTIME_DERIVED_SOURCES_DIR/$arch" ];
     then
         mkdir -p "$RUNTIME_INSTALL_DIR/$arch"
-        cp "$RUNTIME_DERIVED_SOURCES_DIR/$arch"/*.bc.gz "$RUNTIME_INSTALL_DIR/$arch"/.
+        cp "$RUNTIME_DERIVED_SOURCES_DIR/$arch"/*.bc "$RUNTIME_INSTALL_DIR/$arch"/.
         ${SRCROOT}/build-symbol-table-index.py $arch
     fi
 done
index 940fbb5..0bb9461 100755 (executable)
@@ -35,7 +35,7 @@ do
         for file in "$OBJ_DIR/$arch"/*.o;
         do
             file_name=${file##*/}
-            gzip -9 -c "$file" > "$RUNTIME_DERIVED_SOURCES_DIR/$arch/${file_name%.o}.bc.gz"
+            cp "$file" "$RUNTIME_DERIVED_SOURCES_DIR/$arch/${file_name%.o}.bc"
         done
     fi
 done
index ecffc42..6b70e50 100644 (file)
@@ -1255,6 +1255,8 @@ void ByteCodeParser::handleCall(
     }
         
     Intrinsic intrinsic = callLinkStatus.intrinsicFor(specializationKind);
+
+    JSFunction* knownFunction = nullptr;
     if (intrinsic != NoIntrinsic) {
         emitFunctionChecks(callLinkStatus, callTarget, registerOffset, specializationKind);
             
@@ -1271,9 +1273,13 @@ void ByteCodeParser::handleCall(
         if (m_graph.compilation())
             m_graph.compilation()->noticeInlinedCall();
         return;
-    }
+    } else if (JSFunction* function = callLinkStatus.function())
+        if (function->isHostFunction()) {
+            emitFunctionChecks(callLinkStatus, callTarget, registerOffset, specializationKind);
+            knownFunction = function;
+        }
     
-    addCall(result, op, callTarget, argumentCountIncludingThis, registerOffset);
+    addCall(result, op, callTarget, argumentCountIncludingThis, registerOffset)->giveKnownFunction(knownFunction);
 }
 
 void ByteCodeParser::emitFunctionChecks(const CallLinkStatus& callLinkStatus, Node* callTarget, int registerOffset, CodeSpecializationKind kind)
index a238a19..4404565 100644 (file)
@@ -1016,6 +1016,40 @@ struct Node {
         m_opInfo2 = prediction;
     }
     
+    bool canBeKnownFunction()
+    {
+        switch (op()) {
+        case Construct:
+        case Call:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    bool hasKnownFunction()
+    {
+        switch (op()) {
+        case Construct:
+        case Call:
+            return (bool)m_opInfo;
+        default:
+            return false;
+        }
+    }
+    
+    JSFunction* knownFunction()
+    {
+        ASSERT(canBeKnownFunction());
+        return bitwise_cast<JSFunction*>(m_opInfo);
+    }
+
+    void giveKnownFunction(JSFunction* callData) 
+    {
+        ASSERT(canBeKnownFunction());
+        m_opInfo = bitwise_cast<uintptr_t>(callData);
+    }
+
     bool hasFunction()
     {
         switch (op()) {
index e824f87..2b93619 100644 (file)
@@ -43,6 +43,7 @@ typedef LLVMModuleRef LModule;
 typedef LLVMRealPredicate LRealPredicate;
 typedef LLVMTypeRef LType;
 typedef LLVMValueRef LValue;
+typedef LLVMMemoryBufferRef LMemoryBuffer;
 
 } } // namespace JSC::FTL
 
index 78a7bf5..addbed7 100644 (file)
@@ -113,6 +113,8 @@ static inline LType functionType(LType returnType, LType param1, LType param2, L
 
 static inline LType typeOf(LValue value) { return llvm->TypeOf(value); }
 
+static inline LType getElementType(LType value) { return llvm->GetElementType(value); }
+
 static inline unsigned mdKindID(LContext context, const char* string) { return llvm->GetMDKindIDInContext(context, string, std::strlen(string)); }
 static inline LValue mdString(LContext context, const char* string, unsigned length) { return llvm->MDStringInContext(context, string, length); }
 static inline LValue mdString(LContext context, const char* string) { return mdString(context, string, std::strlen(string)); }
@@ -134,10 +136,36 @@ static inline LValue mdNode(LContext context, LValue arg1, LValue arg2, LValue a
 
 static inline void setMetadata(LValue instruction, unsigned kind, LValue metadata) { llvm->SetMetadata(instruction, kind, metadata); }
 
+static inline LValue getFirstInstruction(LBasicBlock block) { return llvm->GetFirstInstruction(block); }
+static inline LValue getNextInstruction(LValue instruction) { return llvm->GetNextInstruction(instruction); }
+
+
 static inline LValue addFunction(LModule module, const char* name, LType type) { return llvm->AddFunction(module, name, type); }
-static inline void setLinkage(LValue global, LLinkage linkage) { llvm->SetLinkage(global, linkage); }
+static inline LValue getNamedFunction(LModule module, const char* name) { return llvm->GetNamedFunction(module, name); }
+static inline LValue getFirstFunction(LModule module) { return llvm->GetFirstFunction(module); }
+static inline LValue getNextFunction(LValue function) { return llvm->GetNextFunction(function); }
+
 static inline void setFunctionCallingConv(LValue function, LCallConv convention) { llvm->SetFunctionCallConv(function, convention); }
 static inline void addTargetDependentFunctionAttr(LValue function, const char* key, const char* value) { llvm->AddTargetDependentFunctionAttr(function, key, value); }
+static inline void removeFunctionAttr(LValue function, LLVMAttribute pa) { llvm->RemoveFunctionAttr(function, pa); }
+
+
+
+static inline void setLinkage(LValue global, LLVMLinkage linkage) { llvm->SetLinkage(global, linkage); }
+static inline void setVisibility(LValue global, LLVMVisibility viz) { llvm->SetVisibility(global, viz); }
+static inline LLVMBool isDeclaration(LValue global) { return llvm->IsDeclaration(global); }
+
+static inline LLVMBool linkModules(LModule dest, LModule str, LLVMLinkerMode mode, char** outMessage) { return llvm->LinkModules(dest, str, mode, outMessage); }
+
+static inline const char * getValueName(LValue global) { return llvm->GetValueName(global); }
+
+static inline LValue getNamedGlobal(LModule module, const char* name) { return llvm->GetNamedGlobal(module, name); }
+static inline LValue getFirstGlobal(LModule module) { return llvm->GetFirstGlobal(module); }
+static inline LValue getNextGlobal(LValue global) { return llvm->GetNextGlobal(global); }
+
+
+
+
 
 static inline LValue addExternFunction(LModule module, const char* name, LType type)
 {
@@ -146,7 +174,27 @@ static inline LValue addExternFunction(LModule module, const char* name, LType t
     return result;
 }
 
+static inline LLVMBool createMemoryBufferWithContentsOfFile(const char* path, LLVMMemoryBufferRef* outMemBuf, char** outMessage) 
+{ 
+    return llvm->CreateMemoryBufferWithContentsOfFile(path, outMemBuf, outMessage); 
+}
+
+
+static inline LLVMBool parseBitcodeInContext(LLVMContextRef contextRef, LLVMMemoryBufferRef memBuf, LModule *outModule, char **outMessage)
+{ 
+    return llvm->ParseBitcodeInContext(contextRef, memBuf, outModule, outMessage); 
+}
+
+
+static inline void disposeMemoryBuffer(LLVMMemoryBufferRef memBuf){ llvm->DisposeMemoryBuffer(memBuf); }
+
+
+static inline LModule moduleCreateWithNameInContext(const char* moduleID, LContext context){ return llvm->ModuleCreateWithNameInContext(moduleID, context); }
+static inline void disposeModule(LModule m){ llvm->DisposeModule(m); }
+
 static inline LValue getParam(LValue function, unsigned index) { return llvm->GetParam(function, index); }
+
+static inline void getParamTypes(LType function, LType* dest) { return llvm->GetParamTypes(function, dest); }
 static inline LValue getUndef(LType type) { return llvm->GetUndef(type); }
 
 enum BitExtension { ZeroExtend, SignExtend };
@@ -156,6 +204,9 @@ static inline LValue constIntToPtr(LValue value, LType type) { return llvm->Cons
 static inline LValue constNull(LType type) { return llvm->ConstNull(type); }
 static inline LValue constBitCast(LValue value, LType type) { return llvm->ConstBitCast(value, type); }
 
+static inline LBasicBlock getFirstBasicBlock(LValue function) { return llvm->GetFirstBasicBlock(function); }
+static inline LBasicBlock getNextBasicBlock(LBasicBlock block) { return llvm->GetNextBasicBlock(block); }
+
 static inline LBasicBlock appendBasicBlock(LContext context, LValue function, const char* name = "") { return llvm->AppendBasicBlockInContext(context, function, name); }
 static inline LBasicBlock insertBasicBlock(LContext context, LBasicBlock beforeBasicBlock, const char* name = "") { return llvm->InsertBasicBlockInContext(context, beforeBasicBlock, name); }
 
index feab9bd..3875632 100644 (file)
@@ -523,18 +523,32 @@ void compile(State& state, Safepoint::Result& safepointResult)
         if (Options::llvmSimpleOpt()) {
             modulePasses = llvm->CreatePassManager();
             llvm->AddTargetData(llvm->GetExecutionEngineTargetData(engine), modulePasses);
+
+            LLVMTargetMachineRef targetMachine = llvm->GetExecutionEngineTargetMachine(engine);
+             
+            llvm->AddAnalysisPasses(targetMachine, modulePasses);
             llvm->AddPromoteMemoryToRegisterPass(modulePasses);
+            llvm->AddGlobalOptimizerPass(modulePasses);
+            llvm->AddFunctionInliningPass(modulePasses);
+            llvm->AddPruneEHPass(modulePasses);
+            llvm->AddGlobalDCEPass(modulePasses);
+             
             llvm->AddConstantPropagationPass(modulePasses);
+            llvm->AddAggressiveDCEPass(modulePasses);
             llvm->AddInstructionCombiningPass(modulePasses);
-            llvm->AddTypeBasedAliasAnalysisPass(modulePasses);
             llvm->AddBasicAliasAnalysisPass(modulePasses);
+            llvm->AddTypeBasedAliasAnalysisPass(modulePasses);
             llvm->AddGVNPass(modulePasses);
             llvm->AddCFGSimplificationPass(modulePasses);
             llvm->AddDeadStoreEliminationPass(modulePasses);
             llvm->RunPassManager(modulePasses, state.module);
         } else {
             LLVMPassManagerBuilderRef passBuilder = llvm->PassManagerBuilderCreate();
             llvm->PassManagerBuilderSetOptLevel(passBuilder, Options::llvmOptimizationLevel());
+            llvm->PassManagerBuilderUseInlinerWithThreshold(passBuilder, 275);
             llvm->PassManagerBuilderSetSizeLevel(passBuilder, Options::llvmSizeLevel());
         
             functionPasses = llvm->CreateFunctionPassManagerForModule(state.module);
index 2c0ee68..d8cd259 100644 (file)
@@ -28,6 +28,7 @@
 
 #if ENABLE(FTL_JIT)
 
+#include "BundlePath.h"
 #include "CodeBlockWithJITType.h"
 #include "DFGAbstractInterpreterInlines.h"
 #include "DFGInPlaceAbstractState.h"
 #include "FTLOutput.h"
 #include "FTLThunks.h"
 #include "FTLWeightedTarget.h"
-#include "OperandsInlines.h"
 #include "JSCInlines.h"
+#include "OperandsInlines.h"
 #include "VirtualRegister.h"
 #include <atomic>
+#include <dlfcn.h>
+#include <llvm/InitializeLLVM.h>
 #include <wtf/ProcessID.h>
 
 namespace JSC { namespace FTL {
@@ -92,6 +95,8 @@ public:
         , m_state(state.graph)
         , m_interpreter(state.graph, m_state)
         , m_stackmapIDs(0)
+        , m_tbaaKind(mdKindID(state.context, "tbaa"))
+        , m_tbaaStructKind(mdKindID(state.context, "tbaa.struct"))
     {
     }
     
@@ -108,7 +113,7 @@ public:
         m_graph.m_dominators.computeIfNecessary(m_graph);
         
         m_ftlState.module =
-            llvm->ModuleCreateWithNameInContext(name.data(), m_ftlState.context);
+            moduleCreateWithNameInContext(name.data(), m_ftlState.context);
         
         m_ftlState.function = addFunction(
             m_ftlState.module, name.data(), functionType(m_out.int64));
@@ -137,7 +142,35 @@ public:
         
         m_out.appendTo(m_prologue, stackOverflow);
         createPhiVariables();
+
+        Vector<BasicBlock*> depthFirst;
+        m_graph.getBlocksInDepthFirstOrder(depthFirst);
+
+        int maxNumberOfArguments = -1;
+        for (unsigned blockIndex = depthFirst.size(); blockIndex--; ) {
+            BasicBlock* block = depthFirst[blockIndex];
+            for (unsigned nodeIndex = block->size(); nodeIndex--; ) {
+                Node* m_node = block->at(nodeIndex);
+                if (m_node->hasKnownFunction()) {
+                    int numArgs = m_node->numChildren();
+                    NativeFunction func = m_node->knownFunction()->nativeFunction();
+                    Dl_info info;
+                    if (dladdr((void*)func, &info)) {
+                        LValue callee = getFunctionBySymbol(info.dli_sname);
+                        if (callee && numArgs > maxNumberOfArguments)
+                            maxNumberOfArguments = numArgs;
+                    }
+                }
+            }
+        }
+
         LValue capturedAlloca = m_out.alloca(arrayType(m_out.int64, m_graph.m_nextMachineLocal));
+
+        if (maxNumberOfArguments >= 0) {
+            m_execState = m_out.alloca(arrayType(m_out.int64, JSStack::CallFrameHeaderSize + maxNumberOfArguments));
+            m_execStorage = m_out.ptrToInt(m_execState, m_out.intPtr);        
+        }
+
         m_captured = m_out.add(
             m_out.ptrToInt(capturedAlloca, m_out.intPtr),
             m_out.constIntPtr(m_graph.m_nextMachineLocal * sizeof(Register)));
@@ -174,9 +207,8 @@ public:
             m_out.stackmapIntrinsic(), m_out.constInt64(m_ftlState.handleExceptionStackmapID),
             m_out.constInt32(MacroAssembler::maxJumpReplacementSize()));
         m_out.unreachable();
-        
-        Vector<BasicBlock*> depthFirst;
-        m_graph.getBlocksInDepthFirstOrder(depthFirst);
+
+
         for (unsigned i = 0; i < depthFirst.size(); ++i)
             compileBlock(depthFirst[i]);
         
@@ -3598,15 +3630,19 @@ private:
     {
         setBoolean(m_out.bitNot(boolify(m_node->child1())));
     }
-    
+
     void compileCallOrConstruct()
     {
         int dummyThisArgument = m_node->op() == Call ? 0 : 1;
         int numPassedArgs = m_node->numChildren() - 1;
         int numArgs = numPassedArgs + dummyThisArgument;
-        
-        LValue callee = lowJSValue(m_graph.varArgChild(m_node, 0));
-        
+
+        if (m_node->hasKnownFunction()
+            && possiblyCompileInlineableNativeCall(dummyThisArgument, numPassedArgs, numArgs))
+            return;
+
+        LValue jsCallee = lowJSValue(m_graph.varArgChild(m_node, 0));
+
         unsigned stackmapID = m_stackmapIDs++;
         
         Vector<LValue> arguments;
@@ -3614,10 +3650,10 @@ private:
         arguments.append(m_out.constInt32(sizeOfCall()));
         arguments.append(constNull(m_out.ref8));
         arguments.append(m_out.constInt32(1 + JSStack::CallFrameHeaderSize - JSStack::CallerFrameAndPCSize + numArgs));
-        arguments.append(callee); // callee -> %rax
+        arguments.append(jsCallee); // callee -> %rax
         arguments.append(getUndef(m_out.int64)); // code block
         arguments.append(getUndef(m_out.int64)); // scope chain
-        arguments.append(callee); // callee -> stack
+        arguments.append(jsCallee); // callee -> stack
         arguments.append(m_out.constInt64(numArgs)); // argument count and zeros for the tag
         if (dummyThisArgument)
             arguments.append(getUndef(m_out.int64));
@@ -3633,7 +3669,7 @@ private:
         
         setJSValue(call);
     }
-    
+
     void compileJump()
     {
         m_out.jump(lowBlock(m_node->targetBlock()));
@@ -3983,6 +4019,159 @@ private:
 #endif
     }
     
+    bool possiblyCompileInlineableNativeCall(int dummyThisArgument, int numPassedArgs, int numArgs)
+    {
+        JSFunction* knownFunction = m_node->knownFunction();
+        NativeFunction function = knownFunction->nativeFunction();
+        Dl_info info;
+        if (dladdr((void*)function, &info)) {
+            LValue callee = getFunctionBySymbol(info.dli_sname);
+            LType typeCallee;
+            if (callee && (typeCallee = typeOf(callee)) && (typeCallee = getElementType(typeCallee))) {
+
+                JSScope* scope = knownFunction->scopeUnchecked();
+                m_out.storePtr(m_callFrame, m_execStorage, m_heaps.CallFrame_callerFrame);
+                m_out.storePtr(constNull(m_out.intPtr), addressFor(m_execStorage, JSStack::CodeBlock));
+                m_out.storePtr(weakPointer(scope), addressFor(m_execStorage, JSStack::ScopeChain));
+                m_out.storePtr(weakPointer(knownFunction), addressFor(m_execStorage, JSStack::Callee));
+
+                m_out.store64(m_out.constInt64(numArgs), addressFor(m_execStorage, JSStack::ArgumentCount));
+
+                if (dummyThisArgument) 
+                    m_out.storePtr(getUndef(m_out.int64), addressFor(m_execStorage, JSStack::ThisArgument));
+                
+                for (int i = 0; i < numPassedArgs; ++i) {
+                    m_out.storePtr(lowJSValue(m_graph.varArgChild(m_node, 1 + i)),
+                        addressFor(m_execStorage, dummyThisArgument ? JSStack::FirstArgument : JSStack::ThisArgument, i * sizeof(Register)));
+                }
+
+                LType typeCalleeArg;
+                getParamTypes(typeCallee, &typeCalleeArg);
+                LValue calleeCallFrame = m_out.address(m_execState, m_heaps.CallFrame_callerFrame).value();
+                m_out.storePtr(m_out.ptrToInt(calleeCallFrame, m_out.intPtr), m_out.absolute(&vm().topCallFrame));
+                
+                LValue call = vmCall(callee, 
+                    m_out.bitCast(calleeCallFrame, typeCalleeArg));
+
+                if (Options::verboseCompilation())
+                    dataLog("Inlining: ", info.dli_sname, "\n");
+
+                setJSValue(call);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    LValue getFunctionBySymbol(const CString symbol)
+    {
+        if (!m_ftlState.symbolTable.contains(symbol)) 
+            return nullptr;
+        if (!getModuleByPathForSymbol(m_ftlState.symbolTable.get(symbol), symbol))
+            return nullptr;
+        return getNamedFunction(m_ftlState.module, symbol.data());
+    }
+
+    bool getModuleByPathForSymbol(const CString path, const CString symbol)
+    {
+        if (m_ftlState.nativeLoadedLibraries.contains(path)) {
+            LValue function = getNamedFunction(m_ftlState.module, symbol.data());
+            if (!isInlinableSize(function)) {
+                // We had no choice but to compile this function, but don't try to inline it ever again.
+                m_ftlState.symbolTable.remove(symbol);
+                return false;
+            }
+            return true;
+        }
+
+        LMemoryBuffer memBuf;
+        
+        ASSERT(isX86() || isARM64());
+
+        const CString actualPath = toCString(bundlePath().data(), 
+            isX86() ? "/Resources/Runtime/x86_64/" : "/Resources/Runtime/arm64/",
+            path.data());
+
+        if (createMemoryBufferWithContentsOfFile(actualPath.data(), &memBuf, nullptr)) {
+            if (Options::verboseCompilation()) 
+                dataLog("Failed to load module at ", actualPath.data(), "\n for symbol ", symbol.data());
+            return false;
+        }
+
+        LModule module;
+
+        if (parseBitcodeInContext(m_ftlState.context, memBuf, &module, nullptr)) {
+            disposeMemoryBuffer(memBuf);
+            return false;
+        }
+
+        disposeMemoryBuffer(memBuf);
+        
+        if (LValue function = getNamedFunction(m_ftlState.module, symbol.data())) {
+            if (!isInlinableSize(function)) {
+                m_ftlState.symbolTable.remove(symbol);
+                disposeModule(module);
+                return false;
+            }
+        }
+
+        Vector<CString> namedFunctions;
+        for (LValue function = getFirstFunction(module); function; function = getNextFunction(function)) {
+            CString functionName(getValueName(function));
+            namedFunctions.append(functionName);
+            
+            for (LBasicBlock basicBlock = getFirstBasicBlock(function); basicBlock; basicBlock = getNextBasicBlock(basicBlock)) {
+                for (LValue instruction = getFirstInstruction(basicBlock); instruction; instruction = getNextInstruction(instruction)) {
+                    setMetadata(instruction, m_tbaaKind, nullptr);
+                    setMetadata(instruction, m_tbaaStructKind, nullptr);
+                }
+            }
+        }
+
+        Vector<CString> namedGlobals;
+        for (LValue global = getFirstGlobal(module); global; global = getNextGlobal(global)) {
+            CString globalName(getValueName(global));
+            namedGlobals.append(globalName);
+        }
+
+        if (linkModules(m_ftlState.module, module, LLVMLinkerDestroySource, nullptr))
+            return false;
+        
+        for (CString* symbol = namedFunctions.begin(); symbol != namedFunctions.end(); ++symbol) {
+            LValue function = getNamedFunction(m_ftlState.module, symbol->data());
+            setVisibility(function, LLVMHiddenVisibility);
+            if (!isDeclaration(function)) {
+                setLinkage(function, LLVMPrivateLinkage);
+
+                if (ASSERT_DISABLED)
+                    removeFunctionAttr(function, LLVMStackProtectAttribute);
+            }
+        }
+
+        for (CString* symbol = namedGlobals.begin(); symbol != namedGlobals.end(); ++symbol) {
+            LValue global = getNamedGlobal(m_ftlState.module, symbol->data());
+            setVisibility(global, LLVMHiddenVisibility);
+            if (!isDeclaration(global))
+                setLinkage(global, LLVMPrivateLinkage);
+        }
+
+        m_ftlState.nativeLoadedLibraries.add(path);
+        return true;
+    }
+
+    bool isInlinableSize(LValue function)
+    {
+        size_t instructionCount = 0;
+        size_t maxSize = Options::maximumLLVMInstructionCountForNativeInlining();
+        for (LBasicBlock basicBlock = getFirstBasicBlock(function); basicBlock; basicBlock = getNextBasicBlock(basicBlock)) {
+            for (LValue instruction = getFirstInstruction(basicBlock); instruction; instruction = getNextInstruction(instruction)) {
+                if (++instructionCount >= maxSize)
+                    return false;
+            }
+        }
+        return true;
+    }
+
     LValue didOverflowStack()
     {
         // This does a very simple leaf function analysis. The invariant of FTL call
@@ -6237,6 +6426,8 @@ private:
     LBasicBlock m_handleExceptions;
     HashMap<BasicBlock*, LBasicBlock> m_blocks;
     
+    LValue m_execState;
+    LValue m_execStorage;
     LValue m_callFrame;
     LValue m_captured;
     LValue m_tagTypeNumber;
@@ -6268,6 +6459,8 @@ private:
     Node* m_node;
     
     uint32_t m_stackmapIDs;
+    unsigned m_tbaaKind;
+    unsigned m_tbaaStructKind;
 };
 
 void lowerDFGToLLVM(State& state)
index 32944d6..92fe30b 100644 (file)
@@ -32,6 +32,9 @@
 #include "FTLForOSREntryJITCode.h"
 #include "FTLJITCode.h"
 #include "FTLJITFinalizer.h"
+#include "InlineRuntimeSymbolTable.h"
+#include <llvm/InitializeLLVM.h>
+#include <stdio.h>
 
 namespace JSC { namespace FTL {
 
@@ -46,6 +49,12 @@ State::State(Graph& graph)
     , compactUnwind(0)
     , compactUnwindSize(0)
 {
+
+#define SYMBOL_TABLE_ADD(symbol, file) \
+    symbolTable.fastAdd(symbol, file);
+    FOR_EACH_LIBRARY_SYMBOL(SYMBOL_TABLE_ADD)
+#undef SYMBOL_TABLE_ADD
+    
     switch (graph.m_plan.mode) {
     case FTLMode: {
         jitCode = adoptRef(new JITCode());
index 5219e29..6e1a06c 100644 (file)
@@ -81,6 +81,9 @@ public:
     RefPtr<DataSection> stackmapsSection;
     
     void dumpState(const char* when);
+
+    HashSet<CString> nativeLoadedLibraries;
+    HashMap<CString, CString> symbolTable;
 };
 
 } } // namespace JSC::FTL
index a7ce976..8df8684 100644 (file)
@@ -53,7 +53,7 @@ public:
     void visit(HeapRootVisitor&);
 
 private:
-    void grow();
+    JS_EXPORT_PRIVATE void grow();
     void zapTo(Frame&);
     HandleSlot findFirstAfter(HandleSlot);
 
index ba6d92e..6bc0275 100644 (file)
 
 #if HAVE(LLVM)
 
+#include <string>
+#include <wtf/text/CString.h>
+
 namespace JSC {
 
 void initializeLLVMImpl();
 
+extern const CString* llvmBitcodeLibraryForInliningPath;
+
 // You msut call this before using JSC::llvm. It's safe to call this multiple times.
 // Returns true if we successfully loaded LLVM. Returns false if we didn't.
 bool initializeLLVM();
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#import "config.h"
-#import "InitializeLLVM.h"
+#include "config.h"
+#include "InitializeLLVM.h"
 
 #if HAVE(LLVM)
 
-#import "InitializeLLVMPOSIX.h"
-#import <Foundation/Foundation.h>
+#include "BundlePath.h"
+#include "InitializeLLVMPOSIX.h"
+#include <wtf/StringPrintStream.h>
 
 // Use the "JS" prefix to make check-for-inappropriate-objc-class-names happy. I
 // think this is better than hacking that script.
 
-@interface JSJavaScriptCoreBundleFinder : NSObject
-@end
-
-@implementation JSJavaScriptCoreBundleFinder
-@end
-
 namespace JSC {
 
 void initializeLLVMImpl()
 {
-    @autoreleasepool {
-        NSBundle *myBundle = [NSBundle bundleForClass:[JSJavaScriptCoreBundleFinder class]];
-        NSString *path = [[myBundle bundlePath] stringByAppendingPathComponent:@"Libraries/libllvmForJSC.dylib"];
-        
-        initializeLLVMPOSIX([path UTF8String]);
-    }
+    initializeLLVMPOSIX(toCString(bundlePath().data(), "/Libraries/libllvmForJSC.dylib").data());
 }
 
 } // namespace JSC
index 9ff2a42..940254f 100644 (file)
 #include "LLVMHeaders.h"
 
 #define FOR_EACH_LLVM_API_FUNCTION(macro) \
+    macro(LLVMBool, ParseBitcode, (LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage)) \
+    macro(LLVMBool, ParseBitcodeInContext, (LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModuleInContext, (LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModule, (LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModuleProviderInContext, (LLVMContextRef ContextRef, LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef *OutMP, char **OutMessage)) \
+    macro(LLVMBool, GetBitcodeModuleProvider, (LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef *OutMP, char **OutMessage)) \
+    macro(LLVMBool, LinkModules, (LLVMModuleRef Dest, LLVMModuleRef Str, LLVMLinkerMode Mode, char **OutMessage)) \
     macro(void, InitializeCore, (LLVMPassRegistryRef R)) \
     macro(void, Shutdown, ()) \
     macro(char *, CreateMessage, (const char *Message)) \
@@ -51,6 +58,7 @@
     macro(void, SetModuleInlineAsm, (LLVMModuleRef M, const char *Asm)) \
     macro(LLVMContextRef, GetModuleContext, (LLVMModuleRef M)) \
     macro(LLVMTypeRef, GetTypeByName, (LLVMModuleRef M, const char *Name)) \
+    macro(void, DumpType, (LLVMTypeRef Val)) \
     macro(unsigned, GetNamedMetadataNumOperands, (LLVMModuleRef M, const char* name)) \
     macro(void, GetNamedMetadataOperands, (LLVMModuleRef M, const char* name, LLVMValueRef *Dest)) \
     macro(void, AddNamedMetadataOperand, (LLVMModuleRef M, const char* name, LLVMValueRef Val)) \
     macro(LLVMBool, FindFunction, (LLVMExecutionEngineRef EE, const char *Name, LLVMValueRef *OutFn)) \
     macro(void *, RecompileAndRelinkFunction, (LLVMExecutionEngineRef EE, LLVMValueRef Fn)) \
     macro(LLVMTargetDataRef, GetExecutionEngineTargetData, (LLVMExecutionEngineRef EE)) \
+    macro(LLVMTargetMachineRef, GetExecutionEngineTargetMachine, (LLVMExecutionEngineRef EE)) \
     macro(void, AddGlobalMapping, (LLVMExecutionEngineRef EE, LLVMValueRef Global, void* Addr)) \
     macro(void *, GetPointerToGlobal, (LLVMExecutionEngineRef EE, LLVMValueRef Global)) \
     macro(LLVMMCJITMemoryManagerRef, CreateSimpleMCJITMemoryManager, (void *Opaque, LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection, LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection, LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory, LLVMMemoryManagerDestroyCallback Destory)) \
     macro(void, PassManagerBuilderPopulateFunctionPassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM)) \
     macro(void, PassManagerBuilderPopulateModulePassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM)) \
     macro(void, PassManagerBuilderPopulateLTOPassManager, (LLVMPassManagerBuilderRef PMB, LLVMPassManagerRef PM, LLVMBool Internalize, LLVMBool RunInliner)) \
+    macro(void, AddAnalysisPasses, (LLVMTargetMachineRef T, LLVMPassManagerRef PM)) \
+    macro(void, AddInternalizePass, (LLVMPassManagerRef PM, unsigned AllButMain)) \
     macro(void, AddAggressiveDCEPass, (LLVMPassManagerRef PM)) \
     macro(void, AddCFGSimplificationPass, (LLVMPassManagerRef PM)) \
     macro(void, AddDeadStoreEliminationPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddFunctionInliningPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddGlobalDCEPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddPruneEHPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddIPSCCPPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddDeadArgEliminationPass, (LLVMPassManagerRef PM)) \
+    macro(void, AddConstantMergePass, (LLVMPassManagerRef PM)) \
+    macro(void, AddGlobalOptimizerPass, (LLVMPassManagerRef PM)) \
     macro(void, AddGVNPass, (LLVMPassManagerRef PM)) \
     macro(void, AddIndVarSimplifyPass, (LLVMPassManagerRef PM)) \
     macro(void, AddInstructionCombiningPass, (LLVMPassManagerRef PM)) \
index b6bffe2..4b41fe6 100644 (file)
 #endif // COMPILER(CLANG)
 
 #include <llvm-c/Analysis.h>
+#include <llvm-c/BitReader.h>
 #include <llvm-c/Core.h>
 #include <llvm-c/Disassembler.h>
 #include <llvm-c/ExecutionEngine.h>
+#include <llvm-c/Initialization.h>
+#include <llvm-c/Linker.h>
 #include <llvm-c/Target.h>
+#include <llvm-c/TargetMachine.h>
+#include <llvm-c/Transforms/IPO.h>
 #include <llvm-c/Transforms/PassManagerBuilder.h>
 #include <llvm-c/Transforms/Scalar.h>
 
diff --git a/Source/JavaScriptCore/runtime/BundlePath.h b/Source/JavaScriptCore/runtime/BundlePath.h
new file mode 100644 (file)
index 0000000..c8c6948
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef BundlePath_h
+#define BundlePath_h
+
+#include <string>
+#include <wtf/text/CString.h>
+
+namespace JSC {
+
+const CString& bundlePath();
+
+} // namespace JSC
+
+#endif // BundlePath_h
+
diff --git a/Source/JavaScriptCore/runtime/BundlePath.mm b/Source/JavaScriptCore/runtime/BundlePath.mm
new file mode 100644 (file)
index 0000000..bd2212e
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import "config.h"
+#import "BundlePath.h"
+
+#import <Foundation/Foundation.h>
+#import <string>
+
+@interface JSJavaScriptCoreFinder : NSObject
+@end
+
+@implementation JSJavaScriptCoreFinder
+@end
+
+
+namespace JSC {
+
+const CString* constantBundlePath = nullptr;
+
+const CString& bundlePath()
+{
+    if (!constantBundlePath) {
+        @autoreleasepool {
+            NSBundle* myBundle = [NSBundle bundleForClass:[JSJavaScriptCoreFinder class]];
+
+            constantBundlePath = new CString([[myBundle bundlePath] UTF8String]);
+        }
+    }
+
+    return *constantBundlePath;
+}
+
+} // namespace JSC
index 8ea4c17..80a29c8 100644 (file)
@@ -39,7 +39,7 @@ enum DateTimeFormat {
     DateTimeFormatDateAndTime = DateTimeFormatDate | DateTimeFormatTime
 };
 
-WTF::String formatDateTime(const GregorianDateTime&, DateTimeFormat, bool asUTCVariant);
+JS_EXPORT_PRIVATE WTF::String formatDateTime(const GregorianDateTime&, DateTimeFormat, bool asUTCVariant);
 
 } // namespace JSC
 
index 193e054..9b47d7b 100644 (file)
@@ -31,7 +31,7 @@ namespace JSC {
         void finishCreation(VM&);
         JS_EXPORT_PRIVATE void finishCreation(VM&, double);
 
-        static void destroy(JSCell*);
+        JS_EXPORT_PRIVATE static void destroy(JSCell*);
  
     public:
         typedef JSWrapperObject Base;
@@ -74,8 +74,8 @@ namespace JSC {
         }
 
     private:
-        const GregorianDateTime* calculateGregorianDateTime(ExecState*) const;
-        const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const;
+        JS_EXPORT_PRIVATE const GregorianDateTime* calculateGregorianDateTime(ExecState*) const;
+        JS_EXPORT_PRIVATE const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const;
 
         mutable RefPtr<DateInstanceData> m_data;
     };
index 66d8136..48840ad 100644 (file)
@@ -50,9 +50,9 @@ JSObject* createNotAFunctionError(ExecState*, JSValue);
 JSObject* createErrorForInvalidGlobalAssignment(ExecState*, const String&);
 JSString* errorDescriptionForValue(ExecState*, JSValue);
 
-JSObject* throwOutOfMemoryError(ExecState*);
-JSObject* throwStackOverflowError(ExecState*);
-JSObject* throwTerminatedExecutionException(ExecState*);
+JS_EXPORT_PRIVATE JSObject* throwOutOfMemoryError(ExecState*);
+JS_EXPORT_PRIVATE JSObject* throwStackOverflowError(ExecState*);
+JS_EXPORT_PRIVATE JSObject* throwTerminatedExecutionException(ExecState*);
 
 
 class TerminatedExecutionError : public JSNonFinalObject {
index d1366cf..70029e6 100644 (file)
@@ -61,20 +61,20 @@ public:
 
     JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool throwException);
 
-    static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
+    JS_EXPORT_PRIVATE static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
 
     DECLARE_EXPORT_INFO;
         
     unsigned length() const { return getArrayLength(); }
     // OK to use on new arrays, but not if it might be a RegExpMatchArray.
-    bool setLength(ExecState*, unsigned, bool throwException = false);
+    JS_EXPORT_PRIVATE bool setLength(ExecState*, unsigned, bool throwException = false);
 
-    void sort(ExecState*);
-    void sort(ExecState*, JSValue compareFunction, CallType, const CallData&);
-    void sortNumeric(ExecState*, JSValue compareFunction, CallType, const CallData&);
+    JS_EXPORT_PRIVATE void sort(ExecState*);
+    JS_EXPORT_PRIVATE void sort(ExecState*, JSValue compareFunction, CallType, const CallData&);
+    JS_EXPORT_PRIVATE void sortNumeric(ExecState*, JSValue compareFunction, CallType, const CallData&);
 
-    void push(ExecState*, JSValue);
-    JSValue pop(ExecState*);
+    JS_EXPORT_PRIVATE void push(ExecState*, JSValue);
+    JS_EXPORT_PRIVATE JSValue pop(ExecState*);
 
     enum ShiftCountMode {
         // This form of shift hints that we're doing queueing. With this assumption in hand,
@@ -131,8 +131,8 @@ public:
         }
     }
 
-    void fillArgList(ExecState*, MarkedArgumentBuffer&);
-    void copyToArguments(ExecState*, CallFrame*, uint32_t length, int32_t firstVarArgOffset);
+    JS_EXPORT_PRIVATE void fillArgList(ExecState*, MarkedArgumentBuffer&);
+    JS_EXPORT_PRIVATE void copyToArguments(ExecState*, CallFrame*, uint32_t length, int32_t firstVarArgOffset);
 
     static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype, IndexingType indexingType)
     {
@@ -157,7 +157,7 @@ private:
     }
         
     bool shiftCountWithAnyIndexingType(ExecState*, unsigned& startIndex, unsigned count);
-    bool shiftCountWithArrayStorage(VM&, unsigned startIndex, unsigned count, ArrayStorage*);
+    JS_EXPORT_PRIVATE bool shiftCountWithArrayStorage(VM&, unsigned startIndex, unsigned count, ArrayStorage*);
 
     bool unshiftCountWithAnyIndexingType(ExecState*, unsigned startIndex, unsigned count);
     bool unshiftCountWithArrayStorage(ExecState*, unsigned startIndex, unsigned count, ArrayStorage*);
index 514c4d9..492c1e6 100644 (file)
@@ -246,14 +246,14 @@ public:
     JSObject* toObject(ExecState*, JSGlobalObject*) const;
 
     // Integer conversions.
-    JS_EXPORT_PRIVATE double toInteger(ExecState*) const;
-    double toIntegerPreserveNaN(ExecState*) const;
+    double toInteger(ExecState*) const;
+    JS_EXPORT_PRIVATE double toIntegerPreserveNaN(ExecState*) const;
     int32_t toInt32(ExecState*) const;
     uint32_t toUInt32(ExecState*) const;
 
     // Floating point conversions (this is a convenience method for webcore;
     // signle precision float is not a representation used in JS or JSC).
-    float toFloat(ExecState* exec) const { return static_cast<float>(toNumber(exec)); }
+    JS_EXPORT_PRIVATE float toFloat(ExecState* exec) const { return static_cast<float>(toNumber(exec)); }
 
     // Object operations, with the toObject operation included.
     JSValue get(ExecState*, PropertyName) const;
@@ -261,8 +261,8 @@ public:
     JSValue get(ExecState*, unsigned propertyName) const;
     JSValue get(ExecState*, unsigned propertyName, PropertySlot&) const;
     void put(ExecState*, PropertyName, JSValue, PutPropertySlot&);
-    void putToPrimitive(ExecState*, PropertyName, JSValue, PutPropertySlot&);
-    void putToPrimitiveByIndex(ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
+    JS_EXPORT_PRIVATE void putToPrimitive(ExecState*, PropertyName, JSValue, PutPropertySlot&);
+    JS_EXPORT_PRIVATE void putToPrimitiveByIndex(ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
     void putByIndex(ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
 
     JSValue toThis(ExecState*, ECMAMode) const;
index 17ba4a2..9a1ae30 100644 (file)
@@ -50,11 +50,11 @@ namespace JSC {
 
 class VM;
 
-void msToGregorianDateTime(VM&, double, bool outputIsUTC, GregorianDateTime&);
-double gregorianDateTimeToMS(VM&, const GregorianDateTime&, double, bool inputIsUTC);
-double getUTCOffset(VM&);
-double parseDateFromNullTerminatedCharacters(VM&, const char* dateString);
-double parseDate(VM&, const WTF::String&);
+JS_EXPORT_PRIVATE void msToGregorianDateTime(VM&, double, bool outputIsUTC, GregorianDateTime&);
+JS_EXPORT_PRIVATE double gregorianDateTimeToMS(VM&, const GregorianDateTime&, double, bool inputIsUTC);
+JS_EXPORT_PRIVATE double getUTCOffset(VM&);
+JS_EXPORT_PRIVATE double parseDateFromNullTerminatedCharacters(VM&, const char* dateString);
+JS_EXPORT_PRIVATE double parseDate(VM&, const WTF::String&);
 
 } // namespace JSC
 
index 3d08490..d5d4f59 100644 (file)
@@ -111,8 +111,8 @@ public:
     JS_EXPORT_PRIVATE static String className(const JSObject*);
 
     JSValue prototype() const;
-    void setPrototype(VM&, JSValue prototype);
-    bool setPrototypeWithCycleCheck(ExecState*, JSValue prototype);
+    JS_EXPORT_PRIVATE void setPrototype(VM&, JSValue prototype);
+    JS_EXPORT_PRIVATE bool setPrototypeWithCycleCheck(ExecState*, JSValue prototype);
         
     bool mayInterceptIndexedAccesses()
     {
@@ -132,9 +132,9 @@ public:
     // The key difference between this and getOwnPropertySlot is that getOwnPropertySlot
     // currently returns incorrect results for the DOM window (with non-own properties)
     // being returned. Once this is fixed we should migrate code & remove this method.
-    bool getOwnPropertyDescriptor(ExecState*, PropertyName, PropertyDescriptor&);
+    JS_EXPORT_PRIVATE bool getOwnPropertyDescriptor(ExecState*, PropertyName, PropertyDescriptor&);
 
-    bool allowsAccessFrom(ExecState*);
+    JS_EXPORT_PRIVATE bool allowsAccessFrom(ExecState*);
 
     unsigned getArrayLength() const
     {
@@ -592,7 +592,7 @@ public:
     JS_EXPORT_PRIVATE void putDirectNativeFunction(VM&, JSGlobalObject*, const PropertyName&, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
     JS_EXPORT_PRIVATE JSFunction* putDirectBuiltinFunction(VM&, JSGlobalObject*, const PropertyName&, FunctionExecutable*, unsigned attributes);
     JSFunction* putDirectBuiltinFunctionWithoutTransition(VM&, JSGlobalObject*, const PropertyName&, FunctionExecutable*, unsigned attributes);
-    void putDirectNativeFunctionWithoutTransition(VM&, JSGlobalObject*, const PropertyName&, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
+    JS_EXPORT_PRIVATE void putDirectNativeFunctionWithoutTransition(VM&, JSGlobalObject*, const PropertyName&, unsigned functionLength, NativeFunction, Intrinsic, unsigned attributes);
 
     JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow);
 
@@ -603,8 +603,8 @@ public:
     bool isActivationObject() const;
     bool isErrorInstance() const;
 
-    void seal(VM&);
-    void freeze(VM&);
+    JS_EXPORT_PRIVATE void seal(VM&);
+    JS_EXPORT_PRIVATE void freeze(VM&);
     JS_EXPORT_PRIVATE void preventExtensions(VM&);
     bool isSealed(VM& vm) { return structure(vm)->isSealed(vm); }
     bool isFrozen(VM& vm) { return structure(vm)->isFrozen(vm); }
@@ -989,7 +989,7 @@ private:
     ContiguousDoubles ensureDoubleSlow(VM&);
     ContiguousJSValues ensureContiguousSlow(VM&);
     ContiguousJSValues rageEnsureContiguousSlow(VM&);
-    ArrayStorage* ensureArrayStorageSlow(VM&);
+    JS_EXPORT_PRIVATE ArrayStorage* ensureArrayStorageSlow(VM&);
     
     enum DoubleToContiguousMode { EncodeValueAsDouble, RageConvertDoubleToValue };
     template<DoubleToContiguousMode mode>
index 349c75e..5edc392 100644 (file)
@@ -60,7 +60,7 @@ namespace JSC {
         explicit JSWrapperObject(VM&, Structure*);
         static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags;
 
-        static void visitChildren(JSCell*, SlotVisitor&);
+        JS_EXPORT_PRIVATE static void visitChildren(JSCell*, SlotVisitor&);
 
     private:
         WriteBarrier<Unknown> m_internalValue;
index eeb4022..38deee6 100644 (file)
@@ -197,6 +197,8 @@ typedef const char* optionString;
     v(unsigned, maximumInliningDepthForMustInline, 7) \
     v(unsigned, maximumInliningRecursionForMustInline, 3) \
     \
+    v(unsigned, maximumLLVMInstructionCountForNativeInlining, 80) \
+    \
     /* Maximum size of a caller for enabling inlining. This is purely to protect us */\
     /* from super long compiles that take a lot of memory. */\
     v(unsigned, maximumInliningCallerSize, 10000) \
index fec8f6a..9dd1f9c 100644 (file)
@@ -61,7 +61,7 @@ namespace JSC {
         const char* errorMessage() const { return m_constructionError; }
 
         JS_EXPORT_PRIVATE int match(VM&, const String&, unsigned startOffset, Vector<int, 32>& ovector);
-        MatchResult match(VM&, const String&, unsigned startOffset);
+        JS_EXPORT_PRIVATE MatchResult match(VM&, const String&, unsigned startOffset);
         unsigned numSubpatterns() const { return m_numSubpatterns; }
 
         bool hasCode()
index df63614..9508cd3 100644 (file)
@@ -45,16 +45,16 @@ namespace JSC {
         }
         static StringObject* create(VM&, JSGlobalObject*, JSString*);
 
-        static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
-        static bool getOwnPropertySlotByIndex(JSObject*, ExecState*, unsigned propertyName, PropertySlot&);
+        JS_EXPORT_PRIVATE static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
+        JS_EXPORT_PRIVATE static bool getOwnPropertySlotByIndex(JSObject*, ExecState*, unsigned propertyName, PropertySlot&);
 
-        static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
-        static void putByIndex(JSCell*, ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
+        JS_EXPORT_PRIVATE static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
+        JS_EXPORT_PRIVATE static void putByIndex(JSCell*, ExecState*, unsigned propertyName, JSValue, bool shouldThrow);
 
-        static bool deleteProperty(JSCell*, ExecState*, PropertyName);
-        static bool deletePropertyByIndex(JSCell*, ExecState*, unsigned propertyName);
-        static void getOwnPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode);
-        static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow);
+        JS_EXPORT_PRIVATE static bool deleteProperty(JSCell*, ExecState*, PropertyName);
+        JS_EXPORT_PRIVATE static bool deletePropertyByIndex(JSCell*, ExecState*, unsigned propertyName);
+        JS_EXPORT_PRIVATE static void getOwnPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode);
+        JS_EXPORT_PRIVATE static bool defineOwnProperty(JSObject*, ExecState*, PropertyName, const PropertyDescriptor&, bool shouldThrow);
 
         DECLARE_EXPORT_INFO;
 
index 9657371..fb67030 100644 (file)
@@ -120,13 +120,13 @@ public:
     static Structure* attributeChangeTransition(VM&, Structure*, PropertyName, unsigned attributes);
     JS_EXPORT_PRIVATE static Structure* toCacheableDictionaryTransition(VM&, Structure*);
     static Structure* toUncacheableDictionaryTransition(VM&, Structure*);
-    static Structure* sealTransition(VM&, Structure*);
-    static Structure* freezeTransition(VM&, Structure*);
+    JS_EXPORT_PRIVATE static Structure* sealTransition(VM&, Structure*);
+    JS_EXPORT_PRIVATE static Structure* freezeTransition(VM&, Structure*);
     static Structure* preventExtensionsTransition(VM&, Structure*);
-    static Structure* nonPropertyTransition(VM&, Structure*, NonPropertyTransition);
+    JS_EXPORT_PRIVATE static Structure* nonPropertyTransition(VM&, Structure*, NonPropertyTransition);
 
-    bool isSealed(VM&);
-    bool isFrozen(VM&);
+    JS_EXPORT_PRIVATE bool isSealed(VM&);
+    JS_EXPORT_PRIVATE bool isFrozen(VM&);
     bool isExtensible() const { return !m_preventExtensions; }
     bool didTransition() const { return m_didTransition; }
     bool putWillGrowOutOfLineStorage();
@@ -518,7 +518,7 @@ private:
         
     bool checkOffsetConsistency() const;
 
-    void allocateRareData(VM&);
+    JS_EXPORT_PRIVATE void allocateRareData(VM&);
     void cloneRareDataFrom(VM&, const Structure*);
 
     static const int s_maxTransitionLength = 64;
diff --git a/Source/JavaScriptCore/tested-symbols.symlst b/Source/JavaScriptCore/tested-symbols.symlst
new file mode 100644 (file)
index 0000000..16319d1
--- /dev/null
@@ -0,0 +1,87 @@
+__ZN3JSC15globalFuncIsNaNEPNS_9ExecStateE
+__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateE
+__ZN3JSCL16mathProtoFuncCosEPNS_9ExecStateE
+__ZN3JSCL16mathProtoFuncSinEPNS_9ExecStateE
+__ZN3JSCL16mathProtoFuncTanEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncACosEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncASinEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncATanEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncCbrtEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncCoshEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncLog2EPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncSinhEPNS_9ExecStateE
+__ZN3JSCL17mathProtoFuncTanhEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncACoshEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncASinhEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncATan2EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncATanhEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncExpm1EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncExpm1EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncHypotEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncLog10EPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncLog1pEPNS_9ExecStateE
+__ZN3JSCL18mathProtoFuncTruncEPNS_9ExecStateE
+__ZN3JSCL19arrayProtoFuncShiftEPNS_9ExecStateE
+__ZN3JSCL19dateProtoFuncGetDayEPNS_9ExecStateE
+__ZN3JSCL19mathProtoFuncRandomEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncGetDateEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncGetTimeEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncGetYearEPNS_9ExecStateE
+__ZN3JSCL20dateProtoFuncSetDateEPNS_9ExecStateE
+__ZN3JSCL20stringProtoFuncSliceEPNS_9ExecStateE
+__ZN3JSCL21dateProtoFuncGetHoursEPNS_9ExecStateE
+__ZN3JSCL21dateProtoFuncGetMonthEPNS_9ExecStateE
+__ZN3JSCL21dateProtoFuncToStringEPNS_9ExecStateE
+__ZN3JSCL22JSONProtoFuncStringifyEPNS_9ExecStateE
+__ZN3JSCL22dateProtoFuncGetUTCDayEPNS_9ExecStateE
+__ZN3JSCL23dateProtoFuncGetMinutesEPNS_9ExecStateE
+__ZN3JSCL23dateProtoFuncGetSecondsEPNS_9ExecStateE
+__ZN3JSCL23dateProtoFuncGetUTCDateEPNS_9ExecStateE
+__ZN3JSCL23objectConstructorFreezeEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncGetFullYearEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncGetUTCHoursEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncGetUTCMonthEPNS_9ExecStateE
+__ZN3JSCL24dateProtoFuncToUTCStringEPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncGetUint8EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetUint8EPNS_9ExecStateE
+__ZN3JSCL25dateProtoFuncToDateStringEPNS_9ExecStateE
+__ZN3JSCL25dateProtoFuncToTimeStringEPNS_9ExecStateE
+__ZN3JSCL25objectConstructorIsFrozenEPNS_9ExecStateE
+__ZN3JSCL26dateProtoFuncGetUTCMinutesEPNS_9ExecStateE
+__ZN3JSCL26dateProtoFuncGetUTCSecondsEPNS_9ExecStateE
+__ZN3JSCL26stringProtoFuncToLowerCaseEPNS_9ExecStateE
+__ZN3JSCL26stringProtoFuncToUpperCaseEPNS_9ExecStateE
+__ZN3JSCL27dateProtoFuncGetUTCFullYearEPNS_9ExecStateE
+__ZN3JSCL28dateProtoFuncGetMilliSecondsEPNS_9ExecStateE
+__ZN3JSCL30dateProtoFuncGetTimezoneOffsetEPNS_9ExecStateE
+__ZN3JSCL31dateProtoFuncGetUTCMillisecondsEPNS_9ExecStateE
+__ZN3JSCL31dateProtoFuncToLocaleDateStringEPNS_9ExecStateE
+__ZN3JSCL34objectConstructorPreventExtensionsEPNS_9ExecStateE
+__ZN3JSCL36objectConstructorGetOwnPropertyNamesEPNS_9ExecStateE
+__ZN3JSCL9dateParseEPNS_9ExecStateE
+__ZN3JSC9ExecState13dataViewTableERNS_2VME
+__ZN3JSC13dataViewTableE
+__ZN3JSC19JSDataViewPrototype15createStructureERNS_2VMEPNS_14JSGlobalObjectENS_7JSValueE
+__ZN3JSC1teENS_12PropertyNameERNS_12PropertySlotE
+__ZN3JSC19JSDataViewPrototype6createERNS_2VMEPNS_9StructureE
+__ZN3JSC19JSDataViewPrototype6s_infoE
+__ZN3JSC19JSDataViewPrototypeC1ERNS_2VMEPNS_9Structu1getStaticFunctionSlotINS_8JSObjectEEEbPNS_9ExecStateERKNS_9HashTableEPS1_NS_12PropertyNameERNS_12PropertyS_9ExecStateE
+__ZN3JSC7getDataINS_12Uint8AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7getDataI64AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_11Int8AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_12Int16AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_12Int32AdaptorEEExPNS_9ExecStateE
+__ZNS_13Uint16AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_13Uint32AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_14Float32AdaptorEEExPNS_9ExecStateE
+__ZN3JSC7setDataINS_14Float64AdaptorEEExPNStaViewTableIndexE
+__ZN3JSCL19dataViewTableValuesE
+__ZN3JSCL24dataViewProtoFuncGetInt8EPNS_9ExecStateE
+__ZN3JSCL24dataViewProtoFuncSetInt8EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncGetInt16EPNZN3JSCL25dataViewProtoFuncGetUint8EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetInt16EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetInt32EPNS_9ExecStateE
+__ZN3JSCL25dataViewProtoFuncSetUintteE
+__ZN3JSCL27dataViewProtoFuncSetFloat32EPNS_9ExecStateE
+__ZN3JSCL27dataViewProtoFuncSetFloat64EPNS_9ExecStateE
+__ZN3JSCL18dataViewTableIndexE