Auto generate bytecode information for bytecode parser and LLInt
authormsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Feb 2014 18:48:37 +0000 (18:48 +0000)
committermsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Feb 2014 18:48:37 +0000 (18:48 +0000)
https://bugs.webkit.org/show_bug.cgi?id=129181

Reviewed by Mark Lam.

Source/JavaScriptCore:

Added new bytecode/BytecodeList.json that contains a list of bytecodes and related
helpers.  It also includes bytecode length and other information used to generate files.
Added a new generator, generate-bytecode-files that generates Bytecodes.h and InitBytecodes.asm
in DerivedSources/JavaScriptCore/.

Added the generation of these files to the "DerivedSource" build step.
Slighty changed the build order, since the Bytecodes.h file is needed by
JSCLLIntOffsetsExtractor.  Moved the offline assembly to a separate step since it needs
to be run after JSCLLIntOffsetsExtractor.

Made related changes to OPCODE macros and their use.

Added JavaScriptCore.framework/PrivateHeaders to header file search path for building
jsc to resolve Mac build issue.

* CMakeLists.txt:
* Configurations/JSC.xcconfig:
* DerivedSources.make:
* GNUmakefile.am:
* GNUmakefile.list.am:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
* JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
* JavaScriptCore.vcxproj/copy-files.cmd:
* JavaScriptCore.xcodeproj/project.pbxproj:
* bytecode/Opcode.h:
(JSC::padOpcodeName):
* llint/LLIntCLoop.cpp:
(JSC::LLInt::CLoop::initialize):
* llint/LLIntCLoop.h:
* llint/LLIntData.cpp:
(JSC::LLInt::initialize):
* llint/LLIntOpcode.h:
* llint/LowLevelInterpreter.asm:

Source/WebKit:

Added ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} to WebKit_INCLUDE_DIRECTORIES due to new
generated Bytecodes.h include file.

* CMakeLists.txt:

Source/WebKit2:

Added ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} to WebKit2_INCLUDE_DIRECTORIES due to new
generated Bytecodes.h include file.

* CMakeLists.txt:

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

22 files changed:
Source/JavaScriptCore/CMakeLists.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/Configurations/JSC.xcconfig
Source/JavaScriptCore/DerivedSources.make
Source/JavaScriptCore/GNUmakefile.am
Source/JavaScriptCore/GNUmakefile.list.am
Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj
Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters
Source/JavaScriptCore/JavaScriptCore.vcxproj/copy-files.cmd
Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Source/JavaScriptCore/bytecode/BytecodeList.json [new file with mode: 0644]
Source/JavaScriptCore/bytecode/Opcode.h
Source/JavaScriptCore/generate-bytecode-files [new file with mode: 0644]
Source/JavaScriptCore/llint/LLIntCLoop.cpp
Source/JavaScriptCore/llint/LLIntCLoop.h
Source/JavaScriptCore/llint/LLIntData.cpp
Source/JavaScriptCore/llint/LLIntOpcode.h
Source/JavaScriptCore/llint/LowLevelInterpreter.asm
Source/WebKit/CMakeLists.txt
Source/WebKit/ChangeLog
Source/WebKit2/CMakeLists.txt
Source/WebKit2/ChangeLog

