Exemplo n.º 1
0
        public static IshtarObject *Fmt(CallFrame frame, IshtarObject **args)
        {
            var template_obj = args[0];
            var array_obj    = args[1];

            FFI.StaticValidate(frame, &template_obj);
            FFI.StaticValidate(frame, &array_obj);

            FFI.StaticTypeOf(frame, &template_obj, TYPE_STRING);
            FFI.StaticTypeOf(frame, &array_obj, TYPE_ARRAY);


            var arr = (IshtarArray *)array_obj;

            var dotnet_arr = new string[arr->length];

            for (var i = 0ul; i != arr->length; i++)
            {
                dotnet_arr[i] = IshtarMarshal.ToDotnetString(arr->Get((uint)i, frame), frame);
            }

            var template = IshtarMarshal.ToDotnetString(template_obj, frame);

            var result = string.Format(template, dotnet_arr);

            return(IshtarMarshal.ToIshtarObject(result, frame));
        }
Exemplo n.º 2
0
 public void SetMemory(IshtarObject *obj)
 {
     memory      = obj;
     clazz       = obj->clazz;
     flags       = obj->flags;
     vtable_size = obj->vtable_size;
     owner       = obj->owner;
 }
Exemplo n.º 3
0
        public static IshtarObject *Exit(CallFrame current, IshtarObject **args)
        {
            var exitCode = args[0];

            FFI.StaticValidate(current, &exitCode);
            FFI.StaticTypeOf(current, &exitCode, TYPE_I4);
            FFI.StaticValidateField(current, &exitCode, "!!value");

            VM.halt(IshtarMarshal.ToDotnetInt32(exitCode, current));

            return(null);
        }
Exemplo n.º 4
0
        public static IshtarObject *TemplateFunctionApply(CallFrame frame, IshtarObject **args, Func <string, string> apply)
        {
            var str1 = args[0];

            FFI.StaticValidate(frame, &str1);
            FFI.StaticTypeOf(frame, &str1, TYPE_STRING);

            var clr_str = IshtarMarshal.ToDotnetString(str1, frame);

            var result = apply(clr_str);

            return(IshtarMarshal.ToIshtarObject(result, frame));
        }
Exemplo n.º 5
0
        public static IshtarObject *StrEqual(CallFrame frame, IshtarObject **args)
        {
            var i_str1 = args[0];
            var i_str2 = args[1];

            FFI.StaticValidate(frame, &i_str1);
            FFI.StaticValidate(frame, &i_str2);
            FFI.StaticTypeOf(frame, &i_str1, TYPE_STRING);
            FFI.StaticTypeOf(frame, &i_str2, TYPE_STRING);

            var str1 = IshtarMarshal.ToDotnetString(i_str1, frame);
            var str2 = IshtarMarshal.ToDotnetString(i_str2, frame);

            var result = str1.Equals(str2);

            return(IshtarMarshal.ToIshtarObject(result, frame));
        }
Exemplo n.º 6
0
 public static IshtarObject *GetOSValue(CallFrame current, IshtarObject **args)
 {
     // TODO remove using RuntimeInformation
     if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
     {
         return(IshtarMarshal.ToIshtarObject(0, current));
     }
     if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
     {
         return(IshtarMarshal.ToIshtarObject(1, current));
     }
     if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
     {
         return(IshtarMarshal.ToIshtarObject(2, current));
     }
     return(IshtarMarshal.ToIshtarObject(-1, current));
 }
Exemplo n.º 7
0
        public static IshtarObject *ToIshtarObject <X>(X value, CallFrame frame, IshtarObject **node = null)
        {
            switch (typeof(X))
            {
            case { } when typeof(X) == typeof(nint):
                return(ToIshtarObject(cast <nint>(value), frame, node));

            case { } when typeof(X) == typeof(sbyte):
                return(ToIshtarObject(cast <sbyte>(value), frame, node));

            case { } when typeof(X) == typeof(byte):
                return(ToIshtarObject(cast <byte>(value), frame, node));

            case { } when typeof(X) == typeof(short):
                return(ToIshtarObject(cast <short>(value), frame, node));

            case { } when typeof(X) == typeof(ushort):
                return(ToIshtarObject(cast <ushort>(value), frame, node));

            case { } when typeof(X) == typeof(int):
                return(ToIshtarObject(cast <int>(value), frame, node));

            case { } when typeof(X) == typeof(uint):
                return(ToIshtarObject(cast <uint>(value), frame, node));

            case { } when typeof(X) == typeof(long):
                return(ToIshtarObject(cast <long>(value), frame, node));

            case { } when typeof(X) == typeof(ulong):
                return(ToIshtarObject(cast <ulong>(value), frame, node));

            case { } when typeof(X) == typeof(char):
                return(ToIshtarObject(cast <char>(value), frame, node));

            case { } when typeof(X) == typeof(string):
                return(ToIshtarObject(cast <string>(value), frame, node));

            default:
                VM.FastFail(WNE.TYPE_MISMATCH,
                            $"[marshal::ToIshtarObject] converter for '{typeof(X).Name}' not support.", frame);
                return(default);
            }
        }
