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

Unified Diff: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py

Issue 1417473002: Improves the representation of values in Mojom. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Remove some TODOs. Created 5 years, 2 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: 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.

Powered by Google App Engine
This is Rietveld 408576698