index 01f1d66..ae1a589 100644 (file)
@@ -595,24 +595,31 @@ if (ENABLE_LLINT)
     )
 
     add_custom_command(
+        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm
+        MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/generate-bytecode-files
+        DEPENDS ${JAVASCRIPTCORE_DIR}/generate-bytecode-files bytecode/BytecodeList.json
+        COMMAND ${PYTHON_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/generate-bytecode-files --bytecodes_h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h --init_bytecodes_asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm ${JAVASCRIPTCORE_DIR}/bytecode/BytecodeList.json
+        VERBATIM)
+
+    add_custom_command(
         OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
         MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb
         DEPENDS ${LLINT_ASM} ${OFFLINE_ASM}
         COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
         VERBATIM)
 
-    # We add the header file directly to the ADD_EXECUTABLE call instead of setting the
-    # OBJECT_DEPENDS property in LLIntOffsetsExtractor.cpp because generate_offset_extractor.rb may
-    # not regenerate it in case the hash it calculates does not change.
-    # In this case, if some of the dependencies specified in the ADD_CUSTOM_COMMAND above have
-    # changed the command will always be called because the mtime of LLIntDesiredOffsets.h will
-    # always be older than that of its dependencies.
-    # Additionally, setting the OBJECT_DEPENDS property will make LLIntDesiredOffsets.h a Makefile
+    # We add the header files directly to the ADD_EXECUTABLE call instead of setting the
+    # OBJECT_DEPENDS property in LLIntOffsetsExtractor.cpp because generate_offset_extractor.rb and
+    # generate-bytecode-files may not regenerate the .h files in case the hash it calculates does not change.
+    # In this case, if some of the dependencies specified in the ADD_CUSTOM_COMMANDs above have
+    # changed the command will always be called because the mtime of the .h files will
+    # always be older than that of their dependencies.
+    # Additionally, setting the OBJECT_DEPENDS property will make the .h files a Makefile
     # dependency of both LLIntOffsetsExtractor and LLIntOffsetsExtractor.cpp, so the command will
-    # actually be run twice!
+    # actually be run multiple times!
     add_executable(LLIntOffsetsExtractor
         ${JAVASCRIPTCORE_DIR}/llint/LLIntOffsetsExtractor.cpp
-        ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
+        ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h
     )
     target_link_libraries(LLIntOffsetsExtractor WTF)
 
@@ -625,7 +632,7 @@ if (ENABLE_LLINT)
     add_custom_command(
         OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
         MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb
-        DEPENDS LLIntOffsetsExtractor ${LLINT_ASM} ${OFFLINE_ASM}
+        DEPENDS LLIntOffsetsExtractor ${LLINT_ASM} ${OFFLINE_ASM} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/InitBytecodes.asm
         COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm $<TARGET_FILE:LLIntOffsetsExtractor> ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
         COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
         VERBATIM)
@@ -790,6 +797,7 @@ set(JavaScriptCore_FORWARDING_HEADERS_FILES
     runtime/VM.h
 
     ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSCBuiltins.h
+    ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Bytecodes.h
 )
 
 
index 99b1a49..3992eef 100644 (file)
@@ -1,3 +1,44 @@
+2014-02-26  Michael Saboff  <msaboff@apple.com>
+
+        Auto generate bytecode information for bytecode parser and LLInt
+        https://bugs.webkit.org/show_bug.cgi?id=129181
+
+        Reviewed by Mark Lam.
+
+        Added new bytecode/BytecodeList.json that contains a list of bytecodes and related
+        helpers.  It also includes bytecode length and other information used to generate files.
+        Added a new generator, generate-bytecode-files that generates Bytecodes.h and InitBytecodes.asm
+        in DerivedSources/JavaScriptCore/.
+
+        Added the generation of these files to the "DerivedSource" build step.
+        Slighty changed the build order, since the Bytecodes.h file is needed by
+        JSCLLIntOffsetsExtractor.  Moved the offline assembly to a separate step since it needs
+        to be run after JSCLLIntOffsetsExtractor.
+
+        Made related changes to OPCODE macros and their use.
+
+        Added JavaScriptCore.framework/PrivateHeaders to header file search path for building
+        jsc to resolve Mac build issue.
+
+        * CMakeLists.txt:
+        * Configurations/JSC.xcconfig:
+        * DerivedSources.make:
+        * GNUmakefile.am:
+        * GNUmakefile.list.am:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+        * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+        * JavaScriptCore.vcxproj/copy-files.cmd:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * bytecode/Opcode.h:
+        (JSC::padOpcodeName):
+        * llint/LLIntCLoop.cpp:
+        (JSC::LLInt::CLoop::initialize):
+        * llint/LLIntCLoop.h:
+        * llint/LLIntData.cpp:
+        (JSC::LLInt::initialize):
+        * llint/LLIntOpcode.h:
+        * llint/LowLevelInterpreter.asm:
+
 2014-02-27  Julien Brianceau   <jbriance@cisco.com>
 
         Fix 32-bit V_JITOperation_EJ callOperation introduced in r162652.
index 73afcde..8190416 100644 (file)
@@ -28,3 +28,6 @@ INSTALL_PATH_ACTUAL = $(JAVASCRIPTCORE_FRAMEWORKS_DIR)/$(JAVASCRIPTCORE_RESOURCE
 PRODUCT_NAME = jsc;
 CODE_SIGN_ENTITLEMENTS = $(CODE_SIGN_ENTITLEMENTS_$(PLATFORM_NAME));
 CODE_SIGN_ENTITLEMENTS_iphoneos = entitlements.plist;
+
+// Explicitly add the PrivateHeaders directory to the search path so that generated header files can be found in production builds.
+HEADER_SEARCH_PATHS = $(JAVASCRIPTCORE_FRAMEWORKS_DIR)/JavaScriptCore.framework/PrivateHeaders $(inherited);
index 12dc8a8..21ad8e5 100644 (file)
@@ -58,6 +58,8 @@ all : \
     RegExpObject.lut.h \
     StringConstructor.lut.h \
     udis86_itab.h \
+    Bytecodes.h \
+    InitBytecodes.asm \
     JSCBuiltins \
 #
 
@@ -90,6 +92,13 @@ KeywordLookup.h: KeywordLookupGenerator.py Keywords.table
 udis86_itab.h: $(JavaScriptCore)/disassembler/udis86/itab.py $(JavaScriptCore)/disassembler/udis86/optable.xml
        (PYTHONPATH=$(JavaScriptCore)/disassembler/udis86 python $(JavaScriptCore)/disassembler/udis86/itab.py $(JavaScriptCore)/disassembler/udis86/optable.xml || exit 1)
 
+# Bytecode files
+
+Bytecodes.h: $(JavaScriptCore)/generate-bytecode-files $(JavaScriptCore)/bytecode/BytecodeList.json
+       python $(JavaScriptCore)/generate-bytecode-files --bytecodes_h Bytecodes.h $(JavaScriptCore)/bytecode/BytecodeList.json
+
+InitBytecodes.asm: $(JavaScriptCore)/generate-bytecode-files $(JavaScriptCore)/bytecode/BytecodeList.json
+       python $(JavaScriptCore)/generate-bytecode-files --init_bytecodes_asm InitBytecodes.asm $(JavaScriptCore)/bytecode/BytecodeList.json
 
 # Inspector interfaces
 
index ad73b78..9c39968 100644 (file)
@@ -95,6 +95,12 @@ pkgconfig_DATA += Source/JavaScriptCore/javascriptcoregtk-@WEBKITGTK_API_VERSION
 
 $(shell mkdir -p DerivedSources/JavaScriptCore)
 
+DerivedSources/JavaScriptCore/Bytecodes.h: $(srcdir)/Source/JavaScriptCore/generate-bytecode-files $(srcdir)/Source/JavaScriptCore/bytecode/BytecodeList.json
+       $(AM_V_GEN)$(PYTHON) $(srcdir)/Source/JavaScriptCore/generate-bytecode-files --bytecodes_h $@ $(srcdir)/Source/JavaScriptCore/bytecode/BytecodeList.json
+
+DerivedSources/JavaScriptCore/InitBytecodes.asm: $(srcdir)/Source/JavaScriptCore/generate-bytecode-files $(srcdir)/Source/JavaScriptCore/bytecode/BytecodeList.json
+       $(AM_V_GEN)$(PYTHON) $(srcdir)/Source/JavaScriptCore/generate-bytecode-files --init_bytecodes_asm $@ $(srcdir)/Source/JavaScriptCore/bytecode/BytecodeList.json
+
 DerivedSources/JavaScriptCore/Lexer.lut.h: $(srcdir)/Source/JavaScriptCore/create_hash_table $(srcdir)/Source/JavaScriptCore/parser/Keywords.table
        $(AM_V_GEN)$(PERL) $^ > $@
 
@@ -111,9 +117,9 @@ DerivedSources/JavaScriptCore/LLIntDesiredOffsets.h: $(javascriptcore_sources) $
        $(AM_V_GEN)$(RUBY) $(srcdir)/Source/JavaScriptCore/offlineasm/generate_offset_extractor.rb $(srcdir)/Source/JavaScriptCore/llint/LowLevelInterpreter.asm $@
        $(AM_V_at)touch $@
 
-$(Programs_LLIntOffsetsExtractor_OBJECTS): DerivedSources/JavaScriptCore/LLIntDesiredOffsets.h 
+$(Programs_LLIntOffsetsExtractor_OBJECTS): DerivedSources/JavaScriptCore/LLIntDesiredOffsets.h DerivedSources/JavaScriptCore/Bytecodes.h
 
-DerivedSources/JavaScriptCore/LLIntAssembly.h: Programs/LLIntOffsetsExtractor$(EXEEXT)
+DerivedSources/JavaScriptCore/LLIntAssembly.h: Programs/LLIntOffsetsExtractor$(EXEEXT) DerivedSources/JavaScriptCore/InitBytecodes.asm
        $(AM_V_GEN)$(RUBY) $(srcdir)/Source/JavaScriptCore/offlineasm/asm.rb $(srcdir)/Source/JavaScriptCore/llint/LowLevelInterpreter.asm Programs/LLIntOffsetsExtractor$(EXEEXT) $@
        $(AM_V_at)touch $@
 
index 426fe3f..0e918be 100644 (file)
@@ -34,6 +34,8 @@ javascriptcore_built_nosources += \
        DerivedSources/JavaScriptCore/RegExpObject.lut.h \
        DerivedSources/JavaScriptCore/RegExpPrototype.lut.h \
        DerivedSources/JavaScriptCore/StringConstructor.lut.h \
+       DerivedSources/JavaScriptCore/Bytecodes.h \
+       DerivedSources/JavaScriptCore/InitBytecodes.asm \
        DerivedSources/JavaScriptCore/LLIntDesiredOffsets.h \
        DerivedSources/JavaScriptCore/LLIntAssembly.h
 
index 6d613c8..ec0e415 100644 (file)
     <ClInclude Include="..\yarr\YarrSyntaxChecker.h" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="..\bytecode\BytecodeList.json" />
     <None Include="JavaScriptCorePostBuild.cmd">
       <FileType>Document</FileType>
     </None>
index d5f12e9..3e00e20 100644 (file)
     <None Include="JavaScriptCorePreLink.cmd" />
     <None Include="JavaScriptCorePostBuild.cmd" />
     <None Include="JavaScriptCorePreBuild.cmd" />
+    <None Include="..\bytecode\BytecodeList.json">
+      <Filter>bytecode</Filter>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <MASM Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\LowLevelInterpreterWin.asm" />
index e0c1f29..6f01498 100755 (executable)
@@ -75,6 +75,7 @@ xcopy /y "%DerivedSourcesDirectory%\InspectorJSFrontendDispatchers.h" "%PrivateH
 \r
 echo Copying builtins header as if it were a private header...\r
 xcopy /y "%DerivedSourcesDirectory%\JSCBuiltins.h" "%PrivateHeadersDirectory%" >NUL\r
+xcopy /y "%DerivedSourcesDirectory%\Bytecodes.h" "%PrivateHeadersDirectory%" >NUL
 \r
 echo Copying resources...\r
 mkdir "%ResourcesDirectory%" 2>NUL\r
index c156ebe..c999de8 100644 (file)
                        name = "Test Tools";
                        productName = "Test Tools";
                };
+               65788A9D18B409EB00C189FF /* Offline Assembler */ = {
+                       isa = PBXAggregateTarget;
+                       buildConfigurationList = 65788AA218B409EB00C189FF /* Build configuration list for PBXAggregateTarget "Offline Assembler" */;
+                       buildPhases = (
+                               65788AA018B409EB00C189FF /* Offline Assemble */,
+                       );
+                       dependencies = (
+                               65788A9E18B409EB00C189FF /* PBXTargetDependency */,
+                       );
+                       name = "Offline Assembler";
+                       productName = "Offline Assembler";
+               };
                65FB3F6609D11E9100F49DEB /* Derived Sources */ = {
                        isa = PBXAggregateTarget;
                        buildConfigurationList = 65FB3F7709D11EBD00F49DEB /* Build configuration list for PBXAggregateTarget "Derived Sources" */;
@@ -37,7 +49,7 @@
                                5D35DEE10C7C140B008648B2 /* Generate DTrace header */,
                        );
                        dependencies = (
-                               0FF922D614F46B600041A24E /* PBXTargetDependency */,
+                               65788AA918B40A3300C189FF /* PBXTargetDependency */,
                        );
                        name = "Derived Sources";
                        productName = "Derived Sources";
                651122FD14046A4C002B101D /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 932F5BD90822A1C700736975 /* JavaScriptCore.framework */; };
                651122FE14046A4C002B101D /* libedit.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D5D8AD00E0D0EBE00F9C692 /* libedit.dylib */; };
                6511230714046B0A002B101D /* testRegExp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651122E5140469BA002B101D /* testRegExp.cpp */; };
