Index: mojom/mojom_parser/mojom/types.go |
diff --git a/mojom/mojom_parser/mojom/types.go b/mojom/mojom_parser/mojom/types.go |
index b2589fec3706d83f8f9916a57a3b039a13027469..fd22392feda2368103aae2c914d578d9aa985a2a 100644 |
--- a/mojom/mojom_parser/mojom/types.go |
+++ b/mojom/mojom_parser/mojom/types.go |
@@ -55,6 +55,7 @@ const ( |
// A LiteralType is a |ConcreteType|. |
type LiteralType interface { |
ConcreteType |
+ LiteralTypeKind() TypeKind |
} |
// ConcreteType represents the type of a concrete value. These are the types |
@@ -106,8 +107,9 @@ type TypeRef interface { |
// or MapTypeRefs because those types are never validated after resolution. |
IsAssignmentCompatible(assignedValue ConcreteValue) bool |
- // TypeName() returns a string appropriate for using-facing messages |
- // that names a type. For UserDefinedTypes it will return the fully-qualified |
+ // TypeName() returns a string appropriate for user-facing messages |
+ // that names a type, including markers for interface requests and nullability. |
+ // For UserDefinedTypes it will return the fully-qualified |
// name of the resolved type, if the identifier has already been resolved. |
// Otherwise it will return the identifier. |
TypeName() string |
@@ -121,6 +123,9 @@ type TypeRef interface { |
// type and for MapTypes this method returns the union of the set of UserDefined |
// types of the key type and the value type. |
ReferencedUserDefinedTypes() UserDefinedTypeSet |
+ |
+ // Returns true just in case the type referene is nullable. |
+ Nullable() bool |
} |
///////////////////////////////////////////////////////////// |
@@ -185,12 +190,14 @@ func (SimpleType) MarkUsedAsMapKey() bool { |
return true |
} |
-// From interface TypeRef: |
- |
func (SimpleType) MarkUsedAsConstantType() bool { |
return true |
} |
+func (SimpleType) Nullable() bool { |
+ return false |
+} |
+ |
// A SimpleType does not reference any UserDefinedTypes. |
func (SimpleType) ReferencedUserDefinedTypes() UserDefinedTypeSet { |
return MakeUserDefinedTypeSet() |
@@ -1217,6 +1224,19 @@ func int32Value(literalValue LiteralValue) (int32Value int32, ok bool) { |
return |
} |
+// uint32Value returns the value of |literalValue| as an uint32. |
+// If the type of |literalValue| is not an integer type then |ok| |
+// will be false and |int32Value| will be zero. If the type of |
+// |literalValue| is any of the integer types then |uint32Value| will |
+// be the integer value cast to an uint32 and |ok| will indicate whether |
+// or not the pre-cast value is between 0 and math.MaxUInt32. |
+func uint32Value(literalValue LiteralValue) (int32Value uint32, ok bool) { |
+ int64Value, ok := int64Value(literalValue) |
+ ok = ok && int64Value <= math.MaxUint32 && int64Value >= 0 |
+ int32Value = uint32(int64Value) |
+ return |
+} |
+ |
func MakeStringLiteralValue(text string, token *lexer.Token) LiteralValue { |
return LiteralValue{StringLiteralType, text, false, token} |
} |