Tamar 0.7.5 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/.gitmodules +3 -0
  2. data/HISTORY +22 -5
  3. data/Tamar.gemspec +114 -1
  4. data/VERSION +1 -1
  5. data/src/lua/CMakeLists.txt +176 -0
  6. data/src/lua/COPYRIGHT +34 -0
  7. data/src/lua/FindReadline.cmake +25 -0
  8. data/src/lua/HISTORY +183 -0
  9. data/src/lua/INSTALL +99 -0
  10. data/src/lua/Makefile +128 -0
  11. data/src/lua/README +46 -0
  12. data/src/lua/dist.cmake +450 -0
  13. data/src/lua/dist.info +10 -0
  14. data/src/lua/doc/amazon.gif +0 -0
  15. data/src/lua/doc/contents.html +499 -0
  16. data/src/lua/doc/cover.png +0 -0
  17. data/src/lua/doc/logo.gif +0 -0
  18. data/src/lua/doc/lua.1 +163 -0
  19. data/src/lua/doc/lua.css +41 -0
  20. data/src/lua/doc/lua.html +172 -0
  21. data/src/lua/doc/luac.1 +136 -0
  22. data/src/lua/doc/luac.html +145 -0
  23. data/src/lua/doc/manual.css +13 -0
  24. data/src/lua/doc/manual.html +8801 -0
  25. data/src/lua/doc/readme.html +40 -0
  26. data/src/lua/etc/Makefile +44 -0
  27. data/src/lua/etc/README +37 -0
  28. data/src/lua/etc/all.c +38 -0
  29. data/src/lua/etc/lua.hpp +9 -0
  30. data/src/lua/etc/lua.ico +0 -0
  31. data/src/lua/etc/lua.pc +31 -0
  32. data/src/lua/etc/luavs.bat +28 -0
  33. data/src/lua/etc/min.c +39 -0
  34. data/src/lua/etc/noparser.c +50 -0
  35. data/src/lua/etc/strict.lua +41 -0
  36. data/src/lua/src/Makefile +182 -0
  37. data/src/lua/src/lapi.c +1087 -0
  38. data/src/lua/src/lapi.h +16 -0
  39. data/src/lua/src/lauxlib.c +652 -0
  40. data/src/lua/src/lauxlib.h +174 -0
  41. data/src/lua/src/lbaselib.c +653 -0
  42. data/src/lua/src/lcode.c +831 -0
  43. data/src/lua/src/lcode.h +76 -0
  44. data/src/lua/src/ldblib.c +398 -0
  45. data/src/lua/src/ldebug.c +638 -0
  46. data/src/lua/src/ldebug.h +33 -0
  47. data/src/lua/src/ldo.c +518 -0
  48. data/src/lua/src/ldo.h +57 -0
  49. data/src/lua/src/ldump.c +164 -0
  50. data/src/lua/src/lfunc.c +174 -0
  51. data/src/lua/src/lfunc.h +34 -0
  52. data/src/lua/src/lgc.c +711 -0
  53. data/src/lua/src/lgc.h +110 -0
  54. data/src/lua/src/linit.c +38 -0
  55. data/src/lua/src/liolib.c +556 -0
  56. data/src/lua/src/llex.c +463 -0
  57. data/src/lua/src/llex.h +81 -0
  58. data/src/lua/src/llimits.h +128 -0
  59. data/src/lua/src/lmathlib.c +263 -0
  60. data/src/lua/src/lmem.c +86 -0
  61. data/src/lua/src/lmem.h +49 -0
  62. data/src/lua/src/loadlib.c +666 -0
  63. data/src/lua/src/loadlib_rel.c +719 -0
  64. data/src/lua/src/lobject.c +214 -0
  65. data/src/lua/src/lobject.h +381 -0
  66. data/src/lua/src/lopcodes.c +102 -0
  67. data/src/lua/src/lopcodes.h +268 -0
  68. data/src/lua/src/loslib.c +243 -0
  69. data/src/lua/src/lparser.c +1339 -0
  70. data/src/lua/src/lparser.h +82 -0
  71. data/src/lua/src/lstate.c +214 -0
  72. data/src/lua/src/lstate.h +169 -0
  73. data/src/lua/src/lstring.c +111 -0
  74. data/src/lua/src/lstring.h +31 -0
  75. data/src/lua/src/lstrlib.c +871 -0
  76. data/src/lua/src/ltable.c +588 -0
  77. data/src/lua/src/ltable.h +40 -0
  78. data/src/lua/src/ltablib.c +287 -0
  79. data/src/lua/src/ltm.c +75 -0
  80. data/src/lua/src/ltm.h +54 -0
  81. data/src/lua/src/lua.c +392 -0
  82. data/src/lua/src/lua.def +131 -0
  83. data/src/lua/src/lua.h +388 -0
  84. data/src/lua/src/lua.rc +28 -0
  85. data/src/lua/src/lua_dll.rc +26 -0
  86. data/src/lua/src/luac.c +200 -0
  87. data/src/lua/src/luac.rc +1 -0
  88. data/src/lua/src/luaconf.h.in +724 -0
  89. data/src/lua/src/luaconf.h.orig +763 -0
  90. data/src/lua/src/lualib.h +53 -0
  91. data/src/lua/src/lundump.c +227 -0
  92. data/src/lua/src/lundump.h +36 -0
  93. data/src/lua/src/lvm.c +766 -0
  94. data/src/lua/src/lvm.h +36 -0
  95. data/src/lua/src/lzio.c +82 -0
  96. data/src/lua/src/lzio.h +67 -0
  97. data/src/lua/src/print.c +227 -0
  98. data/src/lua/test/README +26 -0
  99. data/src/lua/test/bisect.lua +27 -0
  100. data/src/lua/test/cf.lua +16 -0
  101. data/src/lua/test/echo.lua +5 -0
  102. data/src/lua/test/env.lua +7 -0
  103. data/src/lua/test/factorial.lua +32 -0
  104. data/src/lua/test/fib.lua +40 -0
  105. data/src/lua/test/fibfor.lua +13 -0
  106. data/src/lua/test/globals.lua +13 -0
  107. data/src/lua/test/hello.lua +3 -0
  108. data/src/lua/test/life.lua +111 -0
  109. data/src/lua/test/luac.lua +7 -0
  110. data/src/lua/test/printf.lua +7 -0
  111. data/src/lua/test/readonly.lua +12 -0
  112. data/src/lua/test/sieve.lua +29 -0
  113. data/src/lua/test/sort.lua +66 -0
  114. data/src/lua/test/table.lua +12 -0
  115. data/src/lua/test/trace-calls.lua +32 -0
  116. data/src/lua/test/trace-globals.lua +38 -0
  117. data/src/lua/test/xd.lua +14 -0
  118. metadata +115 -2
