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

Unified Diff: mojom/mojom_parser/mojom/types.go

Issue 1823563002: Mojom frontend: Implement computeFieldOffsets(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Another comment and more tests. Created 4 years, 9 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
« no previous file with comments | « mojom/mojom_parser/mojom/computed_data.go ('k') | mojom/mojom_parser/mojom/user_defined_types.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojom/mojom_parser/mojom/types.go
diff --git a/mojom/mojom_parser/mojom/types.go b/mojom/mojom_parser/mojom/types.go
index fd22392feda2368103aae2c914d578d9aa985a2a..c8af282f058355cbecf0b3ac8996886e2a9d8261 100644
--- a/mojom/mojom_parser/mojom/types.go
+++ b/mojom/mojom_parser/mojom/types.go
@@ -126,6 +126,16 @@ type TypeRef interface {
// Returns true just in case the type referene is nullable.
Nullable() bool
+
+ // SerializationSize() is invoked after the resolution and validation phases.
+ // It returns the number of bytes necessary to serialize an instance of the type
+ // to which this type reference resolves in Mojo serialization.
+ SerializationSize() uint32
+
+ // SerializationAlignment() is invoked after the resolution and validation phases.
+ // It returns the number of bytes on which an instance of the type to which this
+ // type reference resolves must be aligned during Mojo serialization.
+ SerializationAlignment() uint32
}
/////////////////////////////////////////////////////////////
@@ -328,6 +338,39 @@ func (t SimpleType) MarkTypeCompatible(assignment LiteralAssignment) bool {
return t.isAssignmentCompatibleWithLiteral(assignment.assignedValue)
}
+func (t SimpleType) SerializationSize() uint32 {
+ switch t {
+ case SimpleTypeBool:
+ return 1
+ case SimpleTypeDouble:
+ return 8
+ case SimpleTypeFloat:
+ return 4
+ case SimpleTypeInt8:
+ return 1
+ case SimpleTypeInt16:
+ return 2
+ case SimpleTypeInt32:
+ return 4
+ case SimpleTypeInt64:
+ return 8
+ case SimpleTypeUInt8:
+ return 1
+ case SimpleTypeUInt16:
+ return 2
+ case SimpleTypeUInt32:
+ return 4
+ case SimpleTypeUInt64:
+ return 8
+ default:
+ panic(fmt.Sprintf("unexpected type: &d", t))
+ }
+}
+
+func (t SimpleType) SerializationAlignment() uint32 {
+ return t.SerializationSize()
+}
+
func (t SimpleType) String() string {
switch t {
case SimpleTypeBool:
@@ -376,6 +419,14 @@ func (s StringType) Nullable() bool {
return s.nullable
}
+func (StringType) SerializationSize() uint32 {
+ return 8
+}
+
+func (StringType) SerializationAlignment() uint32 {
+ return 8
+}
+
// StringLiteralType is a global singleton representing the unique LiteralType string.
var StringLiteralType LiteralType = StringType{}
@@ -466,6 +517,14 @@ func (h HandleTypeRef) Nullable() bool {
return h.nullable
}
+func (HandleTypeRef) SerializationSize() uint32 {
+ return 4
+}
+
+func (HandleTypeRef) SerializationAlignment() uint32 {
+ return 4
+}
+
func (h HandleTypeRef) HandleKind() HandleKind {
return h.kind
}
@@ -596,6 +655,14 @@ func (a ArrayTypeRef) Nullable() bool {
return a.nullable
}
+func (ArrayTypeRef) SerializationSize() uint32 {
+ return 8
+}
+
+func (ArrayTypeRef) SerializationAlignment() uint32 {
+ return 8
+}
+
func (a ArrayTypeRef) FixedLength() int32 {
return a.fixedLength
}
@@ -684,6 +751,14 @@ func (m MapTypeRef) Nullable() bool {
return m.nullable
}
+func (MapTypeRef) SerializationSize() uint32 {
+ return 8
+}
+
+func (MapTypeRef) SerializationAlignment() uint32 {
+ return 8
+}
+
func (m MapTypeRef) KeyType() TypeRef {
return m.keyType
}
@@ -804,6 +879,23 @@ func (t *UserTypeRef) Nullable() bool {
return t.nullable
}
+func (t *UserTypeRef) SerializationSize() uint32 {
+ if t.resolvedType == nil {
+ panic("This method should only be invoked after successful resolution.")
+ }
+ if t.IsInterfaceRequest() {
+ return HandleTypeRef{}.SerializationSize()
+ }
+ return t.resolvedType.SerializationSize()
+}
+
+func (t *UserTypeRef) SerializationAlignment() uint32 {
+ if t.resolvedType == nil {
+ panic("This method should only be invoked after successful resolution.")
+ }
+ return t.resolvedType.SerializationAlignment()
+}
+
func (t *UserTypeRef) IsInterfaceRequest() bool {
return t.interfaceRequest
}
« no previous file with comments | « mojom/mojom_parser/mojom/computed_data.go ('k') | mojom/mojom_parser/mojom/user_defined_types.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698