summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py')
-rw-r--r--Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py b/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py
new file mode 100644
index 000000000..094434b64
--- /dev/null
+++ b/Source/JavaScriptCore/Scripts/wkbuiltins/builtins_generate_combined_implementation.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014, 2015 Apple Inc. All rights reserved.
+# Copyright (c) 2014 University of Washington. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. 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 INC. 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.
+
+
+import logging
+import re
+import string
+from string import Template
+
+from builtins_generator import BuiltinsGenerator
+from builtins_model import Framework, Frameworks
+from builtins_templates import BuiltinsGeneratorTemplates as Templates
+
+log = logging.getLogger('global')
+
+
+class BuiltinsCombinedImplementationGenerator(BuiltinsGenerator):
+ def __init__(self, model):
+ BuiltinsGenerator.__init__(self, model)
+
+ def output_filename(self):
+ return "%sBuiltins.cpp" % self.model().framework.setting('namespace')
+
+ def generate_output(self):
+ args = {
+ 'namespace': self.model().framework.setting('namespace'),
+ 'macroPrefix': self.model().framework.setting('macro_prefix'),
+ }
+
+ sections = []
+ sections.append(self.generate_license())
+ sections.append(Template(Templates.DoNotEditWarning).substitute(args))
+ sections.append(self.generate_primary_header_includes())
+ sections.append(self.generate_secondary_header_includes())
+ sections.append(Template(Templates.NamespaceTop).substitute(args))
+ for function in self.model().all_functions():
+ sections.append(self.generate_embedded_code_string_section_for_function(function))
+ if self.model().framework is Frameworks.JavaScriptCore:
+ sections.append(Template(Templates.CombinedJSCImplementationStaticMacros).substitute(args))
+ elif self.model().framework is Frameworks.WebCore:
+ sections.append(Template(Templates.CombinedWebCoreImplementationStaticMacros).substitute(args))
+ sections.append(Template(Templates.NamespaceBottom).substitute(args))
+
+ return "\n\n".join(sections)
+
+ def generate_secondary_header_includes(self):
+ header_includes = [
+ (["JavaScriptCore"],
+ ("JavaScriptCore", "builtins/BuiltinExecutables.h"),
+ ),
+ (["JavaScriptCore", "WebCore"],
+ ("JavaScriptCore", "runtime/Executable.h"),
+ ),
+ (["JavaScriptCore", "WebCore"],
+ ("JavaScriptCore", "runtime/JSCellInlines.h"),
+ ),
+ (["WebCore"],
+ ("JavaScriptCore", "runtime/StructureInlines.h"),
+ ),
+ (["WebCore"],
+ ("JavaScriptCore", "runtime/JSCJSValueInlines.h"),
+ ),
+ (["JavaScriptCore", "WebCore"],
+ ("JavaScriptCore", "runtime/VM.h"),
+ ),
+ ]
+
+ return '\n'.join(self.generate_includes_from_entries(header_includes))