pika_lua.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "pika_lua.h"
  2. #include "dataStrs.h"
  3. #include "lauxlib.h"
  4. #include "lualib.h"
  5. /* if there is already a lua_State, extern pika_L to it */
  6. lua_State* pika_L = NULL;
  7. void pika_lua___init__(PikaObj* self) {
  8. /* not found exist lua_State, create One */
  9. if (NULL == pika_L) {
  10. pika_L = luaL_newstate(); /* create state */
  11. luaL_openlibs(pika_L);
  12. obj_setInt(self, "needfree", PIKA_TRUE);
  13. __platform_printf("lua luached!\r\n");
  14. }
  15. }
  16. void pika_lua_eval(PikaObj* self, char* cmd) {
  17. int res = luaL_dostring(pika_L, cmd);
  18. if (LUA_OK != res) {
  19. obj_setErrorCode(self, PIKA_RES_ERR_OPERATION_FAILED);
  20. obj_setSysOut(self, "Error: Lua dostring faild.\r\n");
  21. }
  22. }
  23. void pika_lua___exit__(PikaObj* self) {
  24. /* close the lua_State created */
  25. if (PIKA_TRUE == obj_getInt(self, "needfree")) {
  26. lua_close(pika_L);
  27. }
  28. }
  29. void pika_lua_evalLine(PikaObj* self, char* line) {
  30. Args buffs = {0};
  31. char* line_with_end = strsAppend(&buffs, line, "\n");
  32. pika_lua_eval(self, line_with_end);
  33. strsDeinit(&buffs);
  34. }