@@ -43,7 +43,6 @@ type TypeDescriptorInfo struct {
43
43
type ReferencedTypeInfo struct {
44
44
// A pointer to the base, named type that this type reference refers to.
45
45
Base * NamedTypeInfo
46
- Size core.UsmUint
47
46
Descriptors []TypeDescriptorInfo
48
47
}
49
48
@@ -52,10 +51,6 @@ func (info ReferencedTypeInfo) Equals(other ReferencedTypeInfo) bool {
52
51
return false
53
52
}
54
53
55
- if info .Size != other .Size {
56
- return false
57
- }
58
-
59
54
if len (info .Descriptors ) != len (other .Descriptors ) {
60
55
return false
61
56
}
@@ -197,43 +192,6 @@ func NewReferencedTypeGenerator[InstT BaseInstruction]() FileContextGenerator[In
197
192
)
198
193
}
199
194
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
-
237
195
func (g * ReferencedTypeGenerator [InstT ]) Generate (
238
196
ctx * FileGenerationContext [InstT ],
239
197
node parse.TypeNode ,
@@ -262,14 +220,8 @@ func (g *ReferencedTypeGenerator[InstT]) Generate(
262
220
descriptors = append (descriptors , descriptorInfo )
263
221
}
264
222
265
- size , results := g .calculateTypeSize (ctx , node , baseType , descriptors )
266
- if ! results .IsEmpty () {
267
- return ReferencedTypeInfo {}, results
268
- }
269
-
270
223
typeInfo := ReferencedTypeInfo {
271
224
Base : baseType ,
272
- Size : size ,
273
225
Descriptors : descriptors ,
274
226
}
275
227
@@ -290,6 +242,42 @@ func NewNamedTypeGenerator[InstT BaseInstruction]() FileContextGenerator[InstT,
290
242
)
291
243
}
292
244
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
+
293
281
func (g * NamedTypeGenerator [InstT ]) Generate (
294
282
ctx * FileGenerationContext [InstT ],
295
283
node parse.TypeDeclarationNode ,
@@ -323,15 +311,20 @@ func (g *NamedTypeGenerator[InstT]) Generate(
323
311
})
324
312
}
325
313
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 )
328
321
if ! results .IsEmpty () {
329
322
return nil , results
330
323
}
331
324
332
325
typeInfo = & NamedTypeInfo {
333
326
Name : identifier ,
334
- Size : referencedTypeInfo . Size ,
327
+ Size : size ,
335
328
Declaration : & declaration ,
336
329
}
337
330
0 commit comments