示例#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));
        }
示例#2
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));
        }
示例#3
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);
        }
示例#4
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));
        }
示例#5
0
文件: B_App.cs 项目: 0xF6/mana_lang
 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));
 }
示例#6
0
 public static IshtarObject *FReadLine(CallFrame current, IshtarObject **args)
 => IshtarMarshal.ToIshtarObject(In.ReadLine());
示例#7
0
 public static IshtarObject *IsSupportIPv6(CallFrame current, IshtarObject **_)
 => IshtarMarshal.ToIshtarObject(Socket.OSSupportsIPv6, current);