diff --git a/include/mes/symbols.h b/include/mes/symbols.h index 08b9f6c7..5bbe75cb 100644 --- a/include/mes/symbols.h +++ b/include/mes/symbols.h @@ -40,6 +40,7 @@ struct scm *cell_vm_begin_expand_eval; struct scm *cell_vm_begin_expand_macro; struct scm *cell_vm_begin_expand_primitive_load; struct scm *cell_vm_begin_primitive_load; +struct scm *cell_vm_primitive_load_return; struct scm *cell_vm_begin_read_input_file; struct scm *cell_vm_call_with_current_continuation2; struct scm *cell_vm_call_with_values2; @@ -136,8 +137,8 @@ struct scm *cell_type_broken_heart; struct scm *cell_symbol_program; struct scm *cell_symbol_test; -// CONSTANT SYMBOL_MAX 113 -#define SYMBOL_MAX 113 +// CONSTANT SYMBOL_MAX 114 +#define SYMBOL_MAX 114 // CONSTANT CELL_UNSPECIFIED 7 #define CELL_UNSPECIFIED 7 diff --git a/mes/module/mes/boot-00.scm b/mes/module/mes/boot-00.scm index e98ea6e0..cf080ffa 100644 --- a/mes/module/mes/boot-00.scm +++ b/mes/module/mes/boot-00.scm @@ -30,5 +30,3 @@ (define-macro (cond-expand . clauses) (cons 'begin (cond-expand-expander clauses))) ;; end boot-00.scm - -(primitive-load 0) diff --git a/mes/module/mes/boot-01.scm b/mes/module/mes/boot-01.scm index 8e0a9406..00a739d6 100644 --- a/mes/module/mes/boot-01.scm +++ b/mes/module/mes/boot-01.scm @@ -66,5 +66,3 @@ (if (null? (cdr rest)) (car rest) (append2 (car rest) (apply append (cdr rest)))))) ;; end boot-01.scm - -(primitive-load 0) diff --git a/mes/module/mes/boot-02.scm b/mes/module/mes/boot-02.scm index dbc5f731..40e10ab1 100644 --- a/mes/module/mes/boot-02.scm +++ b/mes/module/mes/boot-02.scm @@ -101,5 +101,3 @@ #t) ;; end boot-02.scm - -(primitive-load 0) diff --git a/mes/module/mes/boot-03.scm b/mes/module/mes/boot-03.scm index e2c7ce53..a7fde082 100644 --- a/mes/module/mes/boot-03.scm +++ b/mes/module/mes/boot-03.scm @@ -166,6 +166,3 @@ (mes-use-module (mes let)) (mes-use-module (mes scm)) ;; end boot-03.scm - -(primitive-load 0) -(primitive-load 0) diff --git a/src/eval-apply.c b/src/eval-apply.c index 63d34e8c..dde534da 100644 --- a/src/eval-apply.c +++ b/src/eval-apply.c @@ -1,6 +1,6 @@ /* -*-comment-start: "//";comment-end:""-*- * GNU Mes --- Maxwell Equations of Software - * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * Copyright © 2016,2017,2018,2019,2020 Jan (janneke) Nieuwenhuizen * * This file is part of GNU Mes. * @@ -385,6 +385,8 @@ eval_apply: goto macro_expand_define_macro; else if (R3 == cell_vm_begin_primitive_load) goto begin_primitive_load; + else if (R3 == cell_vm_primitive_load_return) + goto primitive_load_return; else if (R3 == cell_vm_evlis) goto evlis; @@ -864,13 +866,6 @@ begin_expand: input = set_current_input_port (open_input_file (R1)); else if (R1->type == TPORT) input = set_current_input_port (R1); - else if ((R1->type == TNUMBER) && R1->value == -1) - { - eputs ("primitive-load: R1=-1 => RETURN\n"); - display_error_ (R1); - gc_pop_frame (); - goto vm_return; - } else { eputs ("begin_expand failed, R1="); @@ -878,11 +873,10 @@ begin_expand: assert_msg (0, "begin-expand-boom 0"); } - push_cc (input, R2, R0, cell_vm_return); + push_cc (input, R2, R0, cell_vm_primitive_load_return); x = read_input_file_env (R0); if (g_debug > 5) hash_table_printer (R0); - gc_pop_frame (); input = R1; R1 = x; set_current_input_port (input); @@ -961,6 +955,10 @@ call_with_values2: R1 = cons (R2->cdr->car, R1); goto apply; +primitive_load_return: + gc_pop_frame (); + /* fall through */ + vm_return: x = R1; gc_pop_frame (); diff --git a/src/symbol.c b/src/symbol.c index 9d88da39..51eb5971 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -76,6 +76,7 @@ init_symbols_ () /*:((internal)) */ cell_vm_begin_expand_macro = init_symbol (g_symbol, TSPECIAL, "*vm:begin-expand-macro*"); cell_vm_begin_expand_primitive_load = init_symbol (g_symbol, TSPECIAL, "*vm:core:begin-expand-primitive-load*"); cell_vm_begin_primitive_load = init_symbol (g_symbol, TSPECIAL, "*vm:core:begin-primitive-load*"); + cell_vm_primitive_load_return = init_symbol (g_symbol, TSPECIAL, "*vm:core:primitive-load-return*"); cell_vm_begin_read_input_file = init_symbol (g_symbol, TSPECIAL, "*vm-begin-read-input-file*"); cell_vm_call_with_current_continuation2 = init_symbol (g_symbol, TSPECIAL, "*vm-call-with-current-continuation2*"); cell_vm_call_with_values2 = init_symbol (g_symbol, TSPECIAL, "*vm-call-with-values2*");