aboutsummaryrefslogtreecommitdiff
path: root/ldump.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-03-10 14:56:32 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-03-10 14:56:32 -0300
commit197e249433027e72e5d4ef1a13c4edc6c24bca6c (patch)
treeaf0eb4632ab7f0332fb0db448586c087166e51bd /ldump.c
parent2aff75f58eb202dbf245787f2ae98c43124724f4 (diff)
downloadlua-197e249433027e72e5d4ef1a13c4edc6c24bca6c.tar.gz
lua-197e249433027e72e5d4ef1a13c4edc6c24bca6c.tar.bz2
lua-197e249433027e72e5d4ef1a13c4edc6c24bca6c.zip
"indent -kr -i2 -br -brf -nut" plus a few manual formating
Diffstat (limited to 'ldump.c')
-rw-r--r--ldump.c278
1 files changed, 141 insertions, 137 deletions
diff --git a/ldump.c b/ldump.c
index 5f0b7a46..c6df3ae9 100644
--- a/ldump.c
+++ b/ldump.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldump.c,v 2.23 2014/02/28 16:13:01 roberto Exp roberto $ 2** $Id: ldump.c,v 2.24 2014/03/01 15:18:44 roberto Exp roberto $
3** save precompiled Lua chunks 3** save precompiled Lua chunks
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -15,176 +15,180 @@
15#include "lstate.h" 15#include "lstate.h"
16#include "lundump.h" 16#include "lundump.h"
17 17
18
18typedef struct { 19typedef struct {
19 lua_State* L; 20 lua_State *L;
20 lua_Writer writer; 21 lua_Writer writer;
21 void* data; 22 void *data;
22 int strip; 23 int strip;
23 int status; 24 int status;
24} DumpState; 25} DumpState;
25 26
26 27
27#define DumpVar(x,D) DumpBlock(&x,sizeof(x),D) 28#define DumpVar(x,D) DumpBlock(&x,sizeof(x),D)
28#define DumpVector(v,n,D) DumpBlock(v,(n)*sizeof((v)[0]),D) 29#define DumpVector(v,n,D) DumpBlock(v,(n)*sizeof((v)[0]),D)
29 30
30static void DumpBlock(const void* b, size_t size, DumpState* D) 31
31{ 32static void DumpBlock (const void *b, size_t size, DumpState *D) {
32 if (D->status==0) 33 if (D->status == 0) {
33 { 34 lua_unlock(D->L);
34 lua_unlock(D->L); 35 D->status = (*D->writer)(D->L, b, size, D->data);
35 D->status=(*D->writer)(D->L,b,size,D->data); 36 lua_lock(D->L);
36 lua_lock(D->L); 37 }
37 }
38} 38}
39 39
40static void DumpByte(int y, DumpState* D) 40
41{ 41static void DumpByte (int y, DumpState *D) {
42 lu_byte x=(lu_byte)y; 42 lu_byte x = (lu_byte)y;
43 DumpVar(x,D); 43 DumpVar(x, D);
44} 44}
45 45
46static void DumpInt(int x, DumpState* D) 46
47{ 47static void DumpInt (int x, DumpState *D) {
48 DumpVar(x,D); 48 DumpVar(x, D);
49} 49}
50 50
51static void DumpNumber(lua_Number x, DumpState* D) 51
52{ 52static void DumpNumber (lua_Number x, DumpState *D) {
53 DumpVar(x,D); 53 DumpVar(x, D);
54} 54}
55 55
56static void DumpInteger(lua_Integer x, DumpState* D) 56
57{ 57static void DumpInteger (lua_Integer x, DumpState *D) {
58 DumpVar(x,D); 58 DumpVar(x, D);
59} 59}
60 60
61static void DumpString(const TString* s, DumpState* D) 61
62{ 62static void DumpString (const TString *s, DumpState *D) {
63 if (s==NULL) DumpByte(0,D); 63 if (s == NULL)
64 else { 64 DumpByte(0, D);
65 size_t size = s->tsv.len+1; /* include trailing '\0' */ 65 else {
66 if (size < 0xFF) DumpByte(size,D); 66 size_t size = s->tsv.len + 1; /* include trailing '\0' */
67 else 67 if (size < 0xFF)
68 { 68 DumpByte(size, D);
69 DumpByte(0xFF,D); 69 else {
70 DumpVar(size,D); 70 DumpByte(0xFF, D);
71 DumpVar(size, D);
72 }
73 DumpVector(getstr(s), size - 1, D); /* no need to save '\0' */
71 } 74 }
72 DumpVector(getstr(s),size-1,D); /* no need to save '\0' */
73 }
74} 75}
75 76
76static void DumpCode(const Proto* f, DumpState* D) 77
77{ 78static void DumpCode (const Proto *f, DumpState *D) {
78 DumpInt(f->sizecode,D); 79 DumpInt(f->sizecode, D);
79 DumpVector(f->code,f->sizecode,D); 80 DumpVector(f->code, f->sizecode, D);
80} 81}
81 82
82static void DumpFunction(const Proto* f, DumpState* D); 83
83 84static void DumpFunction(const Proto *f, DumpState *D);
84static void DumpConstants(const Proto* f, DumpState* D) 85
85{ 86static void DumpConstants (const Proto *f, DumpState *D) {
86 int i,n=f->sizek; 87 int i;
87 DumpInt(n,D); 88 int n = f->sizek;
88 for (i=0; i<n; i++) 89 DumpInt(n, D);
89 { 90 for (i = 0; i < n; i++) {
90 const TValue* o=&f->k[i]; 91 const TValue *o = &f->k[i];
91 DumpByte(ttype(o),D); 92 DumpByte(ttype(o), D);
92 switch (ttype(o)) 93 switch (ttype(o)) {
93 { 94 case LUA_TNIL:
94 case LUA_TNIL: 95 break;
95 break; 96 case LUA_TBOOLEAN:
96 case LUA_TBOOLEAN: 97 DumpByte(bvalue(o), D);
97 DumpByte(bvalue(o),D); 98 break;
98 break; 99 case LUA_TNUMFLT:
99 case LUA_TNUMFLT: 100 DumpNumber(fltvalue(o), D);
100 DumpNumber(fltvalue(o),D); 101 break;
101 break; 102 case LUA_TNUMINT:
102 case LUA_TNUMINT: 103 DumpInteger(ivalue(o), D);
103 DumpInteger(ivalue(o),D); 104 break;
104 break; 105 case LUA_TSHRSTR:
105 case LUA_TSHRSTR: case LUA_TLNGSTR: 106 case LUA_TLNGSTR:
106 DumpString(rawtsvalue(o),D); 107 DumpString(rawtsvalue(o), D);
107 break; 108 break;
108 default: lua_assert(0); 109 default:
110 lua_assert(0);
111 }
109 } 112 }
110 } 113 n = f->sizep;
111 n=f->sizep; 114 DumpInt(n, D);
112 DumpInt(n,D); 115 for (i = 0; i < n; i++)
113 for (i=0; i<n; i++) DumpFunction(f->p[i],D); 116 DumpFunction(f->p[i], D);
114} 117}
115 118
116static void DumpUpvalues(const Proto* f, DumpState* D) 119
117{ 120static void DumpUpvalues (const Proto *f, DumpState *D) {
118 int i,n=f->sizeupvalues; 121 int i, n = f->sizeupvalues;
119 DumpInt(n,D); 122 DumpInt(n, D);
120 for (i=0; i<n; i++) 123 for (i = 0; i < n; i++) {
121 { 124 DumpByte(f->upvalues[i].instack, D);
122 DumpByte(f->upvalues[i].instack,D); 125 DumpByte(f->upvalues[i].idx, D);
123 DumpByte(f->upvalues[i].idx,D); 126 }
124 }
125} 127}
126 128
127static void DumpDebug(const Proto* f, DumpState* D) 129
128{ 130static void DumpDebug (const Proto *f, DumpState *D) {
129 int i,n; 131 int i, n;
130 DumpString((D->strip) ? NULL : f->source,D); 132 DumpString((D->strip) ? NULL : f->source, D);
131 n= (D->strip) ? 0 : f->sizelineinfo; 133 n = (D->strip) ? 0 : f->sizelineinfo;
132 DumpInt(n,D); 134 DumpInt(n, D);
133 DumpVector(f->lineinfo,n,D); 135 DumpVector(f->lineinfo, n, D);
134 n= (D->strip) ? 0 : f->sizelocvars; 136 n = (D->strip) ? 0 : f->sizelocvars;
135 DumpInt(n,D); 137 DumpInt(n, D);
136 for (i=0; i<n; i++) 138 for (i = 0; i < n; i++) {
137 { 139 DumpString(f->locvars[i].varname, D);
138 DumpString(f->locvars[i].varname,D); 140 DumpInt(f->locvars[i].startpc, D);
139 DumpInt(f->locvars[i].startpc,D); 141 DumpInt(f->locvars[i].endpc, D);
140 DumpInt(f->locvars[i].endpc,D); 142 }
141 } 143 n = (D->strip) ? 0 : f->sizeupvalues;
142 n= (D->strip) ? 0 : f->sizeupvalues; 144 DumpInt(n, D);
143 DumpInt(n,D); 145 for (i = 0; i < n; i++)
144 for (i=0; i<n; i++) DumpString(f->upvalues[i].name,D); 146 DumpString(f->upvalues[i].name, D);
145} 147}
146 148
147static void DumpFunction(const Proto* f, DumpState* D) 149
148{ 150static void DumpFunction (const Proto *f, DumpState *D) {
149 DumpInt(f->linedefined,D); 151 DumpInt(f->linedefined, D);
150 DumpInt(f->lastlinedefined,D); 152 DumpInt(f->lastlinedefined, D);
151 DumpByte(f->numparams,D); 153 DumpByte(f->numparams, D);
152 DumpByte(f->is_vararg,D); 154 DumpByte(f->is_vararg, D);
153 DumpByte(f->maxstacksize,D); 155 DumpByte(f->maxstacksize, D);
154 DumpCode(f,D); 156 DumpCode(f, D);
155 DumpConstants(f,D); 157 DumpConstants(f, D);
156 DumpUpvalues(f,D); 158 DumpUpvalues(f, D);
157 DumpDebug(f,D); 159 DumpDebug(f, D);
158} 160}
159 161
160static void DumpHeader(DumpState* D) 162
161{ 163static void DumpHeader (DumpState *D) {
162 DumpBlock(LUA_SIGNATURE,sizeof(LUA_SIGNATURE),D); 164 DumpBlock(LUA_SIGNATURE, sizeof(LUA_SIGNATURE), D);
163 DumpBlock(LUAC_DATA,sizeof(LUAC_DATA),D); 165 DumpBlock(LUAC_DATA, sizeof(LUAC_DATA), D);
164 DumpByte(LUAC_VERSION,D); 166 DumpByte(LUAC_VERSION, D);
165 DumpByte(LUAC_FORMAT,D); 167 DumpByte(LUAC_FORMAT, D);
166 DumpByte(sizeof(int),D); 168 DumpByte(sizeof(int), D);
167 DumpByte(sizeof(size_t),D); 169 DumpByte(sizeof(size_t), D);
168 DumpByte(sizeof(Instruction),D); 170 DumpByte(sizeof(Instruction), D);
169 DumpByte(sizeof(lua_Integer),D); 171 DumpByte(sizeof(lua_Integer), D);
170 DumpByte(sizeof(lua_Number),D); 172 DumpByte(sizeof(lua_Number), D);
171 DumpInteger(LUAC_INT,D); 173 DumpInteger(LUAC_INT, D);
172 DumpNumber(LUAC_NUM,D); 174 DumpNumber(LUAC_NUM, D);
173} 175}
174 176
177
175/* 178/*
176** dump Lua function as precompiled chunk 179** dump Lua function as precompiled chunk
177*/ 180*/
178int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) 181int luaU_dump(lua_State *L, const Proto *f, lua_Writer w, void *data,
179{ 182 int strip) {
180 DumpState D; 183 DumpState D;
181 D.L=L; 184 D.L = L;
182 D.writer=w; 185 D.writer = w;
183 D.data=data; 186 D.data = data;
184 D.strip=strip; 187 D.strip = strip;
185 D.status=0; 188 D.status = 0;
186 DumpHeader(&D); 189 DumpHeader(&D);
187 DumpByte(f->sizeupvalues,&D); 190 DumpByte(f->sizeupvalues, &D);
188 DumpFunction(f,&D); 191 DumpFunction(f, &D);
189 return D.status; 192 return D.status;
190} 193}
194