Index: third_party/WebKit/Source/bindings/scripts/code_generator_v8.py |
diff --git a/third_party/WebKit/Source/bindings/scripts/code_generator_v8.py b/third_party/WebKit/Source/bindings/scripts/code_generator_v8.py |
index a31ae8b73917cd2043423e6ce8e872a4e1a60531..55b5c2655b35119e0b458cd5b1c20cd9ef4997ce 100644 |
--- a/third_party/WebKit/Source/bindings/scripts/code_generator_v8.py |
+++ b/third_party/WebKit/Source/bindings/scripts/code_generator_v8.py |
@@ -51,6 +51,7 @@ import posixpath |
from code_generator import CodeGeneratorBase, normalize_and_sort_includes |
from idl_definitions import Visitor |
from idl_types import IdlType |
+import v8_callback_function |
import v8_callback_interface |
import v8_dictionary |
from v8_globals import includes, interfaces |
@@ -60,6 +61,7 @@ import v8_union |
from v8_utilities import cpp_name |
from utilities import idl_filename_to_component, is_testing_target, shorten_union_name |
+ |
# Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching |
MODULE_PYNAME = os.path.splitext(os.path.basename(__file__))[0] + '.py' |
@@ -336,3 +338,42 @@ class CodeGeneratorUnionType(CodeGeneratorBase): |
for union_type in union_types: |
outputs.update(self._generate_container_code(union_type)) |
return outputs |
+ |
+ |
+class CodeGeneratorCallbackFunction(CodeGeneratorBase): |
+ def __init__(self, info_provider, cache_dir, output_dir, target_component): |
+ CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir) |
+ self.target_component = target_component |
+ |
+ def generate_code_internal(self, callback_function, path): |
+ header_template = self.jinja_env.get_template('callback_function.h') |
+ cpp_template = self.jinja_env.get_template('callback_function.cpp') |
+ template_context = v8_callback_function.callback_function_context( |
+ callback_function) |
+ if not is_testing_target(path): |
+ template_context['exported'] = self.info_provider.specifier_for_export |
+ template_context['header_includes'].append( |
+ self.info_provider.include_path_for_export) |
+ template_context['header_includes'] = normalize_and_sort_includes( |
+ template_context['header_includes']) |
+ template_context['code_generator'] = MODULE_PYNAME |
+ header_text = header_template.render(template_context) |
+ cpp_text = cpp_template.render(template_context) |
+ header_path = posixpath.join(self.output_dir, 'V8%s.h' % callback_function.name) |
+ cpp_path = posixpath.join(self.output_dir, 'V8%s.cpp' % callback_function.name) |
+ return ( |
+ (header_path, header_text), |
+ (cpp_path, cpp_text), |
+ ) |
+ |
+ # pylint: disable=W0221 |
+ def generate_code(self): |
+ callback_functions = self.info_provider.callback_functions |
+ if not callback_functions: |
+ return () |
+ outputs = set() |
+ for callback_function_dict in callback_functions.itervalues(): |
+ callback_function = callback_function_dict['callback_function'] |
+ path = callback_function_dict['full_path'] |
+ outputs.update(self.generate_code_internal(callback_function, path)) |
+ return outputs |