]> git.lizzy.rs Git - metalua.git/blob - src/binlibs/pluto/pdep.c
CRLF fsckup
[metalua.git] / src / binlibs / pluto / pdep.c
1 /* This file is derived from the Lua source code. Please see lua.h for
2 the copyright statement.
3 */
4
5 #include "pdep/pdep.h"
6
7 #define api_incr_top(L)   {api_check(L, L->top < L->ci->top); L->top++;}
8
9 void pdep_pushobject (lua_State *L, const TValue *o) {
10         setobj2s(L, L->top, o);
11         api_incr_top(L);
12 }
13
14 void *pdep_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) {
15         global_State *g = G(L);
16         lua_assert((osize == 0) == (block == NULL));
17         block = (*g->frealloc)(g->ud, block, osize, nsize);
18         lua_assert((nsize == 0) == (block == NULL));
19         g->totalbytes = (g->totalbytes - osize) + nsize;
20         return block;
21 }
22
23 void pdep_link (lua_State *L, GCObject *o, lu_byte tt) {
24         global_State *g = G(L);
25         o->gch.next = g->rootgc;
26         g->rootgc = o;
27         o->gch.marked = luaC_white(g);
28         o->gch.tt = tt;
29 }
30
31 Proto *pdep_newproto (lua_State *L) {
32         Proto *f = pdep_new(L, Proto);
33         pdep_link(L, obj2gco(f), LUA_TPROTO);
34         f->k = NULL;
35         f->sizek = 0;
36         f->p = NULL;
37         f->sizep = 0;
38         f->code = NULL;
39         f->sizecode = 0;
40         f->sizelineinfo = 0;
41         f->sizeupvalues = 0;
42         f->nups = 0;
43         f->upvalues = NULL;
44         f->numparams = 0;
45         f->is_vararg = 0;
46         f->maxstacksize = 0;
47         f->lineinfo = NULL;
48         f->sizelocvars = 0;
49         f->locvars = NULL;
50         f->linedefined = 0;
51         f->lastlinedefined = 0;
52         f->source = NULL;
53         return f;
54 }
55
56 Closure *pdep_newLclosure (lua_State *L, int nelems, Table *e) {
57         Closure *c = cast(Closure *, pdep_malloc(L, sizeLclosure(nelems)));
58         pdep_link(L, obj2gco(c), LUA_TFUNCTION);
59         c->l.isC = 0;
60         c->l.env = e;
61         c->l.nupvalues = cast_byte(nelems);
62         while (nelems--) c->l.upvals[nelems] = NULL;
63         return c;
64 }
65
66 static void correctstack (lua_State *L, TValue *oldstack) {
67   CallInfo *ci;
68   GCObject *up;
69   L->top = (L->top - oldstack) + L->stack;
70   for (up = L->openupval; up != NULL; up = up->gch.next)
71     gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack;
72   for (ci = L->base_ci; ci <= L->ci; ci++) {
73     ci->top = (ci->top - oldstack) + L->stack;
74     ci->base = (ci->base - oldstack) + L->stack;
75     ci->func = (ci->func - oldstack) + L->stack;
76   }
77   L->base = (L->base - oldstack) + L->stack;
78 }
79
80
81 void pdep_reallocstack (lua_State *L, int newsize) {
82         TValue *oldstack = L->stack;
83         int realsize = newsize + 1 + EXTRA_STACK;
84         lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1);
85         pdep_reallocvector(L, L->stack, L->stacksize, realsize, TValue);
86         L->stacksize = realsize;
87         L->stack_last = L->stack+newsize;
88         correctstack(L, oldstack);
89 }
90
91 void pdep_growstack (lua_State *L, int n) {
92         if (n <= L->stacksize)  /* double size is enough? */
93                 pdep_reallocstack(L, 2*L->stacksize);
94         else
95                 pdep_reallocstack(L, L->stacksize + n);
96 }
97
98 void pdep_reallocCI (lua_State *L, int newsize) {
99         CallInfo *oldci = L->base_ci;
100         pdep_reallocvector(L, L->base_ci, L->size_ci, newsize, CallInfo);
101         L->size_ci = newsize;
102         L->ci = (L->ci - oldci) + L->base_ci;
103         L->end_ci = L->base_ci + L->size_ci - 1;
104 }
105
106 TString *pdep_newlstr (lua_State *L, const char *str, size_t l) {
107         TString *res;
108         lua_pushlstring(L, str, l);
109         res = rawtsvalue(L->top-1);
110         lua_pop(L, 1);
111         return res;
112 }