コード例 #1
0
 public void Setvalue(object value)
 {
     NativeType.SetValue(_memHolder, 0, value);
     if (IsString)
     {
         _memHolder.AddObject("str", value);
     }
 }
コード例 #2
0
 public void __init__(object value)
 {
     _memHolder = new MemoryHolder(Size);
     NativeType.SetValue(_memHolder, 0, value);
     if (IsString)
     {
         _memHolder.AddObject("str", value);
     }
 }
コード例 #3
0
            public void __init__(CodeContext /*!*/ context, object value)
            {
                if (IsChar && !(value is string t && t.Length == 1))
                {
                    throw PythonOps.TypeError("one character string expected");
                }

                if (IsIntegerType)
                {
                    object __int__ = null;
                    if (value is float || value is double)
                    {
                        throw PythonOps.TypeError("int expected instead of float");
                    }

                    if (!(value is int || value is BigInteger || PythonOps.TryGetBoundAttr(value, "__int__", out __int__)))
                    {
                        throw PythonOps.TypeError("an integer is required");
                    }

                    if (__int__ != null)
                    {
                        value = PythonOps.CallWithContext(context, __int__);
                    }
                }

                if (IsFloatType)
                {
                    object __float__ = null;

                    if (!(value is double || value is float || value is int || value is BigInteger || PythonOps.TryGetBoundAttr(value, "__float__", out __float__)))
                    {
                        throw PythonOps.TypeError("a float is required");
                    }

                    if (value is BigInteger x)
                    {
                        if (x > (BigInteger)double.MaxValue)
                        {
                            throw PythonOps.OverflowError("long int too large to convert to float");
                        }
                    }

                    if (__float__ != null)
                    {
                        value = PythonOps.CallWithContext(context, __float__);
                    }
                }

                _memHolder = new MemoryHolder(Size);
                NativeType.SetValue(_memHolder, 0, value);
                if (IsString)
                {
                    _memHolder.AddObject("str", value);
                }
            }
コード例 #4
0
ファイル: SimpleCData.cs プロジェクト: zuvys/ironpython3
            public void __init__(CodeContext /*!*/ context, object value)
            {
                switch (((SimpleType)NativeType)._type)
                {
                case SimpleTypeKind.Char:
                {
                    if (value is IList <byte> t && t.Count == 1)
                    {
                        value = Bytes.FromByte(t[0]);
                    }
                    else if (value is int i)
                    {
                        try {
                            value = Bytes.FromByte(checked ((byte)i));
                        } catch (OverflowException) {
                            throw PythonOps.TypeError("one character bytes, bytearray or integer expected");
                        }
                    }
                    else
                    {
                        throw PythonOps.TypeError("one character bytes, bytearray or integer expected");
                    }
                }
                break;

                case SimpleTypeKind.WChar: {
                    if (!(value is string t && t.Length == 1))
                    {
                        throw PythonOps.TypeError("one character unicode string expected");
                    }
                }
                break;

                case SimpleTypeKind.SignedInt:
                case SimpleTypeKind.SignedLong:
                case SimpleTypeKind.SignedLongLong:
                case SimpleTypeKind.SignedShort:
                case SimpleTypeKind.UnsignedInt:
                case SimpleTypeKind.UnsignedLong:
                case SimpleTypeKind.UnsignedLongLong:
                case SimpleTypeKind.UnsignedShort: {
                    object __int__ = null;
                    if (value is float || value is double)
                    {
                        throw PythonOps.TypeError("int expected instead of float");
                    }

                    if (!(value is int || value is BigInteger || PythonOps.TryGetBoundAttr(value, "__int__", out __int__)))
                    {
                        throw PythonOps.TypeError("an integer is required");
                    }

                    if (__int__ != null)
                    {
                        value = PythonOps.CallWithContext(context, __int__);
                    }
                }
                break;

                case SimpleTypeKind.Double:
                case SimpleTypeKind.Single: {
                    object __float__ = null;

                    if (!(value is double || value is float || value is int || value is BigInteger || PythonOps.TryGetBoundAttr(value, "__float__", out __float__)))
                    {
                        throw PythonOps.TypeError("a float is required");
                    }

                    if (value is BigInteger x)
                    {
                        if (x > (BigInteger)double.MaxValue)
                        {
                            throw PythonOps.OverflowError("long int too large to convert to float");
                        }
                    }

                    if (__float__ != null)
                    {
                        value = PythonOps.CallWithContext(context, __float__);
                    }
                }
                break;

                default:
                    break;
                }

                _memHolder = new MemoryHolder(Size);
                NativeType.SetValue(_memHolder, 0, value);
                if (IsString)
                {
                    _memHolder.AddObject("str", value);
                }
            }