From 6a68bdddc8cee4a43838d605b40ede5e8a023c60 Mon Sep 17 00:00:00 2001 From: Vicente Ferrer Date: Fri, 12 Feb 2021 11:19:39 +0100 Subject: [PATCH] Solve minor bugs from C# loader. --- source/loaders/cs_loader/CMakeLists.txt | 1 + .../include/cs_loader/simple_netcore.h | 6 ++--- .../netcore/source/Providers/LoaderBase.cs | 1 + .../loaders/cs_loader/source/cs_loader_impl.c | 16 ++++++++++---- .../cs_loader/source/simple_netcore.cpp | 22 ++++++------------- .../cs_loader_test/source/cs_loader_test.cpp | 13 +++++++++++ 6 files changed, 37 insertions(+), 22 deletions(-) diff --git a/source/loaders/cs_loader/CMakeLists.txt b/source/loaders/cs_loader/CMakeLists.txt index 4a6f7d706..3fcd0971a 100644 --- a/source/loaders/cs_loader/CMakeLists.txt +++ b/source/loaders/cs_loader/CMakeLists.txt @@ -130,6 +130,7 @@ add_library(${target} MODULE # Add target dependencies add_dependencies(${target} ${LOADER_MODULE_NAMES} + cs_loader_impl ) # Create namespaced alias diff --git a/source/loaders/cs_loader/include/cs_loader/simple_netcore.h b/source/loaders/cs_loader/include/cs_loader/simple_netcore.h index f6e18a195..230b6f22f 100644 --- a/source/loaders/cs_loader/include/cs_loader/simple_netcore.h +++ b/source/loaders/cs_loader/include/cs_loader/simple_netcore.h @@ -38,11 +38,11 @@ netcore_handle simple_netcore_create(char * dotnet_root, char * dotnet_loader_as reflect_function * simple_netcore_get_functions(netcore_handle, int *); -void simple_netcore_load_script_from_files(netcore_handle handle, char * files[MAX_FILES], size_t size); +int simple_netcore_load_script_from_files(netcore_handle handle, char * files[MAX_FILES], size_t size); -void simple_netcore_load_script_from_assembly(netcore_handle handle, char * file); +int simple_netcore_load_script_from_assembly(netcore_handle handle, char * file); -void simple_netcore_load_script_from_memory(netcore_handle handle, const char * buffer, size_t size); +int simple_netcore_load_script_from_memory(netcore_handle handle, const char * buffer, size_t size); execution_result * simple_netcore_invoke(netcore_handle, const char *); diff --git a/source/loaders/cs_loader/netcore/source/Providers/LoaderBase.cs b/source/loaders/cs_loader/netcore/source/Providers/LoaderBase.cs index d2363b7d4..bd13e1855 100644 --- a/source/loaders/cs_loader/netcore/source/Providers/LoaderBase.cs +++ b/source/loaders/cs_loader/netcore/source/Providers/LoaderBase.cs @@ -144,6 +144,7 @@ public bool LoadFromAssembly(string assemblyFile) catch (Exception exName) { this.log.Error(exName.Message, exName); + return false; } } diff --git a/source/loaders/cs_loader/source/cs_loader_impl.c b/source/loaders/cs_loader/source/cs_loader_impl.c index a47056961..dc349ed9c 100644 --- a/source/loaders/cs_loader/source/cs_loader_impl.c +++ b/source/loaders/cs_loader/source/cs_loader_impl.c @@ -274,7 +274,10 @@ loader_handle cs_loader_impl_load_from_file(loader_impl impl, const loader_namin files[i] = (char*)paths[i]; } - simple_netcore_load_script_from_files(nhandle, files, size); + if (simple_netcore_load_script_from_files(nhandle, files, size) != 0) + { + return NULL; + } return (loader_handle)impl; } @@ -282,19 +285,24 @@ loader_handle cs_loader_impl_load_from_file(loader_impl impl, const loader_namin loader_handle cs_loader_impl_load_from_package(loader_impl impl, const loader_naming_path path) { netcore_handle nhandle = (netcore_handle)loader_impl_get(impl); - simple_netcore_load_script_from_assembly(nhandle, (char *)path); + if (simple_netcore_load_script_from_assembly(nhandle, (char *)path) != 0) + { + return NULL; + } return (loader_handle)impl; } loader_handle cs_loader_impl_load_from_memory(loader_impl impl, const loader_naming_name name, const char * buffer, size_t size) { - (void)name; netcore_handle nhandle = (netcore_handle)loader_impl_get(impl); - simple_netcore_load_script_from_memory(nhandle, buffer, size); + if (simple_netcore_load_script_from_memory(nhandle, buffer, size) != 0) + { + return NULL; + } return (loader_handle)impl; } diff --git a/source/loaders/cs_loader/source/simple_netcore.cpp b/source/loaders/cs_loader/source/simple_netcore.cpp index 0c21a6486..147feba76 100644 --- a/source/loaders/cs_loader/source/simple_netcore.cpp +++ b/source/loaders/cs_loader/source/simple_netcore.cpp @@ -60,37 +60,29 @@ void simple_netcore_destroy(netcore_handle handle) delete core; } -void simple_netcore_load_script_from_files(netcore_handle handle, char * files[MAX_FILES], size_t size) +int simple_netcore_load_script_from_files(netcore_handle handle, char * files[MAX_FILES], size_t size) { netcore * core = (netcore*)handle; - if (core->load_files(files, size)) - { - - } + return core->load_files(files, size) == true ? 0 : 1; } -void simple_netcore_load_script_from_assembly(netcore_handle handle, char * file) +int simple_netcore_load_script_from_assembly(netcore_handle handle, char * file) { netcore * core = (netcore*)handle; - if (core->load_assembly(file)) - { - - } + return core->load_assembly(file) == true ? 0 : 1; } -void simple_netcore_load_script_from_memory(netcore_handle handle, const char * buffer, size_t size) +int simple_netcore_load_script_from_memory(netcore_handle handle, const char * buffer, size_t size) { netcore * core = (netcore*)handle; (void)size; - if (core->load_source((char*)buffer)) - { - - } + return core->load_source((char*)buffer) == true ? 0 : 1; } + execution_result * simple_netcore_invoke(netcore_handle handle, const char * func) { netcore * core = (netcore*)handle; diff --git a/source/tests/cs_loader_test/source/cs_loader_test.cpp b/source/tests/cs_loader_test/source/cs_loader_test.cpp index b7e991344..56f008ec7 100644 --- a/source/tests/cs_loader_test/source/cs_loader_test.cpp +++ b/source/tests/cs_loader_test/source/cs_loader_test.cpp @@ -85,3 +85,16 @@ TEST_F(cs_loader_test, Concat) metacall_value_destroy(ret); } + +TEST_F(cs_loader_test, Fail) +{ + /* This is a Python script on purpose, in order to test C# when it fails */ + static const char buffer[] = + "#!/usr/bin/env python3\n" + "def multmem(left: int, right: int) -> int:\n" + "\tresult = left * right;\n" + "\tprint(left, ' * ', right, ' = ', result);\n" + "\treturn result;"; + + EXPECT_EQ((int) 1, (int) metacall_load_from_memory("cs", buffer, sizeof(buffer), NULL)); +}