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,287 @@
1
+ /*
2
+ ** $Id: ltablib.c,v 1.38.1.3 2008/02/14 16:46:58 roberto Exp $
3
+ ** Library for Table Manipulation
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+
8
+ #include <stddef.h>
9
+
10
+ #define ltablib_c
11
+ #define LUA_LIB
12
+
13
+ #include "lua.h"
14
+
15
+ #include "lauxlib.h"
16
+ #include "lualib.h"
17
+
18
+
19
+ #define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n))
20
+
21
+
22
+ static int foreachi (lua_State *L) {
23
+ int i;
24
+ int n = aux_getn(L, 1);
25
+ luaL_checktype(L, 2, LUA_TFUNCTION);
26
+ for (i=1; i <= n; i++) {
27
+ lua_pushvalue(L, 2); /* function */
28
+ lua_pushinteger(L, i); /* 1st argument */
29
+ lua_rawgeti(L, 1, i); /* 2nd argument */
30
+ lua_call(L, 2, 1);
31
+ if (!lua_isnil(L, -1))
32
+ return 1;
33
+ lua_pop(L, 1); /* remove nil result */
34
+ }
35
+ return 0;
36
+ }
37
+
38
+
39
+ static int foreach (lua_State *L) {
40
+ luaL_checktype(L, 1, LUA_TTABLE);
41
+ luaL_checktype(L, 2, LUA_TFUNCTION);
42
+ lua_pushnil(L); /* first key */
43
+ while (lua_next(L, 1)) {
44
+ lua_pushvalue(L, 2); /* function */
45
+ lua_pushvalue(L, -3); /* key */
46
+ lua_pushvalue(L, -3); /* value */
47
+ lua_call(L, 2, 1);
48
+ if (!lua_isnil(L, -1))
49
+ return 1;
50
+ lua_pop(L, 2); /* remove value and result */
51
+ }
52
+ return 0;
53
+ }
54
+
55
+
56
+ static int maxn (lua_State *L) {
57
+ lua_Number max = 0;
58
+ luaL_checktype(L, 1, LUA_TTABLE);
59
+ lua_pushnil(L); /* first key */
60
+ while (lua_next(L, 1)) {
61
+ lua_pop(L, 1); /* remove value */
62
+ if (lua_type(L, -1) == LUA_TNUMBER) {
63
+ lua_Number v = lua_tonumber(L, -1);
64
+ if (v > max) max = v;
65
+ }
66
+ }
67
+ lua_pushnumber(L, max);
68
+ return 1;
69
+ }
70
+
71
+
72
+ static int getn (lua_State *L) {
73
+ lua_pushinteger(L, aux_getn(L, 1));
74
+ return 1;
75
+ }
76
+
77
+
78
+ static int setn (lua_State *L) {
79
+ luaL_checktype(L, 1, LUA_TTABLE);
80
+ #ifndef luaL_setn
81
+ luaL_setn(L, 1, luaL_checkint(L, 2));
82
+ #else
83
+ luaL_error(L, LUA_QL("setn") " is obsolete");
84
+ #endif
85
+ lua_pushvalue(L, 1);
86
+ return 1;
87
+ }
88
+
89
+
90
+ static int tinsert (lua_State *L) {
91
+ int e = aux_getn(L, 1) + 1; /* first empty element */
92
+ int pos; /* where to insert new element */
93
+ switch (lua_gettop(L)) {
94
+ case 2: { /* called with only 2 arguments */
95
+ pos = e; /* insert new element at the end */
96
+ break;
97
+ }
98
+ case 3: {
99
+ int i;
100
+ pos = luaL_checkint(L, 2); /* 2nd argument is the position */
101
+ if (pos > e) e = pos; /* `grow' array if necessary */
102
+ for (i = e; i > pos; i--) { /* move up elements */
103
+ lua_rawgeti(L, 1, i-1);
104
+ lua_rawseti(L, 1, i); /* t[i] = t[i-1] */
105
+ }
106
+ break;
107
+ }
108
+ default: {
109
+ return luaL_error(L, "wrong number of arguments to " LUA_QL("insert"));
110
+ }
111
+ }
112
+ luaL_setn(L, 1, e); /* new size */
113
+ lua_rawseti(L, 1, pos); /* t[pos] = v */
114
+ return 0;
115
+ }
116
+
117
+
118
+ static int tremove (lua_State *L) {
119
+ int e = aux_getn(L, 1);
120
+ int pos = luaL_optint(L, 2, e);
121
+ if (!(1 <= pos && pos <= e)) /* position is outside bounds? */
122
+ return 0; /* nothing to remove */
123
+ luaL_setn(L, 1, e - 1); /* t.n = n-1 */
124
+ lua_rawgeti(L, 1, pos); /* result = t[pos] */
125
+ for ( ;pos<e; pos++) {
126
+ lua_rawgeti(L, 1, pos+1);
127
+ lua_rawseti(L, 1, pos); /* t[pos] = t[pos+1] */
128
+ }
129
+ lua_pushnil(L);
130
+ lua_rawseti(L, 1, e); /* t[e] = nil */
131
+ return 1;
132
+ }
133
+
134
+
135
+ static void addfield (lua_State *L, luaL_Buffer *b, int i) {
136
+ lua_rawgeti(L, 1, i);
137
+ if (!lua_isstring(L, -1))
138
+ luaL_error(L, "invalid value (%s) at index %d in table for "
139
+ LUA_QL("concat"), luaL_typename(L, -1), i);
140
+ luaL_addvalue(b);
141
+ }
142
+
143
+
144
+ static int tconcat (lua_State *L) {
145
+ luaL_Buffer b;
146
+ size_t lsep;
147
+ int i, last;
148
+ const char *sep = luaL_optlstring(L, 2, "", &lsep);
149
+ luaL_checktype(L, 1, LUA_TTABLE);
150
+ i = luaL_optint(L, 3, 1);
151
+ last = luaL_opt(L, luaL_checkint, 4, luaL_getn(L, 1));
152
+ luaL_buffinit(L, &b);
153
+ for (; i < last; i++) {
154
+ addfield(L, &b, i);
155
+ luaL_addlstring(&b, sep, lsep);
156
+ }
157
+ if (i == last) /* add last value (if interval was not empty) */
158
+ addfield(L, &b, i);
159
+ luaL_pushresult(&b);
160
+ return 1;
161
+ }
162
+
163
+
164
+
165
+ /*
166
+ ** {======================================================
167
+ ** Quicksort
168
+ ** (based on `Algorithms in MODULA-3', Robert Sedgewick;
169
+ ** Addison-Wesley, 1993.)
170
+ */
171
+
172
+
173
+ static void set2 (lua_State *L, int i, int j) {
174
+ lua_rawseti(L, 1, i);
175
+ lua_rawseti(L, 1, j);
176
+ }
177
+
178
+ static int sort_comp (lua_State *L, int a, int b) {
179
+ if (!lua_isnil(L, 2)) { /* function? */
180
+ int res;
181
+ lua_pushvalue(L, 2);
182
+ lua_pushvalue(L, a-1); /* -1 to compensate function */
183
+ lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */
184
+ lua_call(L, 2, 1);
185
+ res = lua_toboolean(L, -1);
186
+ lua_pop(L, 1);
187
+ return res;
188
+ }
189
+ else /* a < b? */
190
+ return lua_lessthan(L, a, b);
191
+ }
192
+
193
+ static void auxsort (lua_State *L, int l, int u) {
194
+ while (l < u) { /* for tail recursion */
195
+ int i, j;
196
+ /* sort elements a[l], a[(l+u)/2] and a[u] */
197
+ lua_rawgeti(L, 1, l);
198
+ lua_rawgeti(L, 1, u);
199
+ if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */
200
+ set2(L, l, u); /* swap a[l] - a[u] */
201
+ else
202
+ lua_pop(L, 2);
203
+ if (u-l == 1) break; /* only 2 elements */
204
+ i = (l+u)/2;
205
+ lua_rawgeti(L, 1, i);
206
+ lua_rawgeti(L, 1, l);
207
+ if (sort_comp(L, -2, -1)) /* a[i]<a[l]? */
208
+ set2(L, i, l);
209
+ else {
210
+ lua_pop(L, 1); /* remove a[l] */
211
+ lua_rawgeti(L, 1, u);
212
+ if (sort_comp(L, -1, -2)) /* a[u]<a[i]? */
213
+ set2(L, i, u);
214
+ else
215
+ lua_pop(L, 2);
216
+ }
217
+ if (u-l == 2) break; /* only 3 elements */
218
+ lua_rawgeti(L, 1, i); /* Pivot */
219
+ lua_pushvalue(L, -1);
220
+ lua_rawgeti(L, 1, u-1);
221
+ set2(L, i, u-1);
222
+ /* a[l] <= P == a[u-1] <= a[u], only need to sort from l+1 to u-2 */
223
+ i = l; j = u-1;
224
+ for (;;) { /* invariant: a[l..i] <= P <= a[j..u] */
225
+ /* repeat ++i until a[i] >= P */
226
+ while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) {
227
+ if (i>u) luaL_error(L, "invalid order function for sorting");
228
+ lua_pop(L, 1); /* remove a[i] */
229
+ }
230
+ /* repeat --j until a[j] <= P */
231
+ while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) {
232
+ if (j<l) luaL_error(L, "invalid order function for sorting");
233
+ lua_pop(L, 1); /* remove a[j] */
234
+ }
235
+ if (j<i) {
236
+ lua_pop(L, 3); /* pop pivot, a[i], a[j] */
237
+ break;
238
+ }
239
+ set2(L, i, j);
240
+ }
241
+ lua_rawgeti(L, 1, u-1);
242
+ lua_rawgeti(L, 1, i);
243
+ set2(L, u-1, i); /* swap pivot (a[u-1]) with a[i] */
244
+ /* a[l..i-1] <= a[i] == P <= a[i+1..u] */
245
+ /* adjust so that smaller half is in [j..i] and larger one in [l..u] */
246
+ if (i-l < u-i) {
247
+ j=l; i=i-1; l=i+2;
248
+ }
249
+ else {
250
+ j=i+1; i=u; u=j-2;
251
+ }
252
+ auxsort(L, j, i); /* call recursively the smaller one */
253
+ } /* repeat the routine for the larger one */
254
+ }
255
+
256
+ static int sort (lua_State *L) {
257
+ int n = aux_getn(L, 1);
258
+ luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */
259
+ if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */
260
+ luaL_checktype(L, 2, LUA_TFUNCTION);
261
+ lua_settop(L, 2); /* make sure there is two arguments */
262
+ auxsort(L, 1, n);
263
+ return 0;
264
+ }
265
+
266
+ /* }====================================================== */
267
+
268
+
269
+ static const luaL_Reg tab_funcs[] = {
270
+ {"concat", tconcat},
271
+ {"foreach", foreach},
272
+ {"foreachi", foreachi},
273
+ {"getn", getn},
274
+ {"maxn", maxn},
275
+ {"insert", tinsert},
276
+ {"remove", tremove},
277
+ {"setn", setn},
278
+ {"sort", sort},
279
+ {NULL, NULL}
280
+ };
281
+
282
+
283
+ LUALIB_API int luaopen_table (lua_State *L) {
284
+ luaL_register(L, LUA_TABLIBNAME, tab_funcs);
285
+ return 1;
286
+ }
287
+
data/src/lua/src/ltm.c ADDED
@@ -0,0 +1,75 @@
1
+ /*
2
+ ** $Id: ltm.c,v 2.8.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Tag methods
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+
8
+ #include <string.h>
9
+
10
+ #define ltm_c
11
+ #define LUA_CORE
12
+
13
+ #include "lua.h"
14
+
15
+ #include "lobject.h"
16
+ #include "lstate.h"
17
+ #include "lstring.h"
18
+ #include "ltable.h"
19
+ #include "ltm.h"
20
+
21
+
22
+
23
+ const char *const luaT_typenames[] = {
24
+ "nil", "boolean", "userdata", "number",
25
+ "string", "table", "function", "userdata", "thread",
26
+ "proto", "upval"
27
+ };
28
+
29
+
30
+ void luaT_init (lua_State *L) {
31
+ static const char *const luaT_eventname[] = { /* ORDER TM */
32
+ "__index", "__newindex",
33
+ "__gc", "__mode", "__eq",
34
+ "__add", "__sub", "__mul", "__div", "__mod",
35
+ "__pow", "__unm", "__len", "__lt", "__le",
36
+ "__concat", "__call"
37
+ };
38
+ int i;
39
+ for (i=0; i<TM_N; i++) {
40
+ G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
41
+ luaS_fix(G(L)->tmname[i]); /* never collect these names */
42
+ }
43
+ }
44
+
45
+
46
+ /*
47
+ ** function to be used with macro "fasttm": optimized for absence of
48
+ ** tag methods
49
+ */
50
+ const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
51
+ const TValue *tm = luaH_getstr(events, ename);
52
+ lua_assert(event <= TM_EQ);
53
+ if (ttisnil(tm)) { /* no tag method? */
54
+ events->flags |= cast_byte(1u<<event); /* cache this fact */
55
+ return NULL;
56
+ }
57
+ else return tm;
58
+ }
59
+
60
+
61
+ const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
62
+ Table *mt;
63
+ switch (ttype(o)) {
64
+ case LUA_TTABLE:
65
+ mt = hvalue(o)->metatable;
66
+ break;
67
+ case LUA_TUSERDATA:
68
+ mt = uvalue(o)->metatable;
69
+ break;
70
+ default:
71
+ mt = G(L)->mt[ttype(o)];
72
+ }
73
+ return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject);
74
+ }
75
+
data/src/lua/src/ltm.h ADDED
@@ -0,0 +1,54 @@
1
+ /*
2
+ ** $Id: ltm.h,v 2.6.1.1 2007/12/27 13:02:25 roberto Exp $
3
+ ** Tag methods
4
+ ** See Copyright Notice in lua.h
5
+ */
6
+
7
+ #ifndef ltm_h
8
+ #define ltm_h
9
+
10
+
11
+ #include "lobject.h"
12
+
13
+
14
+ /*
15
+ * WARNING: if you change the order of this enumeration,
16
+ * grep "ORDER TM"
17
+ */
18
+ typedef enum {
19
+ TM_INDEX,
20
+ TM_NEWINDEX,
21
+ TM_GC,
22
+ TM_MODE,
23
+ TM_EQ, /* last tag method with `fast' access */
24
+ TM_ADD,
25
+ TM_SUB,
26
+ TM_MUL,
27
+ TM_DIV,
28
+ TM_MOD,
29
+ TM_POW,
30
+ TM_UNM,
31
+ TM_LEN,
32
+ TM_LT,
33
+ TM_LE,
34
+ TM_CONCAT,
35
+ TM_CALL,
36
+ TM_N /* number of elements in the enum */
37
+ } TMS;
38
+
39
+
40
+
41
+ #define gfasttm(g,et,e) ((et) == NULL ? NULL : \
42
+ ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e]))
43
+
44
+ #define fasttm(l,et,e) gfasttm(G(l), et, e)
45
+
46
+ LUAI_DATA const char *const luaT_typenames[];
47
+
48
+
49
+ LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename);
50
+ LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o,
51
+ TMS event);
52
+ LUAI_FUNC void luaT_init (lua_State *L);
53
+
54
+ #endif