@@ -31,27 +31,35 @@ public PyInt(IntPtr ptr) : base(ptr)
3131 /// ArgumentException will be thrown if the given object is not a
3232 /// Python int object.
3333 /// </remarks>
34- public PyInt ( PyObject o )
34+ public PyInt ( PyObject o ) : base ( FromObject ( o ) )
3535 {
36- if ( ! IsIntType ( o ) )
36+ }
37+
38+ private static IntPtr FromObject ( PyObject o )
39+ {
40+ if ( o == null || ! IsIntType ( o ) )
3741 {
3842 throw new ArgumentException ( "object is not an int" ) ;
3943 }
4044 Runtime . XIncref ( o . obj ) ;
41- obj = o . obj ;
45+ return o . obj ;
4246 }
4347
48+ private static IntPtr FromInt ( int value )
49+ {
50+ IntPtr val = Runtime . PyInt_FromInt32 ( value ) ;
51+ PythonException . ThrowIfIsNull ( val ) ;
52+ return val ;
53+ }
4454
4555 /// <summary>
4656 /// PyInt Constructor
4757 /// </summary>
4858 /// <remarks>
4959 /// Creates a new Python int from an int32 value.
5060 /// </remarks>
51- public PyInt ( int value )
61+ public PyInt ( int value ) : base ( FromInt ( value ) )
5262 {
53- obj = Runtime . PyInt_FromInt32 ( value ) ;
54- PythonException . ThrowIfIsNull ( obj ) ;
5563 }
5664
5765
@@ -62,10 +70,8 @@ public PyInt(int value)
6270 /// Creates a new Python int from a uint32 value.
6371 /// </remarks>
6472 [ CLSCompliant ( false ) ]
65- public PyInt ( uint value )
73+ public PyInt ( uint value ) : base ( FromLong ( value ) )
6674 {
67- obj = Runtime . PyInt_FromInt64 ( value ) ;
68- PythonException . ThrowIfIsNull ( obj ) ;
6975 }
7076
7177
@@ -75,10 +81,15 @@ public PyInt(uint value)
7581 /// <remarks>
7682 /// Creates a new Python int from an int64 value.
7783 /// </remarks>
78- public PyInt ( long value )
84+ public PyInt ( long value ) : base ( FromLong ( value ) )
7985 {
80- obj = Runtime . PyInt_FromInt64 ( value ) ;
81- PythonException . ThrowIfIsNull ( obj ) ;
86+ }
87+
88+ private static IntPtr FromLong ( long value )
89+ {
90+ IntPtr val = Runtime . PyInt_FromInt64 ( value ) ;
91+ PythonException . ThrowIfIsNull ( val ) ;
92+ return val ;
8293 }
8394
8495
@@ -89,10 +100,8 @@ public PyInt(long value)
89100 /// Creates a new Python int from a uint64 value.
90101 /// </remarks>
91102 [ CLSCompliant ( false ) ]
92- public PyInt ( ulong value )
103+ public PyInt ( ulong value ) : base ( FromLong ( ( long ) value ) )
93104 {
94- obj = Runtime . PyInt_FromInt64 ( ( long ) value ) ;
95- PythonException . ThrowIfIsNull ( obj ) ;
96105 }
97106
98107
@@ -142,16 +151,21 @@ public PyInt(sbyte value) : this((int)value)
142151 }
143152
144153
154+ private static IntPtr FromString ( string value )
155+ {
156+ IntPtr val = Runtime . PyInt_FromString ( value , IntPtr . Zero , 0 ) ;
157+ PythonException . ThrowIfIsNull ( val ) ;
158+ return val ;
159+ }
160+
145161 /// <summary>
146162 /// PyInt Constructor
147163 /// </summary>
148164 /// <remarks>
149165 /// Creates a new Python int from a string value.
150166 /// </remarks>
151- public PyInt ( string value )
167+ public PyInt ( string value ) : base ( FromString ( value ) )
152168 {
153- obj = Runtime . PyInt_FromString ( value , IntPtr . Zero , 0 ) ;
154- PythonException . ThrowIfIsNull ( obj ) ;
155169 }
156170
157171
0 commit comments