ソースを参照

no need for tags in boxed values :-(

Roberto Ierusalimschy 24 年 前
コミット
e506b864cd
7 ファイル変更17 行追加29 行削除
  1. 1 2
      ldo.c
  2. 1 2
      lfunc.c
  3. 1 3
      lgc.c
  4. 4 16
      lobject.h
  5. 8 1
      lstate.h
  6. 1 3
      lstring.c
  7. 1 2
      ltable.c

+ 1 - 2
ldo.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.c,v 1.118 2001/01/29 15:35:17 roberto Exp roberto $
+** $Id: ldo.c,v 1.119 2001/01/29 19:34:02 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -172,7 +172,6 @@ void luaD_call (lua_State *L, StkId func, int nResults) {
     setclvalue(func, tm);  /* tag method is the new function to be called */
   }
   cl = clvalue(func);
-  ci.v.ttype = LUA_TMARK;
   ci.func = cl;
   setivalue(func, &ci);
   callhook = L->callhook;

+ 1 - 2
lfunc.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lfunc.c,v 1.37 2001/01/19 13:20:30 roberto Exp roberto $
+** $Id: lfunc.c,v 1.38 2001/01/29 19:34:02 roberto Exp roberto $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
 */
@@ -19,7 +19,6 @@
 
 Closure *luaF_newclosure (lua_State *L, int nelems) {
   Closure *c = (Closure *)luaM_malloc(L, sizeclosure(nelems));
-  c->v.ttype = LUA_TFUNCTION;
   c->next = G(L)->rootcl;
   G(L)->rootcl = c;
   c->mark = c;

+ 1 - 3
lgc.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.c,v 1.82 2001/01/29 17:16:58 roberto Exp roberto $
+** $Id: lgc.c,v 1.83 2001/01/29 19:34:02 roberto Exp roberto $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -66,8 +66,6 @@ static void marktable (GCState *st, Hash *h) {
 
 
 static void markobject (GCState *st, TObject *o) {
-  lua_assert(ttype(o) == LUA_TNUMBER ||
-             ttype(o) == ((TValue *)(o->value.v))->ttype);
   switch (ttype(o)) {
     case LUA_TUSERDATA:  case LUA_TSTRING:
       strmark(tsvalue(o));

+ 4 - 16
lobject.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lobject.h,v 1.90 2001/01/29 17:16:58 roberto Exp roberto $
+** $Id: lobject.h,v 1.91 2001/01/29 19:34:02 roberto Exp roberto $
 ** Type definitions for Lua objects
 ** See Copyright Notice in lua.h
 */
@@ -41,13 +41,6 @@
 #define is_T_MARK(t)	(ttype(t) == LUA_TMARK)
 
 
-/*
-** tag at the start of all "boxed" Lua values
-*/
-typedef struct TValue {
-  char ttype;
-} TValue;
-
 
 typedef union {
   void *v;
@@ -116,8 +109,6 @@ typedef struct lua_TObject {
 #define TSPACK	((int)sizeof(int))
 
 typedef struct TString {
-  TValue v;
-  unsigned char marked;
   union {
     struct {  /* for strings */
       luint32 hash;
@@ -129,6 +120,7 @@ typedef struct TString {
     } d;
   } u;
   size_t len;
+  int marked;
   struct TString *nexthash;  /* chain for hash table */
   char str[TSPACK];   /* variable length string!! must be the last field! */
 } TString;
@@ -138,7 +130,6 @@ typedef struct TString {
 ** Function Prototypes
 */
 typedef struct Proto {
-  TValue v;
   lua_Number *knum;  /* numbers used by the function */
   int sizeknum;  /* size of `knum' */
   struct TString **kstr;  /* strings used by the function */
@@ -173,15 +164,14 @@ typedef struct LocVar {
 ** Closures
 */
 typedef struct Closure {
-  TValue v;
-  char isC;  /* 0 for Lua functions, 1 for C functions */
-  short nupvalues;
+  int isC;  /* 0 for Lua functions, 1 for C functions */
   union {
     lua_CFunction c;  /* C functions */
     struct Proto *l;  /* Lua functions */
   } f;
   struct Closure *next;
   struct Closure *mark;  /* marked closures (point to itself when not marked) */
+  int nupvalues;
   TObject upvalue[1];
 } Closure;
 
@@ -198,7 +188,6 @@ typedef struct Node {
 
 
 typedef struct Hash {
-  TValue v;
   Node *node;
   int htag;
   int size;
@@ -223,7 +212,6 @@ typedef struct Hash {
 ** informations about a call (for debugging)
 */
 typedef struct CallInfo {
-  TValue v;
   struct Closure *func;  /* function being called */
   const Instruction **pc;  /* current pc of called function */
   int lastpc;  /* last pc traced */

+ 8 - 1
lstate.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 1.47 2001/01/25 16:45:36 roberto Exp roberto $
+** $Id: lstate.h,v 1.48 2001/01/26 11:45:51 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -32,6 +32,12 @@ extern int islocked;
 #define LUA_UNLOCK
 #endif
 
+/*
+** macro to allow the inclusion of user information in Lua state
+*/
+#ifndef LUA_USERSTATE
+#define LUA_USERSTATE
+#endif
 
 typedef TObject *StkId;  /* index to stack elements */
 
@@ -90,6 +96,7 @@ typedef struct global_State {
 ** "per thread" state
 */
 struct lua_State {
+  LUA_USERSTATE
   StkId top;  /* first free slot in the stack */
   StkId stack;  /* stack base */
   StkId stack_last;  /* last free slot in the stack */

+ 1 - 3
lstring.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstring.c,v 1.53 2001/01/29 19:34:02 roberto Exp roberto $
+** $Id: lstring.c,v 1.54 2001/02/01 13:56:49 roberto Exp roberto $
 ** String table (keeps all strings handled by Lua)
 ** See Copyright Notice in lua.h
 */
@@ -76,7 +76,6 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
   }
   /* not found */
   ts = (TString *)luaM_malloc(L, sizestring(l));
-  ts->v.ttype = LUA_TSTRING;
   ts->marked = 0;
   ts->nexthash = NULL;
   ts->len = l;
@@ -92,7 +91,6 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
 TString *luaS_newudata (lua_State *L, size_t s, void *udata) {
   union L_UTString *uts = (union L_UTString *)luaM_malloc(L, sizeudata(s));
   TString *ts = &uts->ts;
-  ts->v.ttype = LUA_TUSERDATA;
   ts->marked = 0;
   ts->nexthash = NULL;
   ts->len = s;

+ 1 - 2
ltable.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ltable.c,v 1.73 2001/01/29 19:34:02 roberto Exp roberto $
+** $Id: ltable.c,v 1.74 2001/01/30 19:48:37 roberto Exp roberto $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 */
@@ -98,7 +98,6 @@ static void setnodevector (lua_State *L, Hash *t, luint32 size) {
 
 Hash *luaH_new (lua_State *L, int size) {
   Hash *t = luaM_new(L, Hash);
-  t->v.ttype = LUA_TTABLE;
   t->htag = TagDefault;
   t->next = G(L)->roottable;
   G(L)->roottable = t;