Exemplo n.º 8
0
        public static IshtarObject *SwitchFlag(CallFrame current, IshtarObject **args)
        {
            var key   = args[0];
            var value = args[1];

            FFI.StaticValidate(current, &key);
            FFI.StaticTypeOf(current, &key, TYPE_STRING);
            FFI.StaticValidate(current, &value);
            FFI.StaticTypeOf(current, &value, TYPE_BOOLEAN);

            FFI.StaticValidateField(current, &key, "!!value");
            FFI.StaticValidateField(current, &value, "!!value");

            var clr_key   = IshtarMarshal.ToDotnetString(key, current);
            var clr_value = IshtarMarshal.ToDotnetBoolean(value, current);

            VM.Config.Set(clr_key, clr_value);

            return(null);
        }
Exemplo n.º 9
0
        public static IshtarObject *FPrintLn(CallFrame current, IshtarObject **args)
        {
            var arg1 = args[0];

            if (arg1 == null)
            {
                current.ThrowException(KnowTypes.NullPointerException(current));
                return(null);
            }

            FFI.StaticValidate(current, &arg1);
            FFI.StaticTypeOf(current, &arg1, TYPE_STRING);
            var @class = arg1->decodeClass();

            var str = IshtarMarshal.ToDotnetString(arg1, current);

            Out.WriteLine();
            Out.WriteLine($"\t{str}");
            Out.WriteLine();

            return(null);
        }
Exemplo n.º 10
0
        public static IshtarObject *ToIshtarObject(nint dotnet_value, CallFrame frame = null, IshtarObject **node = null)
        {
            var obj = IshtarGC.AllocObject(TYPE_RAW.AsRuntimeClass(), node);

            obj->vtable = (void **)dotnet_value;
            return(obj);
        }
Exemplo n.º 11
0
        public static IshtarObject *ToIshtarObject(float dotnet_value, CallFrame frame = null, IshtarObject **node = null)
        {
            var obj   = IshtarGC.AllocObject(TYPE_I8.AsRuntimeClass(), node);
            var clazz = IshtarUnsafe.AsRef <RuntimeIshtarClass>(obj->clazz);

            obj->vtable[clazz.Field["!!value"].vtable_offset] = (int *)BitConverter.SingleToInt32Bits(dotnet_value);

            return(obj);
        }
Exemplo n.º 12
0
        public static IshtarObject *ToIshtarObject(string str, CallFrame frame = null, IshtarObject **node = null)
        {
            var arg   = IshtarGC.AllocObject(TYPE_STRING.AsRuntimeClass(), node);
            var clazz = IshtarUnsafe.AsRef <RuntimeIshtarClass>(arg->clazz);

            arg->vtable[clazz.Field["!!value"].vtable_offset] = StringStorage.Intern(str);
            return(arg);
        }
Exemplo n.º 13
0
        public static IshtarObject *ToIshtarObject(long dotnet_value, CallFrame frame = null, IshtarObject **node = null)
        {
            var obj   = IshtarGC.AllocObject(TYPE_I8.AsRuntimeClass(), node);
            var clazz = IshtarUnsafe.AsRef <RuntimeIshtarClass>(obj->clazz);

            obj->vtable[clazz.Field["!!value"].vtable_offset] = (long *)dotnet_value;

            return(obj);
        }
Exemplo n.º 14
0
 public static IshtarObject *TrimEnd(CallFrame frame, IshtarObject **args)
 => TemplateFunctionApply(frame, args, x => x.TrimEnd());
Exemplo n.º 15
0
 public static IshtarObject *FReadLine(CallFrame current, IshtarObject **args)
 => IshtarMarshal.ToIshtarObject(In.ReadLine());
Exemplo n.º 16
0
 public static IshtarObject *getHalfNaN(CallFrame current, IshtarObject **args)
 {
     VM.FastFail(WNE.MISSING_METHOD, "[B_IEEEConsts::getHalfNaN]", current);
     VM.ValidateLastError();
     return(null);
 }
Exemplo n.º 17
0
 public static IshtarObject *IsSupportIPv6(CallFrame current, IshtarObject **_)
 => IshtarMarshal.ToIshtarObject(Socket.OSSupportsIPv6, current);