Skip to content

Commit b65056e

Browse files
committed
Restructure generate-js-bindings script to be modular and testable
https://bugs.webkit.org/show_bug.cgi?id=149929 Reviewed by Alex Christensen. Source/JavaScriptCore: This is a new code generator, based on the replay inputs code generator and the inspector protocol code generator, which produces various files for JS builtins. Relative to the generator it replaces, this one consolidates two scripts in JavaScriptCore and WebCore into a single script with multiple files. Parsed information about the builtins file is stored in backend-independent model objects. Each output file has its own code generator that uses the model to produce resulting code. Generators are additionally parameterized by the target framework (to choose correct macros and includes) and output mode (one header/implementation file per builtin or per framework). It includes a few simple tests of the generator's functionality. These result- based tests will become increasingly more important as we start to add support for builtins annotation such as @optional, @internal, etc. to the code generator. Some of these complexities, such as having two output modes, will be removed in subsequent patches. This patch is intended to exactly replace the existing functionality with a unified script that makes additional cleanups straightforward. Additional cleanup and consolidation between inspector code generator scripts and this script will be pursued in followup patches. New tests: Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Combined.js Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Separate.js Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Combined.js Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Separate.js Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Combined.js Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Separate.js Scripts/tests/builtins/WebCore-GuardedBuiltin-Separate.js Scripts/tests/builtins/WebCore-GuardedInternalBuiltin-Separate.js Scripts/tests/builtins/WebCore-UnguardedBuiltin-Separate.js Scripts/tests/builtins/WebCore-xmlCasingTest-Separate.js * CMakeLists.txt: Copy the scripts that are used by other targets to a staging directory inside ${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/Scripts. Define JavaScriptCore_SCRIPTS_DIR to point here so that the add_custom_command and shared file lists are identical between JavaScriptCore and WebCore. The staged scripts are a dependency of the main JavaScriptCore target so that they are always staged, even if JavaScriptCore itself does not use a particular script. The output files additionally depend on all builtin generator script files and input files that are combined into the single header/implementation file. * DerivedSources.make: Define JavaScriptCore_SCRIPTS_DIR explicitly so the rule for code generation and shared file lists are identical between JavaScriptCore and WebCore. The output files additionally depend on all builtin generator script files and input files that are combined into the single header/implementation file. * JavaScriptCore.xcodeproj/project.pbxproj: Mark the new builtins generator files as private headers so we can use them from WebCore. * Scripts/UpdateContents.py: Renamed from Source/JavaScriptCore/UpdateContents.py. * Scripts/builtins/__init__.py: Added. * Scripts/builtins/builtins.py: Added. * Scripts/builtins/builtins_generator.py: Added. This file contains the base generator. (WK_lcfirst): (WK_ucfirst): (BuiltinsGenerator): (BuiltinsGenerator.__init__): (BuiltinsGenerator.model): (BuiltinsGenerator.generate_license): (BuiltinsGenerator.generate_includes_from_entries): (BuiltinsGenerator.generate_output): (BuiltinsGenerator.output_filename): (BuiltinsGenerator.mangledNameForFunction): (BuiltinsGenerator.mangledNameForFunction.toCamel): (BuiltinsGenerator.generate_embedded_code_string_section_for_function): * Scripts/builtins/builtins_model.py: Added. This file contains builtins model objects. (ParseException): (Framework): (Framework.__init__): (Framework.setting): (Framework.fromString): (Frameworks): (BuiltinObject): (BuiltinObject.__init__): (BuiltinFunction): (BuiltinFunction.__init__): (BuiltinFunction.fromString): (BuiltinFunction.__str__): (BuiltinsCollection): (BuiltinsCollection.__init__): (BuiltinsCollection.parse_builtins_file): (BuiltinsCollection.copyrights): (BuiltinsCollection.all_functions): (BuiltinsCollection._parse_copyright_lines): (BuiltinsCollection._parse_functions): * Scripts/builtins/builtins_templates.py: Added. (BuiltinsGeneratorTemplates): * Scripts/builtins/builtins_generate_combined_header.py: Added. (BuiltinsCombinedHeaderGenerator): (BuiltinsCombinedHeaderGenerator.__init__): (BuiltinsCombinedHeaderGenerator.output_filename): (BuiltinsCombinedHeaderGenerator.generate_output): (BuiltinsCombinedHeaderGenerator.generate_forward_declarations): (FunctionExecutable): (VM): (ConstructAbility): (generate_section_for_object): (generate_externs_for_object): (generate_macros_for_object): (generate_defines_for_object): (generate_section_for_code_table_macro): (generate_section_for_code_name_macro): * Scripts/builtins/builtins_generate_combined_implementation.py: Added. (BuiltinsCombinedImplementationGenerator): (BuiltinsCombinedImplementationGenerator.__init__): (BuiltinsCombinedImplementationGenerator.output_filename): (BuiltinsCombinedImplementationGenerator.generate_output): (BuiltinsCombinedImplementationGenerator.generate_header_includes): * Scripts/builtins/builtins_generate_separate_header.py: Added. (BuiltinsSeparateHeaderGenerator): (BuiltinsSeparateHeaderGenerator.__init__): (BuiltinsSeparateHeaderGenerator.output_filename): (BuiltinsSeparateHeaderGenerator.macro_prefix): (BuiltinsSeparateHeaderGenerator.generate_output): (BuiltinsSeparateHeaderGenerator.generate_forward_declarations): (FunctionExecutable): (generate_header_includes): (generate_section_for_object): (generate_externs_for_object): (generate_macros_for_object): (generate_defines_for_object): (generate_section_for_code_table_macro): (generate_section_for_code_name_macro): * Scripts/builtins/builtins_generate_separate_implementation.py: Added. (BuiltinsSeparateImplementationGenerator): (BuiltinsSeparateImplementationGenerator.__init__): (BuiltinsSeparateImplementationGenerator.output_filename): (BuiltinsSeparateImplementationGenerator.macro_prefix): (BuiltinsSeparateImplementationGenerator.generate_output): (BuiltinsSeparateImplementationGenerator.generate_header_includes): * Scripts/builtins/builtins_generate_separate_wrapper.py: Added. (BuiltinsSeparateWrapperGenerator): (BuiltinsSeparateWrapperGenerator.__init__): (BuiltinsSeparateWrapperGenerator.output_filename): (BuiltinsSeparateWrapperGenerator.macro_prefix): (BuiltinsSeparateWrapperGenerator.generate_output): (BuiltinsSeparateWrapperGenerator.generate_header_includes): * Scripts/generate-js-builtins.py: Added. Parse command line options, decide which generators and output modes to use. (generate_bindings_for_builtins_files): * Scripts/lazywriter.py: Copied from the inspector protocol generator. (LazyFileWriter): (LazyFileWriter.__init__): (LazyFileWriter.write): (LazyFileWriter.close): * Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Combined.js: Added. * Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Separate.js: Added. * Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Combined.js: Added. * Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Separate.js: Added. * Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Combined.js: Added. * Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Separate.js: Added. * Scripts/tests/builtins/WebCore-GuardedBuiltin-Separate.js: Added. * Scripts/tests/builtins/WebCore-GuardedInternalBuiltin-Separate.js: Added. * Scripts/tests/builtins/WebCore-UnguardedBuiltin-Separate.js: Added. * Scripts/tests/builtins/WebCore-xmlCasingTest-Separate.js: Added. * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result: Added. * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result: Added. * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result: Added. * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result: Added. * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result: Added. * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result: Added. * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result: Added. * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result: Added. * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result: Added. * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result: Added. * builtins/BuiltinExecutables.cpp: (JSC::BuiltinExecutables::BuiltinExecutables): * builtins/BuiltinExecutables.h: * create_hash_table: Update the generated builtin macro names. * generate-js-builtins: Removed. Source/WebCore: * CMakeLists.txt: Define JavaScriptCore_SCRIPTS_DIR explicitly so the add_custom_command and shared file lists are identical between JavaScriptCore and WebCore. The output files additionally depend on all builtin generator script files. * DerivedSources.make: Use JavaScriptCore_SCRIPTS_DIR so that the rule for code generation and shared file lists are identical between JavaScriptCore and WebCore. The output files additionally depend on all builtin generator script files. * WebCore.xcodeproj/project.pbxproj: Define JavaScriptCore_SCRIPTS_DIR before calling DerivedSources.make. This will eventually be merged with the other similar script paths. * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::finishCreation): Update the generated builtin macro names. * generate-js-builtins: Removed. Tools: Add a stub shell script and basic webkitpy support for running builtins generator tests. * Scripts/run-builtins-generator-tests: Added. (main): * Scripts/webkitpy/codegen/__init__.py: Added. * Scripts/webkitpy/codegen/main.py: Added. The only interesting difference here from the inspector protocol generator equivalent is that this implementation decodes the target framework and output mode (combined or separate) from the test's file name. (BuiltinsGeneratorTests): (BuiltinsGeneratorTests.__init__): (BuiltinsGeneratorTests.generate_from_js_builtins): (BuiltinsGeneratorTests.write_error_file): (BuiltinsGeneratorTests.detect_changes): (BuiltinsGeneratorTests.run_tests): (BuiltinsGeneratorTests.main): Canonical link: https://commits.webkit.org/168596@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@191433 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent c5d37c6 commit b65056e

