Exemplo n.º 1
0
        public static int LuaORawEqualObj(Lua.LuaTypeValue t1, Lua.LuaTypeValue t2)
        {
            if (TType(t1) != TType(t2))
            {
                return(0);
            }
            else
            {
                switch (TType(t1))
                {
                case LUA_TNIL:
                    return(1);

                case LUA_TNUMBER:
                    return(luai_numeq(NValue(t1), NValue(t2)) ? 1 : 0);

                case LUA_TBOOLEAN:
                    return(BValue(t1) == BValue(t2) ? 1 : 0);       /* boolean true must be 1....but not in C# !! */

                case LUA_TLIGHTUSERDATA:
                    return(PValue(t1) == PValue(t2) ? 1 : 0);

                default:
                    LuaAssert(IsCollectable(t1));
                    return(GCValue(t1) == GCValue(t2) ? 1 : 0);
                }
            }
        }
Exemplo n.º 2
0
 public static void LuaGArithError(LuaState L, TValue p1, TValue p2)
 {
     TValue temp = new LuaTypeValue();
     if (luaV_tonumber(p1, temp) == null)
         p2 = p1;  /* first operand is wrong */
     LuaGTypeError(L, p2, "perform arithmetic on");
 }
Exemplo n.º 3
0
 public static UpVal LuaFindUpVal(LuaState L, StkId level)
 {
     GlobalState g = G(L);
     GCObjectRef pp = new OpenValRef(L);
     UpVal p;
     UpVal uv;
     while (pp.get() != null && (p = ngcotouv(pp.get())).v >= level)
     {
         LuaAssert(p.v != p.u.value);
         if (p.v == level)
         {  /* found a corresponding upvalue? */
             if (IsDead(g, obj2gco(p)))  /* is it dead? */
                 ChangeWhite(obj2gco(p));  /* ressurect it */
             return p;
         }
         pp = new NextRef(p);
     }
     uv = LuaMNew<UpVal>(L);  /* not found: create a new one */
     uv.tt = LUATUPVAL;
     uv.marked = LuaCWhite(g);
     uv.v = level;  /* current value lives in the stack */
     uv.next = pp.get();  /* chain it in the proper position */
     pp.set(obj2gco(uv));
     uv.u.l.prev = g.uvhead;  /* double link it in `uvhead' list */
     uv.u.l.next = g.uvhead.u.l.next;
     uv.u.l.next.u.l.prev = uv;
     g.uvhead.u.l.next = uv;
     LuaAssert(uv.u.l.next.u.l.prev == uv && uv.u.l.prev.u.l.next == uv);
     return uv;
 }
Exemplo n.º 4
0
 public Node(Lua.LuaTypeValue i_val, TKey i_key)
 {
     this.values = new Node[] { this };
     this.index  = 0;
     this.i_val  = i_val;
     this.i_key  = i_key;
 }
Exemplo n.º 5
0
 public static void LuaFClose(LuaState L, StkId level)
 {
     UpVal uv;
       GlobalState g = G(L);
       while (L.openupval != null && (uv = ngcotouv(L.openupval)).v >= level) {
     GCObject o = obj2gco(uv);
     LuaAssert(!IsBlack(o) && uv.v != uv.u.value);
     L.openupval = uv.next;  /* remove from `open' list */
     if (IsDead(g, o))
       LuaFreeUpVal(L, uv);  /* free upvalue */
     else {
       UnlinkUpVal(uv);
       SetObj(L, uv.u.value, uv.v);
       uv.v = uv.u.value;  /* now current value lives here */
       LuaCLinkUpVal(L, uv);  /* link upvalue into `gcroot' list */
     }
       }
 }
Exemplo n.º 6
0
 public static void arith_op(LuaState L, op_delegate op, TMS tm, StkId base_, Instruction i, TValue[] k, StkId ra, InstructionPtr pc)
 {
     TValue rb = RKB(L, base_, i, k);
         TValue rc = RKC(L, base_, i, k);
         if (TTIsNumber(rb) && TTIsNumber(rc))
         {
             lua_Number nb = NValue(rb), nc = NValue(rc);
             SetNValue(ra, op(nb, nc));
         }
         else
         {
             //Protect(
             L.savedpc = InstructionPtr.Assign(pc);
             Arith(L, ra, rb, rc, tm);
             base_ = L.base_;
             //);
         }
 }
