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 *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 *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); }