@@ -2186,7 +2186,7 @@ private void GenerateNativeConstructor(Class @class)
2186
2186
2187
2187
var hasBaseClass = @class . HasBaseClass && @class . BaseClass . IsRefType ;
2188
2188
if ( hasBaseClass )
2189
- WriteLineIndent ( ": base((void*) null )" , @class . BaseClass . Visit ( TypePrinter ) ) ;
2189
+ WriteLineIndent ( ": base((void*) native )" , @class . BaseClass . Visit ( TypePrinter ) ) ;
2190
2190
2191
2191
WriteOpenBraceAndIndent ( ) ;
2192
2192
@@ -2195,15 +2195,15 @@ private void GenerateNativeConstructor(Class @class)
2195
2195
if ( @class . BaseClass ? . Layout . HasSubclassAtNonZeroOffset == true )
2196
2196
WriteLine ( "{0} = {1};" , Helpers . PrimaryBaseOffsetIdentifier ,
2197
2197
GetOffsetToBase ( @class , @class . BaseClass ) ) ;
2198
- if ( ! @class . IsAbstractImpl )
2198
+ var hasVTables = @class . IsDynamic && GetUniqueVTableMethodEntries ( @class ) . Count > 0 ;
2199
+ if ( ! hasBaseClass || hasVTables )
2199
2200
{
2200
2201
WriteLine ( "if (native == null)" ) ;
2201
2202
WriteLineIndent ( "return;" ) ;
2203
+ if ( ! hasBaseClass )
2204
+ WriteLine ( $ "{ Helpers . InstanceIdentifier } = new global::System.IntPtr(native);") ;
2202
2205
}
2203
-
2204
- WriteLine ( "{0} = new global::System.IntPtr(native);" , Helpers . InstanceIdentifier ) ;
2205
2206
var dtor = @class . Destructors . FirstOrDefault ( ) ;
2206
- var hasVTables = @class . IsDynamic && GetUniqueVTableMethodEntries ( @class ) . Count > 0 ;
2207
2207
var setupVTables = ! @class . IsAbstractImpl && hasVTables && dtor ? . IsVirtual == true ;
2208
2208
if ( setupVTables )
2209
2209
{
@@ -2223,7 +2223,7 @@ private void GenerateNativeConstructor(Class @class)
2223
2223
Unindent ( ) ;
2224
2224
}
2225
2225
}
2226
- else
2226
+ else if ( ! hasBaseClass )
2227
2227
{
2228
2228
WriteLine ( $ "{ Helpers . InstanceField } = *({ TypePrinter . PrintNative ( @class ) } *) native;") ;
2229
2229
}
0 commit comments