Index: mojo/public/interfaces/bindings/mojom_types.mojom |
diff --git a/mojo/public/interfaces/bindings/mojom_types.mojom b/mojo/public/interfaces/bindings/mojom_types.mojom |
index bc792821fd8946466c70e3efe7f6cf4e45ddd25e..4b68fbbd53fc92b065aadb617c8ca8e80720fbf8 100644 |
--- a/mojo/public/interfaces/bindings/mojom_types.mojom |
+++ b/mojo/public/interfaces/bindings/mojom_types.mojom |
@@ -38,14 +38,11 @@ module mojo.bindings.types; |
* We refer to this higher-layer context as the *owning context.* |
* |
* In addition to types, Mojom values are also representd by structures in this |
- * file. A |Value| may be a LiteralValue, a UserValueReference or a |
- * BuiltinConstantValue. Similarly to the situation with TypeReferences, |
- * UserValueReferences contain a |value_key| which may be used to lookup |
- * a UserDefinedValue (an EnumValue or a DeclaredConstant) in |
- * the owning context. For example the |MojomFileGraph| struct in |
- * mojom_files.mojom contains the map: |
- * map<string, UserDefinedValue> resolved_values; |
- * for this purpose. |
+ * file. A |Value| may be a LiteralValue, a ConstantReference, |
+ * an EnumValueReference or a BuiltinConstantValue. Similarly to the situation |
+ * with TypeReferences, ConstantReferences and EnumValueReferences contain a |
+ * key which may be used to lookup user-defined value (an EnumValue or a |
+ * DeclaredConstant) in the owning context. |
*/ |
// The different kinds of types. We divide the types into five categories: |
@@ -239,14 +236,11 @@ struct MojomUnion { |
struct EnumValue { |
DeclarationData? decl_data; |
- // The type key of the enum that this value belongs to. |
- string enum_type_key; |
- |
// This is the value specified in the right-hand-side of the optional |
// initializer of an enum value declaration. The value must be a literal value |
- // of integer type or a UserValueReference that resolves to a different |
- // EnumValue from the same enum that was defined earlier lexically, |
- // or a UserValueReference that resolves to |
+ // of integer type or an EnumValueReference that resolves to a different |
+ // EnumValue from the same MojomEnum that was defined earlier lexically, |
+ // or a ConstantReference that resolves to |
// a DeclaredConstant whose |resolved_concrete_value| is one of those. |
Value? initializer_value; |
@@ -259,6 +253,7 @@ struct EnumValue { |
struct MojomEnum { |
DeclarationData? decl_data; // Some implementations may not provide this. |
+ // The enum values in declaration order. |
array<EnumValue> values; |
}; |
@@ -316,8 +311,11 @@ union Value { |
// A literal number, boolean or string |
LiteralValue literal_value; |
- // A reference to a user-defined value (a declared constant or enum value.) |
- UserValueReference user_value_reference; |
+ // A reference to a DeclaredConstant. |
+ ConstantReference constant_reference; |
+ |
+ // A reference to an EnumValue |
+ EnumValueReference enum_value_reference; |
// A built-in numeric constant. |
BuiltinConstantValue builtin_value; |
@@ -348,20 +346,29 @@ enum BuiltinConstantValue { |
FLOAT_NAN, |
}; |
-// A reference to a user-defined value (a declared constant or enum value.) |
-struct UserValueReference { |
+// A reference to a DeclaredConstant. |
+struct ConstantReference { |
// The identifier, as it appears at the reference site. |
string identifier; |
- // The key to the resolved value of this identifier. It refers to |
- // an instance of |UserDefinedValue| and so an EnumValue or |
- // DeclaredConstant. |
- string? value_key; |
+ // The DeclaredConstant to which this reference has resolved can be looked up |
+ // using this key in the appropriate map in the owning context. |
+ string constant_key; |
}; |
-union UserDefinedValue { |
- EnumValue enum_value; |
- DeclaredConstant declared_constant; |
+// A reference to an EnumValue |
+struct EnumValueReference { |
+ // The identifier, as it appears at the reference site. |
+ string identifier; |
+ |
+ // The type key of the MojomEnum containing the EnumValue to which this |
+ // reference has resolved. The MojomEnum can be looked up using this key in |
+ // the appropriate map in the owning context. |
+ string enum_type_key; |
+ |
+ // The 0-based index into the |values| array within the MojomEnum specified |
+ // by |enum_type_key| of the EnumValue to which this reference has resolved. |
+ uint32 enum_value_index; |
}; |
// This represents a Mojom constant declaration. |
@@ -375,34 +382,33 @@ struct DeclaredConstant { |
// This is the value specified in the right-hand-side of the constant |
// declaration. The value must be one of the following: |
// (a) a LiteralValue or a BuiltinConstantValue of the same type as |type| |
- // (b) a UserValueReference whose resolved value is an EnumValue of the same |
- // type as |type|, or |
- // (c) a UserValueReference whose resolved value is a different |
+ // (b) an EnumValueReference that resolves to an EnumValue of the same |
+ // enum type as |type|, or |
+ // (c) a ConstantReference that resolves to a different |
// DeclaredConstant whose |resolved_concrete_value| is one of (a) or (b) |
Value value; |
// The resolved concrete value. This must be a LiteralValue, a |
- // BuiltinConstantValue, or UserValueReference that resolves to an |
- // EnumValue. It may not be a UserValueReference that resolves |
- // to a DeclaredConstant. |
+ // BuiltinConstantValue, or an EnumValueReference. It may not be a |
+ // ConstantReference. |
// |
// The resolved concrete value is defined as follows: |
- // If |value| is a LiteralValue, a BuiltinConstantValue or a |
- // UserValueReference that refers to an EnumValue then the resolved |
+ // If |value| is a LiteralValue, a BuiltinConstantValue or an |
+ // EnunValueReference then the resolved |
// concrete value is conceptually equal to |value| and this will |
// be indicated by setting the |resolved_concrete_value| field to null. |
// |
- // Otherwise |value| is a UserValueReference that refers to a different |
+ // Otherwise |value| is a ConstantReference that refers to a different |
// DeclaredConstant and in this case |resolved_concrete_value| will be |
// non-null. It will be set to the conceptual resolved concrete value of that |
// other DeclaredConstant (even if that other declared constant has its own |
// |resolved_concrete_value| field set to null.) This chain of references |
// must terminate in well-formed Mojom. |
// |
- // In the case that |resolved_concrete_value| is set to a UserValueReference, |
- // only the |value_key| field of the UserValueReference is meaningful. The |
- // other fields should be ignored. |
+ // In the case that |resolved_concrete_value| is set to an EnumValueReference |
+ // only the |enum_type_key| and |enum_value_index| fields of the |
+ // EnumValueReference are meaningful. The other fields should be ignored. |
Value? resolved_concrete_value; |
}; |