updating interpreter to work better for bootstrapping
adding program mkboot0, which can be run in the interpreter to compile source files into a stage-0 boot image.
This commit is contained in:
parent
909b91ffcc
commit
1259c17837
|
@ -0,0 +1,19 @@
|
|||
; -*- scheme -*-
|
||||
|
||||
(if (not (bound? 'top-level-value)) (set! top-level-value %eval))
|
||||
(if (not (bound? 'set-top-level-value!)) (set! set-top-level-value! set))
|
||||
|
||||
(load "compiler.lsp")
|
||||
|
||||
(define (compile-file inf)
|
||||
(let ((in (file inf :read)))
|
||||
(let next ((E (read in)))
|
||||
(if (not (io.eof? in))
|
||||
(begin (print (compile-thunk (expand E)))
|
||||
(princ "\n")
|
||||
(next (read in)))))
|
||||
(io.close in)))
|
||||
|
||||
(for-each (lambda (file)
|
||||
(compile-file file))
|
||||
(cdr *argv*))
|
|
@ -575,8 +575,14 @@ static value_t do_read_sexpr(value_t label)
|
|||
// cannot see pending labels. in other words:
|
||||
// (... #2=#.#0# ... ) OK
|
||||
// (... #2=#.(#2#) ... ) DO NOT WANT
|
||||
v = do_read_sexpr(UNBOUND);
|
||||
return toplevel_eval(v);
|
||||
sym = do_read_sexpr(UNBOUND);
|
||||
if (issymbol(sym)) {
|
||||
v = symbol_value(sym);
|
||||
if (v == UNBOUND)
|
||||
raise(list2(UnboundError, sym));
|
||||
return v;
|
||||
}
|
||||
return toplevel_eval(sym);
|
||||
case TOK_LABEL:
|
||||
// create backreference label
|
||||
if (ptrhash_has(&readstate->backrefs, (void*)tokval))
|
||||
|
|
Loading…
Reference in New Issue