aboutsummaryrefslogtreecommitdiff
path: root/ltable.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-05-08 16:32:53 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-05-08 16:32:53 -0300
commit11a70220670f25a9929439f0b27331f09f05235c (patch)
treec4a962b5a3e53ac6df8894fb3ad2248c4a1256cb /ltable.c
parent35a6ed283881f313152457f24cc6c677122d5058 (diff)
downloadlua-11a70220670f25a9929439f0b27331f09f05235c.tar.gz
lua-11a70220670f25a9929439f0b27331f09f05235c.tar.bz2
lua-11a70220670f25a9929439f0b27331f09f05235c.zip
global variables are stored in a Lua table
Diffstat (limited to 'ltable.c')
-rw-r--r--ltable.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/ltable.c b/ltable.c
index cc3a64f1..fb8b3dfe 100644
--- a/ltable.c
+++ b/ltable.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltable.c,v 1.39 2000/03/31 16:28:45 roberto Exp roberto $ 2** $Id: ltable.c,v 1.40 2000/04/25 16:55:09 roberto Exp roberto $
3** Lua tables (hash) 3** Lua tables (hash)
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -24,6 +24,7 @@
24#include "lmem.h" 24#include "lmem.h"
25#include "lobject.h" 25#include "lobject.h"
26#include "lstate.h" 26#include "lstate.h"
27#include "lstring.h"
27#include "ltable.h" 28#include "ltable.h"
28#include "lua.h" 29#include "lua.h"
29 30
@@ -46,14 +47,17 @@ Node *luaH_mainposition (const Hash *t, const TObject *key) {
46 case TAG_NUMBER: 47 case TAG_NUMBER:
47 h = (unsigned long)(long)nvalue(key); 48 h = (unsigned long)(long)nvalue(key);
48 break; 49 break;
49 case TAG_STRING: case TAG_USERDATA: 50 case TAG_STRING:
50 h = tsvalue(key)->hash; 51 h = tsvalue(key)->u.s.hash;
52 break;
53 case TAG_USERDATA:
54 h = IntPoint(tsvalue(key));
51 break; 55 break;
52 case TAG_TABLE: 56 case TAG_TABLE:
53 h = IntPoint(L, avalue(key)); 57 h = IntPoint(avalue(key));
54 break; 58 break;
55 case TAG_LCLOSURE: case TAG_CCLOSURE: 59 case TAG_LCLOSURE: case TAG_CCLOSURE:
56 h = IntPoint(L, clvalue(key)); 60 h = IntPoint(clvalue(key));
57 break; 61 break;
58 default: 62 default:
59 return NULL; /* invalid key */ 63 return NULL; /* invalid key */
@@ -91,8 +95,8 @@ const TObject *luaH_getnum (const Hash *t, Number key) {
91 95
92 96
93/* specialized version for strings */ 97/* specialized version for strings */
94static const TObject *luaH_getstr (const Hash *t, TString *key) { 98const TObject *luaH_getstr (const Hash *t, TString *key) {
95 Node *n = &t->node[key->hash&(t->size-1)]; 99 Node *n = &t->node[key->u.s.hash&(t->size-1)];
96 do { 100 do {
97 if (ttype(&n->key) == TAG_STRING && tsvalue(&n->key) == key) 101 if (ttype(&n->key) == TAG_STRING && tsvalue(&n->key) == key)
98 return &n->val; 102 return &n->val;
@@ -248,3 +252,7 @@ void luaH_setint (lua_State *L, Hash *t, int key, const TObject *val) {
248 luaH_set(L, t, &index, val); 252 luaH_set(L, t, &index, val);
249} 253}
250 254
255
256const TObject *luaH_getglobal (lua_State *L, const char *name) {
257 return luaH_getstr(L->gt, luaS_new(L, name));
258}