OLD | NEW |
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 24 matching lines...) Expand all Loading... |
35 } | 35 } |
36 | 36 |
37 _kind_to_cpp_literal_suffix = { | 37 _kind_to_cpp_literal_suffix = { |
38 mojom.UINT8: "U", | 38 mojom.UINT8: "U", |
39 mojom.UINT16: "U", | 39 mojom.UINT16: "U", |
40 mojom.UINT32: "U", | 40 mojom.UINT32: "U", |
41 mojom.FLOAT: "f", | 41 mojom.FLOAT: "f", |
42 mojom.UINT64: "ULL", | 42 mojom.UINT64: "ULL", |
43 } | 43 } |
44 | 44 |
45 # TODO(rockot): Get rid of this global. This requires some refactoring of the | 45 # TODO(rockot): Get rid of these globals. This requires some refactoring of the |
46 # generator library code so that filters can use the generator as context. | 46 # generator library code so that filters can use the generator as context. |
47 _current_typemap = {} | 47 _current_typemap = {} |
| 48 _use_wtf_types = False |
48 | 49 |
49 | 50 |
50 def ConstantValue(constant): | 51 def ConstantValue(constant): |
51 return ExpressionToText(constant.value, kind=constant.kind) | 52 return ExpressionToText(constant.value, kind=constant.kind) |
52 | 53 |
53 def DefaultValue(field): | 54 def DefaultValue(field): |
54 if field.default: | 55 if field.default: |
55 if mojom.IsStructKind(field.kind): | 56 if mojom.IsStructKind(field.kind): |
56 assert field.default == "default" | 57 assert field.default == "default" |
57 return "%s::New()" % GetNameForKind(field.kind) | 58 return "%s::New()" % GetNameForKind(field.kind) |
58 return ExpressionToText(field.default, kind=field.kind) | 59 return ExpressionToText(field.default, kind=field.kind) |
59 if (mojom.IsStringKind(field.kind) or mojom.IsArrayKind(field.kind) or | 60 if mojom.IsArrayKind(field.kind) or mojom.IsMapKind(field.kind): |
60 mojom.IsMapKind(field.kind)): | |
61 return "nullptr"; | 61 return "nullptr"; |
| 62 if mojom.IsStringKind(field.kind): |
| 63 return "" if _use_wtf_types else "nullptr" |
62 return "" | 64 return "" |
63 | 65 |
64 def NamespaceToArray(namespace): | 66 def NamespaceToArray(namespace): |
65 return namespace.split(".") if namespace else [] | 67 return namespace.split(".") if namespace else [] |
66 | 68 |
67 def GetNamePartsForKind(kind, add_same_module_namespaces, internal): | 69 def GetNamePartsForKind(kind, add_same_module_namespaces, internal): |
68 def MapKindName_(kind): | 70 def MapKindName_(kind): |
69 if not internal: | 71 if not internal: |
70 return kind.name | 72 return kind.name |
71 if mojom.IsStructKind(kind) and kind.native_only: | 73 if mojom.IsStructKind(kind) and kind.native_only: |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 if mojom.IsInterfaceKind(kind): | 179 if mojom.IsInterfaceKind(kind): |
178 raise Exception("Arrays of interfaces not yet supported!") | 180 raise Exception("Arrays of interfaces not yet supported!") |
179 if mojom.IsInterfaceRequestKind(kind): | 181 if mojom.IsInterfaceRequestKind(kind): |
180 raise Exception("Arrays of interface requests not yet supported!") | 182 raise Exception("Arrays of interface requests not yet supported!") |
181 if mojom.IsAssociatedInterfaceKind(kind): | 183 if mojom.IsAssociatedInterfaceKind(kind): |
182 raise Exception("Arrays of associated interfaces not yet supported!") | 184 raise Exception("Arrays of associated interfaces not yet supported!") |
183 if mojom.IsAssociatedInterfaceRequestKind(kind): | 185 if mojom.IsAssociatedInterfaceRequestKind(kind): |
184 raise Exception("Arrays of associated interface requests not yet " | 186 raise Exception("Arrays of associated interface requests not yet " |
185 "supported!") | 187 "supported!") |
186 if mojom.IsStringKind(kind): | 188 if mojom.IsStringKind(kind): |
187 return "mojo::String" | 189 return "WTF::String" if _use_wtf_types else "mojo::String" |
188 if mojom.IsGenericHandleKind(kind): | 190 if mojom.IsGenericHandleKind(kind): |
189 return "mojo::ScopedHandle" | 191 return "mojo::ScopedHandle" |
190 if mojom.IsDataPipeConsumerKind(kind): | 192 if mojom.IsDataPipeConsumerKind(kind): |
191 return "mojo::ScopedDataPipeConsumerHandle" | 193 return "mojo::ScopedDataPipeConsumerHandle" |
192 if mojom.IsDataPipeProducerKind(kind): | 194 if mojom.IsDataPipeProducerKind(kind): |
193 return "mojo::ScopedDataPipeProducerHandle" | 195 return "mojo::ScopedDataPipeProducerHandle" |
194 if mojom.IsMessagePipeKind(kind): | 196 if mojom.IsMessagePipeKind(kind): |
195 return "mojo::ScopedMessagePipeHandle" | 197 return "mojo::ScopedMessagePipeHandle" |
196 if mojom.IsSharedBufferKind(kind): | 198 if mojom.IsSharedBufferKind(kind): |
197 return "mojo::ScopedSharedBufferHandle" | 199 return "mojo::ScopedSharedBufferHandle" |
(...skipping 15 matching lines...) Expand all Loading... |
213 GetCppArrayArgWrapperType(kind.value_kind)) | 215 GetCppArrayArgWrapperType(kind.value_kind)) |
214 if mojom.IsInterfaceKind(kind): | 216 if mojom.IsInterfaceKind(kind): |
215 return "%sPtr" % GetNameForKind(kind) | 217 return "%sPtr" % GetNameForKind(kind) |
216 if mojom.IsInterfaceRequestKind(kind): | 218 if mojom.IsInterfaceRequestKind(kind): |
217 return "%sRequest" % GetNameForKind(kind.kind) | 219 return "%sRequest" % GetNameForKind(kind.kind) |
218 if mojom.IsAssociatedInterfaceKind(kind): | 220 if mojom.IsAssociatedInterfaceKind(kind): |
219 return "%sAssociatedPtrInfo" % GetNameForKind(kind.kind) | 221 return "%sAssociatedPtrInfo" % GetNameForKind(kind.kind) |
220 if mojom.IsAssociatedInterfaceRequestKind(kind): | 222 if mojom.IsAssociatedInterfaceRequestKind(kind): |
221 return "%sAssociatedRequest" % GetNameForKind(kind.kind) | 223 return "%sAssociatedRequest" % GetNameForKind(kind.kind) |
222 if mojom.IsStringKind(kind): | 224 if mojom.IsStringKind(kind): |
223 return "mojo::String" | 225 return "WTF::String" if _use_wtf_types else "mojo::String" |
224 if mojom.IsGenericHandleKind(kind): | 226 if mojom.IsGenericHandleKind(kind): |
225 return "mojo::ScopedHandle" | 227 return "mojo::ScopedHandle" |
226 if mojom.IsDataPipeConsumerKind(kind): | 228 if mojom.IsDataPipeConsumerKind(kind): |
227 return "mojo::ScopedDataPipeConsumerHandle" | 229 return "mojo::ScopedDataPipeConsumerHandle" |
228 if mojom.IsDataPipeProducerKind(kind): | 230 if mojom.IsDataPipeProducerKind(kind): |
229 return "mojo::ScopedDataPipeProducerHandle" | 231 return "mojo::ScopedDataPipeProducerHandle" |
230 if mojom.IsMessagePipeKind(kind): | 232 if mojom.IsMessagePipeKind(kind): |
231 return "mojo::ScopedMessagePipeHandle" | 233 return "mojo::ScopedMessagePipeHandle" |
232 if mojom.IsSharedBufferKind(kind): | 234 if mojom.IsSharedBufferKind(kind): |
233 return "mojo::ScopedSharedBufferHandle" | 235 return "mojo::ScopedSharedBufferHandle" |
(...skipping 21 matching lines...) Expand all Loading... |
255 GetCppArrayArgWrapperType(kind.value_kind)) | 257 GetCppArrayArgWrapperType(kind.value_kind)) |
256 if mojom.IsInterfaceKind(kind): | 258 if mojom.IsInterfaceKind(kind): |
257 return "%sPtr" % GetNameForKind(kind) | 259 return "%sPtr" % GetNameForKind(kind) |
258 if mojom.IsInterfaceRequestKind(kind): | 260 if mojom.IsInterfaceRequestKind(kind): |
259 return "%sRequest" % GetNameForKind(kind.kind) | 261 return "%sRequest" % GetNameForKind(kind.kind) |
260 if mojom.IsAssociatedInterfaceKind(kind): | 262 if mojom.IsAssociatedInterfaceKind(kind): |
261 return "%sAssociatedPtrInfo" % GetNameForKind(kind.kind) | 263 return "%sAssociatedPtrInfo" % GetNameForKind(kind.kind) |
262 if mojom.IsAssociatedInterfaceRequestKind(kind): | 264 if mojom.IsAssociatedInterfaceRequestKind(kind): |
263 return "%sAssociatedRequest" % GetNameForKind(kind.kind) | 265 return "%sAssociatedRequest" % GetNameForKind(kind.kind) |
264 if mojom.IsStringKind(kind): | 266 if mojom.IsStringKind(kind): |
265 return "mojo::String" | 267 return "WTF::String" if _use_wtf_types else "mojo::String" |
266 if mojom.IsGenericHandleKind(kind): | 268 if mojom.IsGenericHandleKind(kind): |
267 return "mojo::ScopedHandle" | 269 return "mojo::ScopedHandle" |
268 if mojom.IsDataPipeConsumerKind(kind): | 270 if mojom.IsDataPipeConsumerKind(kind): |
269 return "mojo::ScopedDataPipeConsumerHandle" | 271 return "mojo::ScopedDataPipeConsumerHandle" |
270 if mojom.IsDataPipeProducerKind(kind): | 272 if mojom.IsDataPipeProducerKind(kind): |
271 return "mojo::ScopedDataPipeProducerHandle" | 273 return "mojo::ScopedDataPipeProducerHandle" |
272 if mojom.IsMessagePipeKind(kind): | 274 if mojom.IsMessagePipeKind(kind): |
273 return "mojo::ScopedMessagePipeHandle" | 275 return "mojo::ScopedMessagePipeHandle" |
274 if mojom.IsSharedBufferKind(kind): | 276 if mojom.IsSharedBufferKind(kind): |
275 return "mojo::ScopedSharedBufferHandle" | 277 return "mojo::ScopedSharedBufferHandle" |
(...skipping 15 matching lines...) Expand all Loading... |
291 return "%sPtr" % GetNameForKind(kind) | 293 return "%sPtr" % GetNameForKind(kind) |
292 if mojom.IsInterfaceRequestKind(kind): | 294 if mojom.IsInterfaceRequestKind(kind): |
293 return "%sRequest" % GetNameForKind(kind.kind) | 295 return "%sRequest" % GetNameForKind(kind.kind) |
294 if mojom.IsAssociatedInterfaceKind(kind): | 296 if mojom.IsAssociatedInterfaceKind(kind): |
295 return "%sAssociatedPtrInfo" % GetNameForKind(kind.kind) | 297 return "%sAssociatedPtrInfo" % GetNameForKind(kind.kind) |
296 if mojom.IsAssociatedInterfaceRequestKind(kind): | 298 if mojom.IsAssociatedInterfaceRequestKind(kind): |
297 return "%sAssociatedRequest" % GetNameForKind(kind.kind) | 299 return "%sAssociatedRequest" % GetNameForKind(kind.kind) |
298 if mojom.IsEnumKind(kind): | 300 if mojom.IsEnumKind(kind): |
299 return GetNameForKind(kind) | 301 return GetNameForKind(kind) |
300 if mojom.IsStringKind(kind): | 302 if mojom.IsStringKind(kind): |
301 return "const mojo::String&" | 303 return "const WTF::String&" if _use_wtf_types else "const mojo::String&" |
302 if mojom.IsGenericHandleKind(kind): | 304 if mojom.IsGenericHandleKind(kind): |
303 return "mojo::ScopedHandle" | 305 return "mojo::ScopedHandle" |
304 if mojom.IsDataPipeConsumerKind(kind): | 306 if mojom.IsDataPipeConsumerKind(kind): |
305 return "mojo::ScopedDataPipeConsumerHandle" | 307 return "mojo::ScopedDataPipeConsumerHandle" |
306 if mojom.IsDataPipeProducerKind(kind): | 308 if mojom.IsDataPipeProducerKind(kind): |
307 return "mojo::ScopedDataPipeProducerHandle" | 309 return "mojo::ScopedDataPipeProducerHandle" |
308 if mojom.IsMessagePipeKind(kind): | 310 if mojom.IsMessagePipeKind(kind): |
309 return "mojo::ScopedMessagePipeHandle" | 311 return "mojo::ScopedMessagePipeHandle" |
310 if mojom.IsSharedBufferKind(kind): | 312 if mojom.IsSharedBufferKind(kind): |
311 return "mojo::ScopedSharedBufferHandle" | 313 return "mojo::ScopedSharedBufferHandle" |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 "namespace": self.module.namespace, | 517 "namespace": self.module.namespace, |
516 "namespaces_as_array": NamespaceToArray(self.module.namespace), | 518 "namespaces_as_array": NamespaceToArray(self.module.namespace), |
517 "imports": self.module.imports, | 519 "imports": self.module.imports, |
518 "kinds": self.module.kinds, | 520 "kinds": self.module.kinds, |
519 "enums": self.module.enums, | 521 "enums": self.module.enums, |
520 "structs": self.GetStructs(), | 522 "structs": self.GetStructs(), |
521 "unions": self.GetUnions(), | 523 "unions": self.GetUnions(), |
522 "interfaces": self.GetInterfaces(), | 524 "interfaces": self.GetInterfaces(), |
523 "variant": self.variant, | 525 "variant": self.variant, |
524 "extra_headers": self.GetExtraHeaders(), | 526 "extra_headers": self.GetExtraHeaders(), |
| 527 "use_wtf_types": self.use_wtf_types, |
525 } | 528 } |
526 | 529 |
527 @staticmethod | 530 @staticmethod |
528 def GetTemplatePrefix(): | 531 def GetTemplatePrefix(): |
529 return "cpp_templates" | 532 return "cpp_templates" |
530 | 533 |
531 @classmethod | 534 @classmethod |
532 def GetFilters(cls): | 535 def GetFilters(cls): |
533 return cls.cpp_filters | 536 return cls.cpp_filters |
534 | 537 |
535 @UseJinja("module.h.tmpl") | 538 @UseJinja("module.h.tmpl") |
536 def GenerateModuleHeader(self): | 539 def GenerateModuleHeader(self): |
537 return self.GetJinjaExports() | 540 return self.GetJinjaExports() |
538 | 541 |
539 @UseJinja("module-internal.h.tmpl") | 542 @UseJinja("module-internal.h.tmpl") |
540 def GenerateModuleInternalHeader(self): | 543 def GenerateModuleInternalHeader(self): |
541 return self.GetJinjaExports() | 544 return self.GetJinjaExports() |
542 | 545 |
543 @UseJinja("module.cc.tmpl") | 546 @UseJinja("module.cc.tmpl") |
544 def GenerateModuleSource(self): | 547 def GenerateModuleSource(self): |
545 return self.GetJinjaExports() | 548 return self.GetJinjaExports() |
546 | 549 |
547 def GenerateFiles(self, args): | 550 def GenerateFiles(self, args): |
548 global _current_typemap | 551 global _current_typemap |
549 _current_typemap = self.typemap | 552 _current_typemap = self.typemap |
| 553 global _use_wtf_types |
| 554 _use_wtf_types = self.use_wtf_types |
550 suffix = "-%s" % self.variant if self.variant else "" | 555 suffix = "-%s" % self.variant if self.variant else "" |
551 self.Write(self.GenerateModuleHeader(), | 556 self.Write(self.GenerateModuleHeader(), |
552 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) | 557 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) |
553 self.Write(self.GenerateModuleInternalHeader(), | 558 self.Write(self.GenerateModuleInternalHeader(), |
554 self.MatchMojomFilePath("%s%s-internal.h" % (self.module.name, suffix))) | 559 self.MatchMojomFilePath("%s%s-internal.h" % (self.module.name, suffix))) |
555 self.Write(self.GenerateModuleSource(), | 560 self.Write(self.GenerateModuleSource(), |
556 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) | 561 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) |
OLD | NEW |