diff options
Diffstat (limited to 'src/wren_inter/wren_inter.c')
| -rw-r--r-- | src/wren_inter/wren_inter.c | 56 |
1 files changed, 56 insertions, 0 deletions
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 <raylib.h> +#include <stdio.h> +#include <wren.h> + +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); +} |
