dub 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. data/.gitignore +8 -0
  2. data/History.txt +5 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +53 -0
  5. data/Rakefile +58 -0
  6. data/dub.gemspec +194 -0
  7. data/lib/dub/argument.rb +261 -0
  8. data/lib/dub/entities_unescape.rb +16 -0
  9. data/lib/dub/function.rb +111 -0
  10. data/lib/dub/function_group.rb +74 -0
  11. data/lib/dub/generator.rb +15 -0
  12. data/lib/dub/group.rb +10 -0
  13. data/lib/dub/klass.rb +231 -0
  14. data/lib/dub/lua/class.cpp.erb +75 -0
  15. data/lib/dub/lua/class_gen.rb +78 -0
  16. data/lib/dub/lua/function.cpp.erb +4 -0
  17. data/lib/dub/lua/function_gen.rb +223 -0
  18. data/lib/dub/lua/group.cpp.erb +10 -0
  19. data/lib/dub/lua/lua_cpp_helper.h +141 -0
  20. data/lib/dub/lua/namespace.cpp.erb +35 -0
  21. data/lib/dub/lua/namespace_gen.rb +86 -0
  22. data/lib/dub/lua.rb +24 -0
  23. data/lib/dub/member_extraction.rb +88 -0
  24. data/lib/dub/namespace.rb +276 -0
  25. data/lib/dub/parser.rb +46 -0
  26. data/lib/dub/templates/lua_template.erb +21 -0
  27. data/lib/dub/version.rb +3 -0
  28. data/lib/dub.rb +26 -0
  29. data/test/argument_test.rb +423 -0
  30. data/test/fixtures/app/CMakeLists.txt +54 -0
  31. data/test/fixtures/app/Doxyfile +1600 -0
  32. data/test/fixtures/app/bindings/all_lua.cpp +299 -0
  33. data/test/fixtures/app/include/matrix.h +123 -0
  34. data/test/fixtures/app/make_lua_bindings.rb +13 -0
  35. data/test/fixtures/app/vendor/lua/CMakeLists.txt +25 -0
  36. data/test/fixtures/app/vendor/lua/COPYRIGHT +34 -0
  37. data/test/fixtures/app/vendor/lua/HISTORY +183 -0
  38. data/test/fixtures/app/vendor/lua/INSTALL +99 -0
  39. data/test/fixtures/app/vendor/lua/Makefile +183 -0
  40. data/test/fixtures/app/vendor/lua/README +37 -0
  41. data/test/fixtures/app/vendor/lua/lapi.c +1080 -0
  42. data/test/fixtures/app/vendor/lua/lapi.h +16 -0
  43. data/test/fixtures/app/vendor/lua/lauxlib.c +653 -0
  44. data/test/fixtures/app/vendor/lua/lauxlib.h +174 -0
  45. data/test/fixtures/app/vendor/lua/lbaselib.c +643 -0
  46. data/test/fixtures/app/vendor/lua/lcode.c +839 -0
  47. data/test/fixtures/app/vendor/lua/lcode.h +76 -0
  48. data/test/fixtures/app/vendor/lua/ldblib.c +397 -0
  49. data/test/fixtures/app/vendor/lua/ldebug.c +622 -0
  50. data/test/fixtures/app/vendor/lua/ldebug.h +33 -0
  51. data/test/fixtures/app/vendor/lua/ldo.c +516 -0
  52. data/test/fixtures/app/vendor/lua/ldo.h +57 -0
  53. data/test/fixtures/app/vendor/lua/ldump.c +164 -0
  54. data/test/fixtures/app/vendor/lua/lfunc.c +174 -0
  55. data/test/fixtures/app/vendor/lua/lfunc.h +34 -0
  56. data/test/fixtures/app/vendor/lua/lgc.c +711 -0
  57. data/test/fixtures/app/vendor/lua/lgc.h +110 -0
  58. data/test/fixtures/app/vendor/lua/liblua.a +0 -0
  59. data/test/fixtures/app/vendor/lua/linit.c +38 -0
  60. data/test/fixtures/app/vendor/lua/liolib.c +532 -0
  61. data/test/fixtures/app/vendor/lua/llex.c +461 -0
  62. data/test/fixtures/app/vendor/lua/llex.h +81 -0
  63. data/test/fixtures/app/vendor/lua/llimits.h +128 -0
  64. data/test/fixtures/app/vendor/lua/lmathlib.c +263 -0
  65. data/test/fixtures/app/vendor/lua/lmem.c +86 -0
  66. data/test/fixtures/app/vendor/lua/lmem.h +49 -0
  67. data/test/fixtures/app/vendor/lua/loadlib.c +664 -0
  68. data/test/fixtures/app/vendor/lua/lobject.c +214 -0
  69. data/test/fixtures/app/vendor/lua/lobject.h +381 -0
  70. data/test/fixtures/app/vendor/lua/lopcodes.c +102 -0
  71. data/test/fixtures/app/vendor/lua/lopcodes.h +268 -0
  72. data/test/fixtures/app/vendor/lua/loslib.c +244 -0
  73. data/test/fixtures/app/vendor/lua/lparser.c +1337 -0
  74. data/test/fixtures/app/vendor/lua/lparser.h +82 -0
  75. data/test/fixtures/app/vendor/lua/lstate.c +214 -0
  76. data/test/fixtures/app/vendor/lua/lstate.h +168 -0
  77. data/test/fixtures/app/vendor/lua/lstring.c +111 -0
  78. data/test/fixtures/app/vendor/lua/lstring.h +31 -0
  79. data/test/fixtures/app/vendor/lua/lstrlib.c +868 -0
  80. data/test/fixtures/app/vendor/lua/ltable.c +588 -0
  81. data/test/fixtures/app/vendor/lua/ltable.h +40 -0
  82. data/test/fixtures/app/vendor/lua/ltablib.c +278 -0
  83. data/test/fixtures/app/vendor/lua/ltm.c +75 -0
  84. data/test/fixtures/app/vendor/lua/ltm.h +54 -0
  85. data/test/fixtures/app/vendor/lua/lua.c +695 -0
  86. data/test/fixtures/app/vendor/lua/lua.h +385 -0
  87. data/test/fixtures/app/vendor/lua/lua_dub_helper.h +77 -0
  88. data/test/fixtures/app/vendor/lua/luac +0 -0
  89. data/test/fixtures/app/vendor/lua/luac.c +200 -0
  90. data/test/fixtures/app/vendor/lua/luaconf.h +762 -0
  91. data/test/fixtures/app/vendor/lua/lualib.h +53 -0
  92. data/test/fixtures/app/vendor/lua/lundump.c +223 -0
  93. data/test/fixtures/app/vendor/lua/lundump.h +36 -0
  94. data/test/fixtures/app/vendor/lua/lvm.c +765 -0
  95. data/test/fixtures/app/vendor/lua/lvm.h +36 -0
  96. data/test/fixtures/app/vendor/lua/lzio.c +82 -0
  97. data/test/fixtures/app/vendor/lua/lzio.h +67 -0
  98. data/test/fixtures/app/vendor/lua/matrix.h +102 -0
  99. data/test/fixtures/app/vendor/lua/print.c +227 -0
  100. data/test/fixtures/app/vendor/lua/test/README +26 -0
  101. data/test/fixtures/app/vendor/lua/test/bisect.lua +27 -0
  102. data/test/fixtures/app/vendor/lua/test/cf.lua +16 -0
  103. data/test/fixtures/app/vendor/lua/test/echo.lua +5 -0
  104. data/test/fixtures/app/vendor/lua/test/env.lua +7 -0
  105. data/test/fixtures/app/vendor/lua/test/factorial.lua +32 -0
  106. data/test/fixtures/app/vendor/lua/test/fib.lua +40 -0
  107. data/test/fixtures/app/vendor/lua/test/fibfor.lua +13 -0
  108. data/test/fixtures/app/vendor/lua/test/globals.lua +13 -0
  109. data/test/fixtures/app/vendor/lua/test/hello.lua +3 -0
  110. data/test/fixtures/app/vendor/lua/test/life.lua +111 -0
  111. data/test/fixtures/app/vendor/lua/test/luac.lua +7 -0
  112. data/test/fixtures/app/vendor/lua/test/printf.lua +7 -0
  113. data/test/fixtures/app/vendor/lua/test/readonly.lua +12 -0
  114. data/test/fixtures/app/vendor/lua/test/sieve.lua +29 -0
  115. data/test/fixtures/app/vendor/lua/test/sort.lua +66 -0
  116. data/test/fixtures/app/vendor/lua/test/table.lua +12 -0
  117. data/test/fixtures/app/vendor/lua/test/trace-calls.lua +32 -0
  118. data/test/fixtures/app/vendor/lua/test/trace-globals.lua +38 -0
  119. data/test/fixtures/app/vendor/lua/test/xd.lua +14 -0
  120. data/test/fixtures/app/xml/classdub_1_1_matrix.xml +239 -0
  121. data/test/fixtures/app/xml/classdub_1_1_t_mat.xml +233 -0
  122. data/test/fixtures/app/xml/combine.xslt +15 -0
  123. data/test/fixtures/app/xml/compound.xsd +814 -0
  124. data/test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml +12 -0
  125. data/test/fixtures/app/xml/index.xml +42 -0
  126. data/test/fixtures/app/xml/index.xsd +66 -0
  127. data/test/fixtures/app/xml/matrix_8h.xml +149 -0
  128. data/test/fixtures/app/xml/namespacedub.xml +41 -0
  129. data/test/fixtures/classcv_1_1_mat.xml +1996 -0
  130. data/test/fixtures/classcv_1_1_point__.xml +341 -0
  131. data/test/fixtures/classcv_1_1_size__.xml +270 -0
  132. data/test/fixtures/group___magic_type.xml +406 -0
  133. data/test/fixtures/namespacecv.xml +12659 -0
  134. data/test/function_group_test.rb +15 -0
  135. data/test/function_test.rb +252 -0
  136. data/test/group_test.rb +155 -0
  137. data/test/helper.rb +34 -0
  138. data/test/klass_test.rb +297 -0
  139. data/test/lua_function_gen_test.rb +179 -0
  140. data/test/namespace_test.rb +220 -0
  141. data/test/parser_test.rb +36 -0
  142. metadata +216 -0
