@@ -587,25 +587,34 @@ public override bool VisitPointerType(PointerType pointer, TypeQualifiers quals)
587
587
return true ;
588
588
}
589
589
590
+
591
+ string arg = Generator . GeneratedIdentifier ( Context . ArgName ) ;
592
+
590
593
if ( pointee . TryGetClass ( out Class @class ) && @class . IsValueType )
591
594
{
592
595
if ( Context . Parameter . Usage == ParameterUsage . Out )
593
596
{
594
597
var qualifiedIdentifier = ( @class . OriginalClass ?? @class ) . Visit ( typePrinter ) ;
595
598
Context . Before . WriteLine ( "var {0} = new {1}.{2}();" ,
596
- Generator . GeneratedIdentifier ( Context . ArgName ) , qualifiedIdentifier ,
597
- Helpers . InternalStruct ) ;
599
+ arg , qualifiedIdentifier , Helpers . InternalStruct ) ;
598
600
}
599
601
else
600
602
{
601
603
Context . Before . WriteLine ( "var {0} = {1}.{2};" ,
602
- Generator . GeneratedIdentifier ( Context . ArgName ) ,
603
- Context . Parameter . Name ,
604
- Helpers . InstanceIdentifier ) ;
604
+ arg , Context . Parameter . Name , Helpers . InstanceIdentifier ) ;
605
605
}
606
606
607
- Context . Return . Write ( "new global::System.IntPtr(&{0})" ,
608
- Generator . GeneratedIdentifier ( Context . ArgName ) ) ;
607
+ Context . Return . Write ( $ "new global::System.IntPtr(&{ arg } )") ;
608
+ return true ;
609
+ }
610
+
611
+ if ( pointee . IsPointerTo ( out Type type ) &&
612
+ type . Desugar ( ) . TryGetClass ( out Class c ) )
613
+ {
614
+ pointer . QualifiedPointee . Visit ( this ) ;
615
+ Context . Before . WriteLine ( $ "var { arg } = { Context . Return } ;") ;
616
+ Context . Return . StringBuilder . Clear ( ) ;
617
+ Context . Return . Write ( $ "new global::System.IntPtr(&{ arg } )") ;
609
618
return true ;
610
619
}
611
620
0 commit comments