From d5e2895c2a896f0e2b38ad4c7d5e1a086f40f0c0 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 12 Sep 2009 18:03:27 +0000 Subject: [PATCH] added jtest git-svn-id: svn://anubis/misc/lua@131 bd8a9e45-a331-0410-811e-c64571078777 --- jtest/Makefile | 9 +++++ jtest/test.lua | 7 ++++ jtest/tut.cc | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 jtest/Makefile create mode 100644 jtest/test.lua create mode 100644 jtest/tut.cc diff --git a/jtest/Makefile b/jtest/Makefile new file mode 100644 index 0000000..859e6dd --- /dev/null +++ b/jtest/Makefile @@ -0,0 +1,9 @@ + +TARGET := tut +CPPFLAGS := -I/usr/include/lua5.1 +LDFLAGS := -llua5.1 + +all: $(TARGET) + +$(TARGET): $(TARGET).cc + $(CXX) -o $@ $(CPPFLAGS) $(CXXFLAGS) $^ $(LDFLAGS) diff --git a/jtest/test.lua b/jtest/test.lua new file mode 100644 index 0000000..8953505 --- /dev/null +++ b/jtest/test.lua @@ -0,0 +1,7 @@ + +io.write("Running test.lua\n") +a = my_function(1, 2, 3, "abc", "def") +io.write("my_function() returned ", a.val, "\n") + +a:func() + diff --git a/jtest/tut.cc b/jtest/tut.cc new file mode 100644 index 0000000..49ac960 --- /dev/null +++ b/jtest/tut.cc @@ -0,0 +1,97 @@ + +#include +#include +using namespace std; + +int mywrite(lua_State * L) +{ + int argc = lua_gettop(L); + + for ( int n = 1; n <= argc; ++n ) + { + cout << lua_tostring(L, n); + } + + return 0; +} + +int val_handler(lua_State * L) +{ + int argc = lua_gettop(L); + + cout << "val_handler(): argc = " << argc << endl; + lua_getfield(L, -1, "val"); + int the_val = lua_tointeger(L, -1); + lua_pop(L, 1); + + cout << "val_handler(): the_val = " << the_val << endl; + + return 0; +} + +int my_function(lua_State * L) +{ + int argc = lua_gettop(L); + + cerr << "-- my_function() called with " << argc + << " arguments:" << endl; + + for ( int n = 1; n <= argc; ++n ) + { + cerr << "-- argument " << n << ": " + << lua_tostring(L, n) << endl; + } + + /* construct return value */ + lua_newtable(L); + lua_pushinteger(L, 42); + lua_setfield(L, -2, "val"); + lua_pushcfunction(L, val_handler); + lua_setfield(L, -2, "func"); + return 1; // number of return values +} + +void report_errors(lua_State *L, int status) +{ + if ( status!=0 ) + { + cerr << "-- " << lua_tostring(L, -1) << endl; + lua_pop(L, 1); // remove error message + } +} + +int main(int argc, char ** argv) +{ + for ( int n = 1; n < argc; ++n ) + { + const char * file = argv[n]; + + lua_State * L = lua_open(); + +// luaL_openlibs(L); + luaL_Reg io_functions[] = { + { "write", mywrite }, + { NULL, NULL } + }; + luaL_register(L, "io", io_functions); + + // make my_function() available to Lua programs + lua_register(L, "my_function", my_function); + + cerr << "-- Loading file: " << file << endl; + + int s = luaL_loadfile(L, file); + + if ( s == 0 ) + { + // execute Lua program + s = lua_pcall(L, 0, LUA_MULTRET, 0); + } + + report_errors(L, s); + lua_close(L); + cerr << endl; + } + + return 0; +}