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

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_cpp_generator.py

Issue 268363003: Mojo: Add support for constants to the IDL compiler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: JS export constants Created 6 years, 7 months 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 | Annotate | Revision Log
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Generates C++ source files from a mojom.Module.""" 5 """Generates C++ source files from a mojom.Module."""
6 6
7 import mojom.generate.generator as generator 7 import mojom.generate.generator as generator
8 import mojom.generate.module as mojom 8 import mojom.generate.module as mojom
9 import mojom.generate.pack as pack 9 import mojom.generate.pack as pack
10 from mojom.generate.template_expander import UseJinja 10 from mojom.generate.template_expander import UseJinja
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 if isinstance(kind, mojom.Array): 50 if isinstance(kind, mojom.Array):
51 return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind) 51 return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind)
52 if isinstance(kind, mojom.Interface): 52 if isinstance(kind, mojom.Interface):
53 return "%sHandle" % kind.name 53 return "%sHandle" % kind.name
54 if isinstance(kind, mojom.Enum): 54 if isinstance(kind, mojom.Enum):
55 return "int32_t" 55 return "int32_t"
56 if kind.spec == 's': 56 if kind.spec == 's':
57 return "mojo::internal::String_Data*" 57 return "mojo::internal::String_Data*"
58 return _kind_to_cpp_type[kind] 58 return _kind_to_cpp_type[kind]
59 59
60 def GetCppPodType(kind):
61 if kind.spec == 's':
62 return "char*"
63 return _kind_to_cpp_type[kind]
64
60 def GetCppArrayArgWrapperType(kind): 65 def GetCppArrayArgWrapperType(kind):
61 if isinstance(kind, (mojom.Struct, mojom.Enum)): 66 if isinstance(kind, (mojom.Struct, mojom.Enum)):
62 return GetNameForKind(kind) 67 return GetNameForKind(kind)
63 if isinstance(kind, mojom.Array): 68 if isinstance(kind, mojom.Array):
64 return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind) 69 return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind)
65 if isinstance(kind, mojom.Interface): 70 if isinstance(kind, mojom.Interface):
66 return "%sHandle" % kind.name 71 return "%sHandle" % kind.name
67 if kind.spec == 's': 72 if kind.spec == 's':
68 return "mojo::String" 73 return "mojo::String"
69 return _kind_to_cpp_type[kind] 74 return _kind_to_cpp_type[kind]
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 return "mojo::internal::StringPointer" 146 return "mojo::internal::StringPointer"
142 return _kind_to_cpp_type[kind] 147 return _kind_to_cpp_type[kind]
143 148
144 def IsStructWithHandles(struct): 149 def IsStructWithHandles(struct):
145 for pf in struct.packed.packed_fields: 150 for pf in struct.packed.packed_fields:
146 if generator.IsHandleKind(pf.field.kind): 151 if generator.IsHandleKind(pf.field.kind):
147 return True 152 return True
148 return False 153 return False
149 154
150 def TranslateConstants(token, module): 155 def TranslateConstants(token, module):
151 if isinstance(token, mojom.Constant): 156 if isinstance(token, (mojom.NamedValue, mojom.EnumValue)):
152 # Enum constants are constructed like: 157 # Both variable and enum constants are constructed like:
153 # Namespace::Struct::FIELD_NAME 158 # Namespace::Struct::CONSTANT_NAME
154 name = [] 159 name = []
155 if token.imported_from: 160 if token.imported_from:
156 name.extend(NamespaceToArray(token.namespace)) 161 name.extend(NamespaceToArray(token.namespace))
157 if token.parent_kind: 162 if token.parent_kind:
158 name.append(token.parent_kind.name) 163 name.append(token.parent_kind.name)
159 name.append(token.name[1]) 164 name.append(token.name)
160 return "::".join(name) 165 return "::".join(name)
161 return token 166 return token
162 167
163 def ExpressionToText(value, module): 168 def ExpressionToText(value, module):
164 if value[0] != "EXPRESSION": 169 if value[0] != "EXPRESSION":
165 raise Exception("Expected EXPRESSION, got" + value) 170 raise Exception("Expected EXPRESSION, got" + value)
166 return "".join(generator.ExpressionMapper(value, 171 return "".join(generator.ExpressionMapper(value,
167 lambda token: TranslateConstants(token, module))) 172 lambda token: TranslateConstants(token, module)))
168 173
169 _HEADER_SIZE = 8 174 _HEADER_SIZE = 8
170 175
171 class Generator(generator.Generator): 176 class Generator(generator.Generator):
172 177
173 cpp_filters = { 178 cpp_filters = {
174 "cpp_const_wrapper_type": GetCppConstWrapperType, 179 "cpp_const_wrapper_type": GetCppConstWrapperType,
175 "cpp_field_type": GetCppFieldType, 180 "cpp_field_type": GetCppFieldType,
181 "cpp_pod_type": GetCppPodType,
182 "cpp_result_type": GetCppResultWrapperType,
176 "cpp_type": GetCppType, 183 "cpp_type": GetCppType,
177 "cpp_result_type": GetCppResultWrapperType,
178 "cpp_wrapper_type": GetCppWrapperType, 184 "cpp_wrapper_type": GetCppWrapperType,
179 "expression_to_text": ExpressionToText, 185 "expression_to_text": ExpressionToText,
180 "get_pad": pack.GetPad, 186 "get_pad": pack.GetPad,
181 "is_enum_kind": generator.IsEnumKind, 187 "is_enum_kind": generator.IsEnumKind,
182 "is_handle_kind": generator.IsHandleKind, 188 "is_handle_kind": generator.IsHandleKind,
183 "is_object_kind": generator.IsObjectKind, 189 "is_object_kind": generator.IsObjectKind,
184 "is_string_kind": generator.IsStringKind, 190 "is_string_kind": generator.IsStringKind,
185 "is_array_kind": lambda kind: isinstance(kind, mojom.Array), 191 "is_array_kind": lambda kind: isinstance(kind, mojom.Array),
186 "is_struct_with_handles": IsStructWithHandles, 192 "is_struct_with_handles": IsStructWithHandles,
187 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, 193 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE,
(...skipping 25 matching lines...) Expand all
213 219
214 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) 220 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters)
215 def GenerateModuleSource(self): 221 def GenerateModuleSource(self):
216 return self.GetJinjaExports() 222 return self.GetJinjaExports()
217 223
218 def GenerateFiles(self): 224 def GenerateFiles(self):
219 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) 225 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name)
220 self.Write(self.GenerateModuleInternalHeader(), 226 self.Write(self.GenerateModuleInternalHeader(),
221 "%s-internal.h" % self.module.name) 227 "%s-internal.h" % self.module.name)
222 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) 228 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698