@@ -0,0 +1,463 @@
1
+ /*
2
+ ** $Id: llex.c,v 2.20.1.2 2009/11/23 14:58:22 roberto Exp $
3
+ ** Lexical Analyzer
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+
8
+ #include <ctype.h>
9
+ #include <locale.h>
10
+ #include <string.h>
11
+
12
+ #define llex_c
13
+ #define LUA_CORE
14
+
15
+ #include "lua.h"
16
+
17
+ #include "ldo.h"
18
+ #include "llex.h"
19
+ #include "lobject.h"
20
+ #include "lparser.h"
21
+ #include "lstate.h"
22
+ #include "lstring.h"
23
+ #include "ltable.h"
24
+ #include "lzio.h"
25
+
26
+
27
+
28
+ #define next(ls) (ls->current = zgetc(ls->z))
29
+
30
+
31
+
32
+
33
+ #define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r')
34
+
35
+
36
+ /* ORDER RESERVED */
37
+ const char *const luaX_tokens [] = {
38
+ "and", "break", "do", "else", "elseif",
39
+ "end", "false", "for", "function", "if",
40
+ "in", "local", "nil", "not", "or", "repeat",
41
+ "return", "then", "true", "until", "while",
42
+ "..", "...", "==", ">=", "<=", "~=",
43
+ "<number>", "<name>", "<string>", "<eof>",
44
+ NULL
45
+ };
46
+
47
+
48
+ #define save_and_next(ls) (save(ls, ls->current), next(ls))
49
+
50
+
51
+ static void save (LexState *ls, int c) {
52
+ Mbuffer *b = ls->buff;
53
+ if (b->n + 1 > b->buffsize) {
54
+ size_t newsize;
55
+ if (b->buffsize >= MAX_SIZET/2)
56
+ luaX_lexerror(ls, "lexical element too long", 0);
57
+ newsize = b->buffsize * 2;
58
+ luaZ_resizebuffer(ls->L, b, newsize);
59
+ }
60
+ b->buffer[b->n++] = cast(char, c);
61
+ }
62
+
63
+
64
+ void luaX_init (lua_State *L) {
65
+ int i;
66
+ for (i=0; i<NUM_RESERVED; i++) {
67
+ TString *ts = luaS_new(L, luaX_tokens[i]);
68
+ luaS_fix(ts); /* reserved words are never collected */
69
+ lua_assert(strlen(luaX_tokens[i])+1 <= TOKEN_LEN);
70
+ ts->tsv.reserved = cast_byte(i+1); /* reserved word */
71
+ }
72
+ }
73
+
74
+
75
+ #define MAXSRC 80
76
+
77
+
78
+ const char *luaX_token2str (LexState *ls, int token) {
79
+ if (token < FIRST_RESERVED) {
80
+ lua_assert(token == cast(unsigned char, token));
81
+ return (iscntrl(token)) ? luaO_pushfstring(ls->L, "char(%d)", token) :
82
+ luaO_pushfstring(ls->L, "%c", token);
83
+ }
84
+ else
85
+ return luaX_tokens[token-FIRST_RESERVED];
86
+ }
87
+
88
+
89
+ static const char *txtToken (LexState *ls, int token) {
90
+ switch (token) {
91
+ case TK_NAME:
92
+ case TK_STRING:
93
+ case TK_NUMBER:
94
+ save(ls, '\0');
95
+ return luaZ_buffer(ls->buff);
96
+ default:
97
+ return luaX_token2str(ls, token);
98
+ }
99
+ }
100
+
101
+
102
+ void luaX_lexerror (LexState *ls, const char *msg, int token) {
103
+ char buff[MAXSRC];
104
+ luaO_chunkid(buff, getstr(ls->source), MAXSRC);
105
+ msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg);
106
+ if (token)
107
+ luaO_pushfstring(ls->L, "%s near " LUA_QS, msg, txtToken(ls, token));
108
+ luaD_throw(ls->L, LUA_ERRSYNTAX);
109
+ }
110
+
111
+
112
+ void luaX_syntaxerror (LexState *ls, const char *msg) {
113
+ luaX_lexerror(ls, msg, ls->t.token);
114
+ }
115
+
116
+
117
+ TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
118
+ lua_State *L = ls->L;
119
+ TString *ts = luaS_newlstr(L, str, l);
120
+ TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */
121
+ if (ttisnil(o)) {
122
+ setbvalue(o, 1); /* make sure `str' will not be collected */
123
+ luaC_checkGC(L);
124
+ }
125
+ return ts;
126
+ }
127
+
128
+
129
+ static void inclinenumber (LexState *ls) {
130
+ int old = ls->current;
131
+ lua_assert(currIsNewline(ls));
132
+ next(ls); /* skip `\n' or `\r' */
133
+ if (currIsNewline(ls) && ls->current != old)
134
+ next(ls); /* skip `\n\r' or `\r\n' */
135
+ if (++ls->linenumber >= MAX_INT)
136
+ luaX_syntaxerror(ls, "chunk has too many lines");
137
+ }
138
+
139
+
140
+ void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source) {
141
+ ls->decpoint = '.';
142
+ ls->L = L;
143
+ ls->lookahead.token = TK_EOS; /* no look-ahead token */
144
+ ls->z = z;
145
+ ls->fs = NULL;
146
+ ls->linenumber = 1;
147
+ ls->lastline = 1;
148
+ ls->source = source;
149
+ luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */
150
+ next(ls); /* read first char */
151
+ }
152
+
153
+
154
+
155
+ /*
156
+ ** =======================================================
157
+ ** LEXICAL ANALYZER
158
+ ** =======================================================
159
+ */
160
+
161
+
162
+
163
+ static int check_next (LexState *ls, const char *set) {
164
+ if (!strchr(set, ls->current))
165
+ return 0;
166
+ save_and_next(ls);
167
+ return 1;
168
+ }
169
+
170
+
171
+ static void buffreplace (LexState *ls, char from, char to) {
172
+ size_t n = luaZ_bufflen(ls->buff);
173
+ char *p = luaZ_buffer(ls->buff);
174
+ while (n--)
175
+ if (p[n] == from) p[n] = to;
176
+ }
177
+
178
+
179
+ static void trydecpoint (LexState *ls, SemInfo *seminfo) {
180
+ /* format error: try to update decimal point separator */
181
+ struct lconv *cv = localeconv();
182
+ char old = ls->decpoint;
183
+ ls->decpoint = (cv ? cv->decimal_point[0] : '.');
184
+ buffreplace(ls, old, ls->decpoint); /* try updated decimal separator */
185
+ if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) {
186
+ /* format error with correct decimal point: no more options */
187
+ buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */
188
+ luaX_lexerror(ls, "malformed number", TK_NUMBER);
189
+ }
190
+ }
191
+
192
+
193
+ /* LUA_NUMBER */
194
+ static void read_numeral (LexState *ls, SemInfo *seminfo) {
195
+ lua_assert(isdigit(ls->current));
196
+ do {
197
+ save_and_next(ls);
198
+ } while (isdigit(ls->current) || ls->current == '.');
199
+ if (check_next(ls, "Ee")) /* `E'? */
200
+ check_next(ls, "+-"); /* optional exponent sign */
201
+ while (isalnum(ls->current) || ls->current == '_')
202
+ save_and_next(ls);
203
+ save(ls, '\0');
204
+ buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */
205
+ if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) /* format error? */
206
+ trydecpoint(ls, seminfo); /* try to update decimal point separator */
207
+ }
208
+
209
+
210
+ static int skip_sep (LexState *ls) {
211
+ int count = 0;
212
+ int s = ls->current;
213
+ lua_assert(s == '[' || s == ']');
214
+ save_and_next(ls);
215
+ while (ls->current == '=') {
216
+ save_and_next(ls);
217
+ count++;
218
+ }
219
+ return (ls->current == s) ? count : (-count) - 1;
220
+ }
221
+
222
+
223
+ static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
224
+ int cont = 0;
225
+ (void)(cont); /* avoid warnings when `cont' is not used */
226
+ save_and_next(ls); /* skip 2nd `[' */
227
+ if (currIsNewline(ls)) /* string starts with a newline? */
228
+ inclinenumber(ls); /* skip it */
229
+ for (;;) {
230
+ switch (ls->current) {
231
+ case EOZ:
232
+ luaX_lexerror(ls, (seminfo) ? "unfinished long string" :
233
+ "unfinished long comment", TK_EOS);
234
+ break; /* to avoid warnings */
235
+ #if defined(LUA_COMPAT_LSTR)
236
+ case '[': {
237
+ if (skip_sep(ls) == sep) {
238
+ save_and_next(ls); /* skip 2nd `[' */
239
+ cont++;
240
+ #if LUA_COMPAT_LSTR == 1
241
+ if (sep == 0)
242
+ luaX_lexerror(ls, "nesting of [[...]] is deprecated", '[');
243
+ #endif
244
+ }
245
+ break;
246
+ }
247
+ #endif
248
+ case ']': {
249
+ if (skip_sep(ls) == sep) {
250
+ save_and_next(ls); /* skip 2nd `]' */
251
+ #if defined(LUA_COMPAT_LSTR) && LUA_COMPAT_LSTR == 2
252
+ cont--;
253
+ if (sep == 0 && cont >= 0) break;
254
+ #endif
255
+ goto endloop;
256
+ }
257
+ break;
258
+ }
259
+ case '\n':
260
+ case '\r': {
261
+ save(ls, '\n');
262
+ inclinenumber(ls);
263
+ if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */
264
+ break;
265
+ }
266
+ default: {
267
+ if (seminfo) save_and_next(ls);
268
+ else next(ls);
269
+ }
270
+ }
271
+ } endloop:
272
+ if (seminfo)
273
+ seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep),
274
+ luaZ_bufflen(ls->buff) - 2*(2 + sep));
275
+ }
276
+
277
+
278
+ static void read_string (LexState *ls, int del, SemInfo *seminfo) {
279
+ save_and_next(ls);
280
+ while (ls->current != del) {
281
+ switch (ls->current) {
282
+ case EOZ:
283
+ luaX_lexerror(ls, "unfinished string", TK_EOS);
284
+ continue; /* to avoid warnings */
285
+ case '\n':
286
+ case '\r':
287
+ luaX_lexerror(ls, "unfinished string", TK_STRING);
288
+ continue; /* to avoid warnings */
289
+ case '\\': {
290
+ int c;
291
+ next(ls); /* do not save the `\' */
292
+ switch (ls->current) {
293
+ case 'a': c = '\a'; break;
294
+ case 'b': c = '\b'; break;
295
+ case 'f': c = '\f'; break;
296
+ case 'n': c = '\n'; break;
297
+ case 'r': c = '\r'; break;
298
+ case 't': c = '\t'; break;
299
+ case 'v': c = '\v'; break;
300
+ case '\n': /* go through */
301
+ case '\r': save(ls, '\n'); inclinenumber(ls); continue;
302
+ case EOZ: continue; /* will raise an error next loop */
303
+ default: {
304
+ if (!isdigit(ls->current))
305
+ save_and_next(ls); /* handles \\, \", \', and \? */
306
+ else { /* \xxx */
307
+ int i = 0;
308
+ c = 0;
309
+ do {
310
+ c = 10*c + (ls->current-'0');
311
+ next(ls);
312
+ } while (++i<3 && isdigit(ls->current));
313
+ if (c > UCHAR_MAX)
314
+ luaX_lexerror(ls, "escape sequence too large", TK_STRING);
315
+ save(ls, c);
316
+ }
317
+ continue;
318
+ }
319
+ }
320
+ save(ls, c);
321
+ next(ls);
322
+ continue;
323
+ }
324
+ default:
325
+ save_and_next(ls);
326
+ }
327
+ }
328
+ save_and_next(ls); /* skip delimiter */
329
+ seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1,
330
+ luaZ_bufflen(ls->buff) - 2);
331
+ }
332
+
333
+
334
+ static int llex (LexState *ls, SemInfo *seminfo) {
335
+ luaZ_resetbuffer(ls->buff);
336
+ for (;;) {
337
+ switch (ls->current) {
338
+ case '\n':
339
+ case '\r': {
340
+ inclinenumber(ls);
341
+ continue;
342
+ }
343
+ case '-': {
344
+ next(ls);
345
+ if (ls->current != '-') return '-';
346
+ /* else is a comment */
347
+ next(ls);
348
+ if (ls->current == '[') {
349
+ int sep = skip_sep(ls);
350
+ luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */
351
+ if (sep >= 0) {
352
+ read_long_string(ls, NULL, sep); /* long comment */
353
+ luaZ_resetbuffer(ls->buff);
354
+ continue;
355
+ }
356
+ }
357
+ /* else short comment */
358
+ while (!currIsNewline(ls) && ls->current != EOZ)
359
+ next(ls);
360
+ continue;
361
+ }
362
+ case '[': {
363
+ int sep = skip_sep(ls);
364
+ if (sep >= 0) {
365
+ read_long_string(ls, seminfo, sep);
366
+ return TK_STRING;
367
+ }
368
+ else if (sep == -1) return '[';
369
+ else luaX_lexerror(ls, "invalid long string delimiter", TK_STRING);
370
+ }
371
+ case '=': {
372
+ next(ls);
373
+ if (ls->current != '=') return '=';
374
+ else { next(ls); return TK_EQ; }
375
+ }
376
+ case '<': {
377
+ next(ls);
378
+ if (ls->current != '=') return '<';
379
+ else { next(ls); return TK_LE; }
380
+ }
381
+ case '>': {
382
+ next(ls);
383
+ if (ls->current != '=') return '>';
384
+ else { next(ls); return TK_GE; }
385
+ }
386
+ case '~': {
387
+ next(ls);
388
+ if (ls->current != '=') return '~';
389
+ else { next(ls); return TK_NE; }
390
+ }
391
+ case '"':
392
+ case '\'': {
393
+ read_string(ls, ls->current, seminfo);
394
+ return TK_STRING;
395
+ }
396
+ case '.': {
397
+ save_and_next(ls);
398
+ if (check_next(ls, ".")) {
399
+ if (check_next(ls, "."))
400
+ return TK_DOTS; /* ... */
401
+ else return TK_CONCAT; /* .. */
402
+ }
403
+ else if (!isdigit(ls->current)) return '.';
404
+ else {
405
+ read_numeral(ls, seminfo);
406
+ return TK_NUMBER;
407
+ }
408
+ }
409
+ case EOZ: {
410
+ return TK_EOS;
411
+ }
412
+ default: {
413
+ if (isspace(ls->current)) {
414
+ lua_assert(!currIsNewline(ls));
415
+ next(ls);
416
+ continue;
417
+ }
418
+ else if (isdigit(ls->current)) {
419
+ read_numeral(ls, seminfo);
420
+ return TK_NUMBER;
421
+ }
422
+ else if (isalpha(ls->current) || ls->current == '_') {
423
+ /* identifier or reserved word */
424
+ TString *ts;
425
+ do {
426
+ save_and_next(ls);
427
+ } while (isalnum(ls->current) || ls->current == '_');
428
+ ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
429
+ luaZ_bufflen(ls->buff));
430
+ if (ts->tsv.reserved > 0) /* reserved word? */
431
+ return ts->tsv.reserved - 1 + FIRST_RESERVED;
432
+ else {
433
+ seminfo->ts = ts;
434
+ return TK_NAME;
435
+ }
436
+ }
437
+ else {
438
+ int c = ls->current;
439
+ next(ls);
440
+ return c; /* single-char tokens (+ - / ...) */
441
+ }
442
+ }
443
+ }
444
+ }
445
+ }
446
+
447
+
448
+ void luaX_next (LexState *ls) {
449
+ ls->lastline = ls->linenumber;
450
+ if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */
451
+ ls->t = ls->lookahead; /* use this one */
452
+ ls->lookahead.token = TK_EOS; /* and discharge it */
453
+ }
454
+ else
455
+ ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */
456
+ }
457
+
458
+
459
+ void luaX_lookahead (LexState *ls) {
460
+ lua_assert(ls->lookahead.token == TK_EOS);
461
+ ls->lookahead.token = llex(ls, &ls->lookahead.seminfo);
462
+ }
463
+
@@ -0,0 +1,81 @@
1
+ /*
2
+ ** $Id: llex.h,v 1.58.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Lexical Analyzer
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+ #ifndef llex_h
8
+ #define llex_h
9
+
10
+ #include "lobject.h"
11
+ #include "lzio.h"
12
+
13
+
14
+ #define FIRST_RESERVED 257
15
+
16
+ /* maximum length of a reserved word */
17
+ #define TOKEN_LEN (sizeof("function")/sizeof(char))
18
+
19
+
20
+ /*
21
+ * WARNING: if you change the order of this enumeration,
22
+ * grep "ORDER RESERVED"
23
+ */
24
+ enum RESERVED {
25
+ /* terminal symbols denoted by reserved words */
26
+ TK_AND = FIRST_RESERVED, TK_BREAK,
27
+ TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION,
28
+ TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT,
29
+ TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE,
30
+ /* other terminal symbols */
31
+ TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER,
32
+ TK_NAME, TK_STRING, TK_EOS
33
+ };
34
+
35
+ /* number of reserved words */
36
+ #define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1))
37
+
38
+
39
+ /* array with token `names' */
40
+ LUAI_DATA const char *const luaX_tokens [];
41
+
42
+
43
+ typedef union {
44
+ lua_Number r;
45
+ TString *ts;
46
+ } SemInfo; /* semantics information */
47
+
48
+
49
+ typedef struct Token {
50
+ int token;
51
+ SemInfo seminfo;
52
+ } Token;
53
+
54
+
55
+ typedef struct LexState {
56
+ int current; /* current character (charint) */
57
+ int linenumber; /* input line counter */
58
+ int lastline; /* line of last token `consumed' */
59
+ Token t; /* current token */
60
+ Token lookahead; /* look ahead token */
61
+ struct FuncState *fs; /* `FuncState' is private to the parser */
62
+ struct lua_State *L;
63
+ ZIO *z; /* input stream */
64
+ Mbuffer *buff; /* buffer for tokens */
65
+ TString *source; /* current source name */
66
+ char decpoint; /* locale decimal point */
67
+ } LexState;
68
+
69
+
70
+ LUAI_FUNC void luaX_init (lua_State *L);
71
+ LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z,
72
+ TString *source);
73
+ LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l);
74
+ LUAI_FUNC void luaX_next (LexState *ls);
75
+ LUAI_FUNC void luaX_lookahead (LexState *ls);
76
+ LUAI_FUNC void luaX_lexerror (LexState *ls, const char *msg, int token);
77
+ LUAI_FUNC void luaX_syntaxerror (LexState *ls, const char *s);
78
+ LUAI_FUNC const char *luaX_token2str (LexState *ls, int token);
79
+
80
+
81
+ #endif
@@ -0,0 +1,128 @@
1
+ /*
2
+ ** $Id: llimits.h,v 1.69.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Limits, basic types, and some other `installation-dependent' definitions
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+ #ifndef llimits_h
8
+ #define llimits_h
9
+
10
+
11
+ #include <limits.h>
12
+ #include <stddef.h>
13
+
14
+
15
+ #include "lua.h"
16
+
17
+
18
+ typedef LUAI_UINT32 lu_int32;
19
+
20
+ typedef LUAI_UMEM lu_mem;
21
+
22
+ typedef LUAI_MEM l_mem;
23
+
24
+
25
+
26
+ /* chars used as small naturals (so that `char' is reserved for characters) */
27
+ typedef unsigned char lu_byte;
28
+
29
+
30
+ #define MAX_SIZET ((size_t)(~(size_t)0)-2)
31
+
32
+ #define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2)
33
+
34
+
35
+ #define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */
36
+
37
+ /*
38
+ ** conversion of pointer to integer
39
+ ** this is for hashing only; there is no problem if the integer
40
+ ** cannot hold the whole pointer value
41
+ */
42
+ #define IntPoint(p) ((unsigned int)(lu_mem)(p))
43
+
44
+
45
+
46
+ /* type to ensure maximum alignment */
47
+ typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;
48
+
49
+
50
+ /* result of a `usual argument conversion' over lua_Number */
51
+ typedef LUAI_UACNUMBER l_uacNumber;
52
+
53
+
54
+ /* internal assertions for in-house debugging */
55
+ #ifdef lua_assert
56
+
57
+ #define check_exp(c,e) (lua_assert(c), (e))
58
+ #define api_check(l,e) lua_assert(e)
59
+
60
+ #else
61
+
62
+ #define lua_assert(c) ((void)0)
63
+ #define check_exp(c,e) (e)
64
+ #define api_check luai_apicheck
65
+
66
+ #endif
67
+
68
+
69
+ #ifndef UNUSED
70
+ #define UNUSED(x) ((void)(x)) /* to avoid warnings */
71
+ #endif
72
+
73
+
74
+ #ifndef cast
75
+ #define cast(t, exp) ((t)(exp))
76
+ #endif
77
+
78
+ #define cast_byte(i) cast(lu_byte, (i))
79
+ #define cast_num(i) cast(lua_Number, (i))
80
+ #define cast_int(i) cast(int, (i))
81
+
82
+
83
+
84
+ /*
85
+ ** type for virtual-machine instructions
86
+ ** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h)
87
+ */
88
+ typedef lu_int32 Instruction;
89
+
90
+
91
+
92
+ /* maximum stack for a Lua function */
93
+ #define MAXSTACK 250
94
+
95
+
96
+
97
+ /* minimum size for the string table (must be power of 2) */
98
+ #ifndef MINSTRTABSIZE
99
+ #define MINSTRTABSIZE 32
100
+ #endif
101
+
102
+
103
+ /* minimum size for string buffer */
104
+ #ifndef LUA_MINBUFFER
105
+ #define LUA_MINBUFFER 32
106
+ #endif
107
+
108
+
109
+ #ifndef lua_lock
110
+ #define lua_lock(L) ((void) 0)
111
+ #define lua_unlock(L) ((void) 0)
112
+ #endif
113
+
114
+ #ifndef luai_threadyield
115
+ #define luai_threadyield(L) {lua_unlock(L); lua_lock(L);}
116
+ #endif
117
+
118
+
119
+ /*
120
+ ** macro to control inclusion of some hard tests on stack reallocation
121
+ */
122
+ #ifndef HARDSTACKTESTS
123
+ #define condhardstacktests(x) ((void)0)
124
+ #else
125
+ #define condhardstacktests(x) x
126
+ #endif
127
+
128
+ #endif