@@ -24,7 +24,7 @@ function symbStructBegin _
2424 byval id_alias as const zstring ptr, _
2525 byval isunion as integer , _
2626 byval align as integer , _
27- byval base_ as FBSYMBOL ptr , _
27+ byval is_derived as integer , _
2828 byval attrib as integer , _
2929 byval options as integer _
3030 ) as FBSYMBOL ptr
@@ -84,35 +84,38 @@ function symbStructBegin _
8484 s->udt.retdtype = FB_DATATYPE_INVALID
8585 s->udt.dbg.typenum = INVALID
8686 s->udt.ext = NULL
87+ s->udt.base = NULL
8788
88- '' extending another UDT?
89- if ( base_ <> NULL ) then
90- static as FBARRAYDIM dTB( 0 to 0 )
91-
92- '' (using base$ instead of $base to prevent gdb/stabs confusion,
93- '' where leading $ has special meaning)
94- s->udt.base = symbAddField( s, "base$" , 0 , dTB(), FB_DATATYPE_STRUCT, base_, 0 , 0 , 0 )
95-
89+ if ( is_derived ) then
9690 symbSetIsUnique( s )
9791 symbNestBegin( s, FALSE )
98- symbNamespaceImportEx( base_, s )
99-
100- if ( symbGetHasRTTI( base_ ) ) then
101- symbSetHasRTTI( s )
102-
103- '' inherit the vtable elements and abstracts counts
104- assert( base_->udt.ext->vtableelements >= 2 )
105- symbUdtAllocExt( s )
106- s->udt.ext->vtableelements = base_->udt.ext->vtableelements
107- s->udt.ext->abstractcount = base_->udt.ext->abstractcount
108- end if
109- else
110- s->udt.base = NULL
11192 end if
11293
11394 function = s
11495end function
11596
97+ sub symbStructAddBase( byval s as FBSYMBOL ptr, byval base_ as FBSYMBOL ptr )
98+ static as FBARRAYDIM dTB( 0 to 0 )
99+
100+ assert( s->udt.base = NULL )
101+
102+ '' (using base$ instead of $base to prevent gdb/stabs confusion,
103+ '' where leading $ has special meaning)
104+ s->udt.base = symbAddField( s, "base$" , 0 , dTB(), FB_DATATYPE_STRUCT, base_, 0 , 0 , 0 )
105+
106+ symbNamespaceImportEx( base_, s )
107+
108+ if ( symbGetHasRTTI( base_ ) ) then
109+ symbSetHasRTTI( s )
110+
111+ '' inherit the vtable elements and abstracts counts
112+ assert( base_->udt.ext->vtableelements >= 2 )
113+ symbUdtAllocExt( s )
114+ s->udt.ext->vtableelements = base_->udt.ext->vtableelements
115+ s->udt.ext->abstractcount = base_->udt.ext->abstractcount
116+ end if
117+ end sub
118+
116119function typeCalcNaturalAlign _
117120 ( _
118121 byval dtype as integer , _
0 commit comments