Index: Source/bindings/scripts/code_generator_v8.py |
diff --git a/Source/bindings/scripts/code_generator_v8.py b/Source/bindings/scripts/code_generator_v8.py |
index 96db1d847470209808935713efd4bec0fccf2673..8fd9637c93f41ebe7ae0fd36e813657e8584e9dc 100644 |
--- a/Source/bindings/scripts/code_generator_v8.py |
+++ b/Source/bindings/scripts/code_generator_v8.py |
@@ -80,6 +80,12 @@ import v8_types |
from v8_utilities import capitalize, cpp_name, conditional_string, v8_class_name |
+# Code generation mode. |
+MODE_BINDINGS = 1 << 0 |
+MODE_DICTIONARY_IMPL = 1 << 1 |
+MODE_ALL = MODE_BINDINGS | MODE_DICTIONARY_IMPL |
haraken
2014/08/01 02:37:44
Shall we simply use a set of strings like set("bin
bashi
2014/08/01 02:49:47
I'm going to remove this flags.
|
+ |
+ |
def render_template(interface_info, header_template, cpp_template, |
template_context): |
template_context['code_generator'] = module_pyname |
@@ -137,12 +143,14 @@ class CodeGeneratorV8(object): |
cpp_path = posixpath.join(self.output_dir, 'V8%s.cpp' % definition_name) |
return header_path, cpp_path |
- def output_paths_for_impl(self, definition_name): |
- header_path = posixpath.join(self.output_dir, '%s.h' % definition_name) |
- cpp_path = posixpath.join(self.output_dir, '%s.cpp' % definition_name) |
+ def output_paths_for_impl(self, definition_name, relative_dir): |
+ output_dir = posixpath.join(self.output_dir, relative_dir) |
+ header_path = posixpath.join(output_dir, '%s.h' % definition_name) |
+ cpp_path = posixpath.join(output_dir, '%s.cpp' % definition_name) |
return header_path, cpp_path |
- def generate_code(self, definitions, definition_name): |
+ def generate_code(self, definitions, definition_name, |
+ mode=MODE_ALL): |
"""Returns .h/.cpp code as (header_text, cpp_text).""" |
# Set local type info |
IdlType.set_callback_functions(definitions.callback_functions.keys()) |
@@ -156,7 +164,7 @@ class CodeGeneratorV8(object): |
if definition_name in definitions.dictionaries: |
return self.generate_dictionary_code( |
definitions, definition_name, |
- definitions.dictionaries[definition_name]) |
+ definitions.dictionaries[definition_name], mode) |
raise ValueError('%s is not in IDL definitions' % definition_name) |
def generate_interface_code(self, definitions, interface_name, interface): |
@@ -189,13 +197,16 @@ class CodeGeneratorV8(object): |
) |
def generate_dictionary_code(self, definitions, dictionary_name, |
- dictionary): |
+ dictionary, mode): |
interface_info = self.interfaces_info[dictionary_name] |
- bindings_results = self.generate_dictionary_bindings( |
- dictionary_name, interface_info, dictionary) |
- impl_results = self.generate_dictionary_impl( |
- dictionary_name, interface_info, dictionary) |
- return bindings_results + impl_results |
+ results = set() |
+ if (mode & MODE_BINDINGS) == MODE_BINDINGS: |
+ results.update(self.generate_dictionary_bindings( |
+ dictionary_name, interface_info, dictionary)) |
+ if (mode & MODE_DICTIONARY_IMPL) == MODE_DICTIONARY_IMPL: |
+ results.update(self.generate_dictionary_impl( |
+ dictionary_name, interface_info, dictionary)) |
+ return results |
def generate_dictionary_bindings(self, dictionary_name, |
interface_info, dictionary): |
@@ -220,7 +231,8 @@ class CodeGeneratorV8(object): |
dictionary, self.interfaces_info) |
header_text, cpp_text = render_template( |
interface_info, header_template, cpp_template, template_context) |
- header_path, cpp_path = self.output_paths_for_impl(dictionary_name) |
+ header_path, cpp_path = self.output_paths_for_impl( |
+ dictionary_name, interface_info['relative_dir']) |
return ( |
(header_path, header_text), |
(cpp_path, cpp_text), |