diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-04-05 15:54:31 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-04-05 15:54:31 -0300 |
commit | 237969724f54eeefee057ae382237c8db54af44e (patch) | |
tree | fc4abd54f7cac0749023f1c021e7d86e3ee4f273 /lobject.h | |
parent | f438d00ef31e3aea54023602f529b68834ffb80a (diff) | |
download | lua-237969724f54eeefee057ae382237c8db54af44e.tar.gz lua-237969724f54eeefee057ae382237c8db54af44e.tar.bz2 lua-237969724f54eeefee057ae382237c8db54af44e.zip |
support for `light' userdata + simpler support for `boxed' udata
Diffstat (limited to 'lobject.h')
-rw-r--r-- | lobject.h | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lobject.h,v 1.127 2002/03/18 18:16:16 roberto Exp roberto $ | 2 | ** $Id: lobject.h,v 1.128 2002/03/25 17:47:14 roberto Exp roberto $ |
3 | ** Type definitions for Lua objects | 3 | ** Type definitions for Lua objects |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -13,15 +13,15 @@ | |||
13 | 13 | ||
14 | 14 | ||
15 | /* tags for values visible from Lua */ | 15 | /* tags for values visible from Lua */ |
16 | #define NUM_TAGS 6 | 16 | #define NUM_TAGS LUA_TFUNCTION |
17 | 17 | ||
18 | 18 | ||
19 | typedef union { | 19 | typedef union { |
20 | void *p; | ||
20 | union TString *ts; | 21 | union TString *ts; |
21 | union Udata *u; | 22 | union Udata *u; |
22 | union Closure *cl; | 23 | union Closure *cl; |
23 | struct Table *h; | 24 | struct Table *h; |
24 | struct lua_TObject *v; | ||
25 | lua_Number n; | 25 | lua_Number n; |
26 | int b; | 26 | int b; |
27 | } Value; | 27 | } Value; |
@@ -35,12 +35,12 @@ typedef struct lua_TObject { | |||
35 | 35 | ||
36 | /* Macros to access values */ | 36 | /* Macros to access values */ |
37 | #define ttype(o) ((o)->tt) | 37 | #define ttype(o) ((o)->tt) |
38 | #define pvalue(o) ((o)->value.p) | ||
38 | #define nvalue(o) ((o)->value.n) | 39 | #define nvalue(o) ((o)->value.n) |
39 | #define tsvalue(o) ((o)->value.ts) | 40 | #define tsvalue(o) ((o)->value.ts) |
40 | #define uvalue(o) ((o)->value.u) | 41 | #define uvalue(o) ((o)->value.u) |
41 | #define clvalue(o) ((o)->value.cl) | 42 | #define clvalue(o) ((o)->value.cl) |
42 | #define hvalue(o) ((o)->value.h) | 43 | #define hvalue(o) ((o)->value.h) |
43 | #define vvalue(o) ((o)->value.v) | ||
44 | #define bvalue(o) ((o)->value.b) | 44 | #define bvalue(o) ((o)->value.b) |
45 | 45 | ||
46 | #define l_isfalse(o) (ttype(o) == LUA_TNIL || \ | 46 | #define l_isfalse(o) (ttype(o) == LUA_TNIL || \ |
@@ -52,6 +52,9 @@ typedef struct lua_TObject { | |||
52 | 52 | ||
53 | #define chgnvalue(obj,x) ((obj)->value.n=(x)) | 53 | #define chgnvalue(obj,x) ((obj)->value.n=(x)) |
54 | 54 | ||
55 | #define setpvalue(obj,x) \ | ||
56 | { TObject *i_o=(obj); i_o->tt=LUA_TUDATAVAL; i_o->value.p=(x); } | ||
57 | |||
55 | #define setbvalue(obj,x) \ | 58 | #define setbvalue(obj,x) \ |
56 | { TObject *i_o=(obj); i_o->tt=LUA_TBOOLEAN; i_o->value.b=(x); } | 59 | { TObject *i_o=(obj); i_o->tt=LUA_TBOOLEAN; i_o->value.b=(x); } |
57 | 60 | ||
@@ -69,9 +72,6 @@ typedef struct lua_TObject { | |||
69 | 72 | ||
70 | #define setnilvalue(obj) ((obj)->tt=LUA_TNIL) | 73 | #define setnilvalue(obj) ((obj)->tt=LUA_TNIL) |
71 | 74 | ||
72 | #define setupvalue(obj,x,t) \ | ||
73 | { TObject *i_o=(obj); i_o->tt=(t); i_o->value.v=(x); } | ||
74 | |||
75 | #define setobj(obj1,obj2) \ | 75 | #define setobj(obj1,obj2) \ |
76 | { TObject *o1=(obj1); const TObject *o2=(obj2); \ | 76 | { TObject *o1=(obj1); const TObject *o2=(obj2); \ |
77 | o1->tt=o2->tt; o1->value = o2->value; } | 77 | o1->tt=o2->tt; o1->value = o2->value; } |
@@ -106,9 +106,8 @@ typedef union Udata { | |||
106 | union L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ | 106 | union L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ |
107 | struct { | 107 | struct { |
108 | struct Table *metatable; | 108 | struct Table *metatable; |
109 | void *value; | ||
110 | union Udata *next; /* chain for list of all udata */ | 109 | union Udata *next; /* chain for list of all udata */ |
111 | size_t len; /* least bit reserved for gc mark */ | 110 | size_t len; /* least 2 bits reserved for gc mark */ |
112 | } uv; | 111 | } uv; |
113 | } Udata; | 112 | } Udata; |
114 | 113 | ||