aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-01-30 13:25:23 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-01-30 13:25:23 -0200
commit43382ce5a22838af182807b451a12c474e21da78 (patch)
tree44a6572d07f256494289e8efd6d96e6218950579
parentabfebf1e2110eb661e146f01ea82836727b3e794 (diff)
downloadlua-43382ce5a22838af182807b451a12c474e21da78.tar.gz
lua-43382ce5a22838af182807b451a12c474e21da78.tar.bz2
lua-43382ce5a22838af182807b451a12c474e21da78.zip
new fallback "getglobal".
-rw-r--r--fallback.c6
-rw-r--r--fallback.h3
-rw-r--r--opcode.c21
3 files changed, 21 insertions, 9 deletions
diff --git a/fallback.c b/fallback.c
index e7f6a8bf..13b763f9 100644
--- a/fallback.c
+++ b/fallback.c
@@ -3,7 +3,7 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_fallback="$Id: fallback.c,v 1.16 1995/10/17 11:52:38 roberto Exp roberto $"; 6char *rcs_fallback="$Id: fallback.c,v 1.17 1995/10/17 14:30:05 roberto Exp roberto $";
7 7
8#include <stdio.h> 8#include <stdio.h>
9#include <string.h> 9#include <string.h>
@@ -36,8 +36,10 @@ struct FB luaI_fallBacks[] = {
36{"concat", {LUA_T_CFUNCTION, {concatFB}}, 2, 1}, 36{"concat", {LUA_T_CFUNCTION, {concatFB}}, 2, 1},
37{"settable", {LUA_T_CFUNCTION, {gettableFB}}, 3, 0}, 37{"settable", {LUA_T_CFUNCTION, {gettableFB}}, 3, 0},
38{"gc", {LUA_T_CFUNCTION, {GDFB}}, 1, 0}, 38{"gc", {LUA_T_CFUNCTION, {GDFB}}, 1, 0},
39{"function", {LUA_T_CFUNCTION, {funcFB}}, -1, -1} 39{"function", {LUA_T_CFUNCTION, {funcFB}}, -1, -1},
40 /* no fixed number of params or results */ 40 /* no fixed number of params or results */
41{"getglobal", {LUA_T_CFUNCTION, {indexFB}}, 1, 1}
42 /* same default behavior of index FB */
41}; 43};
42 44
43#define N_FB (sizeof(luaI_fallBacks)/sizeof(struct FB)) 45#define N_FB (sizeof(luaI_fallBacks)/sizeof(struct FB))
diff --git a/fallback.h b/fallback.h
index b4ba373b..4ea72808 100644
--- a/fallback.h
+++ b/fallback.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: fallback.h,v 1.9 1995/10/09 13:14:29 roberto Exp roberto $ 2** $Id: fallback.h,v 1.10 1995/10/17 11:52:38 roberto Exp roberto $
3*/ 3*/
4 4
5#ifndef fallback_h 5#ifndef fallback_h
@@ -23,6 +23,7 @@ extern struct FB {
23#define FB_SETTABLE 6 23#define FB_SETTABLE 6
24#define FB_GC 7 24#define FB_GC 7
25#define FB_FUNCTION 8 25#define FB_FUNCTION 8
26#define FB_GETGLOBAL 9
26 27
27void luaI_setfallback (void); 28void luaI_setfallback (void);
28int luaI_lock (Object *object); 29int luaI_lock (Object *object);
diff --git a/opcode.c b/opcode.c
index 2708f949..6d2d4cc0 100644
--- a/opcode.c
+++ b/opcode.c
@@ -3,7 +3,7 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_opcode="$Id: opcode.c,v 3.52 1996/01/09 20:22:44 roberto Exp roberto $"; 6char *rcs_opcode="$Id: opcode.c,v 3.53 1996/01/23 18:43:07 roberto Exp roberto $";
7 7
8#include <setjmp.h> 8#include <setjmp.h>
9#include <stdlib.h> 9#include <stdlib.h>
@@ -374,6 +374,18 @@ static void storesubscript (void)
374} 374}
375 375
376 376
377static void getglobal (Word n)
378{
379 *top = lua_table[n].object;
380 incr_top;
381 if (tag(top-1) == LUA_T_NIL)
382 { /* must call getglobal fallback */
383 tag(top-1) = LUA_T_STRING;
384 tsvalue(top-1) = &lua_table[n].varname->ts;
385 callFB(FB_GETGLOBAL);
386 }
387}
388
377/* 389/*
378** Traverse all objects on stack 390** Traverse all objects on stack
379*/ 391*/
@@ -704,10 +716,8 @@ int lua_lock (void)
704*/ 716*/
705lua_Object lua_getglobal (char *name) 717lua_Object lua_getglobal (char *name)
706{ 718{
707 Word n = luaI_findsymbolbyname(name);
708 adjustC(0); 719 adjustC(0);
709 *top = s_object(n); 720 getglobal(luaI_findsymbolbyname(name));
710 incr_top;
711 CBase++; /* incorporate object in the stack */ 721 CBase++; /* incorporate object in the stack */
712 return Ref(top-1); 722 return Ref(top-1);
713} 723}
@@ -919,8 +929,7 @@ static StkId lua_execute (Byte *pc, StkId base)
919 { 929 {
920 CodeWord code; 930 CodeWord code;
921 get_word(code,pc); 931 get_word(code,pc);
922 *top = s_object(code.w); 932 getglobal(code.w);
923 incr_top;
924 } 933 }
925 break; 934 break;
926 935