OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 from code import Code | 5 from code import Code |
6 from model import PropertyType | 6 from model import PropertyType |
7 import cpp_util | 7 import cpp_util |
8 import schema_util | 8 import schema_util |
9 import util_cc_helper | 9 import util_cc_helper |
10 from cpp_namespace_environment import CppNamespaceEnvironment | 10 from cpp_namespace_environment import CppNamespaceEnvironment |
(...skipping 25 matching lines...) Expand all Loading... |
36 self._namespace.environment.namespace_pattern, | 36 self._namespace.environment.namespace_pattern, |
37 self._namespace.unix_name) | 37 self._namespace.unix_name) |
38 | 38 |
39 c = Code() | 39 c = Code() |
40 (c.Append(cpp_util.CHROMIUM_LICENSE) | 40 (c.Append(cpp_util.CHROMIUM_LICENSE) |
41 .Append() | 41 .Append() |
42 .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file) | 42 .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file) |
43 .Append() | 43 .Append() |
44 .Append(self._util_cc_helper.GetIncludePath()) | 44 .Append(self._util_cc_helper.GetIncludePath()) |
45 .Append('#include "base/logging.h"') | 45 .Append('#include "base/logging.h"') |
| 46 .Append('#include "base/stl_util.h"') |
46 .Append('#include "base/strings/string_number_conversions.h"') | 47 .Append('#include "base/strings/string_number_conversions.h"') |
47 .Append('#include "base/strings/utf_string_conversions.h"') | 48 .Append('#include "base/strings/utf_string_conversions.h"') |
48 .Append('#include "%s/%s.h"' % | 49 .Append('#include "%s/%s.h"' % |
49 (self._namespace.source_file_dir, self._namespace.short_filename)) | 50 (self._namespace.source_file_dir, self._namespace.short_filename)) |
50 .Append('#include <set>') | 51 .Append('#include <set>') |
51 .Cblock(self._type_helper.GenerateIncludes(include_soft=True)) | 52 .Cblock(self._type_helper.GenerateIncludes(include_soft=True)) |
52 .Append() | 53 .Append() |
53 .Append('using base::UTF8ToUTF16;') | 54 .Append('using base::UTF8ToUTF16;') |
54 .Append() | 55 .Append() |
55 .Concat(cpp_util.OpenNamespace(cpp_namespace)) | 56 .Concat(cpp_util.OpenNamespace(cpp_namespace)) |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 elif prop.optional: | 154 elif prop.optional: |
154 continue | 155 continue |
155 elif t.property_type == PropertyType.INTEGER: | 156 elif t.property_type == PropertyType.INTEGER: |
156 items.append('%s(0)' % prop.unix_name) | 157 items.append('%s(0)' % prop.unix_name) |
157 elif t.property_type == PropertyType.DOUBLE: | 158 elif t.property_type == PropertyType.DOUBLE: |
158 items.append('%s(0.0)' % prop.unix_name) | 159 items.append('%s(0.0)' % prop.unix_name) |
159 elif t.property_type == PropertyType.BOOLEAN: | 160 elif t.property_type == PropertyType.BOOLEAN: |
160 items.append('%s(false)' % prop.unix_name) | 161 items.append('%s(false)' % prop.unix_name) |
161 elif (t.property_type == PropertyType.ANY or | 162 elif (t.property_type == PropertyType.ANY or |
162 t.property_type == PropertyType.ARRAY or | 163 t.property_type == PropertyType.ARRAY or |
163 t.property_type == PropertyType.BINARY or # mapped to std::string | 164 t.property_type == PropertyType.BINARY or |
164 t.property_type == PropertyType.CHOICES or | 165 t.property_type == PropertyType.CHOICES or |
165 t.property_type == PropertyType.OBJECT or | 166 t.property_type == PropertyType.OBJECT or |
166 t.property_type == PropertyType.FUNCTION or | 167 t.property_type == PropertyType.FUNCTION or |
167 t.property_type == PropertyType.REF or | 168 t.property_type == PropertyType.REF or |
168 t.property_type == PropertyType.STRING): | 169 t.property_type == PropertyType.STRING): |
169 # TODO(miket): It would be nice to initialize CHOICES, but we | 170 # TODO(miket): It would be nice to initialize CHOICES, but we |
170 # don't presently have the semantics to indicate which one of a set | 171 # don't presently have the semantics to indicate which one of a set |
171 # should be the default. | 172 # should be the default. |
172 continue | 173 continue |
173 else: | 174 else: |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 vardot = '(%s).' % var | 535 vardot = '(%s).' % var |
535 return '%sDeepCopy()' % vardot | 536 return '%sDeepCopy()' % vardot |
536 elif underlying_type.property_type == PropertyType.ENUM: | 537 elif underlying_type.property_type == PropertyType.ENUM: |
537 maybe_namespace = '' | 538 maybe_namespace = '' |
538 if type_.property_type == PropertyType.REF: | 539 if type_.property_type == PropertyType.REF: |
539 maybe_namespace = '%s::' % underlying_type.namespace.unix_name | 540 maybe_namespace = '%s::' % underlying_type.namespace.unix_name |
540 return 'new base::StringValue(%sToString(%s))' % (maybe_namespace, var) | 541 return 'new base::StringValue(%sToString(%s))' % (maybe_namespace, var) |
541 elif underlying_type.property_type == PropertyType.BINARY: | 542 elif underlying_type.property_type == PropertyType.BINARY: |
542 if is_ptr: | 543 if is_ptr: |
543 vardot = var + '->' | 544 vardot = var + '->' |
| 545 ref = var + '.get()' |
544 else: | 546 else: |
545 vardot = var + '.' | 547 vardot = var + '.' |
546 return ('base::BinaryValue::CreateWithCopiedBuffer(%sdata(), %ssize())' % | 548 ref = '&' + var |
547 (vardot, vardot)) | 549 return ('base::BinaryValue::CreateWithCopiedBuffer(vector_as_array(%s),' |
| 550 ' %ssize())' % (ref, vardot)) |
548 elif underlying_type.property_type == PropertyType.ARRAY: | 551 elif underlying_type.property_type == PropertyType.ARRAY: |
549 return '%s.release()' % self._util_cc_helper.CreateValueFromArray( | 552 return '%s.release()' % self._util_cc_helper.CreateValueFromArray( |
550 var, | 553 var, |
551 is_ptr) | 554 is_ptr) |
552 elif underlying_type.property_type.is_fundamental: | 555 elif underlying_type.property_type.is_fundamental: |
553 if is_ptr: | 556 if is_ptr: |
554 var = '*%s' % var | 557 var = '*%s' % var |
555 if underlying_type.property_type == PropertyType.STRING: | 558 if underlying_type.property_type == PropertyType.STRING: |
556 return 'new base::StringValue(%s)' % var | 559 return 'new base::StringValue(%s)' % var |
557 else: | 560 else: |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 self._util_cc_helper.GetValueTypeString('%%(src_var)s', True))) | 803 self._util_cc_helper.GetValueTypeString('%%(src_var)s', True))) |
801 ) | 804 ) |
802 if not self._generate_error_messages: | 805 if not self._generate_error_messages: |
803 c.Append('return %(failure_value)s;') | 806 c.Append('return %(failure_value)s;') |
804 (c.Eblock('}') | 807 (c.Eblock('}') |
805 .Sblock('else {') | 808 .Sblock('else {') |
806 .Append(' binary_value =') | 809 .Append(' binary_value =') |
807 .Append(' static_cast<const base::BinaryValue*>(%(src_var)s);') | 810 .Append(' static_cast<const base::BinaryValue*>(%(src_var)s);') |
808 ) | 811 ) |
809 if is_ptr: | 812 if is_ptr: |
810 (c.Append('%(dst_var)s.reset(') | 813 (c.Append('%(dst_var)s.reset(new std::vector<char>(') |
811 .Append(' new std::string(binary_value->GetBuffer(),') | 814 .Append(' binary_value->GetBuffer(),') |
812 .Append(' binary_value->GetSize()));') | 815 .Append(' binary_value->GetBuffer() + binary_value->GetSize()));') |
813 ) | 816 ) |
814 else: | 817 else: |
815 (c.Append('%(dst_var)s.assign(binary_value->GetBuffer(),') | 818 (c.Append('%(dst_var)s.assign(') |
816 .Append(' binary_value->GetSize());') | 819 .Append(' binary_value->GetBuffer(),') |
| 820 .Append(' binary_value->GetBuffer() + binary_value->GetSize());') |
817 ) | 821 ) |
818 c.Eblock('}') | 822 c.Eblock('}') |
819 else: | 823 else: |
820 raise NotImplementedError(type_) | 824 raise NotImplementedError(type_) |
821 if c.IsEmpty(): | 825 if c.IsEmpty(): |
822 return c | 826 return c |
823 return Code().Sblock('{').Concat(c.Substitute({ | 827 return Code().Sblock('{').Concat(c.Substitute({ |
824 'cpp_type': self._type_helper.GetCppType(type_), | 828 'cpp_type': self._type_helper.GetCppType(type_), |
825 'src_var': src_var, | 829 'src_var': src_var, |
826 'dst_var': dst_var, | 830 'dst_var': dst_var, |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1048 if self._generate_error_messages: | 1052 if self._generate_error_messages: |
1049 params = list(params) + ['base::string16* error'] | 1053 params = list(params) + ['base::string16* error'] |
1050 return ', '.join(str(p) for p in params) | 1054 return ', '.join(str(p) for p in params) |
1051 | 1055 |
1052 def _GenerateArgs(self, args): | 1056 def _GenerateArgs(self, args): |
1053 """Builds the argument list for a function, given an array of arguments. | 1057 """Builds the argument list for a function, given an array of arguments. |
1054 """ | 1058 """ |
1055 if self._generate_error_messages: | 1059 if self._generate_error_messages: |
1056 args = list(args) + ['error'] | 1060 args = list(args) + ['error'] |
1057 return ', '.join(str(a) for a in args) | 1061 return ', '.join(str(a) for a in args) |
OLD | NEW |