@@ -587,25 +587,34 @@ public override bool VisitPointerType(PointerType pointer, TypeQualifiers quals)
587587 return true ;
588588 }
589589
590+
591+ string arg = Generator . GeneratedIdentifier ( Context . ArgName ) ;
592+
590593 if ( pointee . TryGetClass ( out Class @class ) && @class . IsValueType )
591594 {
592595 if ( Context . Parameter . Usage == ParameterUsage . Out )
593596 {
594597 var qualifiedIdentifier = ( @class . OriginalClass ?? @class ) . Visit ( typePrinter ) ;
595598 Context . Before . WriteLine ( "var {0} = new {1}.{2}();" ,
596- Generator . GeneratedIdentifier ( Context . ArgName ) , qualifiedIdentifier ,
597- Helpers . InternalStruct ) ;
599+ arg , qualifiedIdentifier , Helpers . InternalStruct ) ;
598600 }
599601 else
600602 {
601603 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 ) ;
605605 }
606606
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 } )") ;
609618 return true ;
610619 }
611620
0 commit comments