@@ -0,0 +1,278 @@
1
+ /*
2
+ ** $Id: ltablib.c,v 1.38 2005/10/23 17:38:15 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 (e == 0) return 0; /* table is `empty' */
122
+ luaL_setn(L, 1, e - 1); /* t.n = n-1 */
123
+ lua_rawgeti(L, 1, pos); /* result = t[pos] */
124
+ for ( ;pos<e; pos++) {
125
+ lua_rawgeti(L, 1, pos+1);
126
+ lua_rawseti(L, 1, pos); /* t[pos] = t[pos+1] */
127
+ }
128
+ lua_pushnil(L);
129
+ lua_rawseti(L, 1, e); /* t[e] = nil */
130
+ return 1;
131
+ }
132
+
133
+
134
+ static int tconcat (lua_State *L) {
135
+ luaL_Buffer b;
136
+ size_t lsep;
137
+ int i, last;
138
+ const char *sep = luaL_optlstring(L, 2, "", &lsep);
139
+ luaL_checktype(L, 1, LUA_TTABLE);
140
+ i = luaL_optint(L, 3, 1);
141
+ last = luaL_opt(L, luaL_checkint, 4, luaL_getn(L, 1));
142
+ luaL_buffinit(L, &b);
143
+ for (; i <= last; i++) {
144
+ lua_rawgeti(L, 1, i);
145
+ luaL_argcheck(L, lua_isstring(L, -1), 1, "table contains non-strings");
146
+ luaL_addvalue(&b);
147
+ if (i != last)
148
+ luaL_addlstring(&b, sep, lsep);
149
+ }
150
+ luaL_pushresult(&b);
151
+ return 1;
152
+ }
153
+
154
+
155
+
156
+ /*
157
+ ** {======================================================
158
+ ** Quicksort
159
+ ** (based on `Algorithms in MODULA-3', Robert Sedgewick;
160
+ ** Addison-Wesley, 1993.)
161
+ */
162
+
163
+
164
+ static void set2 (lua_State *L, int i, int j) {
165
+ lua_rawseti(L, 1, i);
166
+ lua_rawseti(L, 1, j);
167
+ }
168
+
169
+ static int sort_comp (lua_State *L, int a, int b) {
170
+ if (!lua_isnil(L, 2)) { /* function? */
171
+ int res;
172
+ lua_pushvalue(L, 2);
173
+ lua_pushvalue(L, a-1); /* -1 to compensate function */
174
+ lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */
175
+ lua_call(L, 2, 1);
176
+ res = lua_toboolean(L, -1);
177
+ lua_pop(L, 1);
178
+ return res;
179
+ }
180
+ else /* a < b? */
181
+ return lua_lessthan(L, a, b);
182
+ }
183
+
184
+ static void auxsort (lua_State *L, int l, int u) {
185
+ while (l < u) { /* for tail recursion */
186
+ int i, j;
187
+ /* sort elements a[l], a[(l+u)/2] and a[u] */
188
+ lua_rawgeti(L, 1, l);
189
+ lua_rawgeti(L, 1, u);
190
+ if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */
191
+ set2(L, l, u); /* swap a[l] - a[u] */
192
+ else
193
+ lua_pop(L, 2);
194
+ if (u-l == 1) break; /* only 2 elements */
195
+ i = (l+u)/2;
196
+ lua_rawgeti(L, 1, i);
197
+ lua_rawgeti(L, 1, l);
198
+ if (sort_comp(L, -2, -1)) /* a[i]<a[l]? */
199
+ set2(L, i, l);
200
+ else {
201
+ lua_pop(L, 1); /* remove a[l] */
202
+ lua_rawgeti(L, 1, u);
203
+ if (sort_comp(L, -1, -2)) /* a[u]<a[i]? */
204
+ set2(L, i, u);
205
+ else
206
+ lua_pop(L, 2);
207
+ }
208
+ if (u-l == 2) break; /* only 3 elements */
209
+ lua_rawgeti(L, 1, i); /* Pivot */
210
+ lua_pushvalue(L, -1);
211
+ lua_rawgeti(L, 1, u-1);
212
+ set2(L, i, u-1);
213
+ /* a[l] <= P == a[u-1] <= a[u], only need to sort from l+1 to u-2 */
214
+ i = l; j = u-1;
215
+ for (;;) { /* invariant: a[l..i] <= P <= a[j..u] */
216
+ /* repeat ++i until a[i] >= P */
217
+ while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) {
218
+ if (i>u) luaL_error(L, "invalid order function for sorting");
219
+ lua_pop(L, 1); /* remove a[i] */
220
+ }
221
+ /* repeat --j until a[j] <= P */
222
+ while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) {
223
+ if (j<l) luaL_error(L, "invalid order function for sorting");
224
+ lua_pop(L, 1); /* remove a[j] */
225
+ }
226
+ if (j<i) {
227
+ lua_pop(L, 3); /* pop pivot, a[i], a[j] */
228
+ break;
229
+ }
230
+ set2(L, i, j);
231
+ }
232
+ lua_rawgeti(L, 1, u-1);
233
+ lua_rawgeti(L, 1, i);
234
+ set2(L, u-1, i); /* swap pivot (a[u-1]) with a[i] */
235
+ /* a[l..i-1] <= a[i] == P <= a[i+1..u] */
236
+ /* adjust so that smaller half is in [j..i] and larger one in [l..u] */
237
+ if (i-l < u-i) {
238
+ j=l; i=i-1; l=i+2;
239
+ }
240
+ else {
241
+ j=i+1; i=u; u=j-2;
242
+ }
243
+ auxsort(L, j, i); /* call recursively the smaller one */
244
+ } /* repeat the routine for the larger one */
245
+ }
246
+
247
+ static int sort (lua_State *L) {
248
+ int n = aux_getn(L, 1);
249
+ luaL_checkstack(L, 40, ""); /* assume array is smaller than 2^40 */
250
+ if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */
251
+ luaL_checktype(L, 2, LUA_TFUNCTION);
252
+ lua_settop(L, 2); /* make sure there is two arguments */
253
+ auxsort(L, 1, n);
254
+ return 0;
255
+ }
256
+
257
+ /* }====================================================== */
258
+
259
+
260
+ static const luaL_Reg tab_funcs[] = {
261
+ {"concat", tconcat},
262
+ {"foreach", foreach},
263
+ {"foreachi", foreachi},
264
+ {"getn", getn},
265
+ {"maxn", maxn},
266
+ {"insert", tinsert},
267
+ {"remove", tremove},
268
+ {"setn", setn},
269
+ {"sort", sort},
270
+ {NULL, NULL}
271
+ };
272
+
273
+
274
+ LUALIB_API int luaopen_table (lua_State *L) {
275
+ luaL_register(L, LUA_TABLIBNAME, tab_funcs);
276
+ return 1;
277
+ }
278
+
@@ -0,0 +1,75 @@
1
+ /*
2
+ ** $Id: ltm.c,v 2.8 2006/01/10 12:50:00 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
+
@@ -0,0 +1,54 @@
1
+ /*
2
+ ** $Id: ltm.h,v 2.6 2005/06/06 13:30: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