Exemplo n.º 7
0
        public static TValue luaT_gettmbyobj(LuaState L, TValue o, TMS event_)
        {
            Table mt;
            switch (TType(o))
            {
                case LUA_TTABLE:
                    mt = HValue(o).metatable;
                    break;

                case LUA_TUSERDATA:
                    mt = UValue(o).metatable;
                    break;

                default:
                    mt = G(L).mt[TType(o)];
                    break;
            }

            return ((mt != null) ? luaH_getstr(mt, G(L).tmname[(int)event_]) : LuaONilObject);
        }
Exemplo n.º 8
0
 private static void PrintConstant(Proto f, int i)
 {
     /*const*/ TValue o=f.k[i];
      switch (TType(o))
      {
       case LUA_TNIL:
     printf("nil");
     break;
       case LUA_TBOOLEAN:
     printf(BValue(o) != 0 ? "true" : "false");
     break;
       case LUA_TNUMBER:
     printf(LUA_NUMBER_FMT,NValue(o));
     break;
       case LUA_TSTRING:
     PrintString(RawTSValue(o));
     break;
       default:				/* cannot happen */
     printf("? type=%d",TType(o));
     break;
      }
 }
Exemplo n.º 9
0
 public static void Arith(LuaState L, StkId ra, TValue rb,
     TValue rc, TMS op)
 {
     TValue tempb = new LuaTypeValue(), tempc = new LuaTypeValue();
       TValue b, c;
       if ((b = luaV_tonumber(rb, tempb)) != null &&
       (c = luaV_tonumber(rc, tempc)) != null) {
     lua_Number nb = NValue(b), nc = NValue(c);
     switch (op) {
       case TMS.TM_ADD: SetNValue(ra, luai_numadd(nb, nc)); break;
       case TMS.TM_SUB: SetNValue(ra, luai_numsub(nb, nc)); break;
       case TMS.TM_MUL: SetNValue(ra, luai_nummul(nb, nc)); break;
       case TMS.TM_DIV: SetNValue(ra, luai_numdiv(nb, nc)); break;
       case TMS.TM_MOD: SetNValue(ra, luai_nummod(nb, nc)); break;
       case TMS.TM_POW: SetNValue(ra, luai_numpow(nb, nc)); break;
       case TMS.TM_UNM: SetNValue(ra, luai_numunm(nb)); break;
       default: LuaAssert(false); break;
     }
       }
       else if (call_binTM(L, rb, rc, ra, op) == 0)
     LuaGArithError(L, rb, rc);
 }
Exemplo n.º 10
0
 /*
 ** main search function
 */
 public static TValue luaH_get(Table t, TValue key)
 {
     switch (TType(key))
     {
         case LUA_TNIL: return LuaONilObject;
         case LUA_TSTRING: return luaH_getstr(t, RawTSValue(key));
         case LUA_TNUMBER:
             {
                 int k;
                 lua_Number n = NValue(key);
                 lua_number2int(out k, n);
                 if (luai_numeq(CastNum(k), NValue(key))) /* index is int? */
                     return luaH_getnum(t, k);  /* use specialized version */
                 /* else go through ... actually on second thoughts don't, because this is C#*/
                 Node node = mainposition(t, key);
                 do
                 {  /* check whether `key' is somewhere in the chain */
                     if (LuaORawEqualObj(key2tval(node), key) != 0)
                         return gval(node);  /* that's it */
                     else node = gnext(node);
                 } while (node != null);
                 return LuaONilObject;
             }
         default:
             {
                 Node node = mainposition(t, key);
                 do
                 {  /* check whether `key' is somewhere in the chain */
                     if (LuaORawEqualObj(key2tval(node), key) != 0)
                         return gval(node);  /* that's it */
                     else node = gnext(node);
                 } while (node != null);
                 return LuaONilObject;
             }
     }
 }
Exemplo n.º 11
0
 internal static void SetTType(TValue obj, int tt)
 {
     obj.tt = tt;
 }
Exemplo n.º 12
0
 //#define setsvalue2s	setsvalue
 internal static void SetSValue2S(LuaState L, TValue obj, TString x)
 {
     SetSValue(L, obj, x);
 }
Exemplo n.º 13
0
 internal static TString RawTSValue(Lua.LuaTypeValue o)
 {
     return(o.value.gc.ts);
 }
Exemplo n.º 14
0
 public static bool IsLfunction(Lua.LuaTypeValue o)
 {
     return((TType(o) == LUA_TFUNCTION) && (CLValue(o).c.isC == 0));
 }
