1 /* Copyright (c) 2010-2020. The SimGrid Team.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
8 * This file contains functions that aid users to debug their lua scripts; for instance,
9 * tables can be easily output and values are represented in a human-readable way. (For instance,
10 * a nullptr value becomes the string "nil").
13 /* SimGrid Lua helper functions */
14 #include "lua_utils.hpp"
17 #include <xbt/string.hpp>
20 * @brief Returns a string representation of a value in the Lua stack.
22 * This function is for debugging purposes.
24 * @param L the Lua state
25 * @param index index in the stack
26 * @return a string representation of the value at this index
28 std::string sglua_tostring(lua_State* L, int index)
32 switch (lua_type(L, index)) {
38 buff = simgrid::xbt::string_printf("%.3f", lua_tonumber(L, index));
42 buff = lua_toboolean(L, index) ? "true" : "false";
46 buff = simgrid::xbt::string_printf("'%s'", lua_tostring(L, index));
50 buff = lua_iscfunction(L, index) ? "C-function" : "function";
54 buff = simgrid::xbt::string_printf("table(%p)", lua_topointer(L, index));
57 case LUA_TLIGHTUSERDATA:
59 buff = simgrid::xbt::string_printf("userdata(%p)", lua_touserdata(L, index));
67 buff = simgrid::xbt::string_printf("unknown(%d)", lua_type(L, index));
74 * @brief Returns a string representation of a key-value pair.
76 * @param L the Lua state
77 * @param key_index index of the key (in the lua stack)
78 * @param value_index index of the value (in the lua stack)
79 * @return a string representation of the key-value pair
81 std::string sglua_keyvalue_tostring(lua_State* L, int key_index, int value_index)
83 return std::string("[") + sglua_tostring(L, key_index) + "] -> " + sglua_tostring(L, value_index);