+               6514F21918B3E1670098FF8B /* Bytecodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6514F21718B3E1670098FF8B /* Bytecodes.h */; settings = {ATTRIBUTES = (Private, ); }; };
                65303D641447B9E100D3F904 /* ParserTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = 65303D631447B9E100D3F904 /* ParserTokens.h */; settings = {ATTRIBUTES = (Private, ); }; };
                6553A33117A1F1EE008CF6F3 /* CommonSlowPathsExceptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6553A32F17A1F1EE008CF6F3 /* CommonSlowPathsExceptions.cpp */; };
                6553A33217A1F1EE008CF6F3 /* CommonSlowPathsExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6553A33017A1F1EE008CF6F3 /* CommonSlowPathsExceptions.h */; };
                        remoteGlobalIDString = 0F4680A914BA7FD900BFE272;
                        remoteInfo = "LLInt Offsets";
                };
-               0FF922D514F46B600041A24E /* PBXContainerItemProxy */ = {
-                       isa = PBXContainerItemProxy;
-                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
-                       proxyType = 1;
-                       remoteGlobalIDString = 0FF922C314F46B130041A24E;
-                       remoteInfo = JSCLLIntOffsetsExtractor;
-               };
                5D69E911152BE5470028D720 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
                        remoteGlobalIDString = 5D6B2A47152B9E17005231DE;
                        remoteInfo = "Test Tools";
                };
