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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): | 220 if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
221 return True | 221 return True |
222 if mojom.IsArrayKind(kind): | 222 if mojom.IsArrayKind(kind): |
223 return IsMoveOnlyKind(kind.kind) if _use_new_wrapper_types else True | 223 return IsMoveOnlyKind(kind.kind) if _use_new_wrapper_types else True |
224 if mojom.IsMapKind(kind): | 224 if mojom.IsMapKind(kind): |
225 return IsMoveOnlyKind(kind.value_kind) if _use_new_wrapper_types else True | 225 return IsMoveOnlyKind(kind.value_kind) if _use_new_wrapper_types else True |
226 if mojom.IsAnyHandleOrInterfaceKind(kind): | 226 if mojom.IsAnyHandleOrInterfaceKind(kind): |
227 return True | 227 return True |
228 return False | 228 return False |
229 | 229 |
| 230 def IsCopyablePassByValue(kind): |
| 231 if not IsTypemappedKind(kind): |
| 232 return False |
| 233 return _current_typemap[GetFullMojomNameForKind(kind)][ |
| 234 "copyable_pass_by_value"] |
| 235 |
230 def ShouldPassParamByValue(kind): | 236 def ShouldPassParamByValue(kind): |
231 return (not mojom.IsReferenceKind(kind)) or IsMoveOnlyKind(kind) | 237 return ((not mojom.IsReferenceKind(kind)) or IsMoveOnlyKind(kind) or |
| 238 IsCopyablePassByValue(kind)) |
232 | 239 |
233 def GetCppWrapperParamType(kind): | 240 def GetCppWrapperParamType(kind): |
234 cpp_wrapper_type = GetCppWrapperType(kind) | 241 cpp_wrapper_type = GetCppWrapperType(kind) |
235 return (cpp_wrapper_type if ShouldPassParamByValue(kind) | 242 return (cpp_wrapper_type if ShouldPassParamByValue(kind) |
236 else "const %s&" % cpp_wrapper_type) | 243 else "const %s&" % cpp_wrapper_type) |
237 | 244 |
238 def GetCppFieldType(kind): | 245 def GetCppFieldType(kind): |
239 if mojom.IsStructKind(kind): | 246 if mojom.IsStructKind(kind): |
240 return ("mojo::internal::Pointer<%s>" % | 247 return ("mojo::internal::Pointer<%s>" % |
241 GetNameForKind(kind, internal=True)) | 248 GetNameForKind(kind, internal=True)) |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 _use_new_wrapper_types = self.use_new_wrapper_types | 507 _use_new_wrapper_types = self.use_new_wrapper_types |
501 global _variant | 508 global _variant |
502 _variant = self.variant | 509 _variant = self.variant |
503 suffix = "-%s" % self.variant if self.variant else "" | 510 suffix = "-%s" % self.variant if self.variant else "" |
504 self.Write(self.GenerateModuleHeader(), | 511 self.Write(self.GenerateModuleHeader(), |
505 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) | 512 self.MatchMojomFilePath("%s%s.h" % (self.module.name, suffix))) |
506 self.Write(self.GenerateModuleInternalHeader(), | 513 self.Write(self.GenerateModuleInternalHeader(), |
507 self.MatchMojomFilePath("%s%s-internal.h" % (self.module.name, suffix))) | 514 self.MatchMojomFilePath("%s%s-internal.h" % (self.module.name, suffix))) |
508 self.Write(self.GenerateModuleSource(), | 515 self.Write(self.GenerateModuleSource(), |
509 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) | 516 self.MatchMojomFilePath("%s%s.cc" % (self.module.name, suffix))) |
OLD | NEW |