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 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 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); }
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 *FReadLine(CallFrame current, IshtarObject **args) => IshtarMarshal.ToIshtarObject(In.ReadLine());
public static IshtarObject *IsSupportIPv6(CallFrame current, IshtarObject **_) => IshtarMarshal.ToIshtarObject(Socket.OSSupportsIPv6, current);