diff --git a/build_file.cpp b/build_file.cpp index 1fe91c1..e83fb61 100644 --- a/build_file.cpp +++ b/build_file.cpp @@ -331,6 +331,11 @@ function AddCo(f) return Coroutines[i] end +function AddTest(f) + local ff = AddCo(f) + coroutine.resume(ff) +end + function OnUpdate() local new_co_list = {} for key, co in pairs(Coroutines) do @@ -343,6 +348,7 @@ function OnUpdate() Coroutines = new_co_list end + )=="; void GenerateConfig() { diff --git a/src/text_editor/generated.cpp b/src/text_editor/generated.cpp index 2d11a34..7dc2612 100644 --- a/src/text_editor/generated.cpp +++ b/src/text_editor/generated.cpp @@ -220,6 +220,11 @@ function AddCo(f) return Coroutines[i] end +function AddTest(f) + local ff = AddCo(f) + coroutine.resume(ff) +end + function OnUpdate() local new_co_list = {} for key, co in pairs(Coroutines) do @@ -233,6 +238,7 @@ function OnUpdate() end + )=="; void ReloadStyle() { ColorText = GetColor("Text", ColorText); diff --git a/src/text_editor/lua_api.cpp b/src/text_editor/lua_api.cpp index c85bc22..d9700de 100644 --- a/src/text_editor/lua_api.cpp +++ b/src/text_editor/lua_api.cpp @@ -160,19 +160,19 @@ int Lua_FileExists(lua_State *L) { } int Lua_GetWorkingDir(lua_State *L) { - lua_pushlstring(LuaState, WorkingDir.data, WorkingDir.len); + lua_pushlstring(L, WorkingDir.data, WorkingDir.len); return 1; } int Lua_GetActiveMainWindowBufferName(lua_State *L) { String name = GetActiveMainWindowBufferName(); - lua_pushlstring(LuaState, name.data, name.len); + lua_pushlstring(L, name.data, name.len); return 1; } int Lua_GetActiveMainWindowBufferDir(lua_State *L) { String name = GetActiveMainWindowBufferDir(); - lua_pushlstring(LuaState, name.data, name.len); + lua_pushlstring(L, name.data, name.len); return 1; } @@ -287,57 +287,62 @@ Color GetColor(String name, Color default_color) { return result; } -Int GetInt(const char *name) { - lua_getfield(LuaState, -1, name); - lua_Integer num = lua_tointeger(LuaState, -1); - lua_pop(LuaState, 1); +Int GetInt(lua_State *L, const char *name) { + lua_getfield(L, -1, name); + lua_Integer num = lua_tointeger(L, -1); + lua_pop(L, 1); return (Int)num; } -const char *GetString(const char *name) { - lua_getfield(LuaState, -1, name); - const char *result = lua_tostring(LuaState, -1); - lua_pop(LuaState, 1); +const char *GetString(lua_State *L, const char *name) { + lua_getfield(L, -1, name); + const char *result = lua_tostring(L, -1); + lua_pop(L, 1); return result; } -Vec2 GetVec2(const char *name) { +Vec2 GetVec2(lua_State *L, const char *name) { Vec2 result = {}; - lua_getfield(LuaState, -1, name); - defer { lua_pop(LuaState, 1); }; + lua_getfield(L, -1, name); + defer { lua_pop(L, 1); }; - lua_rawgeti(LuaState, -1, 1); - result.x = (float)lua_tonumber(LuaState, -1); - lua_pop(LuaState, 1); + { + lua_getfield(L, -1, "1"); + defer { lua_pop(L, 1); }; + result.x = (float)lua_tonumber(L, -1); + } - lua_rawgeti(LuaState, -1, 2); - result.x = (float)lua_tonumber(LuaState, -1); - lua_pop(LuaState, 1); + { + lua_getfield(L, -1, "2"); + defer { lua_pop(L, 1); }; + result.y = (float)lua_tonumber(L, -1); + } - lua_pop(LuaState, 3); return result; } // :Event int Lua_Play(lua_State *L) { - if (!lua_istable(L, -1)) luaL_error(LuaState, "expected a table of events"); + if (!lua_istable(L, -1)) luaL_error(L, "expected a table of events"); + defer { lua_pop(L, 1); }; - size_t size = lua_rawlen(L, -1); - for (size_t i = 0; i < size; i += 1) { - lua_rawgeti(L, -1, i + 1); + int size = (int)lua_rawlen(L, -1); + for (int i = 0; i < size; i += 1) { + lua_geti(L, -1, i + 1); + if (!lua_istable(L, -1)) luaL_error(L, "expected a table of events"); defer { lua_pop(L, 1); }; Event event = {}; - event.kind = (EventKind)GetInt("kind"); - event.key = (SDL_Keycode)GetInt("key"); - event.xmouse = (int16_t)GetInt("xmouse"); - event.ymouse = (int16_t)GetInt("ymouse"); - event.xwindow = (int16_t)GetInt("xwindow"); - event.ywindow = (int16_t)GetInt("ywindow"); - event.clicks = (uint8_t)GetInt("clicks"); - event.flags = (uint8_t)GetInt("flags"); - event.text = (char *)GetString("text"); - event.wheel = GetVec2("wheel"); + event.kind = (EventKind)GetInt(L, "kind"); + event.key = (SDL_Keycode)GetInt(L, "key"); + event.xmouse = (int16_t)GetInt(L, "xmouse"); + event.ymouse = (int16_t)GetInt(L, "ymouse"); + event.xwindow = (int16_t)GetInt(L, "xwindow"); + event.ywindow = (int16_t)GetInt(L, "ywindow"); + event.clicks = (uint8_t)GetInt(L, "clicks"); + event.flags = (uint8_t)GetInt(L, "flags"); + event.text = (char *)GetString(L, "text"); + event.wheel = GetVec2(L, "wheel"); Add(&EventPlayback, event); } @@ -384,10 +389,9 @@ void UpdateLua() { } } - lua_getglobal(LuaState, "OnUpdate"); - if (lua_pcall(LuaState, 0, 0, 0) != 0) { + if (luaL_dostring(LuaState, "OnUpdate()") != 0) { const char *error_message = lua_tostring(LuaState, -1); - ReportWarningf("Failed the call to OnUpdate! %s", error_message); + ReportWarningf("OnUpdate failed! %s", error_message); lua_pop(LuaState, 1); return; } diff --git a/src/text_editor/serializer.cpp b/src/text_editor/serializer.cpp index 806c4c9..15dad36 100644 --- a/src/text_editor/serializer.cpp +++ b/src/text_editor/serializer.cpp @@ -30,7 +30,7 @@ void Serialize(Serializer *s, String name, Vec2 *datum) { void Serialize(Serializer *s, String name, char **text) { String str = *text; - IKnowWhatImDoing_Appendf(s->buffer, "%.*s = \"(%.*s)\", ", FmtString(name), FmtString(str)); + IKnowWhatImDoing_Appendf(s->buffer, "%.*s = \"%.*s\", ", FmtString(name), FmtString(str)); } void SerializeBegin(Serializer *s) {