public FuncSymbolNative BindTrace(Types ts, StringBuilder log) { var fn = new FuncSymbolNative("trace", Types.Void, delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { string str = frm.stack.PopRelease().str; log.Append(str); return(null); }, new FuncArgSymbol("str", ts.Type("string")) ); ts.globs.Define(fn); return(fn); }
//simple console outputting version public void BindLog(Types ts) { { var fn = new FuncSymbolNative("log", Types.Void, delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { string str = frm.stack.PopRelease().str; Console.WriteLine(str); return(null); }, new FuncArgSymbol("str", ts.Type("string")) ); ts.globs.Define(fn); } }
public void BindColorAlpha(Types ts) { BindColor(ts); { var cl = new ClassSymbolNative("ColorAlpha", (ClassSymbol)ts.Type("Color").Get(), delegate(VM.Frame frm, ref Val v, IType type) { v.SetObj(new ColorAlpha(), type); } ); ts.globs.Define(cl); cl.Define(new FieldSymbol("a", ts.Type("float"), delegate(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) { var c = (ColorAlpha)ctx.obj; v.num = c.a; }, delegate(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) { var c = (ColorAlpha)ctx.obj; c.a = (float)v.num; ctx.SetObj(c, ctx.type); } )); { var m = new FuncSymbolNative("mult_summ_alpha", ts.Type("float"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var c = (ColorAlpha)frm.stack.PopRelease().obj; frm.stack.Push(Val.NewFlt(frm.vm, (c.r * c.a) + (c.g * c.a))); return(null); } ); cl.Define(m); } } }
public void Register(Types types) { { var fn = new FuncSymbolNative("Trace", types.Type("void"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { #if !BHL_FRONT var str = frm.stack.PopRelease().str; Console.WriteLine(str); #endif return(null); }, new FuncArgSymbol("str", types.Type("string")) ); types.globs.Define(fn); } { var fn = new FuncSymbolNative("Rand", types.Type("float"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { #if !BHL_FRONT var rnd = new Random(); var val = rnd.NextDouble(); frm.stack.Push(Val.NewFlt(frm.vm, val)); #endif return(null); } ); types.globs.Define(fn); } { var fn = new FuncSymbolNative("Wait", types.Type("void"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { return(new WaitNode()); }, new FuncArgSymbol("t", types.Type("float")) ); types.globs.Define(fn); } }
public ArrayTypeSymbol(Types ts, string name, TypeProxy item_type) : base(name, super_class: null) { this.item_type = item_type; this.creator = CreateArr; { var fn = new FuncSymbolNative("Add", ts.Type("void"), Add, new FuncArgSymbol("o", item_type) ); this.Define(fn); } { var fn = new FuncSymbolNative("RemoveAt", ts.Type("void"), RemoveAt, new FuncArgSymbol("idx", ts.Type("int")) ); this.Define(fn); } { var fn = new FuncSymbolNative("Clear", ts.Type("void"), Clear); this.Define(fn); } { var vs = new FieldSymbol("Count", ts.Type("int"), GetCount, null); this.Define(vs); } { //hidden system method not available directly FuncArrIdx = new FuncSymbolNative("$ArrIdx", item_type, ArrIdx); } { //hidden system method not available directly FuncArrIdxW = new FuncSymbolNative("$ArrIdxW", ts.Type("void"), ArrIdxW); } }
void InitBuiltins(GlobalScope globs) { globs.Define(Int); globs.Define(Float); globs.Define(Bool); globs.Define(String); globs.Define(Void); globs.Define(Any); globs.Define(ClassType); { var fn = new FuncSymbolNative("suspend", Type("void"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { return(CoroutineSuspend.Instance); } ); globs.Define(fn); } { var fn = new FuncSymbolNative("yield", Type("void"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { return(CoroutinePool.New <CoroutineYield>(frm.vm)); } ); globs.Define(fn); } //TODO: this one is controversary, it's defined for BC for now { var fn = new FuncSymbolNative("fail", Type("void"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { status = BHS.FAILURE; return(null); } ); globs.Define(fn); } { var fn = new FuncSymbolNative("start", Type("int"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var val_ptr = frm.stack.Pop(); int id = frm.vm.Start((VM.FuncPtr)val_ptr._obj, frm).id; val_ptr.Release(); frm.stack.Push(Val.NewNum(frm.vm, id)); return(null); }, new FuncArgSymbol("p", TypeFunc("void")) ); globs.Define(fn); } { var fn = new FuncSymbolNative("stop", Type("void"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var fid = (int)frm.stack.PopRelease().num; frm.vm.Stop(fid); return(null); }, new FuncArgSymbol("fid", Type("int")) ); globs.Define(fn); } { var fn = new FuncSymbolNative("type", Type("Type"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var o = frm.stack.Pop(); frm.stack.Push(Val.NewObj(frm.vm, o.type, ClassType)); o.Release(); return(null); }, new FuncArgSymbol("o", Type("any")) ); globs.Define(fn); } }
public void BindFoo(Types ts) { { var cl = new ClassSymbolNative("Foo", null, delegate(VM.Frame frm, ref Val v, IType type) { v.SetObj(new Foo(), type); } ); ts.globs.Define(cl); cl.Define(new FieldSymbol("hey", Types.Int, delegate(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) { var f = (Foo)ctx.obj; v.SetNum(f.hey); }, delegate(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) { var f = (Foo)ctx.obj; f.hey = (int)v.num; ctx.SetObj(f, ctx.type); } )); cl.Define(new FieldSymbol("colors", ts.Type("ArrayT_Color"), delegate(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) { var f = (Foo)ctx.obj; v.SetObj(f.colors, fld.Type); }, delegate(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) { var f = (Foo)ctx.obj; f.colors = (List <Color>)v.obj; } )); cl.Define(new FieldSymbol("sub_color", ts.Type("Color"), delegate(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) { var f = (Foo)ctx.obj; v.SetObj(f.sub_color, fld.Type); }, delegate(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) { var f = (Foo)ctx.obj; f.sub_color = (Color)v.obj; ctx.SetObj(f, ctx.type); } )); } { var fn = new FuncSymbolNative("PassthruFoo", ts.Type("Foo"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { frm.stack.Push(frm.stack.Pop()); return(null); }, new FuncArgSymbol("foo", ts.Type("Foo")) ); ts.globs.Define(fn); } }
public ClassSymbolNative BindColor(Types ts) { var cl = new ClassSymbolNative("Color", null, delegate(VM.Frame frm, ref Val v, IType type) { v.SetObj(new Color(), type); } ); ts.globs.Define(cl); cl.Define(new FieldSymbol("r", ts.Type("float"), delegate(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) { var c = (Color)ctx.obj; v.SetFlt(c.r); }, delegate(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) { var c = (Color)ctx.obj; c.r = (float)v.num; ctx.SetObj(c, ctx.type); } )); cl.Define(new FieldSymbol("g", ts.Type("float"), delegate(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) { var c = (Color)ctx.obj; v.SetFlt(c.g); }, delegate(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) { var c = (Color)ctx.obj; c.g = (float)v.num; ctx.SetObj(c, ctx.type); } )); { var m = new FuncSymbolNative("Add", ts.Type("Color"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var k = (float)frm.stack.PopRelease().num; var c = (Color)frm.stack.PopRelease().obj; var newc = new Color(); newc.r = c.r + k; newc.g = c.g + k; var v = Val.NewObj(frm.vm, newc, ts.Type("Color").Get()); frm.stack.Push(v); return(null); }, new FuncArgSymbol("k", ts.Type("float")) ); cl.Define(m); } { var m = new FuncSymbolNative("mult_summ", ts.Type("float"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var k = frm.stack.PopRelease().num; var c = (Color)frm.stack.PopRelease().obj; frm.stack.Push(Val.NewFlt(frm.vm, (c.r * k) + (c.g * k))); return(null); }, new FuncArgSymbol("k", ts.Type("float")) ); cl.Define(m); } { var fn = new FuncSymbolNative("mkcolor", ts.Type("Color"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { var r = frm.stack.PopRelease().num; var c = new Color(); c.r = (float)r; var v = Val.NewObj(frm.vm, c, ts.Type("Color").Get()); frm.stack.Push(v); return(null); }, new FuncArgSymbol("r", ts.Type("float")) ); ts.globs.Define(fn); } { var fn = new FuncSymbolNative("mkcolor_null", ts.Type("Color"), delegate(VM.Frame frm, FuncArgsInfo args_info, ref BHS status) { frm.stack.Push(frm.vm.Null); return(null); } ); ts.globs.Define(fn); } ts.globs.Define(new ArrayTypeSymbolT <Color>(ts, "ArrayT_Color", ts.Type("Color"), delegate() { return(new List <Color>()); })); return(cl); }