summaryrefslogtreecommitdiff
path: root/src/wren_inter
diff options
context:
space:
mode:
authorphysick <mynameisgennadiy@vk.com>2026-07-12 11:13:08 +0500
committerphysick <mynameisgennadiy@vk.com>2026-07-12 11:13:08 +0500
commit58a26ca05aacb4736e9e7e652badd43a8085d1f1 (patch)
tree5009c076fdcf83c970a580624f02dc89cb3d2beb /src/wren_inter
parenta35731f94b0f0072783d7aba8dd24670b75716cc (diff)
rudimentary code execution
Diffstat (limited to 'src/wren_inter')
-rw-r--r--src/wren_inter/wren_inter.c56
-rw-r--r--src/wren_inter/wren_inter.h6
2 files changed, 62 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);
+}
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