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.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/wren_inter/wren_inter.c b/src/wren_inter/wren_inter.c
index a1b48e2..69df112 100644
--- a/src/wren_inter/wren_inter.c
+++ b/src/wren_inter/wren_inter.c
@@ -1,5 +1,6 @@
#include "wren_inter.h"
#include "../utils/stringBuilder.h"
+#include <string.h>
#include <raylib.h>
#include <stdio.h>
#include <wren.h>
@@ -18,22 +19,27 @@ void errorFn(WrenVM* vm, WrenErrorType errorType,
{
case WREN_ERROR_COMPILE:
{
- TraceLog(LOG_ERROR, "[%s line %d] [Error] %s", module, line, msg);
+ // TraceLog(LOG_ERROR, "[%s line %d] [Error] %s", module, line, msg);
+ AppendStringBuilder(&stdout_sb, "Comptime error: ", '\n');
+ AppendStringBuilder(&stdout_sb, msg, ' ');
} break;
case WREN_ERROR_STACK_TRACE:
{
- TraceLog(LOG_ERROR, "[%s line %d] in %s", module, line, msg);
+ AppendStringBuilder(&stdout_sb, "Stack trace: ", '\n');
+ AppendStringBuilder(&stdout_sb, msg, ' ');
+ // TraceLog(LOG_ERROR, "[%s line %d] in %s", module, line, msg);
} break;
case WREN_ERROR_RUNTIME:
{
- TraceLog(LOG_ERROR, "[Runtime Error] %s", msg);
+ AppendStringBuilder(&stdout_sb, "Runtime error: ", '\n');
+ AppendStringBuilder(&stdout_sb, msg, ' ');
+ // TraceLog(LOG_ERROR, "[Runtime Error] %s", msg);
} break;
}
}
-void EvaluateScript(char *script) {
+char *EvaluateScript(char *script) {
TraceLog(LOG_INFO, "Evaluating %s...", script);
- FreeStringBuilder(&stdout_sb);
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = writeFn;
@@ -42,7 +48,7 @@ void EvaluateScript(char *script) {
WrenVM* vm = wrenNewVM(&config);
if (vm == NULL) {
TraceLog(LOG_ERROR, "Failed to initialize a wren vm");
- return;
+ return NULL;
}
WrenInterpretResult result = wrenInterpret(vm, "main", script);
@@ -53,4 +59,9 @@ void EvaluateScript(char *script) {
}
printf("Wren outp: %s", stdout_sb.val);
wrenFreeVM(vm);
+
+ if (stdout_sb.val == NULL) return NULL;
+ char *outp = strdup(stdout_sb.val);
+ FreeStringBuilder(&stdout_sb);
+ return outp;
}