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)); }
public void SetMemory(IshtarObject *obj) { memory = obj; clazz = obj->clazz; flags = obj->flags; vtable_size = obj->vtable_size; owner = obj->owner; }
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); }
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)); }
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)); }
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)); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
public static IshtarObject *TrimEnd(CallFrame frame, IshtarObject **args) => TemplateFunctionApply(frame, args, x => x.TrimEnd());
public static IshtarObject *FReadLine(CallFrame current, IshtarObject **args) => IshtarMarshal.ToIshtarObject(In.ReadLine());
public static IshtarObject *getHalfNaN(CallFrame current, IshtarObject **args) { VM.FastFail(WNE.MISSING_METHOD, "[B_IEEEConsts::getHalfNaN]", current); VM.ValidateLastError(); return(null); }
public static IshtarObject *IsSupportIPv6(CallFrame current, IshtarObject **_) => IshtarMarshal.ToIshtarObject(Socket.OSSupportsIPv6, current);