@@ -101,27 +101,21 @@ private static IntPtr Cast(IntPtr data, IntPtr obj, IntPtr type) {
101101 GCHandle typeHandle = GCHandle . FromIntPtr ( type ) ;
102102 try {
103103 CData cdata = objHandle . Target as CData ;
104- PythonType pt = ( PythonType ) typeHandle . Target ;
104+ PythonType pt = typeHandle . Target as PythonType ;
105105
106- CData res = ( CData ) pt . CreateInstance ( pt . Context . SharedContext ) ;
107- if ( IsPointer ( pt ) ) {
108- res . MemHolder = new MemoryHolder ( IntPtr . Size ) ;
109- if ( IsPointer ( DynamicHelpers . GetPythonType ( cdata ) ) ) {
110- res . MemHolder . WriteIntPtr ( 0 , cdata . MemHolder . ReadIntPtr ( 0 ) ) ;
111- } else {
112- res . MemHolder . WriteIntPtr ( 0 , data ) ;
113- }
106+ if ( ! IsPointer ( pt ) ) throw PythonOps . TypeError ( "cast() argument 2 must be a pointer type, not {0}" , PythonOps . GetPythonTypeName ( typeHandle . Target ) ) ;
114107
115- if ( cdata != null ) {
116- res . MemHolder . Objects = cdata . MemHolder . Objects ;
117- res . MemHolder . AddObject ( IdDispenser . GetId ( cdata ) , cdata ) ;
118- }
108+ CData res = ( CData ) pt . CreateInstance ( pt . Context . SharedContext ) ;
109+ res . MemHolder = new MemoryHolder ( IntPtr . Size ) ;
110+ if ( IsPointer ( DynamicHelpers . GetPythonType ( cdata ) ) ) {
111+ res . MemHolder . WriteIntPtr ( 0 , cdata . MemHolder . ReadIntPtr ( 0 ) ) ;
119112 } else {
120- if ( cdata != null ) {
121- res . MemHolder = new MemoryHolder ( data , ( ( INativeType ) pt ) . Size , cdata . MemHolder ) ;
122- } else {
123- res . MemHolder = new MemoryHolder ( data , ( ( INativeType ) pt ) . Size ) ;
124- }
113+ res . MemHolder . WriteIntPtr ( 0 , data ) ;
114+ }
115+
116+ if ( cdata != null ) {
117+ res . MemHolder . Objects = cdata . MemHolder . Objects ;
118+ res . MemHolder . AddObject ( IdDispenser . GetId ( cdata ) , cdata ) ;
125119 }
126120
127121 return GCHandle . ToIntPtr ( GCHandle . Alloc ( res ) ) ;
0 commit comments