Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
fix compiler warning
  • Loading branch information
koubaa committed Sep 16, 2020
commit cff4f4fb4eeef67d7e0ff995b8d52190d9a62c2a
28 changes: 18 additions & 10 deletions src/runtime/pyansistring.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@ public PyAnsiString(IntPtr ptr) : base(ptr)
}


private static IntPtr FromObject(PyObject o)
{
if (!IsStringType(o))
{
throw new ArgumentException("object is not a string");
}
Runtime.XIncref(o.obj);
return o.obj;
}

/// <summary>
/// PyString Constructor
/// </summary>
Expand All @@ -25,14 +35,14 @@ public PyAnsiString(IntPtr ptr) : base(ptr)
/// An ArgumentException will be thrown if the given object is not
/// a Python string object.
/// </remarks>
public PyAnsiString(PyObject o)
public PyAnsiString(PyObject o) : base(FromObject(o))
{
if (!IsStringType(o))
{
throw new ArgumentException("object is not a string");
}
Runtime.XIncref(o.obj);
obj = o.obj;
}
private static IntPtr FromString(string s)
{
IntPtr val = Runtime.PyString_FromString(s);
PythonException.ThrowIfIsNull(val);
return val;
}


Expand All @@ -42,10 +52,8 @@ public PyAnsiString(PyObject o)
/// <remarks>
/// Creates a Python string from a managed string.
/// </remarks>
public PyAnsiString(string s)
public PyAnsiString(string s) : base(FromString(s))
{
obj = Runtime.PyString_FromString(s);
PythonException.ThrowIfIsNull(obj);
}


