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 from generate import mojom | 7 from generate import mojom |
8 from generate import mojom_pack | 8 from generate import mojom_pack |
9 from generate import mojom_generator | 9 from generate import mojom_generator |
10 | 10 |
11 from generate.template_expander import UseJinja | 11 from generate.template_expander import UseJinja |
12 | 12 |
13 | 13 |
14 _kind_to_cpp_type = { | 14 _kind_to_cpp_type = { |
15 mojom.BOOL: "bool", | 15 mojom.BOOL: "bool", |
16 mojom.INT8: "int8_t", | 16 mojom.INT8: "int8_t", |
17 mojom.UINT8: "uint8_t", | 17 mojom.UINT8: "uint8_t", |
18 mojom.INT16: "int16_t", | 18 mojom.INT16: "int16_t", |
19 mojom.UINT16: "uint16_t", | 19 mojom.UINT16: "uint16_t", |
20 mojom.INT32: "int32_t", | 20 mojom.INT32: "int32_t", |
21 mojom.UINT32: "uint32_t", | 21 mojom.UINT32: "uint32_t", |
22 mojom.FLOAT: "float", | 22 mojom.FLOAT: "float", |
23 mojom.HANDLE: "mojo::Handle", | 23 mojom.HANDLE: "mojo::Handle", |
24 mojom.DCPIPE: "mojo::DataPipeConsumerHandle", | 24 mojom.DCPIPE: "mojo::DataPipeConsumerHandle", |
25 mojom.DPPIPE: "mojo::DataPipeProducerHandle", | 25 mojom.DPPIPE: "mojo::DataPipeProducerHandle", |
26 mojom.MSGPIPE: "mojo::MessagePipeHandle", | 26 mojom.MSGPIPE: "mojo::MessagePipeHandle", |
27 mojom.INT64: "int64_t", | 27 mojom.SHAREDBUFFER: "mojo::SharedBufferHandle", |
28 mojom.UINT64: "uint64_t", | 28 mojom.INT64: "int64_t", |
29 mojom.DOUBLE: "double", | 29 mojom.UINT64: "uint64_t", |
| 30 mojom.DOUBLE: "double", |
30 } | 31 } |
31 | 32 |
32 | 33 |
33 def GetNameForKind(kind, internal = False): | 34 def GetNameForKind(kind, internal = False): |
34 parts = [] | 35 parts = [] |
35 if kind.imported_from: | 36 if kind.imported_from: |
36 parts.append(kind.imported_from["namespace"]) | 37 parts.append(kind.imported_from["namespace"]) |
37 if internal: | 38 if internal: |
38 parts.append("internal") | 39 parts.append("internal") |
39 if kind.parent_kind: | 40 if kind.parent_kind: |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 if kind.spec == 's': | 76 if kind.spec == 's': |
76 return "mojo::String" | 77 return "mojo::String" |
77 if kind.spec == 'h': | 78 if kind.spec == 'h': |
78 return "mojo::ScopedHandle" | 79 return "mojo::ScopedHandle" |
79 if kind.spec == 'h:d:c': | 80 if kind.spec == 'h:d:c': |
80 return "mojo::ScopedDataPipeConsumerHandle" | 81 return "mojo::ScopedDataPipeConsumerHandle" |
81 if kind.spec == 'h:d:p': | 82 if kind.spec == 'h:d:p': |
82 return "mojo::ScopedDataPipeProducerHandle" | 83 return "mojo::ScopedDataPipeProducerHandle" |
83 if kind.spec == 'h:m': | 84 if kind.spec == 'h:m': |
84 return "mojo::ScopedMessagePipeHandle" | 85 return "mojo::ScopedMessagePipeHandle" |
| 86 if kind.spec == 'h:s': |
| 87 return "mojo::ScopedSharedBufferHandle" |
85 return _kind_to_cpp_type[kind] | 88 return _kind_to_cpp_type[kind] |
86 | 89 |
87 def GetCppWrapperType(kind): | 90 def GetCppWrapperType(kind): |
88 if isinstance(kind, (mojom.Struct, mojom.Enum)): | 91 if isinstance(kind, (mojom.Struct, mojom.Enum)): |
89 return GetNameForKind(kind) | 92 return GetNameForKind(kind) |
90 if isinstance(kind, mojom.Array): | 93 if isinstance(kind, mojom.Array): |
91 return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind) | 94 return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind) |
92 if isinstance(kind, mojom.Interface): | 95 if isinstance(kind, mojom.Interface): |
93 return "mojo::Passable<%sHandle>" % kind.name | 96 return "mojo::Passable<%sHandle>" % kind.name |
94 if kind.spec == 's': | 97 if kind.spec == 's': |
(...skipping 14 matching lines...) Expand all Loading... |
109 if kind.spec == 's': | 112 if kind.spec == 's': |
110 return "const mojo::String&" | 113 return "const mojo::String&" |
111 if kind.spec == 'h': | 114 if kind.spec == 'h': |
112 return "mojo::ScopedHandle" | 115 return "mojo::ScopedHandle" |
113 if kind.spec == 'h:d:c': | 116 if kind.spec == 'h:d:c': |
114 return "mojo::ScopedDataPipeConsumerHandle" | 117 return "mojo::ScopedDataPipeConsumerHandle" |
115 if kind.spec == 'h:d:p': | 118 if kind.spec == 'h:d:p': |
116 return "mojo::ScopedDataPipeProducerHandle" | 119 return "mojo::ScopedDataPipeProducerHandle" |
117 if kind.spec == 'h:m': | 120 if kind.spec == 'h:m': |
118 return "mojo::ScopedMessagePipeHandle" | 121 return "mojo::ScopedMessagePipeHandle" |
| 122 if kind.spec == 'h:s': |
| 123 return "mojo::ScopedSharedBufferHandle" |
119 if not kind in _kind_to_cpp_type: | 124 if not kind in _kind_to_cpp_type: |
120 print "missing:", kind.spec | 125 print "missing:", kind.spec |
121 return _kind_to_cpp_type[kind] | 126 return _kind_to_cpp_type[kind] |
122 | 127 |
123 def GetCppFieldType(kind): | 128 def GetCppFieldType(kind): |
124 if isinstance(kind, mojom.Struct): | 129 if isinstance(kind, mojom.Struct): |
125 return ("mojo::internal::StructPointer<%s_Data>" % | 130 return ("mojo::internal::StructPointer<%s_Data>" % |
126 GetNameForKind(kind, internal=True)) | 131 GetNameForKind(kind, internal=True)) |
127 if isinstance(kind, mojom.Array): | 132 if isinstance(kind, mojom.Array): |
128 return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind) | 133 return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind) |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 210 |
206 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) | 211 @UseJinja("cpp_templates/module.cc.tmpl", filters=cpp_filters) |
207 def GenerateModuleSource(self): | 212 def GenerateModuleSource(self): |
208 return self.GetJinjaExports() | 213 return self.GetJinjaExports() |
209 | 214 |
210 def GenerateFiles(self): | 215 def GenerateFiles(self): |
211 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) | 216 self.Write(self.GenerateModuleHeader(), "%s.h" % self.module.name) |
212 self.Write(self.GenerateModuleInternalHeader(), | 217 self.Write(self.GenerateModuleInternalHeader(), |
213 "%s-internal.h" % self.module.name) | 218 "%s-internal.h" % self.module.name) |
214 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) | 219 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) |
OLD | NEW |