diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1994-11-18 17:46:21 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1994-11-18 17:46:21 -0200 |
| commit | 93ccdd52ef83e283f7357c7e9de3a8773b26a16d (patch) | |
| tree | dabd6f8a9c903b4ea9397ec82d7829d268f7dec3 /opcode.c | |
| parent | 333a4f13d084b99c3729414c9c2d66222a8a1fc7 (diff) | |
| download | lua-93ccdd52ef83e283f7357c7e9de3a8773b26a16d.tar.gz lua-93ccdd52ef83e283f7357c7e9de3a8773b26a16d.tar.bz2 lua-93ccdd52ef83e283f7357c7e9de3a8773b26a16d.zip | |
lua_lock receives its parameter via stack.
beginblock and endblock do not have parameters
Diffstat (limited to 'opcode.c')
| -rw-r--r-- | opcode.c | 34 |
1 files changed, 27 insertions, 7 deletions
| @@ -3,7 +3,7 @@ | |||
| 3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | char *rcs_opcode="$Id: opcode.c,v 3.16 1994/11/17 19:43:34 roberto Exp roberto $"; | 6 | char *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 | |||
| 442 | static int numCblocks = 0; | ||
| 443 | static int Cblocks[MAX_C_BLOCKS]; | ||
| 444 | |||
| 439 | /* | 445 | /* |
| 440 | ** API: starts a new block | 446 | ** API: starts a new block |
| 441 | */ | 447 | */ |
| 442 | int lua_beginblock (void) | 448 | void 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 | */ |
| 450 | void lua_endblock (int block) | 458 | void 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 | */ |
| 471 | lua_Object lua_createTable (int initSize) | 483 | lua_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 | |||
| 566 | int 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 | */ |
