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

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

Issue 164873002: Fix bug with using enums as default values in mojom. We were previously (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 10 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 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
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
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 + "/"
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698