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

Unified Diff: tools/json_schema_compiler/cc_generator.py

Issue 10825029: Added JSON schema compiler support for serialized types (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: tools/json_schema_compiler/cc_generator.py
diff --git a/tools/json_schema_compiler/cc_generator.py b/tools/json_schema_compiler/cc_generator.py
index 021dce154c25756272d18485d3c5fe4cd0bebd21..ceb1370fc3ef0b5df937a2aa76cecf061f23ecc1 100644
--- a/tools/json_schema_compiler/cc_generator.py
+++ b/tools/json_schema_compiler/cc_generator.py
@@ -448,16 +448,39 @@ class CCGenerator(object):
value_var,
'&temp'))
.Append(' return %(failure_value)s;')
- .Append('%(dst)s->%(name)s.reset(new %(ctype)s(temp));')
)
+ if prop.type_ != prop.compiled_type:
+ (c.Append('%(compiled_ctype)s temp2;')
+ .Append('if (!%s)' %
+ cpp_util.GenerateTypeConversionCall(
+ self._cpp_type_generator.GetReferencedProperty(prop),
+ 'temp',
+ '&temp2'))
+ .Append(' return %(failure_value)s;')
+ .Append('%(dst)s->%(name)s.reset(new %(compiled_ctype)s(temp2));')
+ )
+ else:
+ c.Append('%(dst)s->%(name)s.reset(new %(ctype)s(temp));')
+
else:
+ if prop.type_ != prop.compiled_type:
+ c.Append('%(ctype)s temp;')
(c.Append('if (!%s)' %
cpp_util.GetAsFundamentalValue(
self._cpp_type_generator.GetReferencedProperty(prop),
value_var,
- '&%s->%s' % (dst, prop.unix_name)))
+ '%(fundamental_value_dst)s'))
not at google - send to devlin 2012/07/27 04:14:28 can you inline this value? It's only used once so
mitchellwrosen 2012/07/30 20:52:45 Done.
.Append(' return %(failure_value)s;')
)
+ if prop.type_ != prop.compiled_type:
+ (c.Append('if (!%s)' %
+ cpp_util.GenerateTypeConversionCall(
+ self._cpp_type_generator.GetReferencedProperty(prop),
+ 'temp',
+ '&%s->%s' % (dst, prop.unix_name)))
+ .Append(' return %(failure_value)s;')
+ )
+
elif self._IsObjectOrObjectRef(prop):
if prop.optional:
(c.Append('base::DictionaryValue* dictionary = NULL;')
@@ -543,9 +566,15 @@ class CCGenerator(object):
'name': prop.unix_name,
'dst': dst,
'failure_value': failure_value,
+ 'fundamental_value_dst': (
+ '&%s->%s' % (dst, prop.unix_name)
+ if prop.type_ == prop.compiled_type
+ else '&temp')
}
if prop.type_ not in (PropertyType.CHOICES, PropertyType.ANY):
sub['ctype'] = self._cpp_type_generator.GetType(prop)
+ sub['compiled_ctype'] = self._cpp_type_generator.GetType(
+ prop, convert_type=True)
sub['value_type'] = cpp_util.GetValueType(self._cpp_type_generator
.GetReferencedProperty(prop).type_)
c.Substitute(sub)
« no previous file with comments | « no previous file | tools/json_schema_compiler/cpp_type_generator.py » ('j') | tools/json_schema_compiler/cpp_type_generator.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698