コード例 #1
0
    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);
    }
コード例 #2
0
 //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);
     }
 }
コード例 #3
0
    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);
            }
        }
    }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
    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);
        }
    }
コード例 #8
0
    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);
    }