aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1994-11-18 17:46:21 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1994-11-18 17:46:21 -0200
commit93ccdd52ef83e283f7357c7e9de3a8773b26a16d (patch)
treedabd6f8a9c903b4ea9397ec82d7829d268f7dec3
parent333a4f13d084b99c3729414c9c2d66222a8a1fc7 (diff)
downloadlua-93ccdd52ef83e283f7357c7e9de3a8773b26a16d.tar.gz
lua-93ccdd52ef83e283f7357c7e9de3a8773b26a16d.tar.bz2
lua-93ccdd52ef83e283f7357c7e9de3a8773b26a16d.zip
lua_lock receives its parameter via stack.
beginblock and endblock do not have parameters
-rw-r--r--lua.h13
-rw-r--r--opcode.c34
2 files changed, 35 insertions, 12 deletions
diff --git a/lua.h b/lua.h
index 91fec003..221060eb 100644
--- a/lua.h
+++ b/lua.h
@@ -2,7 +2,7 @@
2** LUA - Linguagem para Usuarios de Aplicacao 2** LUA - Linguagem para Usuarios de Aplicacao
3** Grupo de Tecnologia em Computacao Grafica 3** Grupo de Tecnologia em Computacao Grafica
4** TeCGraf - PUC-Rio 4** TeCGraf - PUC-Rio
5** $Id: lua.h,v 3.9 1994/11/17 21:23:43 roberto Exp roberto $ 5** $Id: lua.h,v 3.10 1994/11/17 21:27:30 roberto Exp roberto $
6*/ 6*/
7 7
8 8
@@ -36,8 +36,8 @@ int lua_dostring (char *string);
36int lua_callfunction (lua_Object function); 36int lua_callfunction (lua_Object function);
37int lua_call (char *funcname); 37int lua_call (char *funcname);
38 38
39int lua_beginblock (void); 39void lua_beginblock (void);
40void lua_endblock (int block); 40void lua_endblock (void);
41 41
42lua_Object lua_getparam (int number); 42lua_Object lua_getparam (int number);
43#define lua_getresult(_) lua_getparam(_) 43#define lua_getresult(_) lua_getparam(_)
@@ -63,14 +63,17 @@ lua_Object lua_getsubscript (void);
63 63
64int lua_type (lua_Object object); 64int lua_type (lua_Object object);
65 65
66int lua_lock (lua_Object object); 66int lua_lock (void);
67lua_Object lua_getlocked (int ref); 67lua_Object lua_getlocked (int ref);
68void lua_unlock (int ref); 68void lua_unlock (int ref);
69 69
70lua_Object lua_createTable (int initSize); 70lua_Object lua_createtable (int initSize);
71
71 72
72/* for lua 1.1 */ 73/* for lua 1.1 */
73 74
75#define lua_lockobject(o) (lua_pushobject(o), lua_lock())
76
74#define lua_register(n,f) (lua_pushcfunction(f), lua_storeglobal(n)) 77#define lua_register(n,f) (lua_pushcfunction(f), lua_storeglobal(n))
75 78
76#define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_getsubscript()) 79#define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_getsubscript())
diff --git a/opcode.c b/opcode.c
index 92b88c83..d1869654 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.16 1994/11/17 19:43:34 roberto Exp roberto $"; 6char *rcs_opcode="$Id: opcode.c,v 3.17 1994/11/17 21:23:43 roberto Exp roberto $";
7 7
8#include <setjmp.h> 8#include <setjmp.h>
9#include <stdio.h> 9#include <stdio.h>
@@ -436,21 +436,33 @@ lua_Object lua_getsubscript (void)
436 return 0; 436 return 0;
437} 437}
438 438
439
440#define MAX_C_BLOCKS 10
441
442static int numCblocks = 0;
443static int Cblocks[MAX_C_BLOCKS];
444
439/* 445/*
440** API: starts a new block 446** API: starts a new block
441*/ 447*/
442int lua_beginblock (void) 448void lua_beginblock (void)
443{ 449{
444 return CBase; 450 if (numCblocks < MAX_C_BLOCKS)
451 Cblocks[numCblocks] = CBase;
452 numCblocks++;
445} 453}
446 454
447/* 455/*
448** API: ends a block 456** API: ends a block
449*/ 457*/
450void lua_endblock (int block) 458void lua_endblock (void)
451{ 459{
452 CBase = block; 460 --numCblocks;
453 adjustC(0); 461 if (numCblocks < MAX_C_BLOCKS)
462 {
463 CBase = Cblocks[numCblocks];
464 adjustC(0);
465 }
454} 466}
455 467
456/* 468/*
@@ -468,7 +480,7 @@ int lua_storesubscript (void)
468/* 480/*
469** API: creates a new table 481** API: creates a new table
470*/ 482*/
471lua_Object lua_createTable (int initSize) 483lua_Object lua_createtable (int initSize)
472{ 484{
473 adjustC(0); 485 adjustC(0);
474 avalue(top) = lua_createarray(initSize); 486 avalue(top) = lua_createarray(initSize);
@@ -550,6 +562,14 @@ lua_Object lua_getlocked (int ref)
550 return Ref(top-1); 562 return Ref(top-1);
551} 563}
552 564
565
566int lua_lock (void)
567{
568 adjustC(1);
569 return luaI_lock(--top);
570}
571
572
553/* 573/*
554** Get a global object. Return the object handle or NULL on error. 574** Get a global object. Return the object handle or NULL on error.
555*/ 575*/