+               65788A9F18B409EB00C189FF /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 0FF922C314F46B130041A24E;
+                       remoteInfo = JSCLLIntOffsetsExtractor;
+               };
+               65788AA818B40A3300C189FF /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 0F4680A914BA7FD900BFE272;
+                       remoteInfo = "LLInt Offsets";
+               };
+               65788AAA18B40A3B00C189FF /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 65FB3F6609D11E9100F49DEB;
+                       remoteInfo = "Derived Sources";
+               };
+               65788AAC18B40A7B00C189FF /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 65788A9D18B409EB00C189FF;
+                       remoteInfo = "Offline Assembler";
+               };
                65FB3F7D09D11EF300F49DEB /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
                6507D2970E871E4A00D7D896 /* JSTypeInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypeInfo.h; sourceTree = "<group>"; };
                651122E5140469BA002B101D /* testRegExp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = testRegExp.cpp; sourceTree = "<group>"; };
                6511230514046A4C002B101D /* testRegExp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testRegExp; sourceTree = BUILT_PRODUCTS_DIR; };
+               6514F21718B3E1670098FF8B /* Bytecodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bytecodes.h; sourceTree = "<group>"; };
+               6514F21818B3E1670098FF8B /* InitBytecodes.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; path = InitBytecodes.asm; sourceTree = "<group>"; };
+               6529FB3018B2D63900C61102 /* generate-bytecode-files */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = "generate-bytecode-files"; sourceTree = "<group>"; };
+               6529FB3118B2D99900C61102 /* BytecodeList.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BytecodeList.json; sourceTree = "<group>"; };
                652A3A201651C66100A80AFE /* ARM64Disassembler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ARM64Disassembler.cpp; path = disassembler/ARM64Disassembler.cpp; sourceTree = "<group>"; };
                652A3A221651C69700A80AFE /* A64DOpcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = A64DOpcode.cpp; path = disassembler/ARM64/A64DOpcode.cpp; sourceTree = "<group>"; };
                652A3A231651C69700A80AFE /* A64DOpcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = A64DOpcode.h; path = disassembler/ARM64/A64DOpcode.h; sourceTree = "<group>"; };
                0867D691FE84028FC02AAC07 /* JavaScriptCore */ = {
                        isa = PBXGroup;
                        children = (
+                               6529FB3018B2D63900C61102 /* generate-bytecode-files */,
                                8604F4F2143A6C4400B295F5 /* ChangeLog */,
                                F692A8540255597D01FF60F7 /* create_hash_table */,
                                A718F8211178EB4B002465A7 /* create_regex_tables */,
                        isa = PBXGroup;
                        children = (
                                BC18C5230E16FC8A00B34460 /* ArrayPrototype.lut.h */,
+                               6514F21718B3E1670098FF8B /* Bytecodes.h */,
                                BCD203E70E1718F4002C7E82 /* DatePrototype.lut.h */,
+                               6514F21818B3E1670098FF8B /* InitBytecodes.asm */,
                                A513E5C6185F9436007E95AD /* InjectedScriptSource.h */,
                                A53243951856A475002ED692 /* InspectorJS.json */,
                                A53243961856A475002ED692 /* InspectorJSBackendCommands.js */,
                969A078F0ED1D3AE00F1F681 /* bytecode */ = {
                        isa = PBXGroup;
                        children = (
+                               6529FB3118B2D99900C61102 /* BytecodeList.json */,
                                0F8335B41639C1E3001443B5 /* ArrayAllocationProfile.cpp */,
                                0F8335B51639C1E3001443B5 /* ArrayAllocationProfile.h */,
                                0F63945115D07051006A597C /* ArrayProfile.cpp */,
                                86D3B2C410156BDE002865E7 /* ARMAssembler.h in Headers */,
                                2AAAA31218BD49D100394CC8 /* StructureIDBlob.h in Headers */,
                                86ADD1450FDDEA980006EEC2 /* ARMv7Assembler.h in Headers */,
+                               A5CEEE15187F3BAD00E55C99 /* InspectorAgent.h in Headers */,
+                               6514F21918B3E1670098FF8B /* Bytecodes.h in Headers */,
+                               2A343F7618A1748B0039B085 /* GCSegmentedArray.h in Headers */,
+                               2A343F7818A1749D0039B085 /* GCSegmentedArrayInlines.h in Headers */,
                                65C0285D1717966800351E35 /* ARMv7DOpcode.h in Headers */,
                                0F8335B81639C1EA001443B5 /* ArrayAllocationProfile.h in Headers */,
                                A7A8AF3517ADB5F3005AB174 /* ArrayBuffer.h in Headers */,
                        buildRules = (
                        );
                        dependencies = (
+                               65788AAB18B40A3B00C189FF /* PBXTargetDependency */,
                                0FF922D314F46B2F0041A24E /* PBXTargetDependency */,
                        );
                        name = JSCLLIntOffsetsExtractor;
                        );
                        dependencies = (
                                0FCEFABD1805D66300472CE4 /* PBXTargetDependency */,
+                               65788AAD18B40A7B00C189FF /* PBXTargetDependency */,
                                65FB3F7E09D11EF300F49DEB /* PBXTargetDependency */,
                        );
                        name = JavaScriptCore;
                        targets = (
                                932F5BE30822A1C700736975 /* All */,
                                932F5B3E0822A1C700736975 /* JavaScriptCore */,
+                               0FCEFAB51805D61600472CE4 /* llvmForJSC */,
+                               0F4680A914BA7FD900BFE272 /* LLInt Offsets */,
                                65FB3F6609D11E9100F49DEB /* Derived Sources */,
+                               0FF922C314F46B130041A24E /* JSCLLIntOffsetsExtractor */,
+                               65788A9D18B409EB00C189FF /* Offline Assembler */,
                                1412111F0A48793C00480255 /* minidom */,
                                14BD59BE0A3E8F9000BAF59C /* testapi */,
                                932F5BDA0822A1C700736975 /* jsc */,
                                651122F714046A4C002B101D /* testRegExp */,
-                               0F4680A914BA7FD900BFE272 /* LLInt Offsets */,
-                               0FF922C314F46B130041A24E /* JSCLLIntOffsetsExtractor */,
                                5D6B2A47152B9E17005231DE /* Test Tools */,
-                               0FCEFAB51805D61600472CE4 /* llvmForJSC */,
                        );
                };
 /* End PBXProject section */
                        shellPath = /bin/sh;
                        shellScript = "set -e\n\n# Skip for Production builds.\nif [[ ${CONFIGURATION:=Debug} == \"Production\" ]]; then\n    exit\nfi\n\n# Copy and update the jsc binary to refer to JavaScriptCore.framework relative to its location.\nditto \"${BUILT_PRODUCTS_DIR}/jsc\" \"${BUILT_PRODUCTS_DIR}/${JAVASCRIPTCORE_RESOURCES_DIR}/jsc\"\ninstall_name_tool -change \"${JAVASCRIPTCORE_FRAMEWORKS_DIR}/JavaScriptCore.framework/Versions/A/JavaScriptCore\" \"@loader_path/../JavaScriptCore\" \"${BUILT_PRODUCTS_DIR}/${JAVASCRIPTCORE_RESOURCES_DIR}/jsc\"\n";
                };
+               65788AA018B409EB00C189FF /* Offline Assemble */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputPaths = (
+                       );
+                       name = "Offline Assemble";
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "if [[ \"${ACTION}\" == \"installhdrs\" ]]; then\n    exit 0\nfi\n\ncd \"${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore\"\n\n/usr/bin/env ruby JavaScriptCore/offlineasm/asm.rb JavaScriptCore/llint/LowLevelInterpreter.asm ${BUILT_PRODUCTS_DIR}/JSCLLIntOffsetsExtractor LLIntAssembly.h || exit 1";
+               };
                65FB3F6509D11E9100F49DEB /* Generate Derived Sources */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        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\nif [[ \"${ACTION}\" == \"installhdrs\" ]]; then\n    exit 0\nfi\n\n/usr/bin/env ruby JavaScriptCore/offlineasm/asm.rb JavaScriptCore/llint/LowLevelInterpreter.asm ${BUILT_PRODUCTS_DIR}/JSCLLIntOffsetsExtractor LLIntAssembly.h\n";
+                       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";
                };
                A55DEAA416703DF7003DB841 /* Check For Inappropriate Macros in External Headers */ = {
                        isa = PBXShellScriptBuildPhase;
                        target = 0F4680A914BA7FD900BFE272 /* LLInt Offsets */;
                        targetProxy = 0FF922D214F46B2F0041A24E /* PBXContainerItemProxy */;
                };
-               0FF922D614F46B600041A24E /* PBXTargetDependency */ = {
-                       isa = PBXTargetDependency;
-                       target = 0FF922C314F46B130041A24E /* JSCLLIntOffsetsExtractor */;
-                       targetProxy = 0FF922D514F46B600041A24E /* PBXContainerItemProxy */;
-               };
                5D69E912152BE5470028D720 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 932F5BDA0822A1C700736975 /* jsc */;
                        target = 5D6B2A47152B9E17005231DE /* Test Tools */;
                        targetProxy = 5D6B2A56152B9E2E005231DE /* PBXContainerItemProxy */;
                };
+               65788A9E18B409EB00C189FF /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 0FF922C314F46B130041A24E /* JSCLLIntOffsetsExtractor */;
+                       targetProxy = 65788A9F18B409EB00C189FF /* PBXContainerItemProxy */;
+               };
+               65788AA918B40A3300C189FF /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 0F4680A914BA7FD900BFE272 /* LLInt Offsets */;
+                       targetProxy = 65788AA818B40A3300C189FF /* PBXContainerItemProxy */;
+               };
+               65788AAB18B40A3B00C189FF /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
+                       targetProxy = 65788AAA18B40A3B00C189FF /* PBXContainerItemProxy */;
+               };
+               65788AAD18B40A7B00C189FF /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 65788A9D18B409EB00C189FF /* Offline Assembler */;
+                       targetProxy = 65788AAC18B40A7B00C189FF /* PBXContainerItemProxy */;
+               };
                65FB3F7E09D11EF300F49DEB /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 65FB3F6609D11E9100F49DEB /* Derived Sources */;
                        };
                        name = Production;
                };
+               65788AA318B409EB00C189FF /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 1C9051430BA9E8A70081E9D0 /* JavaScriptCore.xcconfig */;
+                       buildSettings = {
+                               INFOPLIST_FILE = "Derived Sources copy-Info.plist";
+                               PRODUCT_NAME = "Derived Sources copy";
+                       };
+                       name = Debug;
+               };
+               65788AA418B409EB00C189FF /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 1C9051430BA9E8A70081E9D0 /* JavaScriptCore.xcconfig */;
+                       buildSettings = {
+                               INFOPLIST_FILE = "Derived Sources copy-Info.plist";
+                               PRODUCT_NAME = "Derived Sources copy";
+                       };
+                       name = Release;
+               };
+               65788AA518B409EB00C189FF /* Profiling */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 1C9051430BA9E8A70081E9D0 /* JavaScriptCore.xcconfig */;
+                       buildSettings = {
+                               INFOPLIST_FILE = "Derived Sources copy-Info.plist";
+                               PRODUCT_NAME = "Derived Sources copy";
+                       };
+                       name = Profiling;
+               };
+               65788AA618B409EB00C189FF /* Production */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 1C9051430BA9E8A70081E9D0 /* JavaScriptCore.xcconfig */;
+                       buildSettings = {
+                               INFOPLIST_FILE = "Derived Sources copy-Info.plist";
+                               PRODUCT_NAME = "Derived Sources copy";
+                       };
+                       name = Production;
+               };
                65FB3F7809D11EBD00F49DEB /* Debug */ = {
                        isa = XCBuildConfiguration;
                        baseConfigurationReference = 1C9051430BA9E8A70081E9D0 /* JavaScriptCore.xcconfig */;
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Production;
                };
