| 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 |