Exemplo n.º 15
0
 internal static Udata RawUValue(Lua.LuaTypeValue o)
 {
     return(o.value.gc.u);
 }
Exemplo n.º 16
0
 public Node()
 {
     this.i_val = new LuaTypeValue();
     this.i_key = new TKey();
 }
Exemplo n.º 17
0
 internal static bool TTIsString(TValue o)
 {
     return (TType(o) == LUA_TSTRING);
 }
Exemplo n.º 18
0
 public static int LIsFalse(Lua.LuaTypeValue o)
 {
     return(((TTIsNil(o) || (TTIsBoolean(o) && BValue(o) == 0))) ? 1 : 0);
 }
Exemplo n.º 19
0
 internal static LuaState THValue(Lua.LuaTypeValue o)
 {
     return((LuaState)CheckExp(TTIsThread(o), o.value.gc.th));
 }
Exemplo n.º 20
0
 internal static int BValue(Lua.LuaTypeValue o)
 {
     return(o.value.b);
 }
Exemplo n.º 21
0
 internal static Table HValue(Lua.LuaTypeValue o)
 {
     return(o.value.gc.h);
 }
Exemplo n.º 22
0
 internal static Closure CLValue(Lua.LuaTypeValue o)
 {
     return(o.value.gc.cl);
 }
Exemplo n.º 23
0
 internal static UdataUV UValue(Lua.LuaTypeValue o)
 {
     return(RawUValue(o).uv);
 }
Exemplo n.º 24
0
 internal static bool TTIsBoolean(TValue o)
 {
     return (TType(o) == LUA_TBOOLEAN);
 }
Exemplo n.º 25
0
 /* Macros to test type */
 internal static bool TTIsNil(TValue o)
 {
     return (TType(o) == LUA_TNIL);
 }
Exemplo n.º 26
0
 internal static void CheckConsistency(Lua.LuaTypeValue obj)
 {
     LuaAssert(!IsCollectable(obj) || (TType(obj) == (obj).value.gc.gch.tt));
 }
Exemplo n.º 27
0
 internal static bool TTIsThread(TValue o)
 {
     return (TType(o) == LUA_TTHREAD);
 }
Exemplo n.º 28
0
 internal static void SetTType(Lua.LuaTypeValue obj, int tt)
 {
     obj.tt = tt;
 }
Exemplo n.º 29
0
 public Node(TValue i_val, TKey i_key)
 {
     this.values = new Node[] { this };
     this.index = 0;
     this.i_val = i_val;
     this.i_key = i_key;
 }
Exemplo n.º 30
0
 internal static TStringTSV TSValue(Lua.LuaTypeValue o)
 {
     return(RawTSValue(o).tsv);
 }
Exemplo n.º 31
0
 //#define setsvalue2n	setsvalue
 internal static void SetSValue2N(LuaState L, Lua.LuaTypeValue obj, TString x)
 {
     SetSValue(L, obj, x);
 }
Exemplo n.º 32
0
 internal static void SetNValue(TValue obj, LuaNumberType x)
 {
     obj.value.n = x;
     obj.tt = LUA_TNUMBER;
 }
Exemplo n.º 33
0
 internal static bool IsCollectable(Lua.LuaTypeValue o)
 {
     return(TType(o) >= LUA_TSTRING);
 }
Exemplo n.º 34
0
 ///* from table to same table */
 //#define setobjt2t	setobj
 internal static void SetObjT2T(LuaState L, TValue obj, TValue x)
 {
     SetObj(L, obj, x);
 }
Exemplo n.º 35
0
 internal static void CheckLiveness(GlobalState g, Lua.LuaTypeValue obj)
 {
     LuaAssert(!IsCollectable(obj) ||
               ((TType(obj) == obj.value.gc.gch.tt) && !IsDead(g, obj.value.gc)));
 }
Exemplo n.º 36
0
 //#define setptvalue2s	setptvalue
 internal static void SetPTValue2S(LuaState L, TValue obj, Proto x)
 {
     SetPTValue(L, obj, x);
 }
Exemplo n.º 37
0
 /* Macros to set values */
 internal static void SetNilValue(TValue obj)
 {
     obj.tt=LUA_TNIL;
 }
Exemplo n.º 38
0
 /* Macros to set values */
 internal static void SetNilValue(Lua.LuaTypeValue obj)
 {
     obj.tt = LUA_TNIL;
 }
