| Index: mojom/mojom_parser/mojom/user_defined_types.go
|
| diff --git a/mojom/mojom_parser/mojom/user_defined_types.go b/mojom/mojom_parser/mojom/user_defined_types.go
|
| index 4daf9796e730780f6c179dd898ccfe0a9a25cb1e..6f6b877d2cf6d30cfa234b3720a0934cf195c13f 100644
|
| --- a/mojom/mojom_parser/mojom/user_defined_types.go
|
| +++ b/mojom/mojom_parser/mojom/user_defined_types.go
|
| @@ -87,6 +87,14 @@ type UserDefinedType interface {
|
| // backend. Examples include struct field packing data and MinVersion values.
|
| // See computed_data.go.
|
| ComputeFinalData() error
|
| +
|
| + // SerializationSize() returns the number of bytes necessary to serialize an
|
| + // instance of this type in Mojo serialization.
|
| + SerializationSize() uint32
|
| +
|
| + // SerializationAlignment() returns the number of bytes on which an instance
|
| + // of this type should be aligned in Mojo serialization.
|
| + SerializationAlignment() uint32
|
| }
|
|
|
| // This struct is embedded in each of MojomStruct, MojomInterface
|
| @@ -342,10 +350,10 @@ type MojomStruct struct {
|
| fieldsByName map[string]*StructField
|
| FieldsInLexicalOrder []*StructField
|
|
|
| - // This is computed after the parsing phase.
|
| + // This is computed by ComputeFieldOrdinals().
|
| fieldsInOrdinalOrder []*StructField
|
|
|
| - // This is computed in ComputeVersionInfo which is invoked by ComputeFinalData().
|
| + // This is computed in computeVersionInfo which is invoked by ComputeFinalData().
|
| versionInfo []StructVersion
|
|
|
| // Used to form an error message in case of a duplicate field name.
|
| @@ -447,6 +455,14 @@ func (*MojomStruct) Kind() UserDefinedTypeKind {
|
| return UserDefinedTypeKindStruct
|
| }
|
|
|
| +func (*MojomStruct) SerializationSize() uint32 {
|
| + return 8
|
| +}
|
| +
|
| +func (*MojomStruct) SerializationAlignment() uint32 {
|
| + return 8
|
| +}
|
| +
|
| func (s *MojomStruct) StructType() StructType {
|
| return s.structType
|
| }
|
| @@ -581,82 +597,6 @@ func (e *StructFieldMinVersionError) Error() string {
|
| return UserErrorMessage(e.field.OwningFile(), token, message)
|
| }
|
|
|
| -// ComputeVersionInfo is invoked by ComputeFinalData() after the
|
| -// parsing, resolution and type validation phases. It examines the |MinVersion|
|
| -// attributes of all of the fields of the struct, validates the values, and
|
| -// sets up the versionInfo array.
|
| -func (s *MojomStruct) ComputeVersionInfo() error {
|
| - s.versionInfo = make([]StructVersion, 0)
|
| - previousMinVersion := uint32(0)
|
| - payloadSizeSoFar := uint32(0)
|
| - for i, field := range s.fieldsInOrdinalOrder {
|
| - value, literalValue, found, ok := field.minVersionAttribute()
|
| - if found == false {
|
| - if previousMinVersion != 0 {
|
| - return &StructFieldMinVersionError{
|
| - field: field,
|
| - previousValue: previousMinVersion,
|
| - literalValue: MakeStringLiteralValue("", nil),
|
| - err: ErrMinVersionOutOfOrder,
|
| - }
|
| - }
|
| - } else {
|
| - if !ok {
|
| - return &StructFieldMinVersionError{
|
| - field: field,
|
| - literalValue: literalValue,
|
| - err: ErrMinVersionIllformed,
|
| - }
|
| - }
|
| - if value < previousMinVersion {
|
| - return &StructFieldMinVersionError{
|
| - field: field,
|
| - previousValue: previousMinVersion,
|
| - literalValue: literalValue,
|
| - err: ErrMinVersionOutOfOrder,
|
| - }
|
| - }
|
| - }
|
| - if value != 0 && !field.FieldType.Nullable() {
|
| - return &StructFieldMinVersionError{
|
| - field: field,
|
| - literalValue: literalValue,
|
| - err: ErrMinVersionNotNullable,
|
| - }
|
| - }
|
| - field.minVersion = int64(value)
|
| - if value > previousMinVersion {
|
| - s.versionInfo = append(s.versionInfo, StructVersion{
|
| - VersionNumber: previousMinVersion,
|
| - NumFields: uint32(i),
|
| - NumBytes: payloadSizeSoFar,
|
| - })
|
| - previousMinVersion = value
|
| - }
|
| - // TODO(rudominer) Set payloadSizeSoFar to the payload size if the
|
| - // current |field| were the last field.
|
| - }
|
| - s.versionInfo = append(s.versionInfo, StructVersion{
|
| - VersionNumber: previousMinVersion,
|
| - NumFields: uint32(len(s.fieldsInOrdinalOrder)),
|
| - NumBytes: payloadSizeSoFar,
|
| - })
|
| -
|
| - return nil
|
| -}
|
| -
|
| -// ComputeFieldOffsets is invoked by ComputeFinalData after the
|
| -// parsing, resolution and type validation phases. It computes the |offset|
|
| -// and |bit| fields of each struct field.
|
| -func (s *MojomStruct) ComputeFieldOffsets() error {
|
| - // TODO(rudominer) Implement MojomStruct.ComputeFieldOffsets
|
| - for _, field := range s.FieldsInLexicalOrder {
|
| - field.offset = 0
|
| - field.bit = 0
|
| - }
|
| - return nil
|
| -}
|
| -
|
| func (m MojomStruct) String() string {
|
| s := fmt.Sprintf("\n---------struct--------------\n")
|
| s += fmt.Sprintf("%s\n", m.UserDefinedTypeBase)
|
| @@ -900,6 +840,14 @@ func (MojomInterface) Kind() UserDefinedTypeKind {
|
| return UserDefinedTypeKindInterface
|
| }
|
|
|
| +func (*MojomInterface) SerializationSize() uint32 {
|
| + return 8
|
| +}
|
| +
|
| +func (*MojomInterface) SerializationAlignment() uint32 {
|
| + return 4
|
| +}
|
| +
|
| func (MojomInterface) IsAssignmentCompatibleWith(value LiteralValue) bool {
|
| return false
|
| }
|
| @@ -1140,6 +1088,14 @@ func (MojomUnion) Kind() UserDefinedTypeKind {
|
| return UserDefinedTypeKindUnion
|
| }
|
|
|
| +func (MojomUnion) SerializationSize() uint32 {
|
| + return 16
|
| +}
|
| +
|
| +func (MojomUnion) SerializationAlignment() uint32 {
|
| + return 8
|
| +}
|
| +
|
| func (MojomUnion) IsAssignmentCompatibleWith(value LiteralValue) bool {
|
| return false
|
| }
|
| @@ -1195,6 +1151,14 @@ func (MojomEnum) Kind() UserDefinedTypeKind {
|
| return UserDefinedTypeKindEnum
|
| }
|
|
|
| +func (MojomEnum) SerializationSize() uint32 {
|
| + return 4
|
| +}
|
| +
|
| +func (MojomEnum) SerializationAlignment() uint32 {
|
| + return 4
|
| +}
|
| +
|
| func (e *MojomEnum) InitAsScope(parentScope *Scope) *Scope {
|
| e.scopeForValues = NewLexicalScope(ScopeEnum, parentScope,
|
| e.simpleName, parentScope.file, e)
|
|
|