diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1994-11-16 15:39:16 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1994-11-16 15:39:16 -0200 |
| commit | 2b5bc5d1a81579a76c13e638de2592e2c39c73f0 (patch) | |
| tree | 8294278f9fbd2565d3a2cd11642fed41982824bd /opcode.c | |
| parent | 94686ce58554a80374eeff115ee5b87c184ed173 (diff) | |
| download | lua-2b5bc5d1a81579a76c13e638de2592e2c39c73f0.tar.gz lua-2b5bc5d1a81579a76c13e638de2592e2c39c73f0.tar.bz2 lua-2b5bc5d1a81579a76c13e638de2592e2c39c73f0.zip | |
new module for memory allocation
Diffstat (limited to 'opcode.c')
| -rw-r--r-- | opcode.c | 47 |
1 files changed, 18 insertions, 29 deletions
| @@ -3,17 +3,14 @@ | |||
| 3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | char *rcs_opcode="$Id: opcode.c,v 3.11 1994/11/13 16:17:04 roberto Exp $"; | 6 | char *rcs_opcode="$Id: opcode.c,v 3.12 1994/11/16 16:03:48 roberto Exp roberto $"; |
| 7 | 7 | ||
| 8 | #include <setjmp.h> | ||
| 8 | #include <stdio.h> | 9 | #include <stdio.h> |
| 9 | #include <stdlib.h> | ||
| 10 | #include <string.h> | 10 | #include <string.h> |
| 11 | #include <setjmp.h> | ||
| 12 | #include <math.h> | 11 | #include <math.h> |
| 13 | #ifdef __GNUC__ | ||
| 14 | #include <floatingpoint.h> | ||
| 15 | #endif | ||
| 16 | 12 | ||
| 13 | #include "mem.h" | ||
| 17 | #include "opcode.h" | 14 | #include "opcode.h" |
| 18 | #include "hash.h" | 15 | #include "hash.h" |
| 19 | #include "inout.h" | 16 | #include "inout.h" |
| @@ -89,9 +86,7 @@ void lua_error (char *s) | |||
| 89 | static void lua_initstack (void) | 86 | static void lua_initstack (void) |
| 90 | { | 87 | { |
| 91 | maxstack = STACK_BUFFER; | 88 | maxstack = STACK_BUFFER; |
| 92 | stack = (Object *)calloc(maxstack, sizeof(Object)); | 89 | stack = newvector(maxstack, Object); |
| 93 | if (stack == NULL) | ||
| 94 | lua_error("stack - not enough memory"); | ||
| 95 | top = stack; | 90 | top = stack; |
| 96 | } | 91 | } |
| 97 | 92 | ||
| @@ -108,9 +103,7 @@ static void lua_checkstack (Word n) | |||
| 108 | lua_initstack(); | 103 | lua_initstack(); |
| 109 | t = top-stack; | 104 | t = top-stack; |
| 110 | maxstack *= 2; | 105 | maxstack *= 2; |
| 111 | stack = (Object *)realloc(stack, maxstack*sizeof(Object)); | 106 | stack = growvector(stack, maxstack, Object); |
| 112 | if (stack == NULL) | ||
| 113 | lua_error("stack - not enough memory"); | ||
| 114 | top = stack + t; | 107 | top = stack + t; |
| 115 | } | 108 | } |
| 116 | } | 109 | } |
| @@ -126,16 +119,11 @@ static char *lua_strconc (char *l, char *r) | |||
| 126 | int nl = strlen(l); | 119 | int nl = strlen(l); |
| 127 | int n = nl+strlen(r)+1; | 120 | int n = nl+strlen(r)+1; |
| 128 | if (n > buffer_size) | 121 | if (n > buffer_size) |
| 129 | { | 122 | { |
| 130 | buffer_size = n; | 123 | buffer_size = n; |
| 131 | if (buffer != NULL) | 124 | if (buffer != NULL) |
| 132 | free(buffer); | 125 | luaI_free(buffer); |
| 133 | buffer = (char *)malloc(buffer_size); | 126 | buffer = newvector(buffer_size, char); |
| 134 | if (buffer == NULL) | ||
| 135 | { | ||
| 136 | buffer_size = 0; | ||
| 137 | lua_error("concat - not enough memory"); | ||
| 138 | } | ||
| 139 | } | 127 | } |
| 140 | strcpy(buffer,l); | 128 | strcpy(buffer,l); |
| 141 | strcpy(buffer+nl, r); | 129 | strcpy(buffer+nl, r); |
| @@ -149,11 +137,10 @@ static char *lua_strconc (char *l, char *r) | |||
| 149 | */ | 137 | */ |
| 150 | static int lua_tonumber (Object *obj) | 138 | static int lua_tonumber (Object *obj) |
| 151 | { | 139 | { |
| 152 | char c; | ||
| 153 | float t; | 140 | float t; |
| 154 | if (tag(obj) != LUA_T_STRING) | 141 | if (tag(obj) != LUA_T_STRING) |
| 155 | return 1; | 142 | return 1; |
| 156 | else if (sscanf(svalue(obj), "%f %c",&t,&c) == 1) | 143 | else if (sscanf(svalue(obj), "%f %*c",&t) == 1) |
| 157 | { | 144 | { |
| 158 | nvalue(obj) = t; | 145 | nvalue(obj) = t; |
| 159 | tag(obj) = LUA_T_NUMBER; | 146 | tag(obj) = LUA_T_NUMBER; |
| @@ -353,7 +340,7 @@ static int do_protectedmain (void) | |||
| 353 | else | 340 | else |
| 354 | status = 1; | 341 | status = 1; |
| 355 | if (code) | 342 | if (code) |
| 356 | free(code); | 343 | luaI_free(code); |
| 357 | errorJmp = oldErr; | 344 | errorJmp = oldErr; |
| 358 | CBase = oldCBase; | 345 | CBase = oldCBase; |
| 359 | top = stack+CBase; | 346 | top = stack+CBase; |
| @@ -467,9 +454,9 @@ int lua_storesubscript (void) | |||
| 467 | lua_Object lua_createTable (int initSize) | 454 | lua_Object lua_createTable (int initSize) |
| 468 | { | 455 | { |
| 469 | adjustC(0); | 456 | adjustC(0); |
| 457 | tag(top) = LUA_T_ARRAY; | ||
| 458 | avalue(top) = lua_createarray(initSize); | ||
| 470 | top++; | 459 | top++; |
| 471 | tag(top-1) = LUA_T_ARRAY; | ||
| 472 | avalue(top-1) = lua_createarray(initSize); | ||
| 473 | CBase++; /* incorporate object in the stack */ | 460 | CBase++; /* incorporate object in the stack */ |
| 474 | return Ref(top-1); | 461 | return Ref(top-1); |
| 475 | } | 462 | } |
| @@ -540,7 +527,8 @@ void *lua_getuserdata (lua_Object object) | |||
| 540 | lua_Object lua_getlocked (int ref) | 527 | lua_Object lua_getlocked (int ref) |
| 541 | { | 528 | { |
| 542 | adjustC(0); | 529 | adjustC(0); |
| 543 | *(top++) = *luaI_getlocked(ref); | 530 | *top = *luaI_getlocked(ref); |
| 531 | top++; | ||
| 544 | CBase++; /* incorporate object in the stack */ | 532 | CBase++; /* incorporate object in the stack */ |
| 545 | return Ref(top-1); | 533 | return Ref(top-1); |
| 546 | } | 534 | } |
| @@ -552,7 +540,8 @@ lua_Object lua_getglobal (char *name) | |||
| 552 | { | 540 | { |
| 553 | int n = luaI_findsymbolbyname(name); | 541 | int n = luaI_findsymbolbyname(name); |
| 554 | adjustC(0); | 542 | adjustC(0); |
| 555 | *(top++) = s_object(n); | 543 | *top = s_object(n); |
| 544 | top++; | ||
| 556 | CBase++; /* incorporate object in the stack */ | 545 | CBase++; /* incorporate object in the stack */ |
| 557 | return Ref(top-1); | 546 | return Ref(top-1); |
| 558 | } | 547 | } |
| @@ -854,9 +843,9 @@ static int lua_execute (Byte *pc, int base) | |||
| 854 | { | 843 | { |
| 855 | CodeWord size; | 844 | CodeWord size; |
| 856 | get_word(size,pc); | 845 | get_word(size,pc); |
| 846 | tag(top) = LUA_T_ARRAY; | ||
| 847 | avalue(top) = lua_createarray(size.w); | ||
| 857 | top++; | 848 | top++; |
| 858 | tag(top-1) = LUA_T_ARRAY; | ||
| 859 | avalue(top-1) = lua_createarray(size.w); | ||
| 860 | } | 849 | } |
| 861 | break; | 850 | break; |
| 862 | 851 | ||
