1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
|
/*!A cross-platform build utility based on Lua
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Copyright (C) 2015-present, Xmake Open Source Community.
*
* @author ruki
* @file xmi.h
*
*/
#ifndef XMI_H
#define XMI_H
/* //////////////////////////////////////////////////////////////////////////////////////
* includes
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#ifndef LUA_VERSION
# include "luawrap/luaconf.h"
#endif
/* //////////////////////////////////////////////////////////////////////////////////////
* macros
*/
#define XMI_LUA_MULTRET (-1)
// thread status
#define XMI_LUA_OK 0
#define XMI_LUA_YIELD 1
#define XMI_LUA_ERRRUN 2
#define XMI_LUA_ERRSYNTAX 3
#define XMI_LUA_ERRMEM 4
#define XMI_LUA_ERRERR 5
// basic types
#define XMI_LUA_TNONE (-1)
#define XMI_LUA_TNIL 0
#define XMI_LUA_TBOOLEAN 1
#define XMI_LUA_TLIGHTUSERDATA 2
#define XMI_LUA_TNUMBER 3
#define XMI_LUA_TSTRING 4
#define XMI_LUA_TTABLE 5
#define XMI_LUA_TFUNCTION 6
#define XMI_LUA_TUSERDATA 7
#define XMI_LUA_TTHREAD 8
#define XMI_LUA_NUMTYPES 9
// pseudo-indices
#ifdef XMI_USE_LUAJIT
# define XMI_LUA_REGISTRYINDEX (-10000)
# define XMI_LUA_ENVIRONINDEX (-10001)
# define XMI_LUA_GLOBALSINDEX (-10002)
# define xmi_lua_upvalueindex(i) (XMI_LUA_GLOBALSINDEX - (i))
#else
# define XMI_LUA_REGISTRYINDEX (-LUAI_MAXSTACK - 1000)
# define xmi_lua_upvalueindex(i) (XMI_LUA_REGISTRYINDEX - (i))
#endif
// get macros
#ifdef XMI_USE_LUAJIT
# define xmi_lua_getglobal(lua, s) xmi_lua_getfield(lua, LUA_GLOBALSINDEX, (s))
# define xmi_lua_newuserdata(lua, s) (g_lua_ops)->_lua_newuserdata(lua, s)
#else
# define xmi_lua_getglobal(lua, name) (g_lua_ops)->_lua_getglobal(lua, name)
# define xmi_lua_geti(lua, idx, n) (g_lua_ops)->_lua_geti(lua, idx, n)
# define xmi_lua_rawgetp(lua, idx, p) (g_lua_ops)->_lua_rawgetp(lua, idx, p)
# define xmi_lua_getiuservalue(lua, idx, n) (g_lua_ops)->_lua_getiuservalue(lua, idx, n)
# define xmi_lua_newuserdatauv(lua, sz, nuvalue) (g_lua_ops)->_lua_newuserdatauv(lua, sz, nuvalue)
# define xmi_lua_newuserdata(lua, s) xmi_lua_newuserdatauv(lua, s, 1)
#endif
#define xmi_lua_gettable(lua, idx) (g_lua_ops)->_lua_gettable(lua, idx)
#define xmi_lua_getfield(lua, idx, k) (g_lua_ops)->_lua_getfield(lua, idx, k)
#define xmi_lua_rawget(lua, idx) (g_lua_ops)->_lua_rawget(lua, idx)
#define xmi_lua_rawgeti(lua, idx, n) (g_lua_ops)->_lua_rawgeti(lua, idx, n)
#define xmi_lua_createtable(lua, narr, nrec) (g_lua_ops)->_lua_createtable(lua, narr, nrec)
#define xmi_lua_getmetatable(lua, objindex) (g_lua_ops)->_lua_getmetatable(lua, objindex)
#define xmi_lua_newtable(lua) xmi_lua_createtable(lua, 0, 0)
#define xmi_lua_pop(lua, n) xmi_lua_settop(lua, -(n)-1)
#define xmi_lua_getuservalue(lua, idx) xmi_lua_getiuservalue(lua, idx, 1)
// set macros
#ifdef XMI_USE_LUAJIT
# define xmi_lua_setglobal(lua, s) xmi_lua_setfield(lua, LUA_GLOBALSINDEX, (s))
#else
# define xmi_lua_setglobal(lua, name) (g_lua_ops)->_lua_setglobal(lua, name)
# define xmi_lua_seti(lua, idx, n) (g_lua_ops)->_lua_seti(lua, idx, n)
# define xmi_lua_rawsetp(lua, idx, p) (g_lua_ops)->_lua_rawsetp(lua, idx, p)
# define xmi_lua_setiuservalue(lua, idx, n) (g_lua_ops)->_lua_setiuservalue(lua, idx, n)
#endif
#define xmi_lua_settable(lua, idx) (g_lua_ops)->_lua_settable(lua, idx)
#define xmi_lua_setfield(lua, idx, k) (g_lua_ops)->_lua_setfield(lua, idx, k)
#define xmi_lua_rawset(lua, idx) (g_lua_ops)->_lua_rawset(lua, idx)
#define xmi_lua_rawseti(lua, idx, n) (g_lua_ops)->_lua_rawseti(lua, idx, n)
#define xmi_lua_setmetatable(lua, objidx) (g_lua_ops)->_lua_setmetatable(lua, objidx)
#define xmi_lua_setuservalue(lua, idx) xmi_lua_setiuservalue(lua, idx, 1)
// access macros
#define xmi_lua_isnumber(lua, idx) (g_lua_ops)->_lua_isnumber(lua, idx)
#define xmi_lua_isstring(lua, idx) (g_lua_ops)->_lua_isstring(lua, idx)
#define xmi_lua_iscfunction(lua, idx) (g_lua_ops)->_lua_iscfunction(lua, idx)
#define xmi_lua_isuserdata(lua, idx) (g_lua_ops)->_lua_isuserdata(lua, idx)
#define xmi_lua_type(lua, idx) (g_lua_ops)->_lua_type(lua, idx)
#define xmi_lua_typename(lua, idx) (g_lua_ops)->_lua_typename(lua, idx)
#ifndef XMI_USE_LUAJIT
# define xmi_lua_isinteger(lua, idx) (g_lua_ops)->_lua_isinteger(lua, idx)
#endif
#define xmi_lua_isfunction(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TFUNCTION)
#define xmi_lua_istable(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TTABLE)
#define xmi_lua_islightuserdata(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TLIGHTUSERDATA)
#define xmi_lua_isnil(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TNIL)
#define xmi_lua_isboolean(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TBOOLEAN)
#define xmi_lua_isthread(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TTHREAD)
#define xmi_lua_isnone(lua, n) (xmi_lua_type(lua, (n)) == XMI_LUA_TNONE)
#define xmi_lua_isnoneornil(lua, n) (xmi_lua_type(lua, (n)) <= 0)
#define xmi_lua_tonumberx(lua, idx, isnum) (g_lua_ops)->_lua_tonumberx(lua, idx, isnum)
#define xmi_lua_tointegerx(lua, idx, isnum) (g_lua_ops)->_lua_tointegerx(lua, idx, isnum)
#define xmi_lua_toboolean(lua, idx) (g_lua_ops)->_lua_toboolean(lua, idx)
#define xmi_lua_tolstring(lua, idx, len) (g_lua_ops)->_lua_tolstring(lua, idx, len)
#define xmi_lua_rawlen(lua, idx) (g_lua_ops)->_lua_rawlen(lua, idx)
#define xmi_lua_tocfunction(lua, idx) (g_lua_ops)->_lua_tocfunction(lua, idx)
#define xmi_lua_touserdata(lua, idx) (g_lua_ops)->_lua_touserdata(lua, idx)
#define xmi_lua_tothread(lua, idx) (g_lua_ops)->_lua_tothread(lua, idx)
#define xmi_lua_topointer(lua, idx) (g_lua_ops)->_lua_topointer(lua, idx)
#define xmi_lua_tonumber(lua, idx) xmi_lua_tonumberx(lua, (idx), NULL)
#define xmi_lua_tostring(lua, idx) xmi_lua_tolstring(lua, (idx), NULL)
#define xmi_lua_tointeger(lua, idx) xmi_lua_tointegerx(lua, (idx), NULL)
// push macros
#define xmi_lua_pushnil(lua) (g_lua_ops)->_lua_pushnil(lua)
#define xmi_lua_pushinteger(lua, n) (g_lua_ops)->_lua_pushinteger(lua, n)
#define xmi_lua_pushboolean(lua, b) (g_lua_ops)->_lua_pushboolean(lua, b)
#define xmi_lua_pushnumber(lua, n) (g_lua_ops)->_lua_pushnumber(lua, n)
#define xmi_lua_pushlstring(lua, s, len) (g_lua_ops)->_lua_pushlstring(lua, s, len)
#define xmi_lua_pushstring(lua, s) (g_lua_ops)->_lua_pushstring(lua, s)
#define xmi_lua_pushvfstring(lua, fmt, argp) (g_lua_ops)->_lua_pushvfstring(lua, fmt, argp)
#if defined(_MSC_VER)
# define xmi_lua_pushfstring(lua, fmt, ...) (g_lua_ops)->_lua_pushfstring(lua, fmt, __VA_ARGS__)
#else
# define xmi_lua_pushfstring(lua, fmt, arg ...) (g_lua_ops)->_lua_pushfstring(lua, fmt, ## arg)
#endif
#define xmi_lua_pushcclosure(lua, fn, n) (g_lua_ops)->_lua_pushcclosure(lua, fn, n)
#define xmi_lua_pushlightuserdata(lua, p) (g_lua_ops)->_lua_pushlightuserdata(lua, p)
#define xmi_lua_pushthread(lua) (g_lua_ops)->_lua_pushthread(lua)
#define xmi_lua_pushcfunction(lua, f) xmi_lua_pushcclosure(lua, (f), 0)
#define xmi_lua_pushliteral(lua, s) xmi_lua_pushstring(lua, "" s)
// stack functions
#ifdef XMI_USE_LUAJIT
# define xmi_lua_insert(lua, idx) (g_lua_ops)->_lua_insert(lua, idx)
# define xmi_lua_remove(lua, idx) (g_lua_ops)->_lua_remove(lua, idx)
# define xmi_lua_replace(lua, idx) (g_lua_ops)->_lua_replace(lua, idx)
#else
# define xmi_lua_absindex(lua, idx) (g_lua_ops)->_lua_absindex(lua, idx)
# define xmi_lua_rotate(lua, idx, n) (g_lua_ops)->_lua_rotate(lua, idx, n)
# define xmi_lua_insert(lua, idx) xmi_lua_rotate(lua, (idx), 1)
# define xmi_lua_remove(lua, idx) (xmi_lua_rotate(lua, (idx), -1), xmi_lua_pop(lua, 1))
# define xmi_lua_replace(lua, idx) (xmi_lua_copy(lua, -1, (idx)), xmi_lua_pop(lua, 1))
#endif
#define xmi_lua_gettop(lua) (g_lua_ops)->_lua_gettop(lua)
#define xmi_lua_settop(lua, idx) (g_lua_ops)->_lua_settop(lua, idx)
#define xmi_lua_pushvalue(lua, idx) (g_lua_ops)->_lua_pushvalue(lua, idx)
#define xmi_lua_copy(lua, fromidx, toidx) (g_lua_ops)->_lua_copy(lua, fromidx, toidx)
#define xmi_lua_checkstack(lua, n) (g_lua_ops)->_lua_checkstack(lua, n)
#define xmi_lua_xmove(from, to, n) (g_lua_ops)->_lua_xmove(from, to, n)
// miscellaneous functions
#define xmi_lua_error(lua) (g_lua_ops)->_lua_error(lua)
#define xmi_lua_next(lua, idx) (g_lua_ops)->_lua_next(lua, idx)
#define xmi_lua_concat(lua, n) (g_lua_ops)->_lua_concat(lua, n)
#define xmi_lua_getallocf(lua, ud) (g_lua_ops)->_lua_getallocf(lua, ud)
#define xmi_lua_setallocf(lua, f, ud) (g_lua_ops)->_lua_setallocf(lua, f, ud)
#ifndef XMI_USE_LUAJIT
# define xmi_lua_len(lua, idx) (g_lua_ops)->_lua_len(lua, idx)
# define xmi_lua_toclose(lua, idx) (g_lua_ops)->_lua_toclose(lua, idx)
# define xmi_lua_closeslot(lua, idx) (g_lua_ops)->_lua_closeslot(lua, idx)
# define xmi_lua_stringtonumber(lua, s) (g_lua_ops)->_lua_stringtonumber(lua, s)
#endif
// 'load' and 'call' functions
#ifdef XMI_USE_LUAJIT
# define xmi_lua_call(lua, n, nr) (g_lua_ops)->_lua_call(lua, n, nr)
# define xmi_lua_pcall(lua, n, nr, ef) (g_lua_ops)->_lua_pcall(lua, n, nr, ef)
# define xmi_lua_load(lua, r, dt, ch) (g_lua_ops)->_lua_load(lua, r, dt, ch)
# define xmi_lua_dump(lua, w, d) (g_lua_ops)->_lua_dump(lua, r, d)
#else
# define xmi_lua_callk(lua, n, nr, ctx, k) (g_lua_ops)->_lua_callk(lua, n, nr, ctx, k)
# define xmi_lua_pcallk(lua, n, nr, ef, ctx, k) (g_lua_ops)->_lua_pcallk(lua, n, nr, ef, ctx, k)
# define xmi_lua_call(lua, n, r) xmi_lua_callk(lua, (n), (r), 0, NULL)
# define xmi_lua_pcall(lua, n, r, f) xmi_lua_pcallk(lua, (n), (r), (f), 0, NULL)
# define xmi_lua_load(lua, r, dt, ch, mode) (g_lua_ops)->_lua_load(lua, r, dt, ch, mode)
# define xmi_lua_dump(lua, w, d, strip) (g_lua_ops)->_lua_dump(lua, r, d, strip)
#endif
// luaL macros
#ifndef XMI_USE_LUAJIT
# define xmi_luaL_tolstring(lua, idx, len) (g_lua_ops)->_luaL_tolstring(lua, idx, len)
# define xmi_luaL_typeerror(lua, arg, tname) (g_lua_ops)->_luaL_typeerror(lua, arg, tname)
#endif
#define xmi_luaL_getmetafield(lua, obj, e) (g_lua_ops)->_luaL_getmetafield(lua, obj, e)
#define xmi_luaL_callmeta(lua, obj, e) (g_lua_ops)->_luaL_callmeta(lua, obj, e)
#define xmi_luaL_argerror(lua, numarg, extramsg) (g_lua_ops)->_luaL_argerror(lua, numarg, extramsg)
#define xmi_luaL_checklstring(lua, arg, l) (g_lua_ops)->_luaL_checklstring(lua, arg, l)
#define xmi_luaL_optlstring(lua, arg, def, l) (g_lua_ops)->_luaL_optlstring(lua, arg, def, l)
#define xmi_luaL_checknumber(lua, arg) (g_lua_ops)->_luaL_checknumber(lua, arg)
#define xmi_luaL_optnumber(lua, arg, def) (g_lua_ops)->_luaL_optnumber(lua, arg, def)
#define xmi_luaL_checkinteger(lua, idx) (g_lua_ops)->_luaL_checkinteger(lua, idx)
#define xmi_luaL_optinteger(lua, arg, def) (g_lua_ops)->_luaL_optinteger(lua, arg, def)
#define xmi_luaL_checkstack(lua, sz, msg) (g_lua_ops)->_luaL_checkstack(lua, sz, msg)
#define xmi_luaL_checktype(lua, arg, t) (g_lua_ops)->_luaL_checktype(lua, arg, t)
#define xmi_luaL_checkany(lua, arg) (g_lua_ops)->_luaL_checkany(lua, arg)
#define xmi_luaL_newmetatable(lua, tname) (g_lua_ops)->_luaL_newmetatable(lua, tname)
#define xmi_luaL_setmetatable(lua, tname) (g_lua_ops)->_luaL_setmetatable(lua, tname)
#define xmi_luaL_testudata(lua, tname) (g_lua_ops)->_luaL_testudata(lua, tname)
#define xmi_luaL_checkudata(lua, tname) (g_lua_ops)->_luaL_checkudata(lua, tname)
#define xmi_luaL_where(lua, lvl) (g_lua_ops)->_luaL_where(lua, lvl)
#if defined(_MSC_VER)
# define xmi_luaL_error(lua, fmt, ...) (g_lua_ops)->_luaL_error(lua, fmt, __VA_ARGS__)
#else
# define xmi_luaL_error(lua, fmt, arg ...) (g_lua_ops)->_luaL_error(lua, fmt, ## arg)
#endif
#define xmi_luaL_checkoption(lua, arg, def, lst) (g_lua_ops)->_luaL_checkoption(lua, arg, def, lst)
#define xmi_luaL_fileresult(lua, stat, fname) (g_lua_ops)->_luaL_fileresult(lua, stat, fname)
#define xmi_luaL_execresult(lua, stat) (g_lua_ops)->_luaL_execresult(lua, stat)
#define xmi_luaL_setfuncs(lua, l, nup) (g_lua_ops)->_luaL_setfuncs(lua, l, nup)
#define xmi_luaL_loadfilex(lua, fn, mode) (g_lua_ops)->_luaL_loadfilex(lua, fn, mode)
#define xmi_luaL_loadfile(lua, fn) xmi_luaL_loadfilex(lua, fn, NULL)
#define xmi_luaL_loadstring(lua, s) (g_lua_ops)->_luaL_loadstring(lua, s)
#define xmi_luaL_newlibtable(lua, l) xml_lua_createtable(lua, 0, sizeof(l)/sizeof((l)[0]) - 1)
#define xmi_luaL_newlib(lua, l) \
(xmi_luaL_checkversion(lua), xmi_luaL_newlibtable(lua,l), xmi_luaL_setfuncs(lua,l,0))
#define xmi_luaL_argcheck(lua, cond, arg, extramsg) \
((void)(luai_likely(cond) || xmi_luaL_argerror(lua, (arg), (extramsg))))
#define xmi_luaL_argexpected(lua, cond, arg, tname) \
((void)(luai_likely(cond) || xmi_luaL_typeerror(lua, (arg), (tname))))
#define xmi_luaL_checkstring(lua, n) (xmi_luaL_checklstring(lua, (n), NULL))
#define xmi_luaL_optstring(lua, n, d) (xmi_luaL_optlstring(lua, (n), (d), NULL))
#define xmi_luaL_typename(lua, i) xmi_lua_typename(lua, xmi_lua_type(lua,(i)))
#define xmi_luaL_dofile(lua, fn) \
(xmi_luaL_loadfile(lua, fn) || xmi_lua_pcall(lua, 0, XMI_LUA_MULTRET, 0))
#define xmi_luaL_dostring(lua, s) \
(xmi_luaL_loadstring(lua, s) || xmi_lua_pcall(lua, 0, XMI_LUA_MULTRET, 0))
#define xmi_luaL_getmetatable(lua, n) (xmi_lua_getfield(lua, XMI_LUA_REGISTRYINDEX, (n)))
#define xmi_luaL_opt(lua, f, n, d) (xmi_lua_isnoneornil(lua,(n)) ? (d) : f(lua,(n)))
#define xmi_luaL_loadbuffer(lua, s, sz, n) xmi_luaL_loadbufferx(lua, s, sz, n, NULL)
#define xmi_luaL_pushfail(lua) xmi_lua_pushnil(lua)
/* we cannot redefine lua functions in loadxmi.c,
* because original lua.h has been included
*/
#ifndef XM_PREFIX_H
// thread status
# define LUA_OK XMI_LUA_OK
# define LUA_YIELD XMI_LUA_YIELD
# define LUA_ERRRUN XMI_LUA_ERRRUN
# define LUA_ERRSYNTAX XMI_LUA_ERRSYNTAX
# define LUA_ERRMEM XMI_LUA_ERRMEM
# define LUA_ERRERR XMI_LUA_ERRERR
// basic types
# define LUA_TNONE XMI_LUA_TNONE
# define LUA_TNIL XMI_LUA_TNIL
# define LUA_TBOOLEAN XMI_LUA_TBOOLEAN
# define LUA_TLIGHTUSERDATA XMI_LUA_TLIGHTUSERDATA
# define LUA_TNUMBER XMI_LUA_TNUMBER
# define LUA_TSTRING XMI_LUA_TSTRING
# define LUA_TTABLE XMI_LUA_TTABLE
# define LUA_TFUNCTION XMI_LUA_TFUNCTION
# define LUA_TUSERDATA XMI_LUA_TUSERDATA
# define LUA_TTHREAD XMI_LUA_TTHREAD
# define LUA_NUMTYPES XMI_LUA_NUMTYPES
// get macros
# define lua_getglobal xmi_lua_getglobal
# define lua_gettable xmi_lua_gettable
# define lua_getfield xmi_lua_getfield
# define lua_geti xmi_lua_geti
# define lua_rawget xmi_lua_rawget
# define lua_rawgeti xmi_lua_rawgeti
# define lua_rawgetp xmi_lua_rawgetp
# define lua_createtable xmi_lua_createtable
# define lua_newuserdatauv xmi_lua_newuserdatauv
# define lua_getmetatable xmi_lua_getmetatable
# define lua_getiuservalue xmi_lua_getiuservalue
# define lua_upvalueindex xmi_lua_upvalueindex
# define lua_newtable xmi_lua_newtable
# define lua_pop xmi_lua_pop
# define lua_newuserdata xmi_lua_newuserdata
# define lua_getuservalue xmi_lua_getuservalue
// set macros
# define lua_setglobal xmi_lua_setglobal
# define lua_settable xmi_lua_settable
# define lua_setfield xmi_lua_setfield
# define lua_seti xmi_lua_seti
# define lua_rawset xmi_lua_rawset
# define lua_rawseti xmi_lua_rawseti
# define lua_rawsetp xmi_lua_rawsetp
# define lua_setmetatable xmi_lua_setmetatable
# define lua_setiuservalue xmi_lua_setiuservalue
# define lua_setuservalue xmi_lua_setuservalue
// access macros
# define lua_isnumber xmi_lua_isnumber
# define lua_isstring xmi_lua_isstring
# define lua_iscfunction xmi_lua_iscfunction
# define lua_isuserdata xmi_lua_isuserdata
# define lua_type xmi_lua_type
# define lua_typename xmi_lua_typename
# ifndef XMI_USE_LUAJIT
# define lua_isinteger xmi_lua_isinteger
# endif
# define lua_isfunction xmi_lua_isfunction
# define lua_istable xmi_lua_istable
# define lua_islightuserdata xmi_lua_islightuserdata
# define lua_isnil xmi_lua_isnil
# define lua_isboolean xmi_lua_isboolean
# define lua_isthread xmi_lua_isthread
# define lua_isnone xmi_lua_isnone
# define lua_isnoneornil xmi_lua_isnoneornil
# define lua_tonumberx xmi_lua_tonumberx
# define lua_tointegerx xmi_lua_tointegerx
# define lua_toboolean xmi_lua_toboolean
# define lua_tolstring xmi_lua_tolstring
# define lua_rawlen xmi_lua_rawlen
# define lua_tocfunction xmi_lua_tocfunction
# define lua_touserdata xmi_lua_touserdata
# define lua_tothread xmi_lua_tothread
# define lua_topointer xmi_lua_topointer
# define lua_tostring xmi_lua_tostring
# define lua_tonumber xmi_lua_tonumber
# define lua_tointeger xmi_lua_tointeger
// push macros
# define lua_pushnil xmi_lua_pushnil
# define lua_pushinteger xmi_lua_pushinteger
# define lua_pushboolean xmi_lua_pushboolean
# define lua_pushnumber xmi_lua_pushnumber
# define lua_pushlstring xmi_lua_pushlstring
# define lua_pushstring xmi_lua_pushstring
# define lua_pushvfstring xmi_lua_pushvfstring
# define lua_pushfstring xmi_lua_pushfstring
# define lua_pushcclosure xmi_lua_pushcclosure
# define lua_pushlightuserdata xmi_lua_pushlightuserdata
# define lua_pushthread xmi_lua_pushthread
# define lua_pushcfunction xmi_lua_pushcfunction
# define lua_pushliteral xmi_lua_pushliteral
// stack functions
# define lua_absindex xmi_lua_absindex
# define lua_gettop xmi_lua_gettop
# define lua_settop xmi_lua_settop
# define lua_pushvalue xmi_lua_pushvalue
# define lua_rotate xmi_lua_rotate
# define lua_copy xmi_lua_copy
# define lua_checkstack xmi_lua_checkstack
# define lua_xmove xmi_lua_xmove
# define lua_insert xmi_lua_insert
# define lua_remove xmi_lua_remove
# define lua_replace xmi_lua_replace
// miscellaneous functions
# define lua_error xmi_lua_error
# define lua_next xmi_lua_next
# define lua_concat xmi_lua_concat
# define lua_len xmi_lua_len
# define lua_stringtonumber xmi_lua_stringtonumber
# define lua_getallocf xmi_lua_getallocf
# define lua_setallocf xmi_lua_setallocf
# define lua_toclose xmi_lua_toclose
# define lua_closeslot xmi_lua_closeslot
// 'load' and 'call' functions
# ifndef XMI_USE_LUAJIT
# define lua_callk xmi_lua_callk
# define lua_pcallk xmi_lua_pcallk
# endif
# define lua_call xmi_lua_call
# define lua_pcall xmi_lua_pcall
# define lua_load xmi_lua_load
# define lua_dump xmi_lua_dump
// luaL macros
# define luaL_getmetafield xmi_luaL_getmetafield
# define luaL_callmeta xmi_luaL_callmeta
# define luaL_tolstring xmi_luaL_tolstring
# define luaL_argerror xmi_luaL_argerror
# define luaL_typeerror xmi_luaL_typeerror
# define luaL_checklstring xmi_luaL_checklstring
# define luaL_optlstring xmi_luaL_optlstring
# define luaL_checknumber xmi_luaL_checknumber
# define luaL_optnumber xmi_luaL_optnumber
# define luaL_checkinteger xmi_luaL_checkinteger
# define luaL_optinteger xmi_luaL_optinteger
# define luaL_checkstack xmi_luaL_checkstack
# define luaL_checktype xmi_luaL_checktype
# define luaL_checkany xmi_luaL_checkany
# define luaL_newmetatable xmi_luaL_newmetatable
# define luaL_setmetatable xmi_luaL_setmetatable
# define luaL_testudata xmi_luaL_testudata
# define luaL_checkudata xmi_luaL_checkudata
# define luaL_where xmi_luaL_where
# define luaL_error xmi_luaL_error
# define luaL_checkoption xmi_luaL_checkoption
# define luaL_fileresult xmi_luaL_fileresult
# define luaL_execresult xmi_luaL_execresult
# define luaL_setfuncs xmi_luaL_setfuncs
# define luaL_loadfilex xmi_luaL_loadfilex
# define luaL_loadfile xmi_luaL_loadfile
# define luaL_loadstring xmi_luaL_loadstring
# define luaL_newlibtable xmi_luaL_newlibtable
# define luaL_newlib xmi_luaL_newlib
# define luaL_argcheck xmi_luaL_argcheck
# define luaL_argexpected xmi_luaL_argexpected
# define luaL_checkstring xmi_luaL_checkstring
# define luaL_optstring xmi_luaL_optstring
# define luaL_typename xmi_luaL_typename
# define luaL_dofile xmi_luaL_dofile
# define luaL_dostring xmi_luaL_dostring
# define luaL_getmetatable xmi_luaL_getmetatable
# define luaL_opt xmi_luaL_opt
# define luaL_loadbuffer xmi_luaL_loadbuffer
# define luaL_pushfail xmi_luaL_pushfail
// types
# define luaL_Reg xmi_luaL_Reg
# define lua_State xmi_lua_State
# define lua_Number xmi_lua_Number
# define lua_Integer xmi_lua_Integer
# define lua_Unsigned xmi_lua_Unsigned
# define lua_KContext xmi_lua_KContext
# define lua_CFunction xmi_lua_CFunction
# define lua_KFunction xmi_lua_KFunction
# define lua_Reader xmi_lua_Reader
# define lua_Writer xmi_lua_Writer
# define lua_Alloc xmi_lua_Alloc
# define lua_WarnFunction xmi_lua_WarnFunction
#endif
// extern c
#ifdef __cplusplus
# define xmi_extern_c_enter extern "C" {
# define xmi_extern_c_leave }
#else
# define xmi_extern_c_enter
# define xmi_extern_c_leave
#endif
// define lua module entry function
#define luaopen(name, lua) \
__dummy = 1; \
xmi_lua_ops_t* g_lua_ops = NULL; \
xmi_extern_c_enter \
int xmiopen_##name(lua); \
xmi_extern_c_leave \
int xmisetup(xmi_lua_ops_t* ops) { \
g_lua_ops = ops; \
return __dummy; \
} \
int xmiopen_##name(lua)
/* //////////////////////////////////////////////////////////////////////////////////////
* types
*/
typedef LUA_NUMBER xmi_lua_Number;
typedef LUA_INTEGER xmi_lua_Integer;
#ifndef XMI_USE_LUAJIT
typedef LUA_UNSIGNED xmi_lua_Unsigned;
typedef LUA_KCONTEXT xmi_lua_KContext;
#endif
typedef struct xmi_lua_State_ {
int dummy;
}xmi_lua_State;
typedef int (*xmi_lua_CFunction)(lua_State* lua);
#ifndef XMI_USE_LUAJIT
typedef int (*xmi_lua_KFunction)(lua_State* lua, int status, lua_KContext ctx);
#endif
typedef const char* (*xmi_lua_Reader)(lua_State* lua, void* ud, size_t* sz);
typedef int (*xmi_lua_Writer)(lua_State* lua, const void* p, size_t sz, void* ud);
typedef void* (*xmi_lua_Alloc)(void* ud, void* ptr, size_t osize, size_t nsize);
typedef void (*xmi_lua_WarnFunction)(void* ud, const char* msg, int tocont);
typedef struct xmi_luaL_Reg_ {
char const* name;
xmi_lua_CFunction func;
}xmi_luaL_Reg;
typedef struct xmi_lua_ops_t_ {
// get functions
#ifdef XMI_USE_LUAJIT
void* (*_lua_newuserdata)(lua_State* lua, size_t sz);
void (*_lua_gettable)(lua_State* lua, int idx);
void (*_lua_getfield)(lua_State* lua, int idx, const char* k);
void (*_lua_rawgeti)(lua_State* lua, int idx, int n);
void (*_lua_rawget)(lua_State* lua, int idx);
#else
int (*_lua_getglobal)(lua_State* lua, const char* name);
int (*_lua_geti)(lua_State* lua, int idx, lua_Integer n);
int (*_lua_rawgetp)(lua_State* lua, int idx, const void* p);
int (*_lua_getiuservalue)(lua_State* lua, int idx, int n);
void* (*_lua_newuserdatauv)(lua_State* lua, size_t sz, int nuvalue);
int (*_lua_gettable)(lua_State* lua, int idx);
int (*_lua_getfield)(lua_State* lua, int idx, const char* k);
int (*_lua_rawgeti)(lua_State* lua, int idx, lua_Integer n);
int (*_lua_rawget)(lua_State* lua, int idx);
#endif
void (*_lua_createtable)(lua_State* lua, int narr, int nrec);
int (*_lua_getmetatable)(lua_State* lua, int objindex);
// set functions
#ifdef XMI_USE_LUAJIT
void (*_lua_rawseti)(lua_State* lua, int idx, int n);
#else
void (*_lua_setglobal)(lua_State* lua, const char* name);
void (*_lua_seti)(lua_State* lua, int idx, lua_Integer n);
void (*_lua_rawsetp)(lua_State* lua, int idx, const void* p);
int (*_lua_setiuservalue)(lua_State* lua, int idx, int n);
void (*_lua_rawseti)(lua_State* lua, int idx, lua_Integer n);
#endif
void (*_lua_settable)(lua_State* lua, int idx);
void (*_lua_setfield)(lua_State* lua, int idx, const char* k);
void (*_lua_rawset)(lua_State* lua, int idx);
int (*_lua_setmetatable)(lua_State* lua, int objindex);
// access functions
int (*_lua_isnumber)(lua_State* lua, int idx);
int (*_lua_isstring)(lua_State* lua, int idx);
int (*_lua_iscfunction)(lua_State* lua, int idx);
int (*_lua_isuserdata)(lua_State* lua, int idx);
int (*_lua_type)(lua_State* lua, int idx);
const char* (*_lua_typename)(lua_State* lua, int tp);
#ifndef XMI_USE_LUAJIT
int (*_lua_isinteger)(lua_State* lua, int idx);
#endif
lua_Number (*_lua_tonumberx)(lua_State* lua, int idx, int* isnum);
lua_Integer (*_lua_tointegerx)(lua_State* lua, int idx, int* isnum);
int (*_lua_toboolean)(lua_State* lua, int idx);
const char* (*_lua_tolstring)(lua_State* lua, int idx, size_t* len);
lua_CFunction (*_lua_tocfunction)(lua_State* lua, int idx);
void* (*_lua_touserdata)(lua_State* lua, int idx);
lua_State* (*_lua_tothread)(lua_State* lua, int idx);
const void* (*_lua_topointer)(lua_State* lua, int idx);
#ifndef XMI_USE_LUAJIT
lua_Unsigned (*_lua_rawlen)(lua_State* lua, int idx);
#endif
// push functions
void (*_lua_pushnil)(lua_State* lua);
void (*_lua_pushinteger)(lua_State* lua, lua_Integer n);
void (*_lua_pushboolean)(lua_State* lua, int b);
void (*_lua_pushnumber)(lua_State* lua, lua_Number n);
#ifdef XMI_USE_LUAJIT
void (*_lua_pushlstring)(lua_State* lua, const char* s, size_t len);
void (*_lua_pushstring)(lua_State* lua, const char* s);
#else
const char* (*_lua_pushlstring)(lua_State* lua, const char* s, size_t len);
const char* (*_lua_pushstring)(lua_State* lua, const char* s);
#endif
const char* (*_lua_pushvfstring)(lua_State* lua, const char* fmt, va_list argp);
const char* (*_lua_pushfstring)(lua_State* lua, const char* fmt, ...);
void (*_lua_pushcclosure)(lua_State* lua, lua_CFunction fn, int n);
void (*_lua_pushlightuserdata)(lua_State* lua, void* p);
int (*_lua_pushthread)(lua_State* lua);
// stack functions
#ifdef XMI_USE_LUAJIT
void (*_lua_insert)(lua_State* lua, int idx);
void (*_lua_remove)(lua_State* lua, int idx);
void (*_lua_replace)(lua_State* lua, int idx);
#else
int (*_lua_absindex)(lua_State* lua, int idx);
void (*_lua_rotate)(lua_State* lua, int idx, int n);
#endif
int (*_lua_gettop)(lua_State* lua);
void (*_lua_settop)(lua_State* lua, int idx);
void (*_lua_pushvalue)(lua_State* lua, int idx);
void (*_lua_copy)(lua_State* lua, int fromidx, int toidx);
int (*_lua_checkstack)(lua_State* lua, int n);
void (*_lua_xmove)(lua_State* from, lua_State* to, int n);
// miscellaneous functions
int (*_lua_error)(lua_State* lua);
int (*_lua_next)(lua_State* lua, int idx);
void (*_lua_concat)(lua_State* lua, int n);
lua_Alloc (*_lua_getallocf)(lua_State* lua, void** ud);
void (*_lua_setallocf)(lua_State* lua, lua_Alloc f, void* ud);
#ifndef XMI_USE_LUAJIT
void (*_lua_len)(lua_State* lua, int idx);
void (*_lua_toclose)(lua_State* lua, int idx);
void (*_lua_closeslot)(lua_State* lua, int idx);
size_t (*_lua_stringtonumber)(lua_State* lua, const char* s);
#endif
// 'load' and 'call' functions
#ifdef XMI_USE_LUAJIT
void (*_lua_call)(lua_State* lua, int nargs, int nresults);
int (*_lua_pcall)(lua_State* lua, int nargs, int nresults, int errfunc);
int (*_lua_load)(lua_State* lua, lua_Reader reader, void* dt, const char* chunkname);
int (*_lua_dump)(lua_State* lua, lua_Writer writer, void* data);
#else
void (*_lua_callk)(lua_State* lua, int nargs, int nresults, lua_KContext ctx, lua_KFunction k);
int (*_lua_pcallk)(lua_State* lua, int nargs, int nresults, int errfunc, lua_KContext ctx, lua_KFunction k);
int (*_lua_load)(lua_State* lua, lua_Reader reader, void* dt, const char* chunkname, const char* mode);
int (*_lua_dump)(lua_State* lua, lua_Writer writer, void* data, int strip);
#endif
// luaL functions
#ifndef XMI_USE_LUAJIT
const char* (*_luaL_tolstring)(lua_State* lua, int idx, size_t* len);
int (*_luaL_typeerror)(lua_State* lua, int arg, const char* tname);
#endif
int (*_luaL_getmetafield)(lua_State* lua, int obj, const char* e);
int (*_luaL_callmeta)(lua_State* lua, int obj, const char* e);
int (*_luaL_argerror)(lua_State* lua, int numarg, const char* extramsg);
const char* (*_luaL_checklstring)(lua_State* lua, int arg, size_t* l);
const char* (*_luaL_optlstring)(lua_State* lua, int arg, const char* def, size_t* l);
lua_Number (*_luaL_checknumber)(lua_State* lua, int arg);
lua_Number (*_luaL_optnumber)(lua_State* lua, int arg, lua_Number def);
lua_Integer (*_luaL_checkinteger)(lua_State* lua, int idx);
lua_Integer (*_luaL_optinteger)(lua_State* lua, int arg, lua_Integer def);
void (*_luaL_checkstack)(lua_State* lua, int sz, const char* msg);
void (*_luaL_checktype)(lua_State* lua, int arg, int t);
void (*_luaL_checkany)(lua_State* lua, int arg);
int (*_luaL_newmetatable)(lua_State* lua, const char* tname);
void (*_luaL_setmetatable)(lua_State* lua, const char* tname);
void* (*_luaL_testudata)(lua_State* lua, int ud, const char* tname);
void* (*_luaL_checkudata)(lua_State* lua, int ud, const char* tname);
void (*_luaL_where)(lua_State* lua, int lvl);
int (*_luaL_error)(lua_State* lua, const char* fmt, ...);
int (*_luaL_checkoption)(lua_State* lua, int arg, const char* def, const char* const lst[]);
int (*_luaL_fileresult)(lua_State* lua, int stat, const char* fname);
int (*_luaL_execresult)(lua_State* lua, int stat);
void (*_luaL_setfuncs)(lua_State* lua, const luaL_Reg* l, int nup);
int (*_luaL_loadfilex)(lua_State* lua, const char* filename, const char* mode);
int (*_luaL_loadstring)(lua_State* lua, const char* s);
}xmi_lua_ops_t;
/* //////////////////////////////////////////////////////////////////////////////////////
* globals
*/
extern xmi_lua_ops_t* g_lua_ops;
/* //////////////////////////////////////////////////////////////////////////////////////
* interfaces
*/
xmi_extern_c_enter
// setup lua interfaces
int xmisetup(xmi_lua_ops_t* ops);
xmi_extern_c_leave
#endif
|