about summary refs log tree commit diff stats
path: root/js/scripting-lang/baba-yaga-c/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/baba-yaga-c/src/main.c')
-rw-r--r--js/scripting-lang/baba-yaga-c/src/main.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/js/scripting-lang/baba-yaga-c/src/main.c b/js/scripting-lang/baba-yaga-c/src/main.c
index 84bbb56..c1bc9f8 100644
--- a/js/scripting-lang/baba-yaga-c/src/main.c
+++ b/js/scripting-lang/baba-yaga-c/src/main.c
@@ -105,7 +105,7 @@ int main(int argc, char* argv[]) {
     } else if (optind < argc) {
         /* Check if the argument looks like a file (not starting with -) */
         char* arg = argv[optind];
-        if (arg[0] != '-' && strchr(arg, ' ') == NULL && strchr(arg, ';') == NULL) {
+        if (arg[0] != '-' && access(arg, F_OK) == 0) {
             /* Treat as file */
             run_file(interp, arg);
         } else {
@@ -316,11 +316,21 @@ static void run_file(Interpreter* interp, const char* filename) {
     value = baba_yaga_execute(interp, source, strlen(source), &result);
     free(source);
 
-    if (result != EXEC_SUCCESS) {
+    if (result == EXEC_SUCCESS) {
+        /* Print result using value_to_string for consistent formatting */
+        /* Don't print special IO return value */
+        if (value.type != VAL_NUMBER || value.data.number != -999999) {
+            char* str = baba_yaga_value_to_string(&value);
+            printf("%s\n", str);
+            free(str);
+        }
+    } else {
         BabaYagaError* error = baba_yaga_get_error(interp);
         if (error != NULL) {
             fprintf(stderr, "Error: %s\n", error->message);
             baba_yaga_error_destroy(error);
+        } else {
+            fprintf(stderr, "Error: Execution failed\n");
         }
         exit(EXIT_FAILURE);
     }