Exemplo n.º 39
0
 internal static void SetObj(LuaState L, TValue obj1, TValue obj2)
 {
     obj1.value.Copy(obj2.value);
     obj1.tt = obj2.tt;
     CheckLiveness(G(L), obj1);
 }
Exemplo n.º 40
0
 internal static void SetNValue(Lua.LuaTypeValue obj, LuaNumberType x)
 {
     obj.value.n = x;
     obj.tt      = LUA_TNUMBER;
 }
Exemplo n.º 41
0
 internal static void SetPTValue(LuaState L, TValue obj, Proto x)
 {
     obj.value.gc = x;
     obj.tt = LUATPROTO;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 42
0
 internal static void SetPValue(Lua.LuaTypeValue obj, object x)
 {
     obj.value.p = x;
     obj.tt      = LUA_TLIGHTUSERDATA;
 }
Exemplo n.º 43
0
 internal static void SetPValue( TValue obj, object x)
 {
     obj.value.p = x;
     obj.tt = LUA_TLIGHTUSERDATA;
 }
Exemplo n.º 44
0
 internal static void SetBValue(Lua.LuaTypeValue obj, int x)
 {
     obj.value.b = x;
     obj.tt      = LUA_TBOOLEAN;
 }
Exemplo n.º 45
0
 internal static void SetTTHValue(LuaState L, TValue obj, GCObject x)
 {
     obj.value.gc = x;
     obj.tt = LUA_TTHREAD;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 46
0
 internal static void SetTTHValue(LuaState L, Lua.LuaTypeValue obj, GCObject x)
 {
     obj.value.gc = x;
     obj.tt       = LUA_TTHREAD;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 47
0
 internal static void SetUValue(LuaState L, TValue obj, GCObject x)
 {
     obj.value.gc = x;
     obj.tt = LUA_TUSERDATA;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 48
0
 internal static void SetCLValue(LuaState L, Lua.LuaTypeValue obj, Closure x)
 {
     obj.value.gc = x;
     obj.tt       = LUA_TFUNCTION;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 49
0
 internal static bool TTIsFunction(TValue o)
 {
     return (TType(o) == LUA_TFUNCTION);
 }
Exemplo n.º 50
0
 internal static void SetHValue(LuaState L, Lua.LuaTypeValue obj, Table x)
 {
     obj.value.gc = x;
     obj.tt       = LUA_TTABLE;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 51
0
 internal static bool TTIsNumber(TValue o)
 {
     return (TType(o) == LUA_TNUMBER);
 }
Exemplo n.º 52
0
 internal static void SetPTValue(LuaState L, Lua.LuaTypeValue obj, Proto x)
 {
     obj.value.gc = x;
     obj.tt       = LUATPROTO;
     CheckLiveness(G(L), obj);
 }
Exemplo n.º 53
0
 internal static bool TTIsTable(TValue o)
 {
     return (TType(o) == LUA_TTABLE);
 }
Exemplo n.º 54
0
 internal static void SetObj(LuaState L, Lua.LuaTypeValue obj1, Lua.LuaTypeValue obj2)
 {
     obj1.value.Copy(obj2.value);
     obj1.tt = obj2.tt;
     CheckLiveness(G(L), obj1);
 }
Exemplo n.º 55
0
 internal static bool TTIsUserData(TValue o)
 {
     return (TType(o) == LUA_TUSERDATA);
 }
Exemplo n.º 56
0
 //#define sethvalue2s	sethvalue
 internal static void SetHValue2S(LuaState L, Lua.LuaTypeValue obj, Table x)
 {
     SetHValue(L, obj, x);
 }
Exemplo n.º 57
0
 public Node(Node copy)
 {
     this.values = copy.values;
     this.index = copy.index;
     this.i_val = new LuaTypeValue(copy.i_val);
     this.i_key = new TKey(copy.i_key);
 }
Exemplo n.º 58
0
 //#define setptvalue2s	setptvalue
 internal static void SetPTValue2S(LuaState L, Lua.LuaTypeValue obj, Proto x)
 {
     SetPTValue(L, obj, x);
 }
Exemplo n.º 59
0
 public static bool IsLfunction(TValue o)
 {
     return ((TType(o) == LUA_TFUNCTION) && (CLValue(o).c.isC==0));
 }
Exemplo n.º 60
0
 ///* to new object */
 //#define setobj2n	setobj
 internal static void SetObj2N(LuaState L, Lua.LuaTypeValue obj, Lua.LuaTypeValue x)
 {
     SetObj(L, obj, x);
 }