+               65788AA218B409EB00C189FF /* Build configuration list for PBXAggregateTarget "Offline Assembler" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               65788AA318B409EB00C189FF /* Debug */,
+                               65788AA418B409EB00C189FF /* Release */,
+                               65788AA518B409EB00C189FF /* Profiling */,
+                               65788AA618B409EB00C189FF /* Production */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Production;
+               };
                65FB3F7709D11EBD00F49DEB /* Build configuration list for PBXAggregateTarget "Derived Sources" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
diff --git a/Source/JavaScriptCore/bytecode/BytecodeList.json b/Source/JavaScriptCore/bytecode/BytecodeList.json
new file mode 100644 (file)
index 0000000..3203359
--- /dev/null
@@ -0,0 +1,162 @@
+[
+    {
+        "section" : "Bytecodes", "emitInHFile" : true, "emitInASMFile" : true, "macroNameComponent" : "BYTECODE",
+        "bytecodes" : [
+            { "name" : "op_enter", "length" : 1 },
+            { "name" : "op_create_activation", "length" : 2 },
+            { "name" : "op_touch_entry", "length" : 1 },
+            { "name" : "op_init_lazy_reg", "length" : 2 },
+            { "name" : "op_create_arguments", "length" : 2 },
+            { "name" : "op_create_this", "length" : 4 },
+            { "name" : "op_get_callee", "length" : 3 },
+            { "name" : "op_to_this", "length" : 3 },
+            { "name" : "op_new_object", "length" : 4 },
+            { "name" : "op_new_array", "length" : 5 },
+            { "name" : "op_new_array_with_size", "length" : 4 },
+            { "name" : "op_new_array_buffer", "length" : 5 },
+            { "name" : "op_new_regexp", "length" : 3 },
+            { "name" : "op_mov", "length" : 3 },
+            { "name" : "op_captured_mov", "length" : 4 },
+            { "name" : "op_not", "length" : 3 },
+            { "name" : "op_eq", "length" : 4 },
+            { "name" : "op_eq_null", "length" : 3 },
+            { "name" : "op_neq", "length" : 4 },
+            { "name" : "op_neq_null", "length" : 3 },
+            { "name" : "op_stricteq", "length" : 4 },
+            { "name" : "op_nstricteq", "length" : 4 },
+            { "name" : "op_less", "length" : 4 },
+            { "name" : "op_lesseq", "length" : 4 },
+            { "name" : "op_greater", "length" : 4 },
+            { "name" : "op_greatereq", "length" : 4 },
+            { "name" : "op_inc", "length" : 2 },
+            { "name" : "op_dec", "length" : 2 },
+            { "name" : "op_to_number", "length" : 3 },
+            { "name" : "op_negate", "length" : 3 },
+            { "name" : "op_add", "length" : 5 },
+            { "name" : "op_mul", "length" : 5 },
+            { "name" : "op_div", "length" : 5 },
+            { "name" : "op_mod", "length" : 4 },
+            { "name" : "op_sub", "length" : 5 },
+            { "name" : "op_lshift", "length" : 4 },
+            { "name" : "op_rshift", "length" : 4 },
+            { "name" : "op_urshift", "length" : 4 },
+            { "name" : "op_unsigned", "length" : 3 },
+            { "name" : "op_bitand", "length" : 5 },
+            { "name" : "op_bitxor", "length" : 5 },
+            { "name" : "op_bitor", "length" : 5 },
+            { "name" : "op_check_has_instance", "length" : 5 },
+            { "name" : "op_instanceof", "length" : 4 },
+            { "name" : "op_typeof", "length" : 3 },
+            { "name" : "op_is_undefined", "length" : 3 },
+            { "name" : "op_is_boolean", "length" : 3 },
+            { "name" : "op_is_number", "length" : 3 },
+            { "name" : "op_is_string", "length" : 3 },
+            { "name" : "op_is_object", "length" : 3 },
+            { "name" : "op_is_function", "length" : 3 },
+            { "name" : "op_in", "length" : 4 },
+            { "name" : "op_init_global_const_nop", "length" : 5 },
+            { "name" : "op_init_global_const", "length" : 5 },
+            { "name" : "op_get_by_id", "length" : 9  },
+            { "name" : "op_get_by_id_out_of_line", "length" : 9  },
+            { "name" : "op_get_array_length", "length" : 9 },
+            { "name" : "op_get_arguments_length", "length" : 4 },
+            { "name" : "op_put_by_id", "length" : 9 },
+            { "name" : "op_put_by_id_out_of_line", "length" : 9 },
+            { "name" : "op_put_by_id_transition_direct", "length" : 9 },
+            { "name" : "op_put_by_id_transition_direct_out_of_line", "length" : 9 },
+            { "name" : "op_put_by_id_transition_normal", "length" : 9 },
+            { "name" : "op_put_by_id_transition_normal_out_of_line", "length" : 9 },
+            { "name" : "op_del_by_id", "length" : 4 },
+            { "name" : "op_get_by_val", "length" : 6 },
+            { "name" : "op_get_argument_by_val", "length" : 6 },
+            { "name" : "op_get_by_pname", "length" : 7 },
+            { "name" : "op_put_by_val", "length" : 5 },
+            { "name" : "op_put_by_val_direct", "length" : 5 },
+            { "name" : "op_del_by_val", "length" : 4 },
+            { "name" : "op_put_by_index", "length" : 4 },
+            { "name" : "op_put_getter_setter", "length" : 5 },
+            { "name" : "op_jmp", "length" : 2 },
+            { "name" : "op_jtrue", "length" : 3 },
+            { "name" : "op_jfalse", "length" : 3 },
+            { "name" : "op_jeq_null", "length" : 3 },
+            { "name" : "op_jneq_null", "length" : 3 },
+            { "name" : "op_jneq_ptr", "length" : 4 },
+            { "name" : "op_jless", "length" : 4 },
+            { "name" : "op_jlesseq", "length" : 4 },
+            { "name" : "op_jgreater", "length" : 4 },
+            { "name" : "op_jgreatereq", "length" : 4 },
+            { "name" : "op_jnless", "length" : 4 },
+            { "name" : "op_jnlesseq", "length" : 4 },
+            { "name" : "op_jngreater", "length" : 4 },
+            { "name" : "op_jngreatereq", "length" : 4 },
+            { "name" : "op_loop_hint", "length" : 1 },
+            { "name" : "op_switch_imm", "length" : 4 },
+            { "name" : "op_switch_char", "length" : 4 },
+            { "name" : "op_switch_string", "length" : 4 },
+            { "name" : "op_new_func", "length" : 4 },
+            { "name" : "op_new_captured_func", "length" : 4 },
+            { "name" : "op_new_func_exp", "length" : 3 },
+            { "name" : "op_call", "length" : 9 },
+            { "name" : "op_call_eval", "length" : 9 },
+            { "name" : "op_call_varargs", "length" : 9 },
+            { "name" : "op_tear_off_activation", "length" : 2 },
+            { "name" : "op_tear_off_arguments", "length" : 3 },
+            { "name" : "op_ret", "length" : 2 },
+            { "name" : "op_ret_object_or_this", "length" : 3 },
+            { "name" : "op_construct", "length" : 9 },
+            { "name" : "op_strcat", "length" : 4 },
+            { "name" : "op_to_primitive", "length" : 3 },
+            { "name" : "op_get_pnames", "length" : 6 },
+            { "name" : "op_next_pname", "length" : 7 },
+            { "name" : "op_resolve_scope", "length" : 6 },
+            { "name" : "op_get_from_scope", "length" : 8 },
+            { "name" : "op_put_to_scope", "length" : 7 },
+            { "name" : "op_push_with_scope", "length" : 2 },
+            { "name" : "op_pop_scope", "length" : 1 },
+            { "name" : "op_push_name_scope", "length" : 4 },
+            { "name" : "op_catch", "length" : 2 },
+            { "name" : "op_throw", "length" : 2 },
+            { "name" : "op_throw_static_error", "length" : 3 },
+            { "name" : "op_debug", "length" : 3 },
+            { "name" : "op_profile_will_call", "length" : 2 },
+            { "name" : "op_profile_did_call", "length" : 2 },
+            { "name" : "op_end", "length" : 2 }
+        ]
+    },
+    {
+        "section" : "NativeHelpers", "emitInHFile" : true, "emitInASMFile" : true, "defaultLength" : 1,
+        "macroNameComponent" : "BYTECODE_HELPER", "emitDefineID" : true,
+        "bytecodes" : [
+            { "name" : "llint_program_prologue" },
+            { "name" : "llint_eval_prologue" },
+            { "name" : "llint_function_for_call_prologue" },
+            { "name" : "llint_function_for_construct_prologue" },
+            { "name" : "llint_function_for_call_arity_check" },
+            { "name" : "llint_function_for_construct_arity_check" },
+            { "name" : "llint_generic_return_point" },
+            { "name" : "llint_throw_from_slow_path_trampoline" },
+            { "name" : "llint_throw_during_call_trampoline" },
+            { "name" : "llint_native_call_trampoline" },
+            { "name" : "llint_native_construct_trampoline" }
+        ]
+    },
+    {
+        "section" : "CLoopHelpers", "emitInHFile" : true, "emitInASMFile" : false, "defaultLength" : 1,
+        "macroNameComponent" : "CLOOP_BYTECODE_HELPER",
+        "bytecodes" : [
+            { "name" : "llint_c_loop_init" },
+            { "name" : "getHostCallReturnValue" },
+            { "name" : "llint_return_to_host" },
+            { "name" : "llint_call_to_javascript" },
+            { "name" : "llint_call_to_native_function" },
+            { "name" : "handleUncaughtException" },
+            { "name" : "llint_cloop_did_return_from_js_1" },
+            { "name" : "llint_cloop_did_return_from_js_2" },
+            { "name" : "llint_cloop_did_return_from_js_3" },
+            { "name" : "llint_cloop_did_return_from_js_4" },
+            { "name" : "llint_cloop_did_return_from_js_5" },
+            { "name" : "llint_cloop_did_return_from_js_6" },
+            { "name" : "llint_cloop_did_return_from_js_7" }
+        ]
+    }
+]
index c982ac0..be85cd4 100644 (file)
@@ -30,6 +30,7 @@
 #ifndef Opcode_h
 #define Opcode_h
 
+#include "Bytecodes.h"
 #include "LLIntOpcode.h"
 
 #include <algorithm>
 namespace JSC {
 
 #define FOR_EACH_CORE_OPCODE_ID_WITH_EXTENSION(macro, extension__) \
-    macro(op_enter, 1) \
-    macro(op_create_activation, 2) \
-    macro(op_touch_entry, 1) \
-    macro(op_init_lazy_reg, 2) \
-    macro(op_create_arguments, 2) \
-    macro(op_create_this, 4) \
-    macro(op_get_callee, 3) \
-    macro(op_to_this, 3) \
-    \
-    macro(op_new_object, 4) \
-    macro(op_new_array, 5) \
-    macro(op_new_array_with_size, 4) \
-    macro(op_new_array_buffer, 5) \
-    macro(op_new_regexp, 3) \
-    macro(op_mov, 3) \
-    macro(op_captured_mov, 4) \
-    \
-    macro(op_not, 3) \
-    macro(op_eq, 4) \
-    macro(op_eq_null, 3) \
-    macro(op_neq, 4) \
-    macro(op_neq_null, 3) \
-    macro(op_stricteq, 4) \
-    macro(op_nstricteq, 4) \
-    macro(op_less, 4) \
-    macro(op_lesseq, 4) \
-    macro(op_greater, 4) \
-    macro(op_greatereq, 4) \
-    \
-    macro(op_inc, 2) \
-    macro(op_dec, 2) \
-    macro(op_to_number, 3) \
-    macro(op_negate, 3) \
-    macro(op_add, 5) \
-    macro(op_mul, 5) \
-    macro(op_div, 5) \
-    macro(op_mod, 4) \
-    macro(op_sub, 5) \
-    \
-    macro(op_lshift, 4) \
-    macro(op_rshift, 4) \
-    macro(op_urshift, 4) \
-    macro(op_unsigned, 3) \
-    macro(op_bitand, 5) \
-    macro(op_bitxor, 5) \
-    macro(op_bitor, 5) \
-    \
-    macro(op_check_has_instance, 5) \
-    macro(op_instanceof, 4) \
-    macro(op_typeof, 3) \
-    macro(op_is_undefined, 3) \
-    macro(op_is_boolean, 3) \
-    macro(op_is_number, 3) \
-    macro(op_is_string, 3) \
-    macro(op_is_object, 3) \
-    macro(op_is_function, 3) \
-    macro(op_in, 4) \
-    \
-    macro(op_init_global_const_nop, 5) \
-    macro(op_init_global_const, 5) \
-    macro(op_get_by_id, 9) /* has value profiling */ \
-    macro(op_get_by_id_out_of_line, 9) /* has value profiling */ \
-    macro(op_get_array_length, 9) /* has value profiling */ \
-    macro(op_get_arguments_length, 4) \
-    macro(op_put_by_id, 9) \
-    macro(op_put_by_id_out_of_line, 9) \
-    macro(op_put_by_id_transition_direct, 9) \
-    macro(op_put_by_id_transition_direct_out_of_line, 9) \
-    macro(op_put_by_id_transition_normal, 9) \
-    macro(op_put_by_id_transition_normal_out_of_line, 9) \
-    macro(op_del_by_id, 4) \
-    macro(op_get_by_val, 6) /* has value profiling */ \
-    macro(op_get_argument_by_val, 6) /* must be the same size as op_get_by_val */ \
-    macro(op_get_by_pname, 7) \
-    macro(op_put_by_val, 5) \
-    macro(op_put_by_val_direct, 5) \
-    macro(op_del_by_val, 4) \
-    macro(op_put_by_index, 4) \
-    macro(op_put_getter_setter, 5) \
-    \
-    macro(op_jmp, 2) \
-    macro(op_jtrue, 3) \
-    macro(op_jfalse, 3) \
-    macro(op_jeq_null, 3) \
-    macro(op_jneq_null, 3) \
-    macro(op_jneq_ptr, 4) \
-    macro(op_jless, 4) \
-    macro(op_jlesseq, 4) \
-    macro(op_jgreater, 4) \
-    macro(op_jgreatereq, 4) \
-    macro(op_jnless, 4) \
-    macro(op_jnlesseq, 4) \
-    macro(op_jngreater, 4) \
-    macro(op_jngreatereq, 4) \
-    \
-    macro(op_loop_hint, 1) \
-    \
-    macro(op_switch_imm, 4) \
-    macro(op_switch_char, 4) \
-    macro(op_switch_string, 4) \
-    \
-    macro(op_new_func, 4) \
-    macro(op_new_captured_func, 4) \
-    macro(op_new_func_exp, 3) \
-    macro(op_call, 9) /* has value profiling */ \
-    macro(op_call_eval, 9) /* has value profiling */ \
-    macro(op_call_varargs, 9) /* has value profiling */ \
-    macro(op_tear_off_activation, 2) \
-    macro(op_tear_off_arguments, 3) \
-    macro(op_ret, 2) \
-    macro(op_ret_object_or_this, 3) \
-    \
-    macro(op_construct, 9) \
-    macro(op_strcat, 4) \
-    macro(op_to_primitive, 3) \
-    \
-    macro(op_get_pnames, 6) \
-    macro(op_next_pname, 7) \
-    \
-    macro(op_resolve_scope, 6) \
-    macro(op_get_from_scope, 8) /* has value profiling */ \
-    macro(op_put_to_scope, 7) \
-    \
-    macro(op_push_with_scope, 2) \
-    macro(op_pop_scope, 1) \
-    macro(op_push_name_scope, 4) \
-    \
-    macro(op_catch, 2) \
-    macro(op_throw, 2) \
-    macro(op_throw_static_error, 3) \
-    \
-    macro(op_debug, 3) \
-    macro(op_profile_will_call, 2) \
-    macro(op_profile_did_call, 2) \
-    \
-    extension__ \
-    \
-    macro(op_end, 2) // end must be the last opcode in the list
+    FOR_EACH_BYTECODE_ID(macro) \
+    extension__
 
 #define FOR_EACH_CORE_OPCODE_ID(macro) \
     FOR_EACH_CORE_OPCODE_ID_WITH_EXTENSION(macro, /* No extension */ )
