Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: third_party/WebKit/Source/bindings/scripts/code_generator_cpp.py

Issue 2458913003: Add first sketch of the webmodules code generator. (Closed)
Patch Set: Rebased. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
bashi 2016/11/01 00:14:36 I think we need to add code_generator_cpp.py in So
dglazkov 2016/11/04 21:03:07 Done.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 # pylint: disable=import-error,print-statement,relative-import
6
7 """Generates Blink CPP bindings.
8
9 TODO(dglazkov): Write proper description here.
haraken 2016/10/30 18:02:28 I want to write this in this CL :)
dglazkov 2016/11/04 21:03:07 Done.
10 """
11
12 import os
13 import posixpath
14
15 from code_generator import CodeGeneratorBase
16 # TODO(dglazkov): Move TypedefResolver to code_generator.py
17 from code_generator_v8 import TypedefResolver
18 from v8_interface import interface_context
19
20 MODULE_PYNAME = os.path.splitext(os.path.basename(__file__))[0] + '.py'
21
22
23 class CodeGeneratorCpp(CodeGeneratorBase):
haraken 2016/10/30 18:02:28 Rename "Cpp" to "WebModule", "ServiceAPI" or somet
dglazkov 2016/11/04 21:03:07 Done.
24 def __init__(self, info_provider, cache_dir, output_dir):
25 CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider,
26 cache_dir, output_dir)
27 self.typedef_resolver = TypedefResolver(info_provider)
28
29 def get_template(self):
30 template_filename = 'cpp_interface.cpp.tmpl'
31 return self.jinja_env.get_template(template_filename)
32
33 # TODO(dglazkov): Move to CodeGeneratorBase.
34 def output_paths(self, definition_name):
35 header_path = posixpath.join(self.output_dir,
36 'Cpp%s.h' % definition_name)
37 cpp_path = posixpath.join(self.output_dir, 'Cpp%s.cpp' % definition_name )
38 return header_path, cpp_path
39
40 def generate_code(self, definitions, definition_name):
41 self.typedef_resolver.resolve(definitions, definition_name)
42 header_path, cpp_path = self.output_paths(definition_name)
43
44 template_context = {}
45 # TODO(dglazkov): Implement dictionaries
46 if definition_name in definitions.interfaces:
47 interface = definitions.interfaces[definition_name]
48 # TODO(dglazkov): Implement callback interfaces.
49 # TODO(dglazkov): Implement partial interfaces.
50 if not interface.is_callback and not interface.is_partial:
51 template_context = interface_context(
bashi 2016/11/01 00:14:36 I'm wondering what kind of code CodeGeneratorCpp w
dglazkov 2016/11/04 21:03:07 I wrote up a brief description of the class. Hope
52 interface,
53 definitions.interfaces)
54 template_context['code_generator'] = MODULE_PYNAME
55 template_context['class_name'] = definition_name
56
57 cpp_template = self.get_template()
58 cpp_text = cpp_template.render(template_context)
59
60 header_text = 'header'
61 return (
62 (header_path, header_text),
63 (cpp_path, cpp_text)
64 )
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698