aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen/BindingGen.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/bindings/codegen/BindingGen.py')
-rw-r--r--src/components/script/dom/bindings/codegen/BindingGen.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/components/script/dom/bindings/codegen/BindingGen.py b/src/components/script/dom/bindings/codegen/BindingGen.py
new file mode 100644
index 00000000000..e292427e33b
--- /dev/null
+++ b/src/components/script/dom/bindings/codegen/BindingGen.py
@@ -0,0 +1,87 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import sys
+sys.path.append("./parser/")
+sys.path.append("./ply/")
+import os
+import cPickle
+import WebIDL
+from Configuration import *
+from CodegenRust import CGBindingRoot, replaceFileIfChanged
+# import Codegen in general, so we can set a variable on it
+import Codegen
+
+def generate_binding_header(config, outputprefix, webidlfile):
+ """
+ |config| Is the configuration object.
+ |outputprefix| is a prefix to use for the header guards and filename.
+ """
+
+ filename = outputprefix + ".h"
+ root = CGBindingRoot(config, outputprefix, webidlfile)
+ if replaceFileIfChanged(filename, root.declare()):
+ print "Generating binding header: %s" % (filename)
+
+def generate_binding_cpp(config, outputprefix, webidlfile):
+ """
+ |config| Is the configuration object.
+ |outputprefix| is a prefix to use for the header guards and filename.
+ """
+
+ filename = outputprefix + ".cpp"
+ root = CGBindingRoot(config, outputprefix, webidlfile)
+ if replaceFileIfChanged(filename, root.define()):
+ print "Generating binding implementation: %s" % (filename)
+
+def generate_binding_rs(config, outputprefix, webidlfile):
+ """
+ |config| Is the configuration object.
+ |outputprefix| is a prefix to use for the header guards and filename.
+ """
+
+ filename = outputprefix + ".rs"
+ root = CGBindingRoot(config, outputprefix, webidlfile)
+ root2 = CGBindingRoot(config, outputprefix, webidlfile)
+ if replaceFileIfChanged(filename, root.declare() + root2.define()):
+ #if replaceFileIfChanged(filename, root.declare()):
+ print "Generating binding implementation: %s" % (filename)
+
+def main():
+
+ # Parse arguments.
+ from optparse import OptionParser
+ usagestring = "usage: %prog [header|cpp] configFile outputPrefix webIDLFile"
+ o = OptionParser(usage=usagestring)
+ o.add_option("--verbose-errors", action='store_true', default=False,
+ help="When an error happens, display the Python traceback.")
+ (options, args) = o.parse_args()
+
+ if len(args) != 4 or (args[0] != "header" and args[0] != "cpp" and args[0] != "rs"):
+ o.error(usagestring)
+ buildTarget = args[0]
+ configFile = os.path.normpath(args[1])
+ outputPrefix = args[2]
+ webIDLFile = os.path.normpath(args[3])
+
+ # Load the parsing results
+ f = open('ParserResults.pkl', 'rb')
+ parserData = cPickle.load(f)
+ f.close()
+
+ # Create the configuration data.
+ config = Configuration(configFile, parserData)
+
+ # Generate the prototype classes.
+ if buildTarget == "header":
+ generate_binding_header(config, outputPrefix, webIDLFile);
+ elif buildTarget == "cpp":
+ generate_binding_cpp(config, outputPrefix, webIDLFile);
+ elif buildTarget == "rs":
+ generate_binding_rs(config, outputPrefix, webIDLFile);
+ else:
+ assert False # not reached
+
+if __name__ == '__main__':
+ main()