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 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 if kind.spec == 's': | 95 if kind.spec == 's': |
96 return "mojo::internal::StringPointer" | 96 return "mojo::internal::StringPointer" |
97 return _kind_to_cpp_type[kind] | 97 return _kind_to_cpp_type[kind] |
98 | 98 |
99 def IsStructWithHandles(struct): | 99 def IsStructWithHandles(struct): |
100 for pf in struct.packed.packed_fields: | 100 for pf in struct.packed.packed_fields: |
101 if mojom_generator.IsHandleKind(pf.field.kind): | 101 if mojom_generator.IsHandleKind(pf.field.kind): |
102 return True | 102 return True |
103 return False | 103 return False |
104 | 104 |
105 def SubstituteNamespace(value, imports): | 105 def SubstituteNamespace(token, module): |
106 for import_item in imports: | 106 for import_item in module.imports: |
107 value = value.replace(import_item['namespace'] + ".", | 107 token = token.replace(import_item["namespace"] + ".", |
108 import_item['namespace'] + "::") | 108 import_item["namespace"] + "::") |
109 return value | 109 return token |
| 110 |
| 111 def ExpressionToText(value, module): |
| 112 if value[0] != "EXPRESSION": |
| 113 raise Exception("Expected EXPRESSION, got" + value) |
| 114 return "".join(mojom_generator.ExpressionMapper(value, |
| 115 lambda token: SubstituteNamespace(token, module))) |
110 | 116 |
111 _HEADER_SIZE = 8 | 117 _HEADER_SIZE = 8 |
112 | 118 |
113 class Generator(mojom_generator.Generator): | 119 class Generator(mojom_generator.Generator): |
114 | 120 |
115 cpp_filters = { | 121 cpp_filters = { |
116 "camel_to_underscores": mojom_generator.CamelToUnderscores, | 122 "camel_to_underscores": mojom_generator.CamelToUnderscores, |
117 "cpp_const_wrapper_type": GetCppConstWrapperType, | 123 "cpp_const_wrapper_type": GetCppConstWrapperType, |
118 "cpp_field_type": GetCppFieldType, | 124 "cpp_field_type": GetCppFieldType, |
119 "cpp_type": GetCppType, | 125 "cpp_type": GetCppType, |
120 "cpp_wrapper_type": GetCppWrapperType, | 126 "cpp_wrapper_type": GetCppWrapperType, |
| 127 "expression_to_text": ExpressionToText, |
121 "get_pad": mojom_pack.GetPad, | 128 "get_pad": mojom_pack.GetPad, |
122 "is_handle_kind": mojom_generator.IsHandleKind, | 129 "is_handle_kind": mojom_generator.IsHandleKind, |
123 "is_object_kind": mojom_generator.IsObjectKind, | 130 "is_object_kind": mojom_generator.IsObjectKind, |
124 "is_string_kind": mojom_generator.IsStringKind, | 131 "is_string_kind": mojom_generator.IsStringKind, |
125 "is_array_kind": lambda kind: isinstance(kind, mojom.Array), | 132 "is_array_kind": lambda kind: isinstance(kind, mojom.Array), |
126 "is_struct_with_handles": IsStructWithHandles, | 133 "is_struct_with_handles": IsStructWithHandles, |
127 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, | 134 "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE, |
128 "struct_from_method": mojom_generator.GetStructFromMethod, | 135 "struct_from_method": mojom_generator.GetStructFromMethod, |
129 "stylize_method": mojom_generator.StudlyCapsToCamel, | 136 "stylize_method": mojom_generator.StudlyCapsToCamel, |
130 "substitute_namespace": SubstituteNamespace, | |
131 "verify_token_type": mojom_generator.VerifyTokenType, | 137 "verify_token_type": mojom_generator.VerifyTokenType, |
132 } | 138 } |
133 | 139 |
134 def GetJinjaExports(self): | 140 def GetJinjaExports(self): |
135 return { | 141 return { |
| 142 "module": self.module, |
136 "module_name": self.module.name, | 143 "module_name": self.module.name, |
137 "namespace": self.module.namespace, | 144 "namespace": self.module.namespace, |
138 "imports": self.module.imports, | 145 "imports": self.module.imports, |
139 "kinds": self.module.kinds, | 146 "kinds": self.module.kinds, |
140 "enums": self.module.enums, | 147 "enums": self.module.enums, |
141 "structs": self.GetStructs(), | 148 "structs": self.GetStructs(), |
142 "interfaces": self.module.interfaces, | 149 "interfaces": self.module.interfaces, |
143 "include_prefix": self.GetIncludePrefix(), | 150 "include_prefix": self.GetIncludePrefix(), |
144 } | 151 } |
145 | 152 |
(...skipping 14 matching lines...) Expand all Loading... |
160 self.Write(self.GenerateModuleInternalHeader(), | 167 self.Write(self.GenerateModuleInternalHeader(), |
161 "%s_internal.h" % self.module.name) | 168 "%s_internal.h" % self.module.name) |
162 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) | 169 self.Write(self.GenerateModuleSource(), "%s.cc" % self.module.name) |
163 | 170 |
164 def GetIncludePrefix(self): | 171 def GetIncludePrefix(self): |
165 if not self.header_dir: | 172 if not self.header_dir: |
166 return "" | 173 return "" |
167 if self.header_dir[-1] == "/": | 174 if self.header_dir[-1] == "/": |
168 return self.header_dir | 175 return self.header_dir |
169 return self.header_dir + "/" | 176 return self.header_dir + "/" |
OLD | NEW |