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,214 @@
1
+ /*
2
+ ** $Id: lobject.c,v 2.22.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Some generic functions over Lua objects
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+ #include <ctype.h>
8
+ #include <stdarg.h>
9
+ #include <stdio.h>
10
+ #include <stdlib.h>
11
+ #include <string.h>
12
+
13
+ #define lobject_c
14
+ #define LUA_CORE
15
+
16
+ #include "lua.h"
17
+
18
+ #include "ldo.h"
19
+ #include "lmem.h"
20
+ #include "lobject.h"
21
+ #include "lstate.h"
22
+ #include "lstring.h"
23
+ #include "lvm.h"
24
+
25
+
26
+
27
+ const TValue luaO_nilobject_ = {{NULL}, LUA_TNIL};
28
+
29
+
30
+ /*
31
+ ** converts an integer to a "floating point byte", represented as
32
+ ** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if
33
+ ** eeeee != 0 and (xxx) otherwise.
34
+ */
35
+ int luaO_int2fb (unsigned int x) {
36
+ int e = 0; /* expoent */
37
+ while (x >= 16) {
38
+ x = (x+1) >> 1;
39
+ e++;
40
+ }
41
+ if (x < 8) return x;
42
+ else return ((e+1) << 3) | (cast_int(x) - 8);
43
+ }
44
+
45
+
46
+ /* converts back */
47
+ int luaO_fb2int (int x) {
48
+ int e = (x >> 3) & 31;
49
+ if (e == 0) return x;
50
+ else return ((x & 7)+8) << (e - 1);
51
+ }
52
+
53
+
54
+ int luaO_log2 (unsigned int x) {
55
+ static const lu_byte log_2[256] = {
56
+ 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
57
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
58
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
59
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
60
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
61
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
62
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
63
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
64
+ };
65
+ int l = -1;
66
+ while (x >= 256) { l += 8; x >>= 8; }
67
+ return l + log_2[x];
68
+
69
+ }
70
+
71
+
72
+ int luaO_rawequalObj (const TValue *t1, const TValue *t2) {
73
+ if (ttype(t1) != ttype(t2)) return 0;
74
+ else switch (ttype(t1)) {
75
+ case LUA_TNIL:
76
+ return 1;
77
+ case LUA_TNUMBER:
78
+ return luai_numeq(nvalue(t1), nvalue(t2));
79
+ case LUA_TBOOLEAN:
80
+ return bvalue(t1) == bvalue(t2); /* boolean true must be 1 !! */
81
+ case LUA_TLIGHTUSERDATA:
82
+ return pvalue(t1) == pvalue(t2);
83
+ default:
84
+ lua_assert(iscollectable(t1));
85
+ return gcvalue(t1) == gcvalue(t2);
86
+ }
87
+ }
88
+
89
+
90
+ int luaO_str2d (const char *s, lua_Number *result) {
91
+ char *endptr;
92
+ *result = lua_str2number(s, &endptr);
93
+ if (endptr == s) return 0; /* conversion failed */
94
+ if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */
95
+ *result = cast_num(strtoul(s, &endptr, 16));
96
+ if (*endptr == '\0') return 1; /* most common case */
97
+ while (isspace(cast(unsigned char, *endptr))) endptr++;
98
+ if (*endptr != '\0') return 0; /* invalid trailing characters? */
99
+ return 1;
100
+ }
101
+
102
+
103
+
104
+ static void pushstr (lua_State *L, const char *str) {
105
+ setsvalue2s(L, L->top, luaS_new(L, str));
106
+ incr_top(L);
107
+ }
108
+
109
+
110
+ /* this function handles only `%d', `%c', %f, %p, and `%s' formats */
111
+ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
112
+ int n = 1;
113
+ pushstr(L, "");
114
+ for (;;) {
115
+ const char *e = strchr(fmt, '%');
116
+ if (e == NULL) break;
117
+ setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt));
118
+ incr_top(L);
119
+ switch (*(e+1)) {
120
+ case 's': {
121
+ const char *s = va_arg(argp, char *);
122
+ if (s == NULL) s = "(null)";
123
+ pushstr(L, s);
124
+ break;
125
+ }
126
+ case 'c': {
127
+ char buff[2];
128
+ buff[0] = cast(char, va_arg(argp, int));
129
+ buff[1] = '\0';
130
+ pushstr(L, buff);
131
+ break;
132
+ }
133
+ case 'd': {
134
+ setnvalue(L->top, cast_num(va_arg(argp, int)));
135
+ incr_top(L);
136
+ break;
137
+ }
138
+ case 'f': {
139
+ setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber)));
140
+ incr_top(L);
141
+ break;
142
+ }
143
+ case 'p': {
144
+ char buff[4*sizeof(void *) + 8]; /* should be enough space for a `%p' */
145
+ sprintf(buff, "%p", va_arg(argp, void *));
146
+ pushstr(L, buff);
147
+ break;
148
+ }
149
+ case '%': {
150
+ pushstr(L, "%");
151
+ break;
152
+ }
153
+ default: {
154
+ char buff[3];
155
+ buff[0] = '%';
156
+ buff[1] = *(e+1);
157
+ buff[2] = '\0';
158
+ pushstr(L, buff);
159
+ break;
160
+ }
161
+ }
162
+ n += 2;
163
+ fmt = e+2;
164
+ }
165
+ pushstr(L, fmt);
166
+ luaV_concat(L, n+1, cast_int(L->top - L->base) - 1);
167
+ L->top -= n;
168
+ return svalue(L->top - 1);
169
+ }
170
+
171
+
172
+ const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) {
173
+ const char *msg;
174
+ va_list argp;
175
+ va_start(argp, fmt);
176
+ msg = luaO_pushvfstring(L, fmt, argp);
177
+ va_end(argp);
178
+ return msg;
179
+ }
180
+
181
+
182
+ void luaO_chunkid (char *out, const char *source, size_t bufflen) {
183
+ if (*source == '=') {
184
+ strncpy(out, source+1, bufflen); /* remove first char */
185
+ out[bufflen-1] = '\0'; /* ensures null termination */
186
+ }
187
+ else { /* out = "source", or "...source" */
188
+ if (*source == '@') {
189
+ size_t l;
190
+ source++; /* skip the `@' */
191
+ bufflen -= sizeof(" '...' ");
192
+ l = strlen(source);
193
+ strcpy(out, "");
194
+ if (l > bufflen) {
195
+ source += (l-bufflen); /* get last part of file name */
196
+ strcat(out, "...");
197
+ }
198
+ strcat(out, source);
199
+ }
200
+ else { /* out = [string "string"] */
201
+ size_t len = strcspn(source, "\n\r"); /* stop at first newline */
202
+ bufflen -= sizeof(" [string \"...\"] ");
203
+ if (len > bufflen) len = bufflen;
204
+ strcpy(out, "[string \"");
205
+ if (source[len] != '\0') { /* must truncate? */
206
+ strncat(out, source, len);
207
+ strcat(out, "...");
208
+ }
209
+ else
210
+ strcat(out, source);
211
+ strcat(out, "\"]");
212
+ }
213
+ }
214
+ }
@@ -0,0 +1,381 @@
1
+ /*
2
+ ** $Id: lobject.h,v 2.20.1.2 2008/08/06 13:29:48 roberto Exp $
3
+ ** Type definitions for Lua objects
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+
8
+ #ifndef lobject_h
9
+ #define lobject_h
10
+
11
+
12
+ #include <stdarg.h>
13
+
14
+
15
+ #include "llimits.h"
16
+ #include "lua.h"
17
+
18
+
19
+ /* tags for values visible from Lua */
20
+ #define LAST_TAG LUA_TTHREAD
21
+
22
+ #define NUM_TAGS (LAST_TAG+1)
23
+
24
+
25
+ /*
26
+ ** Extra tags for non-values
27
+ */
28
+ #define LUA_TPROTO (LAST_TAG+1)
29
+ #define LUA_TUPVAL (LAST_TAG+2)
30
+ #define LUA_TDEADKEY (LAST_TAG+3)
31
+
32
+
33
+ /*
34
+ ** Union of all collectable objects
35
+ */
36
+ typedef union GCObject GCObject;
37
+
38
+
39
+ /*
40
+ ** Common Header for all collectable objects (in macro form, to be
41
+ ** included in other objects)
42
+ */
43
+ #define CommonHeader GCObject *next; lu_byte tt; lu_byte marked
44
+
45
+
46
+ /*
47
+ ** Common header in struct form
48
+ */
49
+ typedef struct GCheader {
50
+ CommonHeader;
51
+ } GCheader;
52
+
53
+
54
+
55
+
56
+ /*
57
+ ** Union of all Lua values
58
+ */
59
+ typedef union {
60
+ GCObject *gc;
61
+ void *p;
62
+ lua_Number n;
63
+ int b;
64
+ } Value;
65
+
66
+
67
+ /*
68
+ ** Tagged Values
69
+ */
70
+
71
+ #define TValuefields Value value; int tt
72
+
73
+ typedef struct lua_TValue {
74
+ TValuefields;
75
+ } TValue;
76
+
77
+
78
+ /* Macros to test type */
79
+ #define ttisnil(o) (ttype(o) == LUA_TNIL)
80
+ #define ttisnumber(o) (ttype(o) == LUA_TNUMBER)
81
+ #define ttisstring(o) (ttype(o) == LUA_TSTRING)
82
+ #define ttistable(o) (ttype(o) == LUA_TTABLE)
83
+ #define ttisfunction(o) (ttype(o) == LUA_TFUNCTION)
84
+ #define ttisboolean(o) (ttype(o) == LUA_TBOOLEAN)
85
+ #define ttisuserdata(o) (ttype(o) == LUA_TUSERDATA)
86
+ #define ttisthread(o) (ttype(o) == LUA_TTHREAD)
87
+ #define ttislightuserdata(o) (ttype(o) == LUA_TLIGHTUSERDATA)
88
+
89
+ /* Macros to access values */
90
+ #define ttype(o) ((o)->tt)
91
+ #define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc)
92
+ #define pvalue(o) check_exp(ttislightuserdata(o), (o)->value.p)
93
+ #define nvalue(o) check_exp(ttisnumber(o), (o)->value.n)
94
+ #define rawtsvalue(o) check_exp(ttisstring(o), &(o)->value.gc->ts)
95
+ #define tsvalue(o) (&rawtsvalue(o)->tsv)
96
+ #define rawuvalue(o) check_exp(ttisuserdata(o), &(o)->value.gc->u)
97
+ #define uvalue(o) (&rawuvalue(o)->uv)
98
+ #define clvalue(o) check_exp(ttisfunction(o), &(o)->value.gc->cl)
99
+ #define hvalue(o) check_exp(ttistable(o), &(o)->value.gc->h)
100
+ #define bvalue(o) check_exp(ttisboolean(o), (o)->value.b)
101
+ #define thvalue(o) check_exp(ttisthread(o), &(o)->value.gc->th)
102
+
103
+ #define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0))
104
+
105
+ /*
106
+ ** for internal debug only
107
+ */
108
+ #define checkconsistency(obj) \
109
+ lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt))
110
+
111
+ #define checkliveness(g,obj) \
112
+ lua_assert(!iscollectable(obj) || \
113
+ ((ttype(obj) == (obj)->value.gc->gch.tt) && !isdead(g, (obj)->value.gc)))
114
+
115
+
116
+ /* Macros to set values */
117
+ #define setnilvalue(obj) ((obj)->tt=LUA_TNIL)
118
+
119
+ #define setnvalue(obj,x) \
120
+ { TValue *i_o=(obj); i_o->value.n=(x); i_o->tt=LUA_TNUMBER; }
121
+
122
+ #define setpvalue(obj,x) \
123
+ { TValue *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; }
124
+
125
+ #define setbvalue(obj,x) \
126
+ { TValue *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; }
127
+
128
+ #define setsvalue(L,obj,x) \
129
+ { TValue *i_o=(obj); \
130
+ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TSTRING; \
131
+ checkliveness(G(L),i_o); }
132
+
133
+ #define setuvalue(L,obj,x) \
134
+ { TValue *i_o=(obj); \
135
+ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TUSERDATA; \
136
+ checkliveness(G(L),i_o); }
137
+
138
+ #define setthvalue(L,obj,x) \
139
+ { TValue *i_o=(obj); \
140
+ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTHREAD; \
141
+ checkliveness(G(L),i_o); }
142
+
143
+ #define setclvalue(L,obj,x) \
144
+ { TValue *i_o=(obj); \
145
+ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TFUNCTION; \
146
+ checkliveness(G(L),i_o); }
147
+
148
+ #define sethvalue(L,obj,x) \
149
+ { TValue *i_o=(obj); \
150
+ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTABLE; \
151
+ checkliveness(G(L),i_o); }
152
+
153
+ #define setptvalue(L,obj,x) \
154
+ { TValue *i_o=(obj); \
155
+ i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TPROTO; \
156
+ checkliveness(G(L),i_o); }
157
+
158
+
159
+
160
+
161
+ #define setobj(L,obj1,obj2) \
162
+ { const TValue *o2=(obj2); TValue *o1=(obj1); \
163
+ o1->value = o2->value; o1->tt=o2->tt; \
164
+ checkliveness(G(L),o1); }
165
+
166
+
167
+ /*
168
+ ** different types of sets, according to destination
169
+ */
170
+
171
+ /* from stack to (same) stack */
172
+ #define setobjs2s setobj
173
+ /* to stack (not from same stack) */
174
+ #define setobj2s setobj
175
+ #define setsvalue2s setsvalue
176
+ #define sethvalue2s sethvalue
177
+ #define setptvalue2s setptvalue
178
+ /* from table to same table */
179
+ #define setobjt2t setobj
180
+ /* to table */
181
+ #define setobj2t setobj
182
+ /* to new object */
183
+ #define setobj2n setobj
184
+ #define setsvalue2n setsvalue
185
+
186
+ #define setttype(obj, tt) (ttype(obj) = (tt))
187
+
188
+
189
+ #define iscollectable(o) (ttype(o) >= LUA_TSTRING)
190
+
191
+
192
+
193
+ typedef TValue *StkId; /* index to stack elements */
194
+
195
+
196
+ /*
197
+ ** String headers for string table
198
+ */
199
+ typedef union TString {
200
+ L_Umaxalign dummy; /* ensures maximum alignment for strings */
201
+ struct {
202
+ CommonHeader;
203
+ lu_byte reserved;
204
+ unsigned int hash;
205
+ size_t len;
206
+ } tsv;
207
+ } TString;
208
+
209
+
210
+ #define getstr(ts) cast(const char *, (ts) + 1)
211
+ #define svalue(o) getstr(rawtsvalue(o))
212
+
213
+
214
+
215
+ typedef union Udata {
216
+ L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */
217
+ struct {
218
+ CommonHeader;
219
+ struct Table *metatable;
220
+ struct Table *env;
221
+ size_t len;
222
+ } uv;
223
+ } Udata;
224
+
225
+
226
+
227
+
228
+ /*
229
+ ** Function Prototypes
230
+ */
231
+ typedef struct Proto {
232
+ CommonHeader;
233
+ TValue *k; /* constants used by the function */
234
+ Instruction *code;
235
+ struct Proto **p; /* functions defined inside the function */
236
+ int *lineinfo; /* map from opcodes to source lines */
237
+ struct LocVar *locvars; /* information about local variables */
238
+ TString **upvalues; /* upvalue names */
239
+ TString *source;
240
+ int sizeupvalues;
241
+ int sizek; /* size of `k' */
242
+ int sizecode;
243
+ int sizelineinfo;
244
+ int sizep; /* size of `p' */
245
+ int sizelocvars;
246
+ int linedefined;
247
+ int lastlinedefined;
248
+ GCObject *gclist;
249
+ lu_byte nups; /* number of upvalues */
250
+ lu_byte numparams;
251
+ lu_byte is_vararg;
252
+ lu_byte maxstacksize;
253
+ } Proto;
254
+
255
+
256
+ /* masks for new-style vararg */
257
+ #define VARARG_HASARG 1
258
+ #define VARARG_ISVARARG 2
259
+ #define VARARG_NEEDSARG 4
260
+
261
+
262
+ typedef struct LocVar {
263
+ TString *varname;
264
+ int startpc; /* first point where variable is active */
265
+ int endpc; /* first point where variable is dead */
266
+ } LocVar;
267
+
268
+
269
+
270
+ /*
271
+ ** Upvalues
272
+ */
273
+
274
+ typedef struct UpVal {
275
+ CommonHeader;
276
+ TValue *v; /* points to stack or to its own value */
277
+ union {
278
+ TValue value; /* the value (when closed) */
279
+ struct { /* double linked list (when open) */
280
+ struct UpVal *prev;
281
+ struct UpVal *next;
282
+ } l;
283
+ } u;
284
+ } UpVal;
285
+
286
+
287
+ /*
288
+ ** Closures
289
+ */
290
+
291
+ #define ClosureHeader \
292
+ CommonHeader; lu_byte isC; lu_byte nupvalues; GCObject *gclist; \
293
+ struct Table *env
294
+
295
+ typedef struct CClosure {
296
+ ClosureHeader;
297
+ lua_CFunction f;
298
+ TValue upvalue[1];
299
+ } CClosure;
300
+
301
+
302
+ typedef struct LClosure {
303
+ ClosureHeader;
304
+ struct Proto *p;
305
+ UpVal *upvals[1];
306
+ } LClosure;
307
+
308
+
309
+ typedef union Closure {
310
+ CClosure c;
311
+ LClosure l;
312
+ } Closure;
313
+
314
+
315
+ #define iscfunction(o) (ttype(o) == LUA_TFUNCTION && clvalue(o)->c.isC)
316
+ #define isLfunction(o) (ttype(o) == LUA_TFUNCTION && !clvalue(o)->c.isC)
317
+
318
+
319
+ /*
320
+ ** Tables
321
+ */
322
+
323
+ typedef union TKey {
324
+ struct {
325
+ TValuefields;
326
+ struct Node *next; /* for chaining */
327
+ } nk;
328
+ TValue tvk;
329
+ } TKey;
330
+
331
+
332
+ typedef struct Node {
333
+ TValue i_val;
334
+ TKey i_key;
335
+ } Node;
336
+
337
+
338
+ typedef struct Table {
339
+ CommonHeader;
340
+ lu_byte flags; /* 1<<p means tagmethod(p) is not present */
341
+ lu_byte lsizenode; /* log2 of size of `node' array */
342
+ struct Table *metatable;
343
+ TValue *array; /* array part */
344
+ Node *node;
345
+ Node *lastfree; /* any free position is before this position */
346
+ GCObject *gclist;
347
+ int sizearray; /* size of `array' array */
348
+ } Table;
349
+
350
+
351
+
352
+ /*
353
+ ** `module' operation for hashing (size is always a power of 2)
354
+ */
355
+ #define lmod(s,size) \
356
+ (check_exp((size&(size-1))==0, (cast(int, (s) & ((size)-1)))))
357
+
358
+
359
+ #define twoto(x) (1<<(x))
360
+ #define sizenode(t) (twoto((t)->lsizenode))
361
+
362
+
363
+ #define luaO_nilobject (&luaO_nilobject_)
364
+
365
+ LUAI_DATA const TValue luaO_nilobject_;
366
+
367
+ #define ceillog2(x) (luaO_log2((x)-1) + 1)
368
+
369
+ LUAI_FUNC int luaO_log2 (unsigned int x);
370
+ LUAI_FUNC int luaO_int2fb (unsigned int x);
371
+ LUAI_FUNC int luaO_fb2int (int x);
372
+ LUAI_FUNC int luaO_rawequalObj (const TValue *t1, const TValue *t2);
373
+ LUAI_FUNC int luaO_str2d (const char *s, lua_Number *result);
374
+ LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt,
375
+ va_list argp);
376
+ LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...);
377
+ LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len);
378
+
379
+
380
+ #endif
381
+
@@ -0,0 +1,102 @@
1
+ /*
2
+ ** $Id: lopcodes.c,v 1.37.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** See Copyright Notice in lua.h
4
+ */
5
+
6
+
7
+ #define lopcodes_c
8
+ #define LUA_CORE
9
+
10
+
11
+ #include "lopcodes.h"
12
+
13
+
14
+ /* ORDER OP */
15
+
16
+ const char *const luaP_opnames[NUM_OPCODES+1] = {
17
+ "MOVE",
18
+ "LOADK",
19
+ "LOADBOOL",
20
+ "LOADNIL",
21
+ "GETUPVAL",
22
+ "GETGLOBAL",
23
+ "GETTABLE",
24
+ "SETGLOBAL",
25
+ "SETUPVAL",
26
+ "SETTABLE",
27
+ "NEWTABLE",
28
+ "SELF",
29
+ "ADD",
30
+ "SUB",
31
+ "MUL",
32
+ "DIV",
33
+ "MOD",
34
+ "POW",
35
+ "UNM",
36
+ "NOT",
37
+ "LEN",
38
+ "CONCAT",
39
+ "JMP",
40
+ "EQ",
41
+ "LT",
42
+ "LE",
43
+ "TEST",
44
+ "TESTSET",
45
+ "CALL",
46
+ "TAILCALL",
47
+ "RETURN",
48
+ "FORLOOP",
49
+ "FORPREP",
50
+ "TFORLOOP",
51
+ "SETLIST",
52
+ "CLOSE",
53
+ "CLOSURE",
54
+ "VARARG",
55
+ NULL
56
+ };
57
+
58
+
59
+ #define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m))
60
+
61
+ const lu_byte luaP_opmodes[NUM_OPCODES] = {
62
+ /* T A B C mode opcode */
63
+ opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */
64
+ ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */
65
+ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */
66
+ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LOADNIL */
67
+ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */
68
+ ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_GETGLOBAL */
69
+ ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */
70
+ ,opmode(0, 0, OpArgK, OpArgN, iABx) /* OP_SETGLOBAL */
71
+ ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */
72
+ ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */
73
+ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */
74
+ ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */
75
+ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */
76
+ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */
77
+ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */
78
+ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */
79
+ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */
80
+ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */
81
+ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */
82
+ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */
83
+ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */
84
+ ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */
85
+ ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */
86
+ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */
87
+ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */
88
+ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */
89
+ ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TEST */
90
+ ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */
91
+ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */
92
+ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */
93
+ ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */
94
+ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */
95
+ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */
96
+ ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TFORLOOP */
97
+ ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */
98
+ ,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */
99
+ ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */
100
+ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */
101
+ };
102
+