53 files changed

Lines changed: 5756 additions & 616 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Source/JavaScriptCore/CMakeLists.txt

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -699,13 +699,42 @@ set(JavaScriptCore_LUT_FILES
699699
runtime/SymbolPrototype.cpp
700700
)
701701

702-
set(JavaScriptCore_SCRIPTS_DIR "${JAVASCRIPTCORE_DIR}/Scripts")
703-
704702
set(JavaScriptCore_LIBRARIES
705703
WTF${DEBUG_SUFFIX}
706704
${ICU_I18N_LIBRARIES}
707705
)
708706

707+
set(JavaScriptCore_SCRIPTS_SOURCES_DIR "${JAVASCRIPTCORE_DIR}/Scripts")
708+
709+
# Globbing relies on the fact that generator-specific file names are prefixed with their directory.
710+
# Top-level scripts should have a file extension, since they are invoked during the build.
711+
712+
set(JavaScriptCore_SCRIPTS_SOURCES_PATHS
713+
${JavaScriptCore_SCRIPTS_SOURCES_DIR}/*.pl
714+
${JavaScriptCore_SCRIPTS_SOURCES_DIR}/*.py
715+
${JavaScriptCore_SCRIPTS_SOURCES_DIR}/builtins/builtins*.py
716+
)
717+
718+
# Force JavaScriptCore to run scripts from the same staging path as WebCore.
719+
set(JavaScriptCore_SCRIPTS_DIR "${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/Scripts")
720+
721+
file(MAKE_DIRECTORY ${JavaScriptCore_SCRIPTS_DIR})
722+
723+
# The directory flattening performed below mirrors what the Mac port does with private headers.
724+
725+
file(GLOB JavaScriptCore_SCRIPTS_SOURCES ${JavaScriptCore_SCRIPTS_SOURCES_PATHS})
726+
727+
foreach (_file ${JavaScriptCore_SCRIPTS_SOURCES})
728+
get_filename_component(_script "${_file}" NAME)
729+
add_custom_command(
730+
OUTPUT ${JavaScriptCore_SCRIPTS_DIR}/${_script}
731+
MAIN_DEPENDENCY ${_file}
732+
WORKING_DIRECTORY ${DERIVED_SOURCES_DIR}
733+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file} ${JavaScriptCore_SCRIPTS_DIR}/${_script}
734+
VERBATIM)
735+
list(APPEND JavaScriptCore_SCRIPTS ${JavaScriptCore_SCRIPTS_DIR}/${_script})
736+
endforeach ()
737+
709738
if (USE_UDIS86)
710739
set(UDIS_GEN_DEP
711740
disassembler/udis86/ud_opcode.py
@@ -940,7 +969,7 @@ set(HASH_LUT_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/create_hash_table)
940969
macro(GENERATE_HASH_LUT _input _output)
941970
add_custom_command(
942971
OUTPUT ${_output}
943-
DEPENDS ${HASH_LUT_GENERATOR} ${_input} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins
972+
DEPENDS ${HASH_LUT_GENERATOR} ${_input} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py
944973
COMMAND ${PERL_EXECUTABLE} ${HASH_LUT_GENERATOR} ${_input} -i > ${_output}
945974
VERBATIM)
946975
list(APPEND JavaScriptCore_HEADERS ${_output})
@@ -1079,6 +1108,21 @@ add_custom_command(
10791108
VERBATIM)
10801109

10811110
# JSCBuiltins
1111+
1112+
set(BUILTINS_GENERATOR_SCRIPTS
1113+
${JavaScriptCore_SCRIPTS_DIR}/builtins.py
1114+
${JavaScriptCore_SCRIPTS_DIR}/builtins_generator.py
1115+
${JavaScriptCore_SCRIPTS_DIR}/builtins_model.py
1116+
${JavaScriptCore_SCRIPTS_DIR}/builtins_templates.py
1117+
${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_header.py
1118+
${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_implementation.py
1119+
${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_header.py
1120+
${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_implementation.py
1121+
${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_wrapper.py
1122+
${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py
1123+
${JavaScriptCore_SCRIPTS_DIR}/lazywriter.py
1124+
)
1125+
10821126
set(JavaScriptCore_BUILTINS_SOURCES
10831127
${JAVASCRIPTCORE_DIR}/builtins/ArrayConstructor.js
10841128
${JAVASCRIPTCORE_DIR}/builtins/ArrayIterator.prototype.js
@@ -1101,10 +1145,11 @@ set(JavaScriptCore_BUILTINS_SOURCES
11011145
)
11021146

11031147
add_custom_command(
1104-
OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSCBuiltins.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSCBuiltins.h
1105-
MAIN_DEPENDENCY ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins
1106-
DEPENDS ${JavaScriptCore_BUILTINS_SOURCES}
1107-
COMMAND ${PYTHON_EXECUTABLE} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins --input-directory ${CMAKE_CURRENT_SOURCE_DIR}/builtins --output ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSCBuiltins.cpp
1148+
OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSCBuiltins.cpp
1149+
${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/JSCBuiltins.h
1150+
MAIN_DEPENDENCY ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py
1151+
DEPENDS ${JavaScriptCore_BUILTINS_SOURCES} ${BUILTINS_GENERATOR_SCRIPTS}
1152+
COMMAND ${PYTHON_EXECUTABLE} ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py --framework JavaScriptCore --output-directory ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} --combined ${JavaScriptCore_BUILTINS_SOURCES}
11081153
VERBATIM)
11091154

11101155
list(APPEND JavaScriptCore_SOURCES
@@ -1208,4 +1253,7 @@ if (ENABLE_FTL_JIT)
12081253
add_dependencies(JavaScriptCore llvmForJSC)
12091254
endif ()
12101255

1256+
# Force staging of shared scripts, even if they aren't directly used to build JavaScriptCore.
12111257

1258+
add_custom_target(stageSharedScripts DEPENDS ${JavaScriptCore_SCRIPTS})
1259+
add_dependencies(JavaScriptCore stageSharedScripts)

Source/JavaScriptCore/ChangeLog

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,199 @@
1+
2015-10-21 Brian Burg <bburg@apple.com>
2+
3+
Restructure generate-js-bindings script to be modular and testable
4+
https://bugs.webkit.org/show_bug.cgi?id=149929
5+
6+
Reviewed by Alex Christensen.
7+
8+
This is a new code generator, based on the replay inputs code generator and
9+
the inspector protocol code generator, which produces various files for JS
10+
builtins.
11+
12+
Relative to the generator it replaces, this one consolidates two scripts in
13+
JavaScriptCore and WebCore into a single script with multiple files. Parsed
14+
information about the builtins file is stored in backend-independent model
15+
objects. Each output file has its own code generator that uses the model to
16+
produce resulting code. Generators are additionally parameterized by the target
17+
framework (to choose correct macros and includes) and output mode (one
18+
header/implementation file per builtin or per framework).
19+
20+
It includes a few simple tests of the generator's functionality. These result-
21+
based tests will become increasingly more important as we start to add support
22+
for builtins annotation such as @optional, @internal, etc. to the code generator.
23+
24+
Some of these complexities, such as having two output modes, will be removed in
25+
subsequent patches. This patch is intended to exactly replace the existing
26+
functionality with a unified script that makes additional cleanups straightforward.
27+
28+
Additional cleanup and consolidation between inspector code generator scripts
29+
and this script will be pursued in followup patches.
30+
31+
New tests:
32+
33+
Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Combined.js
34+
Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Separate.js
35+
Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Combined.js
36+
Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Separate.js
37+
Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Combined.js
38+
Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Separate.js
39+
Scripts/tests/builtins/WebCore-GuardedBuiltin-Separate.js
40+
Scripts/tests/builtins/WebCore-GuardedInternalBuiltin-Separate.js
41+
Scripts/tests/builtins/WebCore-UnguardedBuiltin-Separate.js
42+
Scripts/tests/builtins/WebCore-xmlCasingTest-Separate.js
43+
44+
45+
* CMakeLists.txt:
46+
47+
Copy the scripts that are used by other targets to a staging directory inside
48+
${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/Scripts.
49+
Define JavaScriptCore_SCRIPTS_DIR to point here so that the add_custom_command
50+
and shared file lists are identical between JavaScriptCore and WebCore. The staged
51+
scripts are a dependency of the main JavaScriptCore target so that they are
52+
always staged, even if JavaScriptCore itself does not use a particular script.
53+
54+
The output files additionally depend on all builtin generator script files
55+
and input files that are combined into the single header/implementation file.
56+
57+
* DerivedSources.make:
58+
59+
Define JavaScriptCore_SCRIPTS_DIR explicitly so the rule for code generation and
60+
shared file lists are identical between JavaScriptCore and WebCore.
61+
62+
The output files additionally depend on all builtin generator script files
63+
and input files that are combined into the single header/implementation file.
64+
65+
* JavaScriptCore.xcodeproj/project.pbxproj:
66+
67+
Mark the new builtins generator files as private headers so we can use them from
68+
WebCore.
69+
70+
* Scripts/UpdateContents.py: Renamed from Source/JavaScriptCore/UpdateContents.py.
71+
* Scripts/builtins/__init__.py: Added.
72+
* Scripts/builtins/builtins.py: Added.
73+
* Scripts/builtins/builtins_generator.py: Added. This file contains the base generator.
74+
(WK_lcfirst):
75+
(WK_ucfirst):
76+
(BuiltinsGenerator):
77+
(BuiltinsGenerator.__init__):
78+
(BuiltinsGenerator.model):
79+
(BuiltinsGenerator.generate_license):
80+
(BuiltinsGenerator.generate_includes_from_entries):
81+
(BuiltinsGenerator.generate_output):
82+
(BuiltinsGenerator.output_filename):
83+
(BuiltinsGenerator.mangledNameForFunction):
84+
(BuiltinsGenerator.mangledNameForFunction.toCamel):
85+
(BuiltinsGenerator.generate_embedded_code_string_section_for_function):
86+
* Scripts/builtins/builtins_model.py: Added. This file contains builtins model objects.
87+
(ParseException):
88+
(Framework):
89+
(Framework.__init__):
90+
(Framework.setting):
91+
(Framework.fromString):
92+
(Frameworks):
93+
(BuiltinObject):
94+
(BuiltinObject.__init__):
95+
(BuiltinFunction):
96+
(BuiltinFunction.__init__):
97+
(BuiltinFunction.fromString):
98+
(BuiltinFunction.__str__):
99+
(BuiltinsCollection):
100+
(BuiltinsCollection.__init__):
101+
(BuiltinsCollection.parse_builtins_file):
102+
(BuiltinsCollection.copyrights):
103+
(BuiltinsCollection.all_functions):
104+
(BuiltinsCollection._parse_copyright_lines):
105+
(BuiltinsCollection._parse_functions):
106+
* Scripts/builtins/builtins_templates.py: Added.
107+
(BuiltinsGeneratorTemplates):
108+
* Scripts/builtins/builtins_generate_combined_header.py: Added.
109+
(BuiltinsCombinedHeaderGenerator):
110+
(BuiltinsCombinedHeaderGenerator.__init__):
111+
(BuiltinsCombinedHeaderGenerator.output_filename):
112+
(BuiltinsCombinedHeaderGenerator.generate_output):
113+
(BuiltinsCombinedHeaderGenerator.generate_forward_declarations):
114+
(FunctionExecutable):
115+
(VM):
116+
(ConstructAbility):
117+
(generate_section_for_object):
118+
(generate_externs_for_object):
119+
(generate_macros_for_object):
120+
(generate_defines_for_object):
121+
(generate_section_for_code_table_macro):
122+
(generate_section_for_code_name_macro):
123+
* Scripts/builtins/builtins_generate_combined_implementation.py: Added.
124+
(BuiltinsCombinedImplementationGenerator):
125+
(BuiltinsCombinedImplementationGenerator.__init__):
126+
(BuiltinsCombinedImplementationGenerator.output_filename):
127+
(BuiltinsCombinedImplementationGenerator.generate_output):
128+
(BuiltinsCombinedImplementationGenerator.generate_header_includes):
129+
* Scripts/builtins/builtins_generate_separate_header.py: Added.
130+
(BuiltinsSeparateHeaderGenerator):
131+
(BuiltinsSeparateHeaderGenerator.__init__):
132+
(BuiltinsSeparateHeaderGenerator.output_filename):
133+
(BuiltinsSeparateHeaderGenerator.macro_prefix):
134+
(BuiltinsSeparateHeaderGenerator.generate_output):
135+
(BuiltinsSeparateHeaderGenerator.generate_forward_declarations):
136+
(FunctionExecutable):
137+
(generate_header_includes):
138+
(generate_section_for_object):
139+
(generate_externs_for_object):
140+
(generate_macros_for_object):
141+
(generate_defines_for_object):
142+
(generate_section_for_code_table_macro):
143+
(generate_section_for_code_name_macro):
144+
* Scripts/builtins/builtins_generate_separate_implementation.py: Added.
145+
(BuiltinsSeparateImplementationGenerator):
146+
(BuiltinsSeparateImplementationGenerator.__init__):
147+
(BuiltinsSeparateImplementationGenerator.output_filename):
148+
(BuiltinsSeparateImplementationGenerator.macro_prefix):
149+
(BuiltinsSeparateImplementationGenerator.generate_output):
150+
(BuiltinsSeparateImplementationGenerator.generate_header_includes):
151+
* Scripts/builtins/builtins_generate_separate_wrapper.py: Added.
152+
(BuiltinsSeparateWrapperGenerator):
153+
(BuiltinsSeparateWrapperGenerator.__init__):
154+
(BuiltinsSeparateWrapperGenerator.output_filename):
155+
(BuiltinsSeparateWrapperGenerator.macro_prefix):
156+
(BuiltinsSeparateWrapperGenerator.generate_output):
157+
(BuiltinsSeparateWrapperGenerator.generate_header_includes):
158+
* Scripts/generate-js-builtins.py: Added.
159+
160+
Parse command line options, decide which generators and output modes to use.
161+
162+
(generate_bindings_for_builtins_files):
163+
* Scripts/lazywriter.py: Copied from the inspector protocol generator.
164+
(LazyFileWriter):
165+
(LazyFileWriter.__init__):
166+
(LazyFileWriter.write):
167+
(LazyFileWriter.close):
168+
* Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Combined.js: Added.
169+
* Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Separate.js: Added.
170+
* Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Combined.js: Added.
171+
* Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Separate.js: Added.
172+
* Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Combined.js: Added.
173+
* Scripts/tests/builtins/JavaScriptCore-BuiltinConstructor-Separate.js: Added.
174+
* Scripts/tests/builtins/WebCore-GuardedBuiltin-Separate.js: Added.
175+
* Scripts/tests/builtins/WebCore-GuardedInternalBuiltin-Separate.js: Added.
176+
* Scripts/tests/builtins/WebCore-UnguardedBuiltin-Separate.js: Added.
177+
* Scripts/tests/builtins/WebCore-xmlCasingTest-Separate.js: Added.
178+
* Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result: Added.
179+
* Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result: Added.
180+
* Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result: Added.
181+
* Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result: Added.
182+
* Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result: Added.
183+
* Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result: Added.
184+
* Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result: Added.
185+
* Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result: Added.
186+
* Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result: Added.
187+
* Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result: Added.
188+
* builtins/BuiltinExecutables.cpp:
189+
(JSC::BuiltinExecutables::BuiltinExecutables):
190+
* builtins/BuiltinExecutables.h:
191+
* create_hash_table:
192+
193+
Update the generated builtin macro names.
194+
195+
* generate-js-builtins: Removed.
196+
1197
2015-10-21 Benjamin Poulain <bpoulain@apple.com>
2198

3199
[JSC] Remove FTL Native Inlining, it is dead code

Source/JavaScriptCore/DerivedSources.make

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,9 @@ all : \
7171
udis86_itab.h \
7272
Bytecodes.h \
7373
InitBytecodes.asm \
74-
JSCBuiltins \
74+
JSCBuiltins.h \
7575
#
7676

77-
# builtin functions
7877
PYTHON = python
7978
PERL = perl
8079

@@ -87,15 +86,24 @@ else
8786
endif
8887
# --------
8988

90-
.PHONY: JSCBuiltins
91-
JSCBuiltins: $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins JSCBuiltins.h JSCBuiltins.cpp
92-
JSCBuiltins.h: $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins $(JavaScriptCore)/builtins JSCBuiltinsSources
93-
$(PYTHON) $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins --input-directory $(JavaScriptCore)/builtins --output $@
94-
95-
JSCBuiltins.cpp: JSCBuiltins.h
89+
# JavaScript builtins.
90+
91+
BUILTINS_GENERATOR_SCRIPTS = \
92+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/__init__.py \
93+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins.py \
94+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generator.py \
95+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_model.py \
96+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_templates.py \
97+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_combined_header.py \
98+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_combined_implementation.py \
99+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_header.py \
100+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_implementation.py \
101+
$(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_wrapper.py \
102+
$(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins.py \
103+
$(JavaScriptCore_SCRIPTS_DIR)/lazywriter.py \
104+
#
96105

97-
.PHONY: JSCBuiltinsSources
98-
JSCBuiltinsSources: \
106+
JavaScriptCore_BUILTINS_SOURCES = \
99107
$(JavaScriptCore)/builtins/ArrayConstructor.js \
100108
$(JavaScriptCore)/builtins/ArrayIterator.prototype.js \
101109
$(JavaScriptCore)/builtins/Array.prototype.js \
@@ -112,8 +120,20 @@ JSCBuiltinsSources: \
112120
$(JavaScriptCore)/builtins/ReflectObject.js \
113121
$(JavaScriptCore)/builtins/StringConstructor.js \
114122
$(JavaScriptCore)/builtins/StringIterator.prototype.js \
123+
$(JavaScriptCore)/builtins/TypedArrayConstructor.js \
124+
$(JavaScriptCore)/builtins/TypedArray.prototype.js \
115125
#
116126

127+
# The combined output file depends on the contents of builtins and generator scripts, so
128+
# adding, modifying, or removing builtins or scripts will trigger regeneration of files.
129+
130+
.PHONY: force
131+
JavaScriptCore_BUILTINS_DEPENDENCIES_LIST : $(JavaScriptCore_SCRIPTS_DIR)/UpdateContents.py force
132+
$(PYTHON) $(JavaScriptCore_SCRIPTS_DIR)/UpdateContents.py '$(JavaScriptCore_BUILTINS_SOURCES) $(BUILTINS_GENERATOR_SCRIPTS)' $@
133+
134+
JSCBuiltins.h: $(BUILTINS_GENERATOR_SCRIPTS) $(JavaScriptCore_BUILTINS_SOURCES) JavaScriptCore_BUILTINS_DEPENDENCIES_LIST
135+
$(PYTHON) $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins.py --combined --output-directory . --framework JavaScriptCore $(JavaScriptCore_BUILTINS_SOURCES)
136+
117137
# lookup tables for classes
118138

119139
%.lut.h: create_hash_table %.cpp
@@ -201,8 +221,8 @@ all : \
201221
# adding, modifying, or removing domains will trigger regeneration of inspector files.
202222

203223
.PHONY: force
204-
EnabledInspectorDomains : $(JavaScriptCore)/UpdateContents.py force
205-
$(PYTHON) $(JavaScriptCore)/UpdateContents.py '$(INSPECTOR_DOMAINS)' $@
224+
EnabledInspectorDomains : $(JavaScriptCore_SCRIPTS_DIR)/UpdateContents.py force
225+
$(PYTHON) $(JavaScriptCore_SCRIPTS_DIR)/UpdateContents.py '$(INSPECTOR_DOMAINS)' $@
206226

207227
CombinedDomains.json : $(JavaScriptCore_SCRIPTS_DIR)/generate-combined-inspector-json.py $(INSPECTOR_DOMAINS) EnabledInspectorDomains
208228
$(PYTHON) $(JavaScriptCore_SCRIPTS_DIR)/generate-combined-inspector-json.py $(INSPECTOR_DOMAINS) > ./CombinedDomains.json

0 commit comments

Comments
 (0)