@@ -388,7 +388,10 @@ private static void AddVirtualMethod(MethodInfo method, Type baseType, TypeBuild
388
388
private static void AddPythonMethod ( string methodName , PyObject func , TypeBuilder typeBuilder )
389
389
{
390
390
if ( func . HasAttr ( "_clr_method_name_" ) )
391
- methodName = func . GetAttr ( "_clr_method_name_" ) . ToString ( ) ;
391
+ {
392
+ using ( PyObject pyMethodName = func . GetAttr ( "_clr_method_name_" ) )
393
+ methodName = pyMethodName . ToString ( ) ;
394
+ }
392
395
393
396
using ( PyObject pyReturnType = func . GetAttr ( "_clr_return_type_" ) )
394
397
using ( PyObject pyArgTypes = func . GetAttr ( "_clr_arg_types_" ) )
@@ -477,37 +480,45 @@ private static void AddPythonProperty(string propertyName, PyObject func, TypeBu
477
480
propertyType ,
478
481
null ) ;
479
482
480
- if ( func . HasAttr ( "fget" ) && func . GetAttr ( "fget" ) . IsTrue ( ) )
483
+ if ( func . HasAttr ( "fget" ) )
481
484
{
482
- MethodBuilder methodBuilder = typeBuilder . DefineMethod ( "get_" + propertyName ,
483
- methodAttribs ,
484
- propertyType ,
485
- null ) ;
486
-
487
- ILGenerator il = methodBuilder . GetILGenerator ( ) ;
488
- il . Emit ( OpCodes . Ldarg_0 ) ;
489
- il . Emit ( OpCodes . Ldstr , propertyName ) ;
490
- il . Emit ( OpCodes . Call , typeof ( PythonDerivedType ) . GetMethod ( "InvokeGetProperty" ) . MakeGenericMethod ( propertyType ) ) ;
491
- il . Emit ( OpCodes . Ret ) ;
492
-
493
- propertyBuilder . SetGetMethod ( methodBuilder ) ;
485
+ using ( PyObject pyfget = func . GetAttr ( "fget" ) )
486
+ if ( pyfget . IsTrue ( ) )
487
+ {
488
+ MethodBuilder methodBuilder = typeBuilder . DefineMethod ( "get_" + propertyName ,
489
+ methodAttribs ,
490
+ propertyType ,
491
+ null ) ;
492
+
493
+ ILGenerator il = methodBuilder . GetILGenerator ( ) ;
494
+ il . Emit ( OpCodes . Ldarg_0 ) ;
495
+ il . Emit ( OpCodes . Ldstr , propertyName ) ;
496
+ il . Emit ( OpCodes . Call , typeof ( PythonDerivedType ) . GetMethod ( "InvokeGetProperty" ) . MakeGenericMethod ( propertyType ) ) ;
497
+ il . Emit ( OpCodes . Ret ) ;
498
+
499
+ propertyBuilder . SetGetMethod ( methodBuilder ) ;
500
+ }
494
501
}
495
502
496
- if ( func . HasAttr ( "fset" ) && func . GetAttr ( "fset" ) . IsTrue ( ) )
503
+ if ( func . HasAttr ( "fset" ) )
497
504
{
498
- MethodBuilder methodBuilder = typeBuilder . DefineMethod ( "set_" + propertyName ,
499
- methodAttribs ,
500
- null ,
501
- new Type [ ] { propertyType } ) ;
502
-
503
- ILGenerator il = methodBuilder . GetILGenerator ( ) ;
504
- il . Emit ( OpCodes . Ldarg_0 ) ;
505
- il . Emit ( OpCodes . Ldstr , propertyName ) ;
506
- il . Emit ( OpCodes . Ldarg_1 ) ;
507
- il . Emit ( OpCodes . Call , typeof ( PythonDerivedType ) . GetMethod ( "InvokeSetProperty" ) . MakeGenericMethod ( propertyType ) ) ;
508
- il . Emit ( OpCodes . Ret ) ;
509
-
510
- propertyBuilder . SetSetMethod ( methodBuilder ) ;
505
+ using ( PyObject pyset = func . GetAttr ( "fset" ) )
506
+ if ( pyset . IsTrue ( ) )
507
+ {
508
+ MethodBuilder methodBuilder = typeBuilder . DefineMethod ( "set_" + propertyName ,
509
+ methodAttribs ,
510
+ null ,
511
+ new Type [ ] { propertyType } ) ;
512
+
513
+ ILGenerator il = methodBuilder . GetILGenerator ( ) ;
514
+ il . Emit ( OpCodes . Ldarg_0 ) ;
515
+ il . Emit ( OpCodes . Ldstr , propertyName ) ;
516
+ il . Emit ( OpCodes . Ldarg_1 ) ;
517
+ il . Emit ( OpCodes . Call , typeof ( PythonDerivedType ) . GetMethod ( "InvokeSetProperty" ) . MakeGenericMethod ( propertyType ) ) ;
518
+ il . Emit ( OpCodes . Ret ) ;
519
+
520
+ propertyBuilder . SetSetMethod ( methodBuilder ) ;
521
+ }
511
522
}
512
523
}
513
524
}
0 commit comments