X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/49e85177c669d793e84242983a1b1f430e47184e..6badbbf58554a35b03f58509b0b18cf606c38f5e:/src/bindings/lua/simgrid_lua.c diff --git a/src/bindings/lua/simgrid_lua.c b/src/bindings/lua/simgrid_lua.c index 2098267bac..587bca3c85 100644 --- a/src/bindings/lua/simgrid_lua.c +++ b/src/bindings/lua/simgrid_lua.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2014. The SimGrid Team. +/* Copyright (c) 2010-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -10,11 +10,12 @@ #include "lua_state_cloner.h" #include "lua_utils.h" #include "xbt.h" -#include "msg/msg.h" -#include "simdag/simdag.h" +#include "simgrid/msg.h" +#include "simgrid/simdag.h" #include "surf/surfxml_parse.h" #include + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(lua, bindings, "Lua Bindings"); static lua_State* sglua_maestro_state; @@ -42,6 +43,7 @@ static int launch_application(lua_State* L) { return 0; } + /** * \brief Creates the platform. * \param L a Lua state @@ -85,6 +87,20 @@ static int info(lua_State* L) { return 0; } +static int error(lua_State* L) { + + const char* str = luaL_checkstring(L, 1); + XBT_ERROR("%s", str); + return 0; +} + +static int critical(lua_State* L) { + + const char* str = luaL_checkstring(L, 1); + XBT_CRITICAL("%s", str); + return 0; +} + /** * \brief Runs your application. * \param L a Lua state @@ -170,6 +186,8 @@ static const luaL_Reg simgrid_functions[] = { {"launch_application", launch_application}, {"debug", debug}, {"info", info}, + {"critical", critical}, + {"error", error}, {"run", run}, {"get_clock", get_clock}, /* short names */ @@ -197,6 +215,7 @@ static const luaL_Reg simgrid_functions[] = { * * \param L the Lua state */ + int luaopen_simgrid(lua_State *L) { XBT_DEBUG("luaopen_simgrid *****"); @@ -232,10 +251,10 @@ int luaopen_simgrid(lua_State *L) argv[argc--] = NULL; /* Initialize the MSG core */ - MSG_init(&argc, argv); - MSG_process_set_data_cleanup((void_f_pvoid_t) lua_close); XBT_DEBUG("Still %d arguments on command line", argc); // FIXME: update the lua's arg table to reflect the changes from SimGrid } + MSG_init(&argc, argv); + MSG_process_set_data_cleanup((void_f_pvoid_t) lua_close); /* Keep the context mechanism informed of our lua world today */ sglua_maestro_state = L; @@ -273,25 +292,19 @@ lua_State* sglua_get_maestro(void) { static void sglua_register_core_functions(lua_State *L) { /* register the core C functions to lua */ - luaL_register(L, "simgrid", simgrid_functions); - /* simgrid */ + luaL_newlib(L, simgrid_functions); /* simgrid */ + lua_pushvalue(L, -1); /* simgrid simgrid */ + lua_setglobal(L, "simgrid"); /* simgrid */ /* set a finalizer that cleans simgrid, by adding to the simgrid module a * dummy userdata whose __gc metamethod calls MSG_clean() */ - lua_newuserdata(L, sizeof(void*)); - /* simgrid udata */ - lua_newtable(L); - /* simgrid udata mt */ - lua_pushcfunction(L, simgrid_gc); - /* simgrid udata mt simgrid_gc */ - lua_setfield(L, -2, "__gc"); - /* simgrid udata mt */ - lua_setmetatable(L, -2); - /* simgrid udata */ - lua_setfield(L, -2, "__simgrid_loaded"); - /* simgrid */ - lua_pop(L, 1); - /* -- */ + lua_newuserdata(L, sizeof(void*)); /* simgrid udata */ + lua_newtable(L); /* simgrid udata mt */ + lua_pushcfunction(L, simgrid_gc); /* simgrid udata mt simgrid_gc */ + lua_setfield(L, -2, "__gc"); /* simgrid udata mt */ + lua_setmetatable(L, -2); /* simgrid udata */ + lua_setfield(L, -2, "__simgrid_loaded"); /* simgrid */ + lua_pop(L, 1); /* -- */ } /** @@ -333,7 +346,7 @@ static int run_lua_code(int argc, char **argv) lua_pushstring(L, argv[i]); /* call the function */ - _XBT_GNUC_UNUSED int err; + XBT_ATTRIB_UNUSED int err; err = lua_pcall(L, argc - 1, 1, 0); xbt_assert(err == 0, "Error running function `%s': %s", argv[0], lua_tostring(L, -1)); @@ -341,7 +354,7 @@ static int run_lua_code(int argc, char **argv) /* retrieve result */ int res = 1; if (lua_isnumber(L, -1)) { - res = lua_tonumber(L, -1); + res = lua_tointeger(L, -1); lua_pop(L, 1); /* pop returned value */ }