-/* Copyright (c) 2010-2013. 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
#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 <lauxlib.h>
+
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(lua, bindings, "Lua Bindings");
static lua_State* sglua_maestro_state;
return 0;
}
+
/**
* \brief Creates the platform.
* \param L a Lua state
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
{"launch_application", launch_application},
{"debug", debug},
{"info", info},
+ {"critical", critical},
+ {"error", error},
{"run", run},
{"get_clock", get_clock},
/* short names */
*
* \param L the Lua state
*/
+
int luaopen_simgrid(lua_State *L)
{
XBT_DEBUG("luaopen_simgrid *****");
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;
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); /* -- */
}
/**
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));
/* 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 */
}