Index: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py |
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py |
index 4660ff0a7493dfee0974a20882a4dbbe19c80d54..e2d58182201ca21fc0dec193591bb0a0a7570d31 100755 |
--- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py |
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py |
@@ -65,7 +65,8 @@ class FileTranslator(object): |
if mojom_file.declared_mojom_objects: |
if mojom_file.declared_mojom_objects.top_level_constants: |
mod.constants = [ |
- self.ConstFromMojom(self._graph.resolved_constants[key], None) |
+ self.ConstFromMojom( |
+ self._graph.resolved_values[key].declared_constant, None) |
for key in mojom_file.declared_mojom_objects.top_level_constants] |
user_defined_types = ['interfaces', 'structs', 'unions'] |
@@ -170,7 +171,12 @@ class FileTranslator(object): |
self.PopulateCommonFieldValues(struct_field, mojom_field) |
struct_field.ordinal = self.OrdinalFromMojom(mojom_field) |
if mojom_field.default_value: |
- struct_field.default = self.EvalConst(mojom_field.default_value) |
+ if (mojom_field.default_value.tag == |
+ mojom_types_mojom.DefaultFieldValue.Tags.default_keyword): |
+ struct_field.default = 'default' |
+ else: |
+ struct_field.default = self.EvalValue( |
+ mojom_field.default_value.value) |
return struct_field |
@@ -188,8 +194,6 @@ class FileTranslator(object): |
""" |
param = module.Parameter() |
param.ordinal = self.OrdinalFromMojom(mojom) |
- if mojom.default_value: |
- param.default = self.EvalConst(mojom.default_value) |
self.PopulateCommonFieldValues(param, mojom) |
return param |
@@ -231,8 +235,8 @@ class FileTranslator(object): |
field = module.EnumField() |
field.name = mojom_field.decl_data.short_name |
field.attributes = self.AttributesFromMojom(mojom_field) |
- field.value = self.EvalConst(mojom_field.value) |
- field.numeric_value = self.EvalConst(mojom_field.value) |
+ field.value = mojom_field.int_value |
+ field.numeric_value = mojom_field.int_value |
return field |
def AttributesFromMojom(self, mojom): |
@@ -342,21 +346,26 @@ class FileTranslator(object): |
const = module.Constant() |
const.name = mojom_const.decl_data.short_name |
const.kind = self.KindFromMojom(mojom_const.type) |
- const.value = self.EvalConst(mojom_const.value) |
+ const.value = self.EvalValue(mojom_const.value) |
const.parent_kind = parent_kind |
return const |
- def EvalConst(self, const): |
- """Evaluates a mojom_types_mojom.ConstantValue. |
+ def EvalValue(self, value): |
+ """Evaluates a mojom_types_mojom.Value. |
Args: |
- const: {mojom_types_mojom.ConstantValue} to be evaluated. |
+ value: {mojom_types_mojom.Value} to be evaluated. |
Returns: |
- {int|float|str|bool} either the value of the constant or a string |
- referencing a built-in constant value. |
+ {int|float|str|bool|None} the literal value if value is a LiteralValue, |
+ the string name of the built-in constant if value is a |
+ BuiltinConstantValue, the result of invoking EvalValue() on the |
+ resolved concrete value of the user value reference if value is a |
+ UserValueReference and its concrete value is not None, or else None |
""" |
- if const.value.tag == mojom_types_mojom.ConstantValue.Tags.builtin_value: |
+ if value.tag == mojom_types_mojom.Value.Tags.literal_value: |
+ return value.literal_value.data |
+ elif value.tag == mojom_types_mojom.Value.Tags.builtin_value: |
mojom_to_builtin = { |
mojom_types_mojom.BuiltinConstantValue.DOUBLE_INFINITY: |
'double.INFINITY', |
@@ -370,9 +379,15 @@ class FileTranslator(object): |
'float.NEGATIVE_INFINITY', |
mojom_types_mojom.BuiltinConstantValue.FLOAT_NAN: 'float.NAN', |
} |
- return module.BuiltinValue(mojom_to_builtin[const.value.builtin_value]) |
+ return module.BuiltinValue(mojom_to_builtin[value.builtin_value]) |
- return const.value.data |
+ assert value.tag == mojom_types_mojom.Value.Tags.user_value_reference |
+ concrete_value = value.user_value_reference.resolved_concrete_value |
+ if concrete_value == None: |
+ return None |
+ assert (concrete_value.tag != |
+ mojom_types_mojom.Value.Tags.user_value_reference) |
+ return self.EvalValue(concrete_value) |
def KindFromMojom(self, mojom_type): |
"""Translates a mojom_types_mojom.Type to its equivalent module type. |