summaryrefslogtreecommitdiff
path: root/src/wren_inter/wren_inter.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wren_inter/wren_inter.c')
-rw-r--r--src/wren_inter/wren_inter.c56
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);
+}