Chromium Code Reviews| 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 49d6c05b36def62e7d2104f42df02347005f8edb..8b3d66198134a685ceb8141d5f5d7253150edc1d 100644 |
| --- a/third_party/WebKit/Source/bindings/scripts/code_generator_v8.py |
| +++ b/third_party/WebKit/Source/bindings/scripts/code_generator_v8.py |
| @@ -76,6 +76,7 @@ from idl_definitions import Visitor |
| import idl_types |
| from idl_types import IdlType |
| from v8_attributes import attribute_filters |
| +import v8_callback_function |
| import v8_callback_interface |
| import v8_dictionary |
| from v8_globals import includes, interfaces |
| @@ -124,6 +125,8 @@ def set_global_type_info(info_provider): |
| interfaces_info = info_provider.interfaces_info |
| idl_types.set_ancestors(interfaces_info['ancestors']) |
| IdlType.set_callback_interfaces(interfaces_info['callback_interfaces']) |
| + IdlType.set_experimental_callback_functions( |
| + info_provider.callback_functions) |
| IdlType.set_dictionaries(interfaces_info['dictionaries']) |
| IdlType.set_enums(info_provider.enumerations) |
| IdlType.set_implemented_as_interfaces(interfaces_info['implemented_as_interfaces']) |
| @@ -416,6 +419,45 @@ class CodeGeneratorUnionType(object): |
| return outputs |
| +class CodeGeneratorCallbackFunction(object): |
|
bashi
2016/09/13 00:35:05
This class is similar to CodeGeneratorUnionType. I
lkawai
2016/09/16 05:05:49
Acknowledged.
|
| + def __init__(self, info_provider, cache_dir, output_dir, target_component): |
| + self.info_provider = info_provider |
| + self.jinja_env = initialize_jinja_env(cache_dir) |
| + self.output_dir = output_dir |
| + self.target_component = target_component |
| + set_global_type_info(info_provider) |
| + |
| + def generate_code_internal(self, callback_function): |
| + 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) |
| + template_context['header_includes'].add( |
| + 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 |
| + template_context['exported'] = self.info_provider.specifier_for_export |
| + 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), |
| + ) |
| + |
| + 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'] |
| + outputs.update(self.generate_code_internal(callback_function)) |
| + return outputs |
| + |
| + |
| def initialize_jinja_env(cache_dir): |
| jinja_env = jinja2.Environment( |
| loader=jinja2.FileSystemLoader(templates_dir), |