From 72cc9bd0ae4bf847c4519b0c508c300db8141eb3 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Wed, 1 Feb 2023 15:22:54 +0800 Subject: fix yue.to_ast(). --- CMakeLists.txt | 59 +++++++++++++++++++++++++++++++-------------- src/yuescript/yuescript.cpp | 6 +++-- yuescript-dev-1.rockspec | 2 +- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2de475c..fc2c234 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,27 +1,50 @@ project(yue CXX) cmake_minimum_required(VERSION 3.1) -set(LUA_LIBDIR ${LUA_INCDIR}/../lib " " ${LUA_INCDIR}/../../lib) +set(LUA_LIBDIR ${LUA_INCDIR}/../lib ${LUA_INCDIR}/../../lib) +set(LUA_INCLUDE_DIR "${LUA_INCDIR}") + +get_filename_component(LUA_EXEC_NAME ${LUA} NAME) +if (LUA_EXEC_NAME STREQUAL "luajit") + find_library(LUA_LIBRARIES + NAMES luajit libluajit + PATHS ${LUA_LIBDIR} + NO_DEFAULT_PATH) +elseif (LUA_EXEC_NAME MATCHES "lua5\.4" OR LUA_EXEC_NAME MATCHES "lua54") + find_library(LUA_LIBRARIES + NAMES lua54 lua5.4 liblua54 liblua5.4 lua liblua + PATHS ${LUA_LIBDIR} + NO_DEFAULT_PATH) +elseif (LUA_EXEC_NAME MATCHES "lua5\.3" OR LUA_EXEC_NAME MATCHES "lua53") + find_library(LUA_LIBRARIES + NAMES lua53 lua5.3 liblua53 liblua5.3 lua liblua + PATHS ${LUA_LIBDIR} + NO_DEFAULT_PATH) +elseif (LUA_EXEC_NAME MATCHES "lua5\.2" OR LUA_EXEC_NAME MATCHES "lua52") + find_library(LUA_LIBRARIES + NAMES lua52 lua5.2 liblua52 liblua5.2 lua liblua + PATHS ${LUA_LIBDIR} + NO_DEFAULT_PATH) +elseif (LUA_EXEC_NAME MATCHES "lua5\.1" OR LUA_EXEC_NAME MATCHES "lua51") + find_library(LUA_LIBRARIES + NAMES lua51 lua5.1 liblua51 liblua5.1 lua liblua + PATHS ${LUA_LIBDIR} + NO_DEFAULT_PATH) +else () + find_library(LUA_LIBRARIES + NAMES lua liblua + PATHS ${LUA_LIBDIR} + NO_DEFAULT_PATH) +endif() -find_package(Lua) -if (LUA_FOUND) - set(LUA_LIBRARIES "${LUA_LIBRARY}") +if (LUA_LIBRARIES MATCHES "LUA_LIBRARIES-NOTFOUND") + find_package(Lua) + if (LUA_FOUND) + set(LUA_LIBRARIES "${LUA_LIBRARY}") + endif() else () message(STATUS "Lua: using information from luarocks") - set(LUA_INCLUDE_DIR "${LUA_INCDIR}") - get_filename_component(LUA_EXEC_NAME ${LUA} NAME_WE) - if (LUA_EXEC_NAME STREQUAL "luajit") - find_library(LUA_LIBRARIES - NAMES luajit libluajit - PATHS ${LUA_LIBDIR} - NO_DEFAULT_PATH) - elseif () - find_library(LUA_LIBRARIES - NAMES lua lua54 lua53 lua52 lua51 liblua liblua54 liblua53 liblua52 liblua51 liblua5.4 liblua5.3 liblua5.2 liblua5.1 - PATHS ${LUA_LIBDIR} - NO_DEFAULT_PATH) - endif() -endif() +endif() message(STATUS "Lua: " ${LUA}) message(STATUS "Lua include: " ${LUA_INCLUDE_DIR}) diff --git a/src/yuescript/yuescript.cpp b/src/yuescript/yuescript.cpp index 20fa258..ed09aaa 100644 --- a/src/yuescript/yuescript.cpp +++ b/src/yuescript/yuescript.cpp @@ -161,7 +161,7 @@ struct yue_stack { static int yuetoast(lua_State* L) { size_t size = 0; const char* input = luaL_checklstring(L, 1, &size); - int flattenLevel = 2; + int flattenLevel = 0; if (lua_isnoneornil(L, 2) == 0) { flattenLevel = static_cast(luaL_checkinteger(L, 2)); flattenLevel = std::max(std::min(2, flattenLevel), 0); @@ -270,8 +270,10 @@ static int yuetoast(lua_State* L) { lua_pushinteger(L, node->m_begin.m_col); lua_rawseti(L, -2, 3); for (int i = count, j = 4; i >= 1; i--, j++) { - lua_rawgeti(L, tableIndex, len); + lua_rawgeti(L, tableIndex, len - i + 1); lua_rawseti(L, -2, j); + } + for (int i = 1; i <= count; i++) { lua_pushnil(L); lua_rawseti(L, tableIndex, len); len--; diff --git a/yuescript-dev-1.rockspec b/yuescript-dev-1.rockspec index bcf4933..397254b 100644 --- a/yuescript-dev-1.rockspec +++ b/yuescript-dev-1.rockspec @@ -19,8 +19,8 @@ dependencies = { build = { type = "cmake", variables = { - LUA_INCDIR = "$(LUA_INCDIR)", LUA = "$(LUA)", + LUA_INCDIR = "$(LUA_INCDIR)", CMAKE_BUILD_TYPE="Release" }, install = { -- cgit v1.2.3-55-g6feb