@@ -43,7 +43,6 @@ type TypeDescriptorInfo struct {
4343type ReferencedTypeInfo struct {
4444 // A pointer to the base, named type that this type reference refers to.
4545 Base * NamedTypeInfo
46- Size core.UsmUint
4746 Descriptors []TypeDescriptorInfo
4847}
4948
@@ -52,10 +51,6 @@ func (info ReferencedTypeInfo) Equals(other ReferencedTypeInfo) bool {
5251 return false
5352 }
5453
55- if info .Size != other .Size {
56- return false
57- }
58-
5954 if len (info .Descriptors ) != len (other .Descriptors ) {
6055 return false
6156 }
@@ -197,43 +192,6 @@ func NewReferencedTypeGenerator[InstT BaseInstruction]() FileContextGenerator[In
197192 )
198193}
199194
200- func (g * ReferencedTypeGenerator [InstT ]) calculateTypeSize (
201- ctx * FileGenerationContext [InstT ],
202- node parse.TypeNode ,
203- baseType * NamedTypeInfo ,
204- descriptors []TypeDescriptorInfo ,
205- ) (core.UsmUint , core.ResultList ) {
206- size := core .UsmUint (baseType .Size )
207-
208- for _ , descriptor := range descriptors {
209- switch descriptor .Type {
210- case PointerTypeDescriptor :
211- size = ctx .PointerSize
212- case RepeatTypeDescriptor :
213- var ok bool
214- size , ok = core .Mul (size , descriptor .Amount )
215- if ! ok {
216- v := node .View ()
217- return 0 , list .FromSingle (core.Result {{
218- Type : core .ErrorResult ,
219- Message : "Type size overflow" ,
220- Location : & v ,
221- }})
222- }
223- default :
224- // notest
225- v := node .View ()
226- return 0 , list .FromSingle (core.Result {{
227- Type : core .InternalErrorResult ,
228- Message : "Unknown type descriptor" ,
229- Location : & v ,
230- }})
231- }
232- }
233-
234- return size , core.ResultList {}
235- }
236-
237195func (g * ReferencedTypeGenerator [InstT ]) Generate (
238196 ctx * FileGenerationContext [InstT ],
239197 node parse.TypeNode ,
@@ -262,14 +220,8 @@ func (g *ReferencedTypeGenerator[InstT]) Generate(
262220 descriptors = append (descriptors , descriptorInfo )
263221 }
264222
265- size , results := g .calculateTypeSize (ctx , node , baseType , descriptors )
266- if ! results .IsEmpty () {
267- return ReferencedTypeInfo {}, results
268- }
269-
270223 typeInfo := ReferencedTypeInfo {
271224 Base : baseType ,
272- Size : size ,
273225 Descriptors : descriptors ,
274226 }
275227
@@ -290,6 +242,42 @@ func NewNamedTypeGenerator[InstT BaseInstruction]() FileContextGenerator[InstT,
290242 )
291243}
292244
245+ func (g * NamedTypeGenerator [InstT ]) calculateTypeSize (
246+ ctx * FileGenerationContext [InstT ],
247+ node parse.TypeNode ,
248+ typeInfo ReferencedTypeInfo ,
249+ ) (core.UsmUint , core.ResultList ) {
250+ size := core .UsmUint (typeInfo .Base .Size )
251+
252+ for _ , descriptor := range typeInfo .Descriptors {
253+ switch descriptor .Type {
254+ case PointerTypeDescriptor :
255+ size = ctx .PointerSize
256+ case RepeatTypeDescriptor :
257+ var ok bool
258+ size , ok = core .Mul (size , descriptor .Amount )
259+ if ! ok {
260+ v := node .View ()
261+ return 0 , list .FromSingle (core.Result {{
262+ Type : core .ErrorResult ,
263+ Message : "Type size overflow" ,
264+ Location : & v ,
265+ }})
266+ }
267+ default :
268+ // notest
269+ v := node .View ()
270+ return 0 , list .FromSingle (core.Result {{
271+ Type : core .InternalErrorResult ,
272+ Message : "Unknown type descriptor" ,
273+ Location : & v ,
274+ }})
275+ }
276+ }
277+
278+ return size , core.ResultList {}
279+ }
280+
293281func (g * NamedTypeGenerator [InstT ]) Generate (
294282 ctx * FileGenerationContext [InstT ],
295283 node parse.TypeDeclarationNode ,
@@ -323,15 +311,20 @@ func (g *NamedTypeGenerator[InstT]) Generate(
323311 })
324312 }
325313
326- referencedType := node .Fields .Nodes [0 ].Type
327- referencedTypeInfo , results := g .ReferencedTypeGenerator .Generate (ctx , referencedType )
314+ referencedTypeNode := node .Fields .Nodes [0 ].Type
315+ referencedTypeInfo , results := g .ReferencedTypeGenerator .Generate (ctx , referencedTypeNode )
316+ if ! results .IsEmpty () {
317+ return nil , results
318+ }
319+
320+ size , results := g .calculateTypeSize (ctx , referencedTypeNode , referencedTypeInfo )
328321 if ! results .IsEmpty () {
329322 return nil , results
330323 }
331324
332325 typeInfo = & NamedTypeInfo {
333326 Name : identifier ,
334- Size : referencedTypeInfo . Size ,
327+ Size : size ,
335328 Declaration : & declaration ,
336329 }
337330
0 commit comments