Last active
August 29, 2015 14:18
-
-
Save tilpner/ce17f52295ea94b23b2c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include "lua.h" | |
#include "lauxlib.h" | |
#include "lualib.h" | |
int main(int argc, char **argv) | |
{ | |
int status; | |
lua_State *L = luaL_newstate(); | |
luaL_openlibs(L); | |
lua_getglobal(L, "require"); | |
lua_pushliteral(L, "main"); | |
status = lua_pcall(L, 1, 0, 0); | |
if (status) { | |
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1)); | |
return 1; | |
} | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** $Id: lauxlib.h,v 1.88.1.1 2007/12/27 13:02:25 roberto Exp $ | |
** Auxiliary functions for building Lua libraries | |
** See Copyright Notice in lua.h | |
*/ | |
#ifndef lauxlib_h | |
#define lauxlib_h | |
#include <stddef.h> | |
#include <stdio.h> | |
#include "lua.h" | |
#define luaL_getn(L,i) ((int)lua_objlen(L, i)) | |
#define luaL_setn(L,i,j) ((void)0) /* no op! */ | |
/* extra error code for `luaL_load' */ | |
#define LUA_ERRFILE (LUA_ERRERR+1) | |
typedef struct luaL_Reg { | |
const char *name; | |
lua_CFunction func; | |
} luaL_Reg; | |
LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, | |
const luaL_Reg *l, int nup); | |
LUALIB_API void (luaL_register) (lua_State *L, const char *libname, | |
const luaL_Reg *l); | |
LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); | |
LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); | |
LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); | |
LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); | |
LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, | |
size_t *l); | |
LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, | |
const char *def, size_t *l); | |
LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); | |
LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); | |
LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); | |
LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, | |
lua_Integer def); | |
LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); | |
LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); | |
LUALIB_API void (luaL_checkany) (lua_State *L, int narg); | |
LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); | |
LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); | |
LUALIB_API void (luaL_where) (lua_State *L, int lvl); | |
LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); | |
LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, | |
const char *const lst[]); | |
LUALIB_API int (luaL_ref) (lua_State *L, int t); | |
LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); | |
LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); | |
LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, | |
const char *name); | |
LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); | |
LUALIB_API lua_State *(luaL_newstate) (void); | |
LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, | |
const char *r); | |
LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, | |
const char *fname, int szhint); | |
/* From Lua 5.2. */ | |
LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname); | |
LUALIB_API int luaL_execresult(lua_State *L, int stat); | |
LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, | |
const char *mode); | |
LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, | |
const char *name, const char *mode); | |
LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, | |
int level); | |
/* | |
** =============================================================== | |
** some useful macros | |
** =============================================================== | |
*/ | |
#define luaL_argcheck(L, cond,numarg,extramsg) \ | |
((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) | |
#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) | |
#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) | |
#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) | |
#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) | |
#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) | |
#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) | |
#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) | |
#define luaL_dofile(L, fn) \ | |
(luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) | |
#define luaL_dostring(L, s) \ | |
(luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) | |
#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) | |
#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) | |
/* | |
** {====================================================== | |
** Generic Buffer manipulation | |
** ======================================================= | |
*/ | |
typedef struct luaL_Buffer { | |
char *p; /* current position in buffer */ | |
int lvl; /* number of strings in the stack (level) */ | |
lua_State *L; | |
char buffer[LUAL_BUFFERSIZE]; | |
} luaL_Buffer; | |
#define luaL_addchar(B,c) \ | |
((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ | |
(*(B)->p++ = (char)(c))) | |
/* compatibility only */ | |
#define luaL_putchar(B,c) luaL_addchar(B,c) | |
#define luaL_addsize(B,n) ((B)->p += (n)) | |
LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); | |
LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); | |
LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); | |
LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); | |
LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); | |
LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); | |
/* }====================================================== */ | |
/* compatibility with ref system */ | |
/* pre-defined references */ | |
#define LUA_NOREF (-2) | |
#define LUA_REFNIL (-1) | |
#define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ | |
(lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) | |
#define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) | |
#define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) | |
#define luaL_reg luaL_Reg | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** $Id: lua.h,v 1.218.1.5 2008/08/06 13:30:12 roberto Exp $ | |
** Lua - An Extensible Extension Language | |
** Lua.org, PUC-Rio, Brazil (http://www.lua.org) | |
** See Copyright Notice at the end of this file | |
*/ | |
#ifndef lua_h | |
#define lua_h | |
#include <stdarg.h> | |
#include <stddef.h> | |
#include "luaconf.h" | |
#define LUA_VERSION "Lua 5.1" | |
#define LUA_RELEASE "Lua 5.1.4" | |
#define LUA_VERSION_NUM 501 | |
#define LUA_COPYRIGHT "Copyright (C) 1994-2008 Lua.org, PUC-Rio" | |
#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" | |
/* mark for precompiled code (`<esc>Lua') */ | |
#define LUA_SIGNATURE "\033Lua" | |
/* option for multiple returns in `lua_pcall' and `lua_call' */ | |
#define LUA_MULTRET (-1) | |
/* | |
** pseudo-indices | |
*/ | |
#define LUA_REGISTRYINDEX (-10000) | |
#define LUA_ENVIRONINDEX (-10001) | |
#define LUA_GLOBALSINDEX (-10002) | |
#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) | |
/* thread status; 0 is OK */ | |
#define LUA_YIELD 1 | |
#define LUA_ERRRUN 2 | |
#define LUA_ERRSYNTAX 3 | |
#define LUA_ERRMEM 4 | |
#define LUA_ERRERR 5 | |
typedef struct lua_State lua_State; | |
typedef int (*lua_CFunction) (lua_State *L); | |
/* | |
** functions that read/write blocks when loading/dumping Lua chunks | |
*/ | |
typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); | |
typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); | |
/* | |
** prototype for memory-allocation functions | |
*/ | |
typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); | |
/* | |
** basic types | |
*/ | |
#define LUA_TNONE (-1) | |
#define LUA_TNIL 0 | |
#define LUA_TBOOLEAN 1 | |
#define LUA_TLIGHTUSERDATA 2 | |
#define LUA_TNUMBER 3 | |
#define LUA_TSTRING 4 | |
#define LUA_TTABLE 5 | |
#define LUA_TFUNCTION 6 | |
#define LUA_TUSERDATA 7 | |
#define LUA_TTHREAD 8 | |
/* minimum Lua stack available to a C function */ | |
#define LUA_MINSTACK 20 | |
/* | |
** generic extra include file | |
*/ | |
#if defined(LUA_USER_H) | |
#include LUA_USER_H | |
#endif | |
/* type of numbers in Lua */ | |
typedef LUA_NUMBER lua_Number; | |
/* type for integer functions */ | |
typedef LUA_INTEGER lua_Integer; | |
/* | |
** state manipulation | |
*/ | |
LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); | |
LUA_API void (lua_close) (lua_State *L); | |
LUA_API lua_State *(lua_newthread) (lua_State *L); | |
LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); | |
/* | |
** basic stack manipulation | |
*/ | |
LUA_API int (lua_gettop) (lua_State *L); | |
LUA_API void (lua_settop) (lua_State *L, int idx); | |
LUA_API void (lua_pushvalue) (lua_State *L, int idx); | |
LUA_API void (lua_remove) (lua_State *L, int idx); | |
LUA_API void (lua_insert) (lua_State *L, int idx); | |
LUA_API void (lua_replace) (lua_State *L, int idx); | |
LUA_API int (lua_checkstack) (lua_State *L, int sz); | |
LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); | |
/* | |
** access functions (stack -> C) | |
*/ | |
LUA_API int (lua_isnumber) (lua_State *L, int idx); | |
LUA_API int (lua_isstring) (lua_State *L, int idx); | |
LUA_API int (lua_iscfunction) (lua_State *L, int idx); | |
LUA_API int (lua_isuserdata) (lua_State *L, int idx); | |
LUA_API int (lua_type) (lua_State *L, int idx); | |
LUA_API const char *(lua_typename) (lua_State *L, int tp); | |
LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); | |
LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); | |
LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); | |
LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); | |
LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); | |
LUA_API int (lua_toboolean) (lua_State *L, int idx); | |
LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); | |
LUA_API size_t (lua_objlen) (lua_State *L, int idx); | |
LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); | |
LUA_API void *(lua_touserdata) (lua_State *L, int idx); | |
LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); | |
LUA_API const void *(lua_topointer) (lua_State *L, int idx); | |
/* | |
** push functions (C -> stack) | |
*/ | |
LUA_API void (lua_pushnil) (lua_State *L); | |
LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); | |
LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); | |
LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); | |
LUA_API void (lua_pushstring) (lua_State *L, const char *s); | |
LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, | |
va_list argp); | |
LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); | |
LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); | |
LUA_API void (lua_pushboolean) (lua_State *L, int b); | |
LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); | |
LUA_API int (lua_pushthread) (lua_State *L); | |
/* | |
** get functions (Lua -> stack) | |
*/ | |
LUA_API void (lua_gettable) (lua_State *L, int idx); | |
LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); | |
LUA_API void (lua_rawget) (lua_State *L, int idx); | |
LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); | |
LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); | |
LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); | |
LUA_API int (lua_getmetatable) (lua_State *L, int objindex); | |
LUA_API void (lua_getfenv) (lua_State *L, int idx); | |
/* | |
** set functions (stack -> Lua) | |
*/ | |
LUA_API void (lua_settable) (lua_State *L, int idx); | |
LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); | |
LUA_API void (lua_rawset) (lua_State *L, int idx); | |
LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); | |
LUA_API int (lua_setmetatable) (lua_State *L, int objindex); | |
LUA_API int (lua_setfenv) (lua_State *L, int idx); | |
/* | |
** `load' and `call' functions (load and run Lua code) | |
*/ | |
LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); | |
LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); | |
LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); | |
LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, | |
const char *chunkname); | |
LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); | |
/* | |
** coroutine functions | |
*/ | |
LUA_API int (lua_yield) (lua_State *L, int nresults); | |
LUA_API int (lua_resume) (lua_State *L, int narg); | |
LUA_API int (lua_status) (lua_State *L); | |
/* | |
** garbage-collection function and options | |
*/ | |
#define LUA_GCSTOP 0 | |
#define LUA_GCRESTART 1 | |
#define LUA_GCCOLLECT 2 | |
#define LUA_GCCOUNT 3 | |
#define LUA_GCCOUNTB 4 | |
#define LUA_GCSTEP 5 | |
#define LUA_GCSETPAUSE 6 | |
#define LUA_GCSETSTEPMUL 7 | |
LUA_API int (lua_gc) (lua_State *L, int what, int data); | |
/* | |
** miscellaneous functions | |
*/ | |
LUA_API int (lua_error) (lua_State *L); | |
LUA_API int (lua_next) (lua_State *L, int idx); | |
LUA_API void (lua_concat) (lua_State *L, int n); | |
LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); | |
LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); | |
/* | |
** =============================================================== | |
** some useful macros | |
** =============================================================== | |
*/ | |
#define lua_pop(L,n) lua_settop(L, -(n)-1) | |
#define lua_newtable(L) lua_createtable(L, 0, 0) | |
#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) | |
#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) | |
#define lua_strlen(L,i) lua_objlen(L, (i)) | |
#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) | |
#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) | |
#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) | |
#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) | |
#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) | |
#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) | |
#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) | |
#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) | |
#define lua_pushliteral(L, s) \ | |
lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) | |
#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) | |
#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) | |
#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) | |
/* | |
** compatibility macros and functions | |
*/ | |
#define lua_open() luaL_newstate() | |
#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) | |
#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) | |
#define lua_Chunkreader lua_Reader | |
#define lua_Chunkwriter lua_Writer | |
/* hack */ | |
LUA_API void lua_setlevel (lua_State *from, lua_State *to); | |
/* | |
** {====================================================================== | |
** Debug API | |
** ======================================================================= | |
*/ | |
/* | |
** Event codes | |
*/ | |
#define LUA_HOOKCALL 0 | |
#define LUA_HOOKRET 1 | |
#define LUA_HOOKLINE 2 | |
#define LUA_HOOKCOUNT 3 | |
#define LUA_HOOKTAILRET 4 | |
/* | |
** Event masks | |
*/ | |
#define LUA_MASKCALL (1 << LUA_HOOKCALL) | |
#define LUA_MASKRET (1 << LUA_HOOKRET) | |
#define LUA_MASKLINE (1 << LUA_HOOKLINE) | |
#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) | |
typedef struct lua_Debug lua_Debug; /* activation record */ | |
/* Functions to be called by the debuger in specific events */ | |
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); | |
LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); | |
LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); | |
LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); | |
LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); | |
LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); | |
LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); | |
LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); | |
LUA_API lua_Hook lua_gethook (lua_State *L); | |
LUA_API int lua_gethookmask (lua_State *L); | |
LUA_API int lua_gethookcount (lua_State *L); | |
/* From Lua 5.2. */ | |
LUA_API void *lua_upvalueid (lua_State *L, int idx, int n); | |
LUA_API void lua_upvaluejoin (lua_State *L, int idx1, int n1, int idx2, int n2); | |
LUA_API int lua_loadx (lua_State *L, lua_Reader reader, void *dt, | |
const char *chunkname, const char *mode); | |
struct lua_Debug { | |
int event; | |
const char *name; /* (n) */ | |
const char *namewhat; /* (n) `global', `local', `field', `method' */ | |
const char *what; /* (S) `Lua', `C', `main', `tail' */ | |
const char *source; /* (S) */ | |
int currentline; /* (l) */ | |
int nups; /* (u) number of upvalues */ | |
int linedefined; /* (S) */ | |
int lastlinedefined; /* (S) */ | |
char short_src[LUA_IDSIZE]; /* (S) */ | |
/* private part */ | |
int i_ci; /* active function */ | |
}; | |
/* }====================================================================== */ | |
/****************************************************************************** | |
* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved. | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining | |
* a copy of this software and associated documentation files (the | |
* "Software"), to deal in the Software without restriction, including | |
* without limitation the rights to use, copy, modify, merge, publish, | |
* distribute, sublicense, and/or sell copies of the Software, and to | |
* permit persons to whom the Software is furnished to do so, subject to | |
* the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be | |
* included in all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
******************************************************************************/ | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// C++ wrapper for LuaJIT header files. | |
extern "C" { | |
#include "lua.h" | |
#include "lauxlib.h" | |
#include "lualib.h" | |
#include "luajit.h" | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** Configuration header. | |
** Copyright (C) 2005-2014 Mike Pall. See Copyright Notice in luajit.h | |
*/ | |
#ifndef luaconf_h | |
#define luaconf_h | |
#ifndef WINVER | |
#define WINVER 0x0501 | |
#endif | |
#include <limits.h> | |
#include <stddef.h> | |
/* Default path for loading Lua and C modules with require(). */ | |
#if defined(_WIN32) | |
/* | |
** In Windows, any exclamation mark ('!') in the path is replaced by the | |
** path of the directory of the executable file of the current process. | |
*/ | |
#define LUA_LDIR "!\\lua\\" | |
#define LUA_CDIR "!\\" | |
#define LUA_PATH_DEFAULT \ | |
".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" | |
#define LUA_CPATH_DEFAULT \ | |
".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" | |
#else | |
/* | |
** Note to distribution maintainers: do NOT patch the following lines! | |
** Please read ../doc/install.html#distro and pass PREFIX=/usr instead. | |
*/ | |
#ifndef LUA_MULTILIB | |
#define LUA_MULTILIB "lib" | |
#endif | |
#ifndef LUA_LMULTILIB | |
#define LUA_LMULTILIB "lib" | |
#endif | |
#define LUA_LROOT "/usr/local" | |
#define LUA_LUADIR "/lua/5.1/" | |
#define LUA_LJDIR "/luajit-2.0.3/" | |
#ifdef LUA_ROOT | |
#define LUA_JROOT LUA_ROOT | |
#define LUA_RLDIR LUA_ROOT "/share" LUA_LUADIR | |
#define LUA_RCDIR LUA_ROOT "/" LUA_MULTILIB LUA_LUADIR | |
#define LUA_RLPATH ";" LUA_RLDIR "?.lua;" LUA_RLDIR "?/init.lua" | |
#define LUA_RCPATH ";" LUA_RCDIR "?.so" | |
#else | |
#define LUA_JROOT LUA_LROOT | |
#define LUA_RLPATH | |
#define LUA_RCPATH | |
#endif | |
#define LUA_JPATH ";" LUA_JROOT "/share" LUA_LJDIR "?.lua" | |
#define LUA_LLDIR LUA_LROOT "/share" LUA_LUADIR | |
#define LUA_LCDIR LUA_LROOT "/" LUA_LMULTILIB LUA_LUADIR | |
#define LUA_LLPATH ";" LUA_LLDIR "?.lua;" LUA_LLDIR "?/init.lua" | |
#define LUA_LCPATH1 ";" LUA_LCDIR "?.so" | |
#define LUA_LCPATH2 ";" LUA_LCDIR "loadall.so" | |
#define LUA_PATH_DEFAULT "./?.lua" LUA_JPATH LUA_LLPATH LUA_RLPATH | |
#define LUA_CPATH_DEFAULT "./?.so" LUA_LCPATH1 LUA_RCPATH LUA_LCPATH2 | |
#endif | |
/* Environment variable names for path overrides and initialization code. */ | |
#define LUA_PATH "LUA_PATH" | |
#define LUA_CPATH "LUA_CPATH" | |
#define LUA_INIT "LUA_INIT" | |
/* Special file system characters. */ | |
#if defined(_WIN32) | |
#define LUA_DIRSEP "\\" | |
#else | |
#define LUA_DIRSEP "/" | |
#endif | |
#define LUA_PATHSEP ";" | |
#define LUA_PATH_MARK "?" | |
#define LUA_EXECDIR "!" | |
#define LUA_IGMARK "-" | |
#define LUA_PATH_CONFIG \ | |
LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" \ | |
LUA_EXECDIR "\n" LUA_IGMARK | |
/* Quoting in error messages. */ | |
#define LUA_QL(x) "'" x "'" | |
#define LUA_QS LUA_QL("%s") | |
/* Various tunables. */ | |
#define LUAI_MAXSTACK 65500 /* Max. # of stack slots for a thread (<64K). */ | |
#define LUAI_MAXCSTACK 8000 /* Max. # of stack slots for a C func (<10K). */ | |
#define LUAI_GCPAUSE 200 /* Pause GC until memory is at 200%. */ | |
#define LUAI_GCMUL 200 /* Run GC at 200% of allocation speed. */ | |
#define LUA_MAXCAPTURES 32 /* Max. pattern captures. */ | |
/* Compatibility with older library function names. */ | |
#define LUA_COMPAT_MOD /* OLD: math.mod, NEW: math.fmod */ | |
#define LUA_COMPAT_GFIND /* OLD: string.gfind, NEW: string.gmatch */ | |
/* Configuration for the frontend (the luajit executable). */ | |
#if defined(luajit_c) | |
#define LUA_PROGNAME "luajit" /* Fallback frontend name. */ | |
#define LUA_PROMPT "> " /* Interactive prompt. */ | |
#define LUA_PROMPT2 ">> " /* Continuation prompt. */ | |
#define LUA_MAXINPUT 512 /* Max. input line length. */ | |
#endif | |
/* Note: changing the following defines breaks the Lua 5.1 ABI. */ | |
#define LUA_INTEGER ptrdiff_t | |
#define LUA_IDSIZE 60 /* Size of lua_Debug.short_src. */ | |
/* | |
** Size of lauxlib and io.* on-stack buffers. Weird workaround to avoid using | |
** unreasonable amounts of stack space, but still retain ABI compatibility. | |
** Blame Lua for depending on BUFSIZ in the ABI, blame **** for wrecking it. | |
*/ | |
#define LUAL_BUFFERSIZE (BUFSIZ > 16384 ? 8192 : BUFSIZ) | |
/* The following defines are here only for compatibility with luaconf.h | |
** from the standard Lua distribution. They must not be changed for LuaJIT. | |
*/ | |
#define LUA_NUMBER_DOUBLE | |
#define LUA_NUMBER double | |
#define LUAI_UACNUMBER double | |
#define LUA_NUMBER_SCAN "%lf" | |
#define LUA_NUMBER_FMT "%.14g" | |
#define lua_number2str(s, n) sprintf((s), LUA_NUMBER_FMT, (n)) | |
#define LUAI_MAXNUMBER2STR 32 | |
#define LUA_INTFRMLEN "l" | |
#define LUA_INTFRM_T long | |
/* Linkage of public API functions. */ | |
#if defined(LUA_BUILD_AS_DLL) | |
#if defined(LUA_CORE) || defined(LUA_LIB) | |
#define LUA_API __declspec(dllexport) | |
#else | |
#define LUA_API __declspec(dllimport) | |
#endif | |
#else | |
#define LUA_API extern | |
#endif | |
#define LUALIB_API LUA_API | |
/* Support for internal assertions. */ | |
#if defined(LUA_USE_ASSERT) || defined(LUA_USE_APICHECK) | |
#include <assert.h> | |
#endif | |
#ifdef LUA_USE_ASSERT | |
#define lua_assert(x) assert(x) | |
#endif | |
#ifdef LUA_USE_APICHECK | |
#define luai_apicheck(L, o) { (void)L; assert(o); } | |
#else | |
#define luai_apicheck(L, o) { (void)L; } | |
#endif | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** LuaJIT -- a Just-In-Time Compiler for Lua. http://luajit.org/ | |
** | |
** Copyright (C) 2005-2014 Mike Pall. All rights reserved. | |
** | |
** Permission is hereby granted, free of charge, to any person obtaining | |
** a copy of this software and associated documentation files (the | |
** "Software"), to deal in the Software without restriction, including | |
** without limitation the rights to use, copy, modify, merge, publish, | |
** distribute, sublicense, and/or sell copies of the Software, and to | |
** permit persons to whom the Software is furnished to do so, subject to | |
** the following conditions: | |
** | |
** The above copyright notice and this permission notice shall be | |
** included in all copies or substantial portions of the Software. | |
** | |
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
** | |
** [ MIT license: http://www.opensource.org/licenses/mit-license.php ] | |
*/ | |
#ifndef _LUAJIT_H | |
#define _LUAJIT_H | |
#include "lua.h" | |
#define LUAJIT_VERSION "LuaJIT 2.0.3" | |
#define LUAJIT_VERSION_NUM 20003 /* Version 2.0.3 = 02.00.03. */ | |
#define LUAJIT_VERSION_SYM luaJIT_version_2_0_3 | |
#define LUAJIT_COPYRIGHT "Copyright (C) 2005-2014 Mike Pall" | |
#define LUAJIT_URL "http://luajit.org/" | |
/* Modes for luaJIT_setmode. */ | |
#define LUAJIT_MODE_MASK 0x00ff | |
enum { | |
LUAJIT_MODE_ENGINE, /* Set mode for whole JIT engine. */ | |
LUAJIT_MODE_DEBUG, /* Set debug mode (idx = level). */ | |
LUAJIT_MODE_FUNC, /* Change mode for a function. */ | |
LUAJIT_MODE_ALLFUNC, /* Recurse into subroutine protos. */ | |
LUAJIT_MODE_ALLSUBFUNC, /* Change only the subroutines. */ | |
LUAJIT_MODE_TRACE, /* Flush a compiled trace. */ | |
LUAJIT_MODE_WRAPCFUNC = 0x10, /* Set wrapper mode for C function calls. */ | |
LUAJIT_MODE_MAX | |
}; | |
/* Flags or'ed in to the mode. */ | |
#define LUAJIT_MODE_OFF 0x0000 /* Turn feature off. */ | |
#define LUAJIT_MODE_ON 0x0100 /* Turn feature on. */ | |
#define LUAJIT_MODE_FLUSH 0x0200 /* Flush JIT-compiled code. */ | |
/* LuaJIT public C API. */ | |
/* Control the JIT engine. */ | |
LUA_API int luaJIT_setmode(lua_State *L, int idx, int mode); | |
/* Enforce (dynamic) linker error for version mismatches. Call from main. */ | |
LUA_API void LUAJIT_VERSION_SYM(void); | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** Standard library header. | |
** Copyright (C) 2005-2014 Mike Pall. See Copyright Notice in luajit.h | |
*/ | |
#ifndef _LUALIB_H | |
#define _LUALIB_H | |
#include "lua.h" | |
#define LUA_FILEHANDLE "FILE*" | |
#define LUA_COLIBNAME "coroutine" | |
#define LUA_MATHLIBNAME "math" | |
#define LUA_STRLIBNAME "string" | |
#define LUA_TABLIBNAME "table" | |
#define LUA_IOLIBNAME "io" | |
#define LUA_OSLIBNAME "os" | |
#define LUA_LOADLIBNAME "package" | |
#define LUA_DBLIBNAME "debug" | |
#define LUA_BITLIBNAME "bit" | |
#define LUA_JITLIBNAME "jit" | |
#define LUA_FFILIBNAME "ffi" | |
LUALIB_API int luaopen_base(lua_State *L); | |
LUALIB_API int luaopen_math(lua_State *L); | |
LUALIB_API int luaopen_string(lua_State *L); | |
LUALIB_API int luaopen_table(lua_State *L); | |
LUALIB_API int luaopen_io(lua_State *L); | |
LUALIB_API int luaopen_os(lua_State *L); | |
LUALIB_API int luaopen_package(lua_State *L); | |
LUALIB_API int luaopen_debug(lua_State *L); | |
LUALIB_API int luaopen_bit(lua_State *L); | |
LUALIB_API int luaopen_jit(lua_State *L); | |
LUALIB_API int luaopen_ffi(lua_State *L); | |
LUALIB_API void luaL_openlibs(lua_State *L); | |
#ifndef lua_assert | |
#define lua_assert(x) ((void)0) | |
#endif | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
print "Hello from Lua!"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
luajit -b main.lua main.o | |
gcc -O2 -Wall -Wl,-E -o app app.c main.o -Ixx -Lxx -lluajit-5.1 -lm -ldl |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment