1 /+
2 +                Copyright 2023 Aya Partridge
3 +          Copyright 2019 - 2021 Michael D. Parker
4 + Distributed under the Boost Software License, Version 1.0.
5 +     (See accompanying file LICENSE_1_0.txt or copy at
6 +           http://www.boost.org/LICENSE_1_0.txt)
7 +/
8 module bindbc.lua.v54.types;
9 
10 version(LUA_54):
11 
12 import core.stdc.stdio: BUFSIZ, FILE;
13 import core.stdc.stdint: intptr_t;
14 import core.stdc.config: c_long;
15 
16 // luaconf.h
17 alias LUA_INT32 = int;
18 alias LUAI_UMEM = size_t;
19 alias LUAI_MEM = ptrdiff_t;
20 alias LUA_NUMBER = double;
21 alias LUA_INTEGER = ptrdiff_t;
22 alias LUA_UNSIGNED = uint;
23 
24 alias LUA_KCONTEXT =  intptr_t;
25 enum LUAI_MAXSTACK = 1000000;
26 enum LUA_EXTRASPACE = (void*).sizeof;
27 enum LUA_IDSIZE = 60;
28 enum LUAL_BUFFERSIZE = cast(int)(16 * (void*).sizeof * lua_Number.sizeof);
29 
30 mixin template LUAI_MAXALIGN(){
31 	lua_Number n;
32 	double u;
33 	void *s;
34 	lua_Integer i;
35 	c_long l;
36 }
37 
38 
39 // lauxlib.h
40 enum LUA_ERRFILE = LUA_ERRERR+1;
41 enum LUA_LOADED_TABLE = "_LOADED";
42 enum LUA_PRELOAD_TABLE = "_PRELOAD";
43 
44 struct luaL_Reg{
45 	const(char)* name;
46 	lua_CFunction func;
47 }
48 
49 enum LUAL_NUMSIZES = lua_Integer.sizeof * 16 + lua_Number.sizeof;
50 
51 enum LUA_NOREF = -2;
52 enum LUA_REFNIL = -1;
53 
54 struct luaL_Buffer{
55 	char* b;
56 	size_t size;
57 	size_t n;
58 	lua_State* L;
59 	union init{
60 		mixin LUAI_MAXALIGN!();
61 		char[LUAL_BUFFERSIZE] initb;
62 	}
63 }
64 
65 alias LUA_FILEHANDLE = FILE*;
66 
67 struct luaL_Stream{
68 	FILE* f;
69 	lua_CFunction closef;
70 }
71 
72 // lua.h
73 enum LUA_VERSION_MAJOR = "5";
74 enum LUA_VERSION_MINOR = "4";
75 enum LUA_VERSION_RELEASE = "2";
76 
77 enum LUA_VERSION_NUM = 504;
78 enum LUA_VERSION_RELEASE_NUM = LUA_VERSION_NUM * 100 + 0;
79 
80 enum LUA_VERSION = "Lua " ~ LUA_VERSION_MAJOR ~ "." ~ LUA_VERSION_MINOR;
81 enum LUA_RELEASE = LUA_VERSION ~ "." ~ LUA_VERSION_RELEASE;
82 
83 enum LUA_SIGNATURE = "\x1bLua";
84 enum LUA_MULTRET = -1;
85 
86 enum LUA_REGISTRYINDEX = -LUAI_MAXSTACK - 1000;
87 
88 enum LUA_OK = 0;
89 enum LUA_YIELD = 1;
90 enum LUA_ERRRUN = 2;
91 enum LUA_ERRSYNTAX = 3;
92 enum LUA_ERRMEM = 4;
93 enum LUA_ERRERR = 5;
94 
95 enum LUA_TNONE = -1;
96 enum LUA_TNIL = 0;
97 enum LUA_TBOOLEAN = 1;
98 enum LUA_TLIGHTUSERDATA = 2;
99 enum LUA_TNUMBER = 3;
100 enum LUA_TSTRING = 4;
101 enum LUA_TTABLE = 5;
102 enum LUA_TFUNCTION = 6;
103 enum LUA_TUSERDATA = 7;
104 enum LUA_TTHREAD = 8;
105 enum LUA_NUMTYPES = 9;
106 
107 alias LUA_NUMTAGS = LUA_NUMTYPES;
108 
109 enum LUA_MINSTACK = 20;
110 
111 enum LUA_RIDX_MAINTHREAD = 1;
112 enum LUA_RIDX_GLOBALS = 2;
113 enum LUA_RIDX_LAST = LUA_RIDX_GLOBALS;
114 
115 alias lua_Number = LUA_NUMBER;
116 alias lua_Integer = LUA_INTEGER;
117 alias lua_Unsigned = LUA_UNSIGNED;
118 alias lua_KContext = LUA_KCONTEXT;
119 
120 struct lua_State;
121 
122 extern(C) nothrow{
123 	alias lua_CFunction = int function(lua_State* L);
124 	alias lua_KFunction = int function(lua_State* L, int status, lua_KContext ctx);
125 	alias lua_Reader = const(char)* function(lua_State* L, void* ud, size_t* sz);
126 	alias lua_Writer = int function(lua_State* L, const(void)* p, size_t sz, void* ud);
127 	alias lua_Alloc = void* function(void* ud, void* ptr, size_t osize, size_t nsize);
128 	alias lua_WarnFunction = void function(void* ud, const(char)* msg, int tocont);
129 }
130 
131 enum LUA_OPADD = 0;
132 enum LUA_OPSUB = 1;
133 enum LUA_OPMUL = 2;
134 enum LUA_OPMOD = 3;
135 enum LUA_OPPOW = 4;
136 enum LUA_OPDIV = 5;
137 enum LUA_OPIDIV = 6;
138 enum LUA_OPBAND = 7;
139 enum LUA_OPBOR = 8;
140 enum LUA_OPBXOR = 9;
141 enum LUA_OPSHL = 10;
142 enum LUA_OPSHR = 11;
143 enum LUA_OPUNM = 12;
144 enum LUA_OPBNOT = 13;
145 
146 enum LUA_OPEQ = 0;
147 enum LUA_OPLT = 1;
148 enum LUA_OPLE = 2;
149 
150 enum LUA_GCSTOP = 0;
151 enum LUA_GCRESTART = 1;
152 enum LUA_GCCOLLECT = 2;
153 enum LUA_GCCOUNT = 3;
154 enum LUA_GCCOUNTB = 4;
155 enum LUA_GCSTEP = 5;
156 enum LUA_GCSETPAUSE = 6;
157 enum LUA_GCSETSTEPMUL = 7;
158 enum LUA_GCISRUNNING = 9;
159 
160 enum LUA_HOOKCALL = 0;
161 enum LUA_HOOKRET = 1;
162 enum LUA_HOOKLINE = 2;
163 enum LUA_HOOKCOUNT = 3;
164 enum LUA_HOOKTAILRET = 4;
165 
166 enum LUA_MASKCALL = 1 << LUA_HOOKCALL;
167 enum LUA_MASKRET = 1 << LUA_HOOKRET;
168 enum LUA_MASKLINE = 1 << LUA_HOOKLINE;
169 enum LUA_MASKCOUNT = 1 << LUA_HOOKCOUNT;
170 
171 struct lua_Debug{
172 	int event;
173 	const(char)* name;
174 	const(char)* namewhat;
175 	const(char)* what;
176 	const(char)* source;
177 	size_t srclen;
178 	int currentline;
179 	int linedefined;
180 	int lastlinedefined;
181 	ubyte nups;
182 	ubyte nparams;
183 	char isvararg;
184 	char istailcall;
185 	ushort ftransfer;
186 	ushort ntransfer;
187 	char[LUA_IDSIZE] short_src;
188 	private void* i_ci;
189 }
190 
191 alias lua_Hook = extern(C) void function(lua_State*, lua_Debug*) nothrow;
192 
193 // lualib.h
194 enum LUA_VERSUFFIX = "_" ~ LUA_VERSION_MAJOR ~ "_" ~ LUA_VERSION_MINOR;
195 enum LUA_COLIBNAME = "coroutine";
196 enum LUA_TABLIBNAME = "table";
197 enum LUA_IOLIBNAME = "io";
198 enum LUA_OSLIBNAME = "os";
199 enum LUA_STRLIBNAME = "string";
200 enum LUA_UTF8LIBNAME = "utf8";
201 enum LUA_MATHLIBNAME = "math";
202 enum LUA_DBLIBNAME = "debug";
203 enum LUA_LOADLIBNAME = "package";