Example #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));
        }
Example #2
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);
        }
Example #3
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));
        }
Example #4
0
        public void ThrowException(RuntimeIshtarClass @class, string message)
        {
            this.exception = new CallFrameException()
            {
                value = IshtarGC.AllocObject(@class)
            };

            if (@class.FindField("message") is null)
            {
                throw new InvalidOperationException($"Class '{@class.FullName}' is not contained 'message' field.");
            }

            this.exception.value->vtable[@class.Field["message"].vtable_offset]
                = IshtarMarshal.ToIshtarObject(message);
        }
Example #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));
        }
Example #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));
 }
Example #7
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);
        }
Example #8
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);
        }
Example #9
0
 public static IshtarObject *FReadLine(CallFrame current, IshtarObject **args)
 => IshtarMarshal.ToIshtarObject(In.ReadLine());
Example #10
0
 public static IshtarObject *IsSupportIPv6(CallFrame current, IshtarObject **_)
 => IshtarMarshal.ToIshtarObject(Socket.OSSupportsIPv6, current);