From a69356e9e0a7525b1cebadc928a0efcce8c39b46 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 29 Mar 2000 17:19:20 -0300 Subject: no more special cases for closures with 0 upvalues (performance is the same, memory use a little higher, code much simpler). --- lobject.h | 61 +++++++++++++++++++++++++++++-------------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) (limited to 'lobject.h') diff --git a/lobject.h b/lobject.h index 49b0f0d2..844111ff 100644 --- a/lobject.h +++ b/lobject.h @@ -1,5 +1,5 @@ /* -** $Id: lobject.h,v 1.55 2000/03/24 19:49:23 roberto Exp roberto $ +** $Id: lobject.h,v 1.56 2000/03/27 20:10:21 roberto Exp roberto $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ @@ -23,7 +23,12 @@ #endif +#ifdef DEBUG +/* to avoid warnings and make sure is is really unused */ +#define UNUSED(x) (x=0, (void)x) +#else #define UNUSED(x) (void)x /* to avoid warnings */ +#endif /* @@ -36,17 +41,12 @@ typedef enum { TAG_NUMBER, /* fixed tag for numbers */ TAG_STRING, /* fixed tag for strings */ TAG_TABLE, /* default tag for tables */ - TAG_LPROTO, /* fixed tag for Lua functions */ - TAG_CPROTO, /* fixed tag for C functions */ + TAG_LCLOSURE, /* fixed tag for Lua closures */ + TAG_CCLOSURE, /* fixed tag for C closures */ TAG_NIL, /* last "pre-defined" tag */ - TAG_LCLOSURE, /* Lua closure */ - TAG_CCLOSURE, /* C closure */ - TAG_LCLMARK, /* mark for Lua closures */ TAG_CCLMARK, /* mark for C closures */ - TAG_LMARK, /* mark for Lua prototypes */ - TAG_CMARK, /* mark for C prototypes */ TAG_LINE } lua_Type; @@ -58,20 +58,27 @@ typedef enum { /* ** check whether `t' is a mark */ -#define is_T_MARK(t) (TAG_LCLMARK <= (t) && (t) <= TAG_CMARK) +#define is_T_MARK(t) ((t) == TAG_LCLMARK || (t) == TAG_CCLMARK) typedef union { - lua_CFunction f; /* TAG_CPROTO, TAG_CMARK */ - Number n; /* TAG_NUMBER */ - struct TString *ts; /* TAG_STRING, TAG_USERDATA */ - struct Proto *tf; /* TAG_LPROTO, TAG_LMARK */ - struct Closure *cl; /* TAG_[CL]CLOSURE, TAG_[CL]CLMARK */ - struct Hash *a; /* TAG_TABLE */ - int i; /* TAG_LINE */ + struct TString *ts; /* TAG_STRING, TAG_USERDATA */ + struct Closure *cl; /* TAG_[CL]CLOSURE, TAG_[CL]CLMARK */ + struct Hash *a; /* TAG_TABLE */ + Number n; /* TAG_NUMBER */ + int i; /* TAG_LINE */ } Value; +/* Macros to access values */ +#define ttype(o) ((o)->ttype) +#define nvalue(o) ((o)->value.n) +#define svalue(o) ((o)->value.ts->str) +#define tsvalue(o) ((o)->value.ts) +#define clvalue(o) ((o)->value.cl) +#define avalue(o) ((o)->value.a) + + typedef struct TObject { lua_Type ttype; Value value; @@ -135,28 +142,18 @@ typedef struct LocVar { } LocVar; - -/* Macros to access structure members */ -#define ttype(o) ((o)->ttype) -#define nvalue(o) ((o)->value.n) -#define svalue(o) ((o)->value.ts->str) -#define tsvalue(o) ((o)->value.ts) -#define clvalue(o) ((o)->value.cl) -#define avalue(o) ((o)->value.a) -#define fvalue(o) ((o)->value.f) -#define tfvalue(o) ((o)->value.tf) - -#define protovalue(o) ((o)->value.cl->consts) - - /* ** Closures */ typedef struct Closure { struct Closure *next; int marked; - int nelems; /* not including the first one (always the prototype) */ - TObject consts[1]; /* at least one for prototype */ + union { + lua_CFunction c; /* C functions */ + struct Proto *l; /* Lua functions */ + } f; + int nelems; + TObject consts[1]; } Closure; -- cgit v1.2.3-55-g6feb