Expand Down
6 changes: 2 additions & 4 deletions src/runtime/pydict.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,8 @@ public PyDict(IntPtr ptr) : base(ptr)
/// <remarks>
/// Creates a new Python dictionary object.
/// </remarks>
public PyDict()
public PyDict() : base(Runtime.PyDict_New())
{
obj = Runtime.PyDict_New();
if (obj == IntPtr.Zero)
{
throw new PythonException();
Expand All @@ -47,14 +46,13 @@ public PyDict()
/// ArgumentException will be thrown if the given object is not a
/// Python dictionary object.
/// </remarks>
public PyDict(PyObject o)
public PyDict(PyObject o) : base(o.obj)
{
if (!IsDictType(o))
{
throw new ArgumentException("object is not a dict");
}
Runtime.XIncref(o.obj);
Comment thread
koubaa marked this conversation as resolved.
Outdated
obj = o.obj;
}


Expand Down
46 changes: 29 additions & 17 deletions src/runtime/pyfloat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ namespace Python.Runtime
{
/// <summary>
/// Represents a Python float object. See the documentation at
/// PY2: https://docs.python.org/2/c-api/float.html
/// PY3: https://docs.python.org/3/c-api/float.html
/// for details.
/// </summary>
Expand All @@ -31,14 +30,8 @@ public PyFloat(IntPtr ptr) : base(ptr)
/// ArgumentException will be thrown if the given object is not a
/// Python float object.
/// </remarks>
public PyFloat(PyObject o)
public PyFloat(PyObject o) : base(FromObject(o))
{
if (!IsFloatType(o))
{
throw new ArgumentException("object is not a float");
}
Runtime.XIncref(o.obj);
obj = o.obj;
}


Expand All @@ -48,26 +41,45 @@ public PyFloat(PyObject o)
/// <remarks>
/// Creates a new Python float from a double value.
/// </remarks>
public PyFloat(double value)
public PyFloat(double value) : base(FromDouble(value))
{
}

private static IntPtr FromObject(PyObject o)
{
if (!IsFloatType(o))
Comment thread
koubaa marked this conversation as resolved.
Outdated
{
throw new ArgumentException("object is not a float");
}
Runtime.XIncref(o.obj);
return o.obj;
}

private static IntPtr FromDouble(double value)
{
obj = Runtime.PyFloat_FromDouble(value);
PythonException.ThrowIfIsNull(obj);
IntPtr val = Runtime.PyFloat_FromDouble(value);
PythonException.ThrowIfIsNull(val);
return val;
}

private static IntPtr FromString(string value)
{
using (var s = new PyString(value))
{
IntPtr val = Runtime.PyFloat_FromString(s.obj, IntPtr.Zero);
PythonException.ThrowIfIsNull(val);
return val;
}
}

/// <summary>
/// PyFloat Constructor
/// </summary>
/// <remarks>
/// Creates a new Python float from a string value.
/// </remarks>
public PyFloat(string value)
public PyFloat(string value) : base(FromString(value))
{
using (var s = new PyString(value))
{
obj = Runtime.PyFloat_FromString(s.obj, IntPtr.Zero);
PythonException.ThrowIfIsNull(obj);
}
}


Expand Down
48 changes: 31 additions & 17 deletions src/runtime/pyint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,35 @@ public PyInt(IntPtr ptr) : base(ptr)
/// ArgumentException will be thrown if the given object is not a
/// Python int object.
/// </remarks>
public PyInt(PyObject o)
public PyInt(PyObject o) : base(FromObject(o))
{
}

private static IntPtr FromObject(PyObject o)
{
if (!IsIntType(o))
{
throw new ArgumentException("object is not an int");
}
Runtime.XIncref(o.obj);
obj = o.obj;
return o.obj;
}

private static IntPtr FromInt(int value)
{
IntPtr val = Runtime.PyInt_FromInt32(value);
PythonException.ThrowIfIsNull(val);
return val;
}

/// <summary>
/// PyInt Constructor
/// </summary>
/// <remarks>
/// Creates a new Python int from an int32 value.
/// </remarks>
public PyInt(int value)
public PyInt(int value) : base(FromInt(value))
{
obj = Runtime.PyInt_FromInt32(value);
PythonException.ThrowIfIsNull(obj);
}


Expand All @@ -62,10 +70,8 @@ public PyInt(int value)
/// Creates a new Python int from a uint32 value.
/// </remarks>
[CLSCompliant(false)]
public PyInt(uint value)
public PyInt(uint value) : base(FromLong(value))
{
obj = Runtime.PyInt_FromInt64(value);
PythonException.ThrowIfIsNull(obj);
}


Expand All @@ -75,10 +81,15 @@ public PyInt(uint value)
/// <remarks>
/// Creates a new Python int from an int64 value.
/// </remarks>
public PyInt(long value)
public PyInt(long value) : base(FromLong(value))
{
obj = Runtime.PyInt_FromInt64(value);
PythonException.ThrowIfIsNull(obj);
}

private static IntPtr FromLong(long value)
{
IntPtr val = Runtime.PyInt_FromInt64(value);
PythonException.ThrowIfIsNull(val);
return val;
}


Expand All @@ -89,10 +100,8 @@ public PyInt(long value)
/// Creates a new Python int from a uint64 value.
/// </remarks>
[CLSCompliant(false)]
public PyInt(ulong value)
public PyInt(ulong value) : base(FromLong((long)value))
{
obj = Runtime.PyInt_FromInt64((long)value);
PythonException.ThrowIfIsNull(obj);
}


Expand Down Expand Up @@ -142,16 +151,21 @@ public PyInt(sbyte value) : this((int)value)
}


private static IntPtr FromString(string value)
{
IntPtr val = Runtime.PyInt_FromString(value, IntPtr.Zero, 0);
PythonException.ThrowIfIsNull(val);
return val;
}

/// <summary>
/// PyInt Constructor
/// </summary>
/// <remarks>
/// Creates a new Python int from a string value.
/// </remarks>
public PyInt(string value)
public PyInt(string value) : base(FromString(value))
{
obj = Runtime.PyInt_FromString(value, IntPtr.Zero, 0);
PythonException.ThrowIfIsNull(obj);
}


Expand Down
17 changes: 11 additions & 6 deletions src/runtime/pyiter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,24 @@ public PyIter(IntPtr ptr) : base(ptr)
{
}

private static IntPtr FromObject(PyObject iterable)
{
IntPtr val = Runtime.PyObject_GetIter(iterable.obj);
if (val == IntPtr.Zero)
{
throw new PythonException();
}
Comment thread
koubaa marked this conversation as resolved.
Outdated
return val;
}

/// <summary>
/// PyIter Constructor
/// </summary>
/// <remarks>
/// Creates a Python iterator from an iterable. Like doing "iter(iterable)" in python.
/// </remarks>
public PyIter(PyObject iterable)
public PyIter(PyObject iterable) : base(FromObject(iterable))
Comment thread
koubaa marked this conversation as resolved.
Outdated
{
obj = Runtime.PyObject_GetIter(iterable.obj);
if (obj == IntPtr.Zero)
{
throw new PythonException();
}
}

protected override void Dispose(bool disposing)
Expand Down
45 changes: 26 additions & 19 deletions src/runtime/pylist.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,16 @@ public PyList(IntPtr ptr) : base(ptr)
internal PyList(BorrowedReference reference) : base(reference) { }


private static IntPtr FromObject(PyObject o)
{
if (!IsListType(o))
{
throw new ArgumentException("object is not a list");
}
Runtime.XIncref(o.obj);
return o.obj;
}

/// <summary>
/// PyList Constructor
/// </summary>
Expand All @@ -36,14 +46,8 @@ internal PyList(BorrowedReference reference) : base(reference) { }
/// ArgumentException will be thrown if the given object is not a
/// Python list object.
/// </remarks>
public PyList(PyObject o)
public PyList(PyObject o) : base(FromObject(o))
{
if (!IsListType(o))
{
throw new ArgumentException("object is not a list");
}
Runtime.XIncref(o.obj);
obj = o.obj;
}


Expand All @@ -53,36 +57,39 @@ public PyList(PyObject o)
/// <remarks>
/// Creates a new empty Python list object.
/// </remarks>
public PyList()
public PyList() : base(Runtime.PyList_New(0))
{
obj = Runtime.PyList_New(0);
if (obj == IntPtr.Zero)
{
throw new PythonException();
}
}


/// <summary>
/// PyList Constructor
/// </summary>
/// <remarks>
/// Creates a new Python list object from an array of PyObjects.
/// </remarks>
public PyList(PyObject[] items)
private static IntPtr FromArray(PyObject[] items)
{
int count = items.Length;
obj = Runtime.PyList_New(count);
IntPtr val = Runtime.PyList_New(count);
for (var i = 0; i < count; i++)
{
IntPtr ptr = items[i].obj;
Runtime.XIncref(ptr);
int r = Runtime.PyList_SetItem(obj, i, ptr);
int r = Runtime.PyList_SetItem(val, i, ptr);
if (r < 0)
{
throw new PythonException();
}
Comment thread
koubaa marked this conversation as resolved.
}
return val;
}

/// <summary>
/// PyList Constructor
/// </summary>
/// <remarks>
/// Creates a new Python list object from an array of PyObjects.
/// </remarks>
public PyList(PyObject[] items) : base(FromArray(items))
{
}


Expand Down
Loading