diff options
-rwxr-xr-x | src/bytecode/compiler.h | 4 | ||||
-rwxr-xr-x | src/bytecode/objects.h | 1 | ||||
-rwxr-xr-x | src/bytecode/vm.h | 5 |
3 files changed, 9 insertions, 1 deletions
diff --git a/src/bytecode/compiler.h b/src/bytecode/compiler.h index ca187b3..e20b4f1 100755 --- a/src/bytecode/compiler.h +++ b/src/bytecode/compiler.h | |||
@@ -503,7 +503,9 @@ compile(Token *tokens) { | |||
503 | Token start_tok = peek_token(&compiler); | 503 | Token start_tok = peek_token(&compiler); |
504 | while (has_next_token(&compiler) && peek_token(&compiler).type != TOKEN_EOF) { | 504 | while (has_next_token(&compiler) && peek_token(&compiler).type != TOKEN_EOF) { |
505 | parse_tree(chunk, &compiler); | 505 | parse_tree(chunk, &compiler); |
506 | add_code(chunk, OP_DROP, start_tok.line, start_tok.column); | 506 | if (peek_token(&compiler).type != TOKEN_EOF) { |
507 | add_code(chunk, OP_DROP, start_tok.line, start_tok.column); | ||
508 | } | ||
507 | } | 509 | } |
508 | add_code(chunk, OP_RETURN, start_tok.line, start_tok.column); | 510 | add_code(chunk, OP_RETURN, start_tok.line, start_tok.column); |
509 | return chunk; | 511 | return chunk; |
diff --git a/src/bytecode/objects.h b/src/bytecode/objects.h index e0c72b0..6c286b5 100755 --- a/src/bytecode/objects.h +++ b/src/bytecode/objects.h | |||
@@ -63,6 +63,7 @@ Object object_copy(Object src); | |||
63 | #define AS_FIXNUM(VAL) ((VAL).fixnum) | 63 | #define AS_FIXNUM(VAL) ((VAL).fixnum) |
64 | 64 | ||
65 | // Type checking. | 65 | // Type checking. |
66 | #define IS_NIL(VAL) ((VAL).type == OBJ_TYPE_NIL) | ||
66 | #define IS_TRUE(VAL) ((VAL).type != OBJ_TYPE_FALSE) | 67 | #define IS_TRUE(VAL) ((VAL).type != OBJ_TYPE_FALSE) |
67 | #define IS_FALSE(VAL) ((VAL).type == OBJ_TYPE_FALSE) | 68 | #define IS_FALSE(VAL) ((VAL).type == OBJ_TYPE_FALSE) |
68 | #define IS_FIXNUM(VAL) ((VAL).type == OBJ_TYPE_FIXNUM) | 69 | #define IS_FIXNUM(VAL) ((VAL).type == OBJ_TYPE_FIXNUM) |
diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index d654e2c..0ce6dec 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h | |||
@@ -263,6 +263,11 @@ vm_interpret(VM *vm) { | |||
263 | } break; | 263 | } break; |
264 | case OP_RETURN: { | 264 | case OP_RETURN: { |
265 | if (frame->rp == NULL) { | 265 | if (frame->rp == NULL) { |
266 | Object ret = array_pop(vm->stack); | ||
267 | if (!IS_NIL(ret)) { | ||
268 | object_display(ret); | ||
269 | printf("\n"); | ||
270 | } | ||
266 | return; | 271 | return; |
267 | } | 272 | } |
268 | vm->pc = frame->rp; | 273 | vm->pc = frame->rp; |