From 66f5b704ee4371d3388f10293280a11a1f59fbd3 Mon Sep 17 00:00:00 2001 From: Mike Nolan Date: Thu, 16 Apr 2026 19:08:18 -0500 Subject: [PATCH] Fixed cmake, unnecessary itteration on dictionary, and a crosslang binary bug when shell is not installed --- CMakeLists.txt | 349 ++-------------------------------- Packaging/Linux/PKGBUILD | 11 +- Packaging/Linux/version.sh | 2 +- changelog.md | 5 +- cmake/exec.cmake | 57 ++++++ cmake/linkdeps.cmake | 62 ++++++ cmake/options.cmake | 18 ++ cmake/shared.cmake | 34 ++++ cmake/shared_exec.cmake | 37 ++++ cmake/slim.cmake | 21 ++ cmake/sources.cmake | 66 +++++++ cmake/static_exec.cmake | 28 +++ cmake/version.cmake | 3 + src/program_lib/crosslang.cpp | 36 ++-- src/types/dictionary.cpp | 24 ++- 15 files changed, 376 insertions(+), 377 deletions(-) create mode 100644 cmake/exec.cmake create mode 100644 cmake/linkdeps.cmake create mode 100644 cmake/options.cmake create mode 100644 cmake/shared.cmake create mode 100644 cmake/shared_exec.cmake create mode 100644 cmake/slim.cmake create mode 100644 cmake/sources.cmake create mode 100644 cmake/static_exec.cmake create mode 100644 cmake/version.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7fccb46..deaba6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,7 @@ cmake_minimum_required(VERSION 3.16) -set(CROSSLANG_MAJOR_VERSION 0) -set(CROSSLANG_MINOR_VERSION 0) -set(CROSSLANG_PATCH_VERSION 2) +include(cmake/version.cmake) +include(cmake/options.cmake) project(TessesCrossLang VERSION ${CROSSLANG_MAJOR_VERSION}.${CROSSLANG_MINOR_VERSION}.${CROSSLANG_PATCH_VERSION}) @@ -12,39 +11,12 @@ set(CMAKE_CXX_STANDARD 17) include(CMakePackageConfigHelpers) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) -#option(CROSSLANG_ENABLE_DOXYGEN "Enable doxygen" ON) - -option(CROSSLANG_ENABLE_STATIC "Enable Tesses CrossLang static libraries" ON) -option(CROSSLANG_ENABLE_SHARED "Enable Tesses CrossLang shared libraries" ON) -option(CROSSLANG_ENABLE_BINARIES "Enable Tesses CrossLang binaries" ON) -option(CROSSLANG_INSTALL_DEVELOPMENT "Enable Tesses CrossLang development files" ON) -option(CROSSLANG_ENABLE_THREADING "Enable Tesses CrossLang threading" ON) -option(CROSSLANG_ENABLE_TERMIOS "Enable termios (For changing terminal options)" ON) -option(CROSSLANG_SHARED_EXECUTABLES "Link with libcrosslang_shared" ON) -option(CROSSLANG_FETCHCONTENT "Use fetchcontent" ON) -option(CROSSLANG_ENABLE_CONFIG_ENVVAR "Allow setting config directory via the environment variable CROSSLANG_CONFIG" ON) -option(CROSSLANG_ENABLE_FFI "Enable libffi" OFF) -option(CROSSLANG_ENABLE_RPATH "Enable RPATH" ON) -option(CROSSLANG_ENABLE_SUPERSLIM "Enable crosslang superslim, one binary" OFF) - -option(CROSSLANG_CUSTOM_CONSOLE "Enable custom Console" OFF) - -#if(CROSSLANG_ENABLE_DOXYGEN) -#find_package(Doxygen REQUIRED) -#doxygen_add_docs(doxygen-crosslang "${CMAKE_CURRENT_SOURCE_DIR}/include/CrossLang.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/docs" "${CMAKE_CURRENT_SOURCE_DIR}/README.md") -#add_custom_target(crosslang_doxygen ALL -# COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile.doxygen-crosslang -# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -#) - -#endif() if(CROSSLANG_CUSTOM_CONSOLE) set(CROSSLANG_ENABLE_BINARIES OFF) set(CROSSLANG_ENABLE_SHARED OFF) endif() -set(CROSSLANG_OFFLINE_SHELL_PACKAGE "" CACHE FILEPATH "Path to the shell package generated from https://onedev.site.tesses.net/CrossLang/CrossLangExtras") if(CROSSLANG_FETCHCONTENT) @@ -78,140 +50,13 @@ endif() if(CROSSLANG_ENABLE_FFI) find_package(PkgConfig) endif() - +include(cmake/linkdeps.cmake) if(CROSSLANG_ENABLE_FFI AND CROSSLANG_ENABLE_SHARED) pkg_check_modules(LIBFFI REQUIRED IMPORTED_TARGET libffi) endif() -function(CROSSLANG_LINK_DEPS CROSSLANG_TARGET_NAME) -target_include_directories(${CROSSLANG_TARGET_NAME} - PUBLIC - "$" - "$" -) -if(CROSSLANG_ENABLE_FFI AND CROSSLANG_ENABLE_SHARED) - -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_FFI) -target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC PkgConfig::LIBFFI) - -endif() -if(CROSSLANG_ENABLE_SUPERSLIM) - -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_SUPERSLIM) -endif() -if(CROSSLANG_ENABLE_TIME) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_TIME) -endif() -if(CROSSLANG_ENABLE_CONFIG_ENVVAR) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_CONFIG_ENVVAR) -endif() -if(CROSSLANG_ENABLE_PROCESS) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_PROCESS) -endif() -if(CROSSLANG_ENABLE_THREADING) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_THREADING) -endif() -if(CROSSLANG_ENABLE_TERMIOS) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_TERMIOS) -endif() - -if(CROSSLANG_ENABLE_SQLITE) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_SQLITE) -endif() - -if(CROSSLANG_CUSTOM_CONSOLE) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_CUSTOM_CONSOLE) -endif() -if(CROSSLANG_ENABLE_PLATFORM_FOLDERS) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_PLATFORM_FOLDERS) -endif() -if(CROSSLANG_ENABLE_SHARED) -target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_SHARED) - -endif() -if("${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoGameCube") -target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC fat) -endif() -if("${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii") -target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC wiisocket) -endif() -if(CROSSLANG_ENABLE_SHARED AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")) -target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC dl) -endif() -target_include_directories(${CROSSLANG_TARGET_NAME} - PUBLIC - "$" - "$" -) - -endfunction() configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/CrossLangVersion.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/CrossLangVersion.h" INSTALL_DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/CrossLangVersion.h) -list(APPEND CROSSLANG_SOURCE -src/vm/bc/add.cpp -src/vm/bc/sub.cpp -src/vm/bc/getfield.cpp -src/vm/bc/setfield.cpp -src/vm/bc/tostring.cpp -src/vm/bc/equals.cpp -src/vm/bc/invokemethod.cpp -src/vm/bc/executemethod2.cpp -src/vm/bc/invoketwo.cpp -src/vm/bc/tobool.cpp -src/assembler/asm.cpp -src/assembler/disasm.cpp -src/assembler/merge.cpp -src/compiler/codegen.cpp -src/compiler/lexer.cpp -src/compiler/parser.cpp -src/compiler/ast.cpp -src/runtime_methods/uuid.cpp -src/runtime_methods/class.cpp -src/runtime_methods/console.cpp -src/runtime_methods/io.cpp -src/runtime_methods/std.cpp -src/runtime_methods/net.cpp -src/runtime_methods/vm.cpp -src/runtime_methods/json.cpp -src/runtime_methods/sqlite.cpp -src/runtime_methods/dictionary.cpp -src/runtime_methods/crypto.cpp -src/runtime_methods/ogc.cpp -src/runtime_methods/path.cpp -src/runtime_methods/env.cpp -src/runtime_methods/process.cpp -src/runtime_methods/helpers.cpp -src/types/embed.cpp -src/types/async.cpp -src/types/associativearray.cpp -src/types/any.cpp -src/types/ittr.cpp -src/types/closure.cpp -src/types/dictionary.cpp -src/types/externalmethod.cpp -src/types/list.cpp -src/types/native.cpp -src/types/rootenvironment.cpp -src/types/subenvironment.cpp -src/types/vfsheapobject.cpp -src/types/streamheapobject.cpp -src/types/class.cpp -src/types/classenvironment.cpp -src/types/random.cpp -src/vm/filereader.cpp -src/vm/gc.cpp -src/vm/gclist.cpp -src/vm/vm.cpp -src/vm/exception.cpp -src/archive.cpp -src/markedtobject.cpp -src/program_lib/crossarchivecreate.cpp -src/program_lib/crossarchiveextract.cpp -src/program_lib/crossdump.cpp -src/program_lib/crosslang.cpp -src/program_lib/crosslangcompiler.cpp -src/program_lib/crosslanginterperter.cpp -src/program_lib/crosslangvm.cpp -) +include(cmake/sources.cmake) if(CROSSLANG_OFFLINE_SHELL_PACKAGE STREQUAL "") @@ -258,193 +103,21 @@ endif() if(CROSSLANG_ENABLE_SUPERSLIM) -add_executable(crosslang WIN32 src/programs/slim.cpp ${CROSSLANG_WIN32_EXE_SRC}) - -if(CROSSLANG_ENABLE_STATIC) - -target_link_libraries(crosslang PUBLIC crosslang_static) -elseif(CROSSLANG_ENABLE_SHARED) -target_link_libraries(crosslang PUBLIC crosslang_shared) -endif() - -if(CROSSLANG_ENABLE_SHARED) - -install(TARGETS crosslang_shared - EXPORT TessesCrossLangTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -) - -endif() - -install(TARGETS crosslang DESTINATION "${CMAKE_INSTALL_BINDIR}") +include(cmake/slim.cmake) else() - -if(CROSSLANG_INSTALL_DEVELOPMENT) -install(TARGETS ${TessesCrossLangLibs} - EXPORT TessesCrossLangTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} -) - -install(FILES include/CrossLang.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/CrossLangVersion.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(EXPORT TessesCrossLangTargets - FILE TessesCrossLangTargets.cmake - NAMESPACE TessesCrossLang:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesCrossLang -) - -configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TessesCrossLangConfig.cmake" -INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesCrossLang) - - -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TessesCrossLangConfig.cmake" -DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesCrossLang) -else() - -if(CROSSLANG_ENABLE_SHARED) -install(TARGETS crosslang_shared - EXPORT TessesCrossLangTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -) - -endif() -endif() +include(cmake/shared.cmake) if(CROSSLANG_ENABLE_BINARIES) if(CROSSLANG_ENABLE_SHARED AND CROSSLANG_SHARED_EXECUTABLES) -if(CROSSLANG_ENABLE_RPATH) -set(CMAKE_MACOSX_RPATH 1) -set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) -if (APPLE) - set(CMAKE_INSTALL_RPATH "@executable_path/../${CMAKE_INSTALL_LIBDIR}") -else() - set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") -endif() -endif() -add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) - -add_executable(crossc src/programs/crosslangcompiler.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossvm src/programs/crosslangvm.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossint src/programs/crosslanginterperter.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossdump src/programs/crosslangdump.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crosslang src/programs/crosslang.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossarchiveextract src/programs/crossarchiveextract.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossarchivecreate src/programs/crossarchivecreate.cpp ${CROSSLANG_WIN32_EXE_SRC}) -if(NOT WIN32) -add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_WIN32_EXE_SRC}) -endif() -target_link_libraries(crossc PUBLIC crosslang_shared) -target_link_libraries(crossvm PUBLIC crosslang_shared) -target_link_libraries(crossint PUBLIC crosslang_shared) -target_link_libraries(crossdump PUBLIC crosslang_shared) -target_link_libraries(crosslang PUBLIC crosslang_shared) -target_link_libraries(crossarchiveextract PUBLIC crosslang_shared) -target_link_libraries(crossarchivecreate PUBLIC crosslang_shared) -target_link_libraries(crossasm PUBLIC crosslang_shared) -target_link_libraries(crossdisasm PUBLIC crosslang_shared) -target_link_libraries(crossmerge PUBLIC crosslang_shared) - -if(NOT WIN32) -target_link_libraries(crossthumbnailer PUBLIC crosslang_shared) -endif() +include(cmake/shared_exec.cmake) elseif(CROSSLANG_ENABLE_STATIC) - -add_executable(crossc src/programs/crosslangcompiler.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossvm src/programs/crosslangvm.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossint src/programs/crosslanginterperter.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossdump src/programs/crosslangdump.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crosslang src/programs/crosslang.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossarchiveextract src/programs/crossarchiveextract.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossarchivecreate src/programs/crossarchivecreate.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_WIN32_EXE_SRC}) - -if(NOT WIN32) -add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_WIN32_EXE_SRC}) -endif() -target_link_libraries(crossc PUBLIC crosslang_static) -target_link_libraries(crossvm PUBLIC crosslang_static) -target_link_libraries(crossint PUBLIC crosslang_static) -target_link_libraries(crossdump PUBLIC crosslang_static) -target_link_libraries(crosslang PUBLIC crosslang_static) -target_link_libraries(crossarchiveextract PUBLIC crosslang_static) -target_link_libraries(crossarchivecreate PUBLIC crosslang_static) -target_link_libraries(crossmerge PUBLIC crosslang_static) -target_link_libraries(crossasm PUBLIC crosslang_static) -target_link_libraries(crossdisasm PUBLIC crosslang_static) - -if(NOT WIN32) -target_link_libraries(crossthumbnailer PUBLIC crosslang_static) -endif() +include(cmake/static_exec.cmake) else() -add_executable(crossc src/programs/crosslangcompiler.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossvm src/programs/crosslangvm.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossint src/programs/crosslanginterperter.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossdump src/programs/crosslangdump.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crosslang src/programs/crosslang.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossarchiveextract src/programs/crossarchiveextract.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossarchivecreate src/programs/crossarchivecreate.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +include(cmake/exec.cmake) +endif() -if(NOT WIN32) -add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) -endif() -CROSSLANG_LINK_DEPS(crossc) -CROSSLANG_LINK_DEPS(crossvm) -CROSSLANG_LINK_DEPS(crossint) -CROSSLANG_LINK_DEPS(crosslang) -CROSSLANG_LINK_DEPS(crossdump) -CROSSLANG_LINK_DEPS(crossarchiveextract) -CROSSLANG_LINK_DEPS(crossarchivecreate) -CROSSLANG_LINK_DEPS(crossmerge) -CROSSLANG_LINK_DEPS(crossdisasm) -CROSSLANG_LINK_DEPS(crossasm) - -if(NOT WIN32) -CROSSLANG_LINK_DEPS(crossthumbnailer) -endif() -if(CROSSLANG_FETCHCONTENT) -target_link_libraries(crossc PUBLIC tessesframework) -target_link_libraries(crossvm PUBLIC tessesframework) -target_link_libraries(crossint PUBLIC tessesframework) -target_link_libraries(crosslang PUBLIC tessesframework) -target_link_libraries(crossdump PUBLIC tessesframework) -target_link_libraries(crossarchiveextract PUBLIC tessesframework) -target_link_libraries(crossarchivecreate PUBLIC tessesframework) -target_link_libraries(crossasm PUBLIC tessesframework) -target_link_libraries(crossdisasm PUBLIC tessesframework) -target_link_libraries(crossmerge PUBLIC tessesframework) -if(NOT WIN32) -target_link_libraries(crossthumbnailer PUBLIC tessesframework) -endif() -else() -target_link_libraries(crossc PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossvm PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossint PUBLIC TessesFramework::tessesframework) -target_link_libraries(crosslang PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossdump PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossarchiveextract PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossarchivecreate PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossasm PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossdisasm PUBLIC TessesFramework::tessesframework) -target_link_libraries(crossmerge PUBLIC TessesFramework::tessesframework) -if(NOT WIN32) -target_link_libraries(crossthumbnailer PUBLIC TessesFramework::tessesframework) -endif() -endif() -endif() install(TARGETS crossc DESTINATION "${CMAKE_INSTALL_BINDIR}") install(TARGETS crossvm DESTINATION "${CMAKE_INSTALL_BINDIR}") install(TARGETS crossint DESTINATION "${CMAKE_INSTALL_BINDIR}") @@ -512,4 +185,4 @@ set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOL include(CPack) if(CROSSLANG_INSTALL_DEVELOPMENT) add_subdirectory(pkgconfig) -endif() \ No newline at end of file +endif() diff --git a/Packaging/Linux/PKGBUILD b/Packaging/Linux/PKGBUILD index f1d3928..24d8e5a 100644 --- a/Packaging/Linux/PKGBUILD +++ b/Packaging/Linux/PKGBUILD @@ -1,13 +1,13 @@ # Maintainer: Mike Nolan pkgname=crosslang # '-bzr', '-git', '-hg' or '-svn' -pkgver=0.0.2 +pkgver=0.0.3 pkgrel=1 pkgdesc="" arch=('x86_64' 'powerpc') url="https://onedev.site.tesses.net/crosslang" license=('GPLv3') groups=() -depends=('mbedtls' 'tesses-framework') +depends=('mbedtls' 'tesses-framework=0.0.2') makedepends=('git' 'cmake' 'make' 'base-devel' 'wget') # 'bzr', 'git', 'mercurial' or 'subversion' install= source=('crosslang::git+https://onedev.site.tesses.net/crosslang') @@ -30,16 +30,16 @@ prepare() { build() { cd "$srcdir/${pkgname}" mkdir build - + if [[ -z "$CMAKE_TOOLCHAIN" ]]; then cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr -DCROSSLANG_FETCHCONTENT=OFF -DCMAKE_BUILD_TYPE=Release else cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr -DCROSSLANG_FETCHCONTENT=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$CMAKE_TOOLCHAIN" fi - + cd build make -j`nproc` - + } @@ -49,4 +49,3 @@ package() { cd "$srcdir/${pkgname}/build" make install DESTDIR="$pkgdir/" } - diff --git a/Packaging/Linux/version.sh b/Packaging/Linux/version.sh index b58f59d..3746ddb 100644 --- a/Packaging/Linux/version.sh +++ b/Packaging/Linux/version.sh @@ -1,2 +1,2 @@ -export DEB_VERSION=0.0.2 \ No newline at end of file +export DEB_VERSION=0.0.3 diff --git a/changelog.md b/changelog.md index e92ab97..f275954 100644 --- a/changelog.md +++ b/changelog.md @@ -1,7 +1,10 @@ # Changelog +## 0.0.3 +Fixed cmake, unnecessary itteration on dictionary, and a crosslang binary bug when shell is not installed + ## 0.0.2 Add uuids, bytestreams and single file runtime binaries ## 0.0.1 -Start versioning \ No newline at end of file +Start versioning diff --git a/cmake/exec.cmake b/cmake/exec.cmake new file mode 100644 index 0000000..51512ee --- /dev/null +++ b/cmake/exec.cmake @@ -0,0 +1,57 @@ +add_executable(crossc src/programs/crosslangcompiler.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossvm src/programs/crosslangvm.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossint src/programs/crosslanginterperter.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdump src/programs/crosslangdump.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crosslang src/programs/crosslang.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossarchiveextract src/programs/crossarchiveextract.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossarchivecreate src/programs/crossarchivecreate.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) + +if(NOT WIN32) +add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_SOURCE} ${CROSSLANG_WIN32_EXE_SRC}) +endif() +CROSSLANG_LINK_DEPS(crossc) +CROSSLANG_LINK_DEPS(crossvm) +CROSSLANG_LINK_DEPS(crossint) +CROSSLANG_LINK_DEPS(crosslang) +CROSSLANG_LINK_DEPS(crossdump) +CROSSLANG_LINK_DEPS(crossarchiveextract) +CROSSLANG_LINK_DEPS(crossarchivecreate) +CROSSLANG_LINK_DEPS(crossmerge) +CROSSLANG_LINK_DEPS(crossdisasm) +CROSSLANG_LINK_DEPS(crossasm) + +if(NOT WIN32) +CROSSLANG_LINK_DEPS(crossthumbnailer) +endif() +if(CROSSLANG_FETCHCONTENT) +target_link_libraries(crossc PUBLIC tessesframework) +target_link_libraries(crossvm PUBLIC tessesframework) +target_link_libraries(crossint PUBLIC tessesframework) +target_link_libraries(crosslang PUBLIC tessesframework) +target_link_libraries(crossdump PUBLIC tessesframework) +target_link_libraries(crossarchiveextract PUBLIC tessesframework) +target_link_libraries(crossarchivecreate PUBLIC tessesframework) +target_link_libraries(crossasm PUBLIC tessesframework) +target_link_libraries(crossdisasm PUBLIC tessesframework) +target_link_libraries(crossmerge PUBLIC tessesframework) +if(NOT WIN32) +target_link_libraries(crossthumbnailer PUBLIC tessesframework) +endif() +else() +target_link_libraries(crossc PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossvm PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossint PUBLIC TessesFramework::tessesframework) +target_link_libraries(crosslang PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossdump PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossarchiveextract PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossarchivecreate PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossasm PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossdisasm PUBLIC TessesFramework::tessesframework) +target_link_libraries(crossmerge PUBLIC TessesFramework::tessesframework) +if(NOT WIN32) +target_link_libraries(crossthumbnailer PUBLIC TessesFramework::tessesframework) +endif() +endif() diff --git a/cmake/linkdeps.cmake b/cmake/linkdeps.cmake new file mode 100644 index 0000000..7c284f5 --- /dev/null +++ b/cmake/linkdeps.cmake @@ -0,0 +1,62 @@ +function(CROSSLANG_LINK_DEPS CROSSLANG_TARGET_NAME) +target_include_directories(${CROSSLANG_TARGET_NAME} + PUBLIC + "$" + "$" +) +if(CROSSLANG_ENABLE_FFI AND CROSSLANG_ENABLE_SHARED) + +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_FFI) +target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC PkgConfig::LIBFFI) + +endif() +if(CROSSLANG_ENABLE_SUPERSLIM) + +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_SUPERSLIM) +endif() +if(CROSSLANG_ENABLE_TIME) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_TIME) +endif() +if(CROSSLANG_ENABLE_CONFIG_ENVVAR) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_CONFIG_ENVVAR) +endif() +if(CROSSLANG_ENABLE_PROCESS) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_PROCESS) +endif() +if(CROSSLANG_ENABLE_THREADING) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_THREADING) +endif() +if(CROSSLANG_ENABLE_TERMIOS) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_TERMIOS) +endif() + +if(CROSSLANG_ENABLE_SQLITE) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_SQLITE) +endif() + +if(CROSSLANG_CUSTOM_CONSOLE) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_CUSTOM_CONSOLE) +endif() +if(CROSSLANG_ENABLE_PLATFORM_FOLDERS) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_PLATFORM_FOLDERS) +endif() +if(CROSSLANG_ENABLE_SHARED) +target_compile_definitions(${CROSSLANG_TARGET_NAME} PUBLIC CROSSLANG_ENABLE_SHARED) + +endif() +if("${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoGameCube") +target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC fat) +endif() +if("${CMAKE_SYSTEM_NAME}" STREQUAL "NintendoWii") +target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC wiisocket) +endif() +if(CROSSLANG_ENABLE_SHARED AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")) +target_link_libraries(${CROSSLANG_TARGET_NAME} PUBLIC dl) +endif() +target_include_directories(${CROSSLANG_TARGET_NAME} + PUBLIC + "$" + "$" +) + +endfunction() diff --git a/cmake/options.cmake b/cmake/options.cmake new file mode 100644 index 0000000..95d7e18 --- /dev/null +++ b/cmake/options.cmake @@ -0,0 +1,18 @@ +option(CROSSLANG_ENABLE_STATIC "Enable Tesses CrossLang static libraries" ON) +option(CROSSLANG_ENABLE_SHARED "Enable Tesses CrossLang shared libraries" ON) +option(CROSSLANG_ENABLE_BINARIES "Enable Tesses CrossLang binaries" ON) +option(CROSSLANG_INSTALL_DEVELOPMENT "Enable Tesses CrossLang development files" ON) +option(CROSSLANG_ENABLE_THREADING "Enable Tesses CrossLang threading" ON) +option(CROSSLANG_ENABLE_TERMIOS "Enable termios (For changing terminal options)" ON) +option(CROSSLANG_SHARED_EXECUTABLES "Link with libcrosslang_shared" ON) +option(CROSSLANG_FETCHCONTENT "Use fetchcontent" ON) +option(CROSSLANG_ENABLE_CONFIG_ENVVAR "Allow setting config directory via the environment variable CROSSLANG_CONFIG" ON) +option(CROSSLANG_ENABLE_FFI "Enable libffi" OFF) +option(CROSSLANG_ENABLE_RPATH "Enable RPATH" ON) +option(CROSSLANG_ENABLE_SUPERSLIM "Enable crosslang superslim, one binary" OFF) + +option(CROSSLANG_CUSTOM_CONSOLE "Enable custom Console" OFF) + + + +set(CROSSLANG_OFFLINE_SHELL_PACKAGE "" CACHE FILEPATH "Path to the shell package generated from https://onedev.site.tesses.net/CrossLang/CrossLangExtras") diff --git a/cmake/shared.cmake b/cmake/shared.cmake new file mode 100644 index 0000000..9d35304 --- /dev/null +++ b/cmake/shared.cmake @@ -0,0 +1,34 @@ +if(CROSSLANG_INSTALL_DEVELOPMENT) +install(TARGETS ${TessesCrossLangLibs} + EXPORT TessesCrossLangTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install(FILES include/CrossLang.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/CrossLangVersion.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(EXPORT TessesCrossLangTargets + FILE TessesCrossLangTargets.cmake + NAMESPACE TessesCrossLang:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesCrossLang +) + +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TessesCrossLangConfig.cmake" +INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesCrossLang) + + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TessesCrossLangConfig.cmake" +DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesCrossLang) +else() + +if(CROSSLANG_ENABLE_SHARED) +install(TARGETS crosslang_shared + EXPORT TessesCrossLangTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +endif() +endif() diff --git a/cmake/shared_exec.cmake b/cmake/shared_exec.cmake new file mode 100644 index 0000000..1897a8a --- /dev/null +++ b/cmake/shared_exec.cmake @@ -0,0 +1,37 @@ +if(CROSSLANG_ENABLE_RPATH) +set(CMAKE_MACOSX_RPATH 1) +set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) +if (APPLE) + set(CMAKE_INSTALL_RPATH "@executable_path/../${CMAKE_INSTALL_LIBDIR}") +else() + set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") +endif() +endif() +add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) + +add_executable(crossc src/programs/crosslangcompiler.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossvm src/programs/crosslangvm.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossint src/programs/crosslanginterperter.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdump src/programs/crosslangdump.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crosslang src/programs/crosslang.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossarchiveextract src/programs/crossarchiveextract.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossarchivecreate src/programs/crossarchivecreate.cpp ${CROSSLANG_WIN32_EXE_SRC}) +if(NOT WIN32) +add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_WIN32_EXE_SRC}) +endif() +target_link_libraries(crossc PUBLIC crosslang_shared) +target_link_libraries(crossvm PUBLIC crosslang_shared) +target_link_libraries(crossint PUBLIC crosslang_shared) +target_link_libraries(crossdump PUBLIC crosslang_shared) +target_link_libraries(crosslang PUBLIC crosslang_shared) +target_link_libraries(crossarchiveextract PUBLIC crosslang_shared) +target_link_libraries(crossarchivecreate PUBLIC crosslang_shared) +target_link_libraries(crossasm PUBLIC crosslang_shared) +target_link_libraries(crossdisasm PUBLIC crosslang_shared) +target_link_libraries(crossmerge PUBLIC crosslang_shared) + +if(NOT WIN32) +target_link_libraries(crossthumbnailer PUBLIC crosslang_shared) +endif() diff --git a/cmake/slim.cmake b/cmake/slim.cmake new file mode 100644 index 0000000..926c4a2 --- /dev/null +++ b/cmake/slim.cmake @@ -0,0 +1,21 @@ + +add_executable(crosslang WIN32 src/programs/slim.cpp ${CROSSLANG_WIN32_EXE_SRC}) + +if(CROSSLANG_ENABLE_STATIC) + +target_link_libraries(crosslang PUBLIC crosslang_static) +elseif(CROSSLANG_ENABLE_SHARED) +target_link_libraries(crosslang PUBLIC crosslang_shared) +endif() + +if(CROSSLANG_ENABLE_SHARED) + +install(TARGETS crosslang_shared + EXPORT TessesCrossLangTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +endif() + +install(TARGETS crosslang DESTINATION "${CMAKE_INSTALL_BINDIR}") diff --git a/cmake/sources.cmake b/cmake/sources.cmake new file mode 100644 index 0000000..d52ee02 --- /dev/null +++ b/cmake/sources.cmake @@ -0,0 +1,66 @@ +list(APPEND CROSSLANG_SOURCE +src/vm/bc/add.cpp +src/vm/bc/sub.cpp +src/vm/bc/getfield.cpp +src/vm/bc/setfield.cpp +src/vm/bc/tostring.cpp +src/vm/bc/equals.cpp +src/vm/bc/invokemethod.cpp +src/vm/bc/executemethod2.cpp +src/vm/bc/invoketwo.cpp +src/vm/bc/tobool.cpp +src/assembler/asm.cpp +src/assembler/disasm.cpp +src/assembler/merge.cpp +src/compiler/codegen.cpp +src/compiler/lexer.cpp +src/compiler/parser.cpp +src/compiler/ast.cpp +src/runtime_methods/uuid.cpp +src/runtime_methods/class.cpp +src/runtime_methods/console.cpp +src/runtime_methods/io.cpp +src/runtime_methods/std.cpp +src/runtime_methods/net.cpp +src/runtime_methods/vm.cpp +src/runtime_methods/json.cpp +src/runtime_methods/sqlite.cpp +src/runtime_methods/dictionary.cpp +src/runtime_methods/crypto.cpp +src/runtime_methods/ogc.cpp +src/runtime_methods/path.cpp +src/runtime_methods/env.cpp +src/runtime_methods/process.cpp +src/runtime_methods/helpers.cpp +src/types/embed.cpp +src/types/async.cpp +src/types/associativearray.cpp +src/types/any.cpp +src/types/ittr.cpp +src/types/closure.cpp +src/types/dictionary.cpp +src/types/externalmethod.cpp +src/types/list.cpp +src/types/native.cpp +src/types/rootenvironment.cpp +src/types/subenvironment.cpp +src/types/vfsheapobject.cpp +src/types/streamheapobject.cpp +src/types/class.cpp +src/types/classenvironment.cpp +src/types/random.cpp +src/vm/filereader.cpp +src/vm/gc.cpp +src/vm/gclist.cpp +src/vm/vm.cpp +src/vm/exception.cpp +src/archive.cpp +src/markedtobject.cpp +src/program_lib/crossarchivecreate.cpp +src/program_lib/crossarchiveextract.cpp +src/program_lib/crossdump.cpp +src/program_lib/crosslang.cpp +src/program_lib/crosslangcompiler.cpp +src/program_lib/crosslanginterperter.cpp +src/program_lib/crosslangvm.cpp +) diff --git a/cmake/static_exec.cmake b/cmake/static_exec.cmake new file mode 100644 index 0000000..1c845a3 --- /dev/null +++ b/cmake/static_exec.cmake @@ -0,0 +1,28 @@ +add_executable(crossc src/programs/crosslangcompiler.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossvm src/programs/crosslangvm.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossint src/programs/crosslanginterperter.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdump src/programs/crosslangdump.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crosslang src/programs/crosslang.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossarchiveextract src/programs/crossarchiveextract.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossarchivecreate src/programs/crossarchivecreate.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossasm src/crossasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossdisasm src/crossdisasmcli.cpp ${CROSSLANG_WIN32_EXE_SRC}) +add_executable(crossmerge src/crossmergecli.cpp ${CROSSLANG_WIN32_EXE_SRC}) + +if(NOT WIN32) +add_executable(crossthumbnailer src/crossthumbnailer.cpp ${CROSSLANG_WIN32_EXE_SRC}) +endif() +target_link_libraries(crossc PUBLIC crosslang_static) +target_link_libraries(crossvm PUBLIC crosslang_static) +target_link_libraries(crossint PUBLIC crosslang_static) +target_link_libraries(crossdump PUBLIC crosslang_static) +target_link_libraries(crosslang PUBLIC crosslang_static) +target_link_libraries(crossarchiveextract PUBLIC crosslang_static) +target_link_libraries(crossarchivecreate PUBLIC crosslang_static) +target_link_libraries(crossmerge PUBLIC crosslang_static) +target_link_libraries(crossasm PUBLIC crosslang_static) +target_link_libraries(crossdisasm PUBLIC crosslang_static) + +if(NOT WIN32) +target_link_libraries(crossthumbnailer PUBLIC crosslang_static) +endif() diff --git a/cmake/version.cmake b/cmake/version.cmake new file mode 100644 index 0000000..863532e --- /dev/null +++ b/cmake/version.cmake @@ -0,0 +1,3 @@ +set(CROSSLANG_MAJOR_VERSION 0) +set(CROSSLANG_MINOR_VERSION 0) +set(CROSSLANG_PATCH_VERSION 3) diff --git a/src/program_lib/crosslang.cpp b/src/program_lib/crosslang.cpp index 9a39178..2ffa56d 100644 --- a/src/program_lib/crosslang.cpp +++ b/src/program_lib/crosslang.cpp @@ -12,7 +12,7 @@ namespace Tesses::CrossLang::Programs static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared_ptr vfs) { auto inContainer=Platform::Environment::GetVariable("CROSSLANG_CONTAINER"); - if(inContainer && *inContainer=="1" || *inContainer=="y" || *inContainer=="Y") + if(inContainer && (*inContainer=="1" || *inContainer=="y" || *inContainer=="Y")) { HttpRequest req; req.url = "https://downloads.tesses.net/ShellPackage.crvm"; @@ -22,7 +22,7 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared { auto strm = resp.ReadAsStream(); CrossLang::CrossArchiveExtract(strm, vfs); - + return true; } else @@ -47,7 +47,7 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared { auto strm = resp.ReadAsStream(); CrossLang::CrossArchiveExtract(strm, vfs); - + return true; } else @@ -61,10 +61,10 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared std::cout << "Looks like you will need to install manually" << std::endl; return false; } - else + else { std::cout << "Please use Y or N (case insensitive)" << std::endl; - + } } return false; @@ -72,11 +72,11 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared TObject CrossLangShell(GCList& ls, std::vector& argv) { - + Tesses::Framework::Filesystem::VFSPath dir = GetCrossLangConfigDir(); Tesses::Framework::Filesystem::VFSPath filename = dir / "Shell" / "Shell.crvm"; - + auto p = Tesses::Framework::Platform::Environment::GetRealExecutablePath(Tesses::Framework::Filesystem::LocalFS->SystemToVFSPath(argv[0])).GetParent().GetParent() / "share" / "Tesses" / "CrossLang" / "Tesses.CrossLang.ShellPackage-1.0.0.0-prod.crvm"; if(argv.size() == 2 && argv[1] == "configdir") @@ -96,7 +96,7 @@ TObject CrossLangShell(GCList& ls, std::vector& argv) { auto strm = resp.ReadAsStream(); CrossLang::CrossArchiveExtract(strm, subdir); - + return 0; } else @@ -117,7 +117,7 @@ TObject CrossLangShell(GCList& ls, std::vector& argv) if(strm != nullptr) { CrossLang::CrossArchiveExtract(strm, subdir); - + } else { @@ -130,26 +130,26 @@ TObject CrossLangShell(GCList& ls, std::vector& argv) return 0; } } - + TRootEnvironment* env = TRootEnvironment::Create(ls, TDictionary::Create(ls)); - + TStd::RegisterStd(ls.GetGC(),env); - - + + env->LoadFileWithDependencies(ls.GetGC(), Tesses::Framework::Filesystem::LocalFS, filename); - + TList* args = TList::Create(ls); args->Add(filename.ToString()); - + for(size_t arg=1;argAdd(std::string(argv[arg])); - + return env->CallFunctionWithFatalError(ls,"main",{args}); - + } -} \ No newline at end of file +} diff --git a/src/types/dictionary.cpp b/src/types/dictionary.cpp index aab8d01..ef9420e 100644 --- a/src/types/dictionary.cpp +++ b/src/types/dictionary.cpp @@ -110,18 +110,18 @@ namespace Tesses::CrossLang { if(GetObjectHeap(res,callable)) { auto closure = dynamic_cast(callable); - if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this") + if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this") { std::vector args2; args2.push_back(this); args2.insert(args2.end(), args.begin(),args.end()); return closure->Call(ls,args2); - + } else { return callable->Call(ls,args); - + } } return Undefined(); @@ -136,23 +136,23 @@ namespace Tesses::CrossLang { if(GetObjectHeap(res,callable)) { auto closure = dynamic_cast(callable); - if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this") + if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this") { std::vector args2; args2.push_back(this); args2.insert(args2.end(), args.begin(),args.end()); return closure->CallWithFatalError(ls,args2); - + } else { return callable->CallWithFatalError(ls,args); - + } } return Undefined(); } - + void TDictionary::DeclareFunction(GC* gc,std::string key,std::string documentation, std::vector argNames, std::function args)> cb) { gc->BarrierBegin(); @@ -184,10 +184,8 @@ namespace Tesses::CrossLang { TObject TDictionary::GetValue(std::string key) { if(this->items.empty()) return Undefined(); - for(auto item : this->items) - { - if(item.first == key) return item.second; - } + if(this->items.count(key) > 0) + return this->items[key]; return Undefined(); } void TDictionary::SetValue(std::string key, TObject value) @@ -231,5 +229,5 @@ namespace Tesses::CrossLang { _gc->Watch(dict); return dict; } - -}; \ No newline at end of file + +};