From 58a26ca05aacb4736e9e7e652badd43a8085d1f1 Mon Sep 17 00:00:00 2001 From: physick Date: Sun, 12 Jul 2026 11:13:08 +0500 Subject: rudimentary code execution --- src/wren_inter/wren_inter.c | 56 +++++++++++++++++++++++++++++++++++++++++++++ src/wren_inter/wren_inter.h | 6 +++++ 2 files changed, 62 insertions(+) create mode 100644 src/wren_inter/wren_inter.c create mode 100644 src/wren_inter/wren_inter.h (limited to 'src/wren_inter') diff --git a/src/wren_inter/wren_inter.c b/src/wren_inter/wren_inter.c new file mode 100644 index 0000000..a1b48e2 --- /dev/null +++ b/src/wren_inter/wren_inter.c @@ -0,0 +1,56 @@ +#include "wren_inter.h" +#include "../utils/stringBuilder.h" +#include +#include +#include + +StringBuilder stdout_sb = {0}; + +void writeFn(WrenVM* vm, const char* text) { + AppendStringBuilder(&stdout_sb, text, '\n'); +} + +void errorFn(WrenVM* vm, WrenErrorType errorType, + const char* module, const int line, + const char* msg) +{ + switch (errorType) + { + case WREN_ERROR_COMPILE: + { + TraceLog(LOG_ERROR, "[%s line %d] [Error] %s", module, line, msg); + } break; + case WREN_ERROR_STACK_TRACE: + { + TraceLog(LOG_ERROR, "[%s line %d] in %s", module, line, msg); + } break; + case WREN_ERROR_RUNTIME: + { + TraceLog(LOG_ERROR, "[Runtime Error] %s", msg); + } break; + } +} + +void EvaluateScript(char *script) { + TraceLog(LOG_INFO, "Evaluating %s...", script); + FreeStringBuilder(&stdout_sb); + WrenConfiguration config; + wrenInitConfiguration(&config); + config.writeFn = writeFn; + config.errorFn = errorFn; + + WrenVM* vm = wrenNewVM(&config); + if (vm == NULL) { + TraceLog(LOG_ERROR, "Failed to initialize a wren vm"); + return; + } + + WrenInterpretResult result = wrenInterpret(vm, "main", script); + switch (result) { + case WREN_RESULT_SUCCESS: break; + case WREN_RESULT_COMPILE_ERROR: break; + case WREN_RESULT_RUNTIME_ERROR: break; + } + printf("Wren outp: %s", stdout_sb.val); + wrenFreeVM(vm); +} diff --git a/src/wren_inter/wren_inter.h b/src/wren_inter/wren_inter.h new file mode 100644 index 0000000..9601209 --- /dev/null +++ b/src/wren_inter/wren_inter.h @@ -0,0 +1,6 @@ +#ifndef WREN_INTER_H +#define WREN_INTER_H + +void EvaluateScript(char *script); + +#endif // WREN_INTER_H -- cgit v1.3