| Index: tools/json_schema_compiler/cpp_type_generator.py
|
| diff --git a/tools/json_schema_compiler/cpp_type_generator.py b/tools/json_schema_compiler/cpp_type_generator.py
|
| index 95329c3f548614603df6fd0849879f852c57c086..deade36d839e2cbdf7b2d221aa10f9589f7d9cf4 100644
|
| --- a/tools/json_schema_compiler/cpp_type_generator.py
|
| +++ b/tools/json_schema_compiler/cpp_type_generator.py
|
| @@ -6,6 +6,7 @@ from code import Code
|
| from model import PropertyType
|
| import any_helper
|
| import cpp_util
|
| +import operator
|
| import schema_util
|
|
|
| class CppTypeGenerator(object):
|
| @@ -98,20 +99,15 @@ class CppTypeGenerator(object):
|
| """Gets the enum value in the given model.Property indicating no value has
|
| been set.
|
| """
|
| - prop_name = prop.unix_name
|
| - if (self.IsEnumRef(prop)):
|
| - prop_name = self.GetCompiledType(prop).upper()
|
| - return '%s_NONE' % prop_name.upper()
|
| + return '%s_NONE' % self.GetReferencedProperty(prop).unix_name.upper()
|
|
|
| def GetEnumValue(self, prop, enum_value):
|
| """Gets the enum value of the given model.Property of the given type.
|
|
|
| e.g VAR_STRING
|
| """
|
| - prop_name = prop.unix_name.upper()
|
| - if (self.IsEnumRef(prop)):
|
| - prop_name = self.GetCompiledType(prop).upper()
|
| - return '%s_%s' % (prop_name, cpp_util.Classname(enum_value.upper()))
|
| + return '%s_%s' % (self.GetReferencedProperty(prop).unix_name.upper(),
|
| + cpp_util.Classname(enum_value.upper()))
|
|
|
| def GetChoicesEnumType(self, prop):
|
| """Gets the type of the enum for the given model.Property.
|
| @@ -209,7 +205,7 @@ class CppTypeGenerator(object):
|
| c = Code()
|
| namespace_type_dependencies = self._NamespaceTypeDependencies()
|
| for namespace in sorted(namespace_type_dependencies.keys(),
|
| - key=lambda ns: ns.name):
|
| + key=operator.attrgetter('name')):
|
| c.Append('namespace %s {' % namespace.name)
|
| for type_ in sorted(namespace_type_dependencies[namespace],
|
| key=schema_util.StripSchemaNamespace):
|
| @@ -222,7 +218,8 @@ class CppTypeGenerator(object):
|
| 'name': type_name,
|
| 'item_type': self.GetType(namespace.types[type_].item_type,
|
| wrap_optional=True)})
|
| - else:
|
| + # Enums cannot be forward declared.
|
| + elif namespace.types[type_].type_ != PropertyType.ENUM:
|
| c.Append('struct %s;' % type_name)
|
| c.Append('}')
|
| c.Concat(self.GetNamespaceStart())
|
|
|