bugfix: many minor bugs
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 26 Oct 2023 03:20:41 +0000 (22:20 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 26 Oct 2023 03:20:41 +0000 (22:20 -0500)
compiler/src/wasm_runtime.c
interpreter/build.sh
interpreter/include/vm.h
interpreter/src/debug/debug_thread.c
interpreter/src/vm/vm.c
misc/vscode/package.json
runtime/src/ort_threads.h
shared/include/onyx_library.h

index cb68f7cd3ca1e5a97fc07f350cff793dd6e45663..c90b395dde55a1ce3df10abaeebe274cf80b65e6 100644 (file)
@@ -586,6 +586,7 @@ void onyx_run_initialize(b32 debug_enabled) {
     wasm_runtime.wasm_extern_as_func = &wasm_extern_as_func;
     wasm_runtime.wasm_func_call = &wasm_func_call;
     wasm_runtime.wasm_instance_new = &wasm_instance_new;
+    wasm_runtime.wasm_instance_delete = &wasm_instance_delete;
     wasm_runtime.wasm_store_new = &wasm_store_new;
     wasm_runtime.wasm_store_delete = &wasm_store_delete;
     wasm_runtime.onyx_print_trap = &onyx_print_trap;
index 80e05b9429f9618f1b927ccf347f87166d6fb770..d1ab9254694045ebb326fcade919e00446a5c6c6 100755 (executable)
@@ -2,7 +2,7 @@
 
 . ../settings.sh
 
-# FLAGS="-g3 -DOVM_DEBUG=1 -fno-stack-protector"
+# FLAGS="-g3 -O2 -DOVM_DEBUG=1 -fno-stack-protector"
 # FLAGS="-g3 -DOVM_VERBOSE=1"
 FLAGS="-Ofast -fno-stack-protector"
 LIBS="-pthread"
index c6b3c6d1f4660a9203e97a4728a519f7c0a20420..633a643483df2add1e1da9678e6469b9d8ae078b 100644 (file)
@@ -164,6 +164,7 @@ struct ovm_state_t {
     ovm_value_t *__frame_values;
 
     debug_thread_state_t *debug;
+    i32                   call_depth;
 };
 
 ovm_state_t *ovm_state_new(ovm_engine_t *engine, ovm_program_t *program);
index 78aa4e738c74d045eb7264c1d085c107f1ce114f..89a60d66fe77650ec1171d026bac7172168eeee6 100644 (file)
@@ -25,7 +25,6 @@
 #define EVT_NOP 0
 #define EVT_BRK_HIT 1
 #define EVT_PAUSE 2
-#define EVT_NEW_THREAD 3 // Not Implemented
 #define EVT_RESPONSE 0xffffffff
 
 struct msg_parse_ctx_t {
@@ -609,6 +608,15 @@ void *__debug_thread_entry(void * data) {
     while (debug->debug_thread_running) {
         poll(poll_fds, 2, 1000);
 
+        //
+        // If there are no functions on the main thread,
+        // assume the program has exited and do not continue to
+        // do anything.
+        if (debug->threads[0]->ovm_state->call_depth <= 0) {
+            debug->debug_thread_running = false;
+            break;
+        }
+
         //
         // Try to read commands from the client.
         // If an error was returned, bail out of this thread.
index 04c2d00b84a620059c08c7bdba82a5e163d0fb0d..7f0495f91d8eb4a7bbe71e683fdb13e336425c54 100644 (file)
@@ -353,6 +353,8 @@ ovm_value_t ovm_func_call(ovm_engine_t *engine, ovm_state_t *state, ovm_program_
     ovm_func_t *func = &program->funcs[func_idx];
     ovm_assert(func->value_number_count >= func->param_count);
 
+    state->call_depth += 1;
+
     switch (func->kind) {
         case OVM_FUNC_INTERNAL: {
             ovm__func_setup_stack_frame(state, func, 0);
@@ -364,6 +366,7 @@ ovm_value_t ovm_func_call(ovm_engine_t *engine, ovm_state_t *state, ovm_program_
             state->pc = func->start_instr;
             ovm_value_t result = ovm_run_code(engine, state, program);
 
+            state->call_depth -= 1;
             return result;
         }
 
@@ -375,6 +378,8 @@ ovm_value_t ovm_func_call(ovm_engine_t *engine, ovm_state_t *state, ovm_program_
             external_func.native_func(external_func.userdata, params, &result);
 
             ovm__func_teardown_stack_frame(state);
+
+            state->call_depth -= 1;
             return result;
         }
 
index e9088665b064be7f5f8a188ae4e40fd78f0aec6e..0d7fa3a1a5796b4b6f44aec078a1726e14348894 100644 (file)
@@ -98,7 +98,7 @@
                             "onyxFiles": {
                                 "type": "array",
                                 "description": "The Onyx files for compiling.",
-                                "default": "[]"
+                                "default": []
                             },
                             "workingDir": {
                                 "type": "string",
index 8af6fc063522ae2edcf657ad7868c0f6e82a9433..c0ef8d741ccd2cac0af4f3d76bb0ed89d4aec357 100644 (file)
@@ -78,6 +78,7 @@ static i32 onyx_run_thread(void *data) {
         trap = runtime->wasm_func_call(exit_func, &args_array, &results);
     }
 
+    runtime->wasm_instance_delete(thread->instance);
     runtime->wasm_store_delete(wasm_store);
 
     return 0;
index f00467248c03430b52948b2354e9953aaf6e8c51..1e2ef235b73f6a20df4206cf9d923443b6247539 100644 (file)
@@ -40,6 +40,8 @@ typedef struct OnyxRuntime {
     // for this function to exist, yet.
     wasm_table_t *wasm_func_table;
     void (*(*wasm_func_from_idx)(wasm_table_t *table, unsigned int index, char *signature))(void);
+
+    void (*wasm_instance_delete)(wasm_instance_t *instance);
 } OnyxRuntime;
 
 OnyxRuntime* runtime;