@@ -194,7 +59,11 @@ namespace JSC {
 #undef OPCODE_ID_ENUM
 
 const int maxOpcodeLength = 9;
-const int numOpcodeIDs = op_end + 1;
+#if ENABLE(LLINT_C_LOOP)
+const int numOpcodeIDs = NUMBER_OF_BYTECODE_IDS + NUMBER_OF_BYTECODE_HELPER_IDS + NUMBER_OF_CLOOP_BYTECODE_HELPER_IDS;
+#else
+const int numOpcodeIDs = NUMBER_OF_BYTECODE_IDS;
+#endif
 
 #define OPCODE_ID_LENGTHS(id, length) const int id##_length = length;
     FOR_EACH_OPCODE_ID(OPCODE_ID_LENGTHS);
@@ -206,7 +75,7 @@ const int numOpcodeIDs = op_end + 1;
     const int opcodeLengths[numOpcodeIDs] = { FOR_EACH_OPCODE_ID(OPCODE_ID_LENGTH_MAP) };
 #undef OPCODE_ID_LENGTH_MAP
 
-#define VERIFY_OPCODE_ID(id, size) COMPILE_ASSERT(id <= op_end, ASSERT_THAT_JS_OPCODE_IDS_ARE_VALID);
+#define VERIFY_OPCODE_ID(id, size) COMPILE_ASSERT(id <= numOpcodeIDs, ASSERT_THAT_JS_OPCODE_IDS_ARE_VALID);
     FOR_EACH_OPCODE_ID(VERIFY_OPCODE_ID);
 #undef VERIFY_OPCODE_ID
 
diff --git a/Source/JavaScriptCore/generate-bytecode-files b/Source/JavaScriptCore/generate-bytecode-files
new file mode 100644 (file)
index 0000000..96dce6e
--- /dev/null
@@ -0,0 +1,237 @@
+#! /usr/bin/python
+
+# Copyright (C) 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 AND ITS CONTRIBUTORS "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 OR ITS 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.
+
+# This tool processes the bytecode list to create Bytecodes.h and InitBytecodes.asm
+
+import hashlib
+import json
+import optparse
+import os
+import re
+import sys
+
+cCopyrightMsg = """/*
+* Copyright (C) 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 AND ITS CONTRIBUTORS "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 OR ITS 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.
+
+* Autogenerated from %s, do not modify.
+*/
+
+"""
+
+asmCopyrightMsg = """# Copyright (C) 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 AND ITS CONTRIBUTORS "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 OR ITS 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.
+
+# Autogenerated from %s, do not modify.
+
+"""
+def openOrExit(path, mode):
+    try:
+        return open(path, mode)
+    except IOError as e:
+        print "I/O error opening {0}, ({1}): {2}".format(path, e.errno, e.strerror)
+        exit(1)
+
+def hashFile(file):
+    sha1 = hashlib.sha1()
+    file.seek(0)
+    for line in file:
+        sha1.update(line)
+
+    file.seek(0)
+
+    return sha1.hexdigest()
+
+if __name__ == "__main__":
+    parser = optparse.OptionParser(usage = "usage: %prog [--bytecodes_h <FILE>] [--init_bytecodes_asm <FILE>] <bytecode-json-file>")
+    parser.add_option("-b", "--bytecodes_h", dest = "bytecodesHFileName", help = "generate bytecodes macro .h FILE", metavar = "FILE")
+    parser.add_option("-a", "--init_bytecodes_asm", dest = "initASMFileName", help="generate ASM bytecodes init FILE", metavar = "FILE")
+    (options, args) = parser.parse_args()
+
+    if len(args) != 1:
+        parser.error("missing <bytecode-json-file>")
+
+    bytecodeJSONFile = args[0]
+    bytecodeFile = openOrExit(bytecodeJSONFile, "rb")
+    sha1Hash = hashFile(bytecodeFile)
+
+    hFileHashString = "// SHA1Hash: {0}\n".format(sha1Hash)
+    asmFileHashString = "# SHA1Hash: {0}\n".format(sha1Hash)
+
+    bytecodeHFilename = options.bytecodesHFileName
+    initASMFileName = options.initASMFileName
+
+    if not bytecodeHFilename and not initASMFileName:
+        parser.print_help()
+        exit(0)
+
+    needToGenerate = False
+
+    if bytecodeHFilename:
+        try:
+            bytecodeHReadFile = open(bytecodeHFilename, "rb")
+            
+            hashLine = bytecodeHReadFile.readline()
+            if hashLine != hFileHashString:
+                needToGenerate = True
+        except:
+            needToGenerate = True
+        else:
+            bytecodeHReadFile.close()
+
+    if initASMFileName:
+        try:
+            initBytecodesReadFile = open(initASMFileName, "rb")
+            
+            hashLine = initBytecodesReadFile.readline()
+            if hashLine != asmFileHashString:
+                needToGenerate = True
+        except:
+            needToGenerate = True
+        else:
+            initBytecodesReadFile.close()
+
+    if not needToGenerate:
+        print "Nothing changed.\n"
+        exit(0)
+
+    genString = "Generating "
+
+    if bytecodeHFilename:
+        bytecodeHFile = openOrExit(bytecodeHFilename, "wb")
+        genString = genString + "{0} ".format(bytecodeHFilename)
+
+    if initASMFileName:
+        initBytecodesFile = openOrExit(initASMFileName, "wb")
+        if bytecodeHFilename:
+            genString = genString + "and "
+        genString = genString + "{0} ".format(initASMFileName)
+
+    print "{0}from {1}\n".format(genString, bytecodeJSONFile)
+
+
+    try:
+        bytecodeSections = json.load(bytecodeFile, encoding = "utf-8")
+    except:
+        print "Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info())
+
+    if bytecodeHFilename:
+        bytecodeHFile.write(hFileHashString)
+        bytecodeHFile.write(cCopyrightMsg % bytecodeJSONFile)
+        bytecodeHFile.write("#ifndef Bytecodes_h\n")
+        bytecodeHFile.write("#define Bytecodes_h\n\n")
+
+    if initASMFileName:
+        initBytecodesFile.write(asmFileHashString)
+        initBytecodesFile.write(asmCopyrightMsg % bytecodeJSONFile)
+        initASMBytecodeNum = 0
+
+    for section in bytecodeSections:
+        if bytecodeHFilename and section['emitInHFile']:
+            bytecodeHFile.write("#define FOR_EACH_{0}_ID(macro) \\\n".format(section["macroNameComponent"]))
+            firstMacro = True
+            defaultLength = 1
+            if "defaultLength" in section:
+                defaultLength = section["defaultLength"]
+
+            bytecodeNum = 0
+            for bytecode in section["bytecodes"]:
+                if not firstMacro:
+                    bytecodeHFile.write(" \\\n")
+
+                length = defaultLength
+                if "length" in bytecode:
+                    length = bytecode["length"]
+
+                bytecodeHFile.write("    macro({0}, {1})".format(bytecode["name"], length))
+                firstMacro = False
+                bytecodeNum = bytecodeNum + 1
+
+            bytecodeHFile.write("\n\n")
+            bytecodeHFile.write("#define NUMBER_OF_{0}_IDS {1}\n\n".format(section["macroNameComponent"], bytecodeNum))
+
+            if "emitDefineID" in section:
+                bytecodeNum = 0
+                for bytecode in section["bytecodes"]:
+                    bytecodeHFile.write("#define %s_ID %s\n" % (bytecode["name"].upper(), bytecodeNum))
+                    bytecodeNum = bytecodeNum + 1
+
+                bytecodeHFile.write("\n\n")
+
+        if initASMFileName and section['emitInASMFile']:
+            for bytecode in section["bytecodes"]:
+                initBytecodesFile.write("setEntryAddress({0}, _{1})\n".format(initASMBytecodeNum, bytecode["name"]))
+                initASMBytecodeNum = initASMBytecodeNum + 1
+
+    if bytecodeHFilename:
+        bytecodeHFile.write("#endif // Bytecodes_h\n")
+        bytecodeHFile.close()
+
+    if initASMFileName:
+        initBytecodesFile.close()
+
+    bytecodeFile.close()
+
+    exit(0)
index 27db115..6426212 100644 (file)
@@ -35,7 +35,7 @@ namespace LLInt {
 
 void CLoop::initialize()
 {
-    execute(llint_unused, 0, 0, 0, true);
+    execute(llint_c_loop_init, 0, 0, 0, true);
 }
 
 } // namespace LLInt
index b357712..33fd940 100644 (file)
@@ -36,8 +36,6 @@
 namespace JSC {
 namespace LLInt {
 
-const OpcodeID llint_unused = llint_end;
-
 class CLoop {
 public:
     static void initialize();
index 96e02d7..d4edef4 100644 (file)
@@ -56,7 +56,7 @@ void initialize()
             LLInt::getCodePtr(llint_throw_from_slow_path_trampoline);
     #define OPCODE_ENTRY(opcode, length) \
         Data::s_opcodeMap[opcode] = static_cast<Opcode>(LLInt::getCodePtr(llint_##opcode));
-    FOR_EACH_OPCODE_ID(OPCODE_ENTRY);
+    FOR_EACH_CORE_OPCODE_ID(OPCODE_ENTRY);
     #undef OPCODE_ENTRY
     #endif // !ENABLE(LLINT_C_LOOP)
 }
index b6e830e..f875016 100644 (file)
 #if ENABLE(LLINT_C_LOOP)
 
 #define FOR_EACH_LLINT_NOJIT_NATIVE_HELPER(macro) \
-    macro(getHostCallReturnValue, 1) \
-    macro(llint_return_to_host, 1) \
-    macro(llint_call_to_javascript, 1) \
-    macro(llint_call_to_native_function, 1) \
-    macro(handleUncaughtException, 1) \
-    \
-    macro(llint_cloop_did_return_from_js_1, 1) \
-    macro(llint_cloop_did_return_from_js_2, 1) \
-    macro(llint_cloop_did_return_from_js_3, 1) \
-    macro(llint_cloop_did_return_from_js_4, 1) \
-    macro(llint_cloop_did_return_from_js_5, 1) \
-    macro(llint_cloop_did_return_from_js_6, 1) \
-    macro(llint_cloop_did_return_from_js_7, 1) \
+    FOR_EACH_CLOOP_BYTECODE_HELPER_ID(macro)
 
 #else // !ENABLE(LLINT_C_LOOP)
 
 #define FOR_EACH_LLINT_NATIVE_HELPER(macro) \
     FOR_EACH_LLINT_NOJIT_NATIVE_HELPER(macro) \
     \
-    macro(llint_begin, 1) \
-    \
-    macro(llint_program_prologue, 1) \
-    macro(llint_eval_prologue, 1) \
-    macro(llint_function_for_call_prologue, 1) \
-    macro(llint_function_for_construct_prologue, 1) \
-    macro(llint_function_for_call_arity_check, 1) \
-    macro(llint_function_for_construct_arity_check, 1) \
-    macro(llint_generic_return_point, 1) \
-    macro(llint_throw_from_slow_path_trampoline, 1) \
-    macro(llint_throw_during_call_trampoline, 1) \
-    \
-    /* Native call trampolines */ \
-    macro(llint_native_call_trampoline, 1) \
-    macro(llint_native_construct_trampoline, 1) \
-    \
-    macro(llint_end, 1)
+    FOR_EACH_BYTECODE_HELPER_ID(macro)
+
 
 
 #if ENABLE(LLINT_C_LOOP)
index 568ca0f..f4829b1 100644 (file)
@@ -631,6 +631,12 @@ macro doReturn()
     ret
 end
 
+# Dummy entry point the C Loop uses to initialize.
+if C_LOOP
+_llint_c_loop_init:
+    crash()
+end
+
 # stub to call into JavaScript or Native functions
 # EncodedJSValue callToJavaScript(void* code, ExecState** vmTopCallFrame, ProtoCallFrame* protoFrame)
 # EncodedJSValue callToNativeFunction(void* code, ExecState** vmTopCallFrame, ProtoCallFrame* protoFrame)
@@ -689,11 +695,6 @@ _sanitizeStackForVMImpl:
 end
 
 
-# Indicate the beginning of LLInt.
-_llint_begin:
-    crash()
-
-
 _llint_program_prologue:
     prologue(notFunctionCodeBlockGetter, notFunctionCodeBlockSetter, _llint_entry_osr, _llint_trace_prologue)
     dispatch(0)
@@ -1144,7 +1145,3 @@ end
 _llint_op_init_global_const_nop:
     dispatch(5)
 
-# Indicate the end of LLInt.
-_llint_end:
-    crash()
-
index fb4ad95..e8d692e 100644 (file)
@@ -78,6 +78,7 @@ set(WebKit_INCLUDE_DIRECTORIES
     "${JAVASCRIPTCORE_DIR}/profiler"
     "${JAVASCRIPTCORE_DIR}/runtime"
     "${WTF_DIR}"
+    "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
     "${DERIVED_SOURCES_WEBCORE_DIR}"
     "${DERIVED_SOURCES_DIR}/ForwardingHeaders"
     "${CMAKE_BINARY_DIR}"
index 8cb24e7..e841dfe 100644 (file)
@@ -1,3 +1,15 @@
+2014-02-26  Michael Saboff  <msaboff@apple.com>
+
+        Auto generate bytecode information for bytecode parser and LLInt
+        https://bugs.webkit.org/show_bug.cgi?id=129181
+
+        Reviewed by Mark Lam.
+
+        Added ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} to WebKit_INCLUDE_DIRECTORIES due to new
+        generated Bytecodes.h include file.
+
+        * CMakeLists.txt:
+
 2014-02-26  Alex Christensen  <achristensen@webkit.org>
 
         [WinCairo] Fixed linking after disabling WebGL.
index eafe262..f7e6c5a 100644 (file)
@@ -133,6 +133,7 @@ set(WebKit2_INCLUDE_DIRECTORIES
     "${JAVASCRIPTCORE_DIR}/runtime"
     "${WTF_DIR}"
     "${DERIVED_SOURCES_DIR}"
+    "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
     "${DERIVED_SOURCES_WEBCORE_DIR}"
     "${DERIVED_SOURCES_WEBKIT2_DIR}"
     "${DERIVED_SOURCES_WEBKIT2_DIR}/include"
index 30cd3f2..a2dd127 100644 (file)
@@ -1,3 +1,15 @@
+2014-02-26  Michael Saboff  <msaboff@apple.com>
+
+        Auto generate bytecode information for bytecode parser and LLInt
+        https://bugs.webkit.org/show_bug.cgi?id=129181
+
+        Reviewed by Mark Lam.
+
+        Added ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} to WebKit2_INCLUDE_DIRECTORIES due to new
+        generated Bytecodes.h include file.
+
+        * CMakeLists.txt:
+
 2014-02-27  Anders Carlsson  <andersca@apple.com>
 
         Look up already existing VisitedLinkTableController objects by identifier