Skip to content

Commit fb2b5aa

Browse files
committed
Commit Scheme source files that are part of the compiler
1 parent f5d8fac commit fb2b5aa

File tree

5 files changed

+1162
-54
lines changed

5 files changed

+1162
-54
lines changed

lib/additions.scm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
(define (bound? sym) (symbol-bound? #f sym))
2+
(define aset! vector-set!)
3+
(define aref vector-ref)
4+
(define (atom? obj) (not (pair? obj)))

lib/bytecode.scm

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,14 @@
175175
(emit bco 'load-nil)
176176
;; Memoize the objects using the bytecode object's memo table
177177
(let ((index (hash-table-ref (memo bco) object (lambda () #f))))
178-
(emit bco 'load-constant-index
179-
(if index index (add-to-constant-vector bco object))))))))
178+
(emit bco
179+
'load-constant-index
180+
(if index
181+
index
182+
(begin
183+
(add-to-constant-vector bco object)
184+
(hash-table-set! (memo bco) object
185+
(bco.consts-len bco))))))))))
180186

181187
(define (emit-set! bco stack-position)
182188
(cond

lib/main.scm

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,39 +6,44 @@
66
(environment)
77
(bytecode)
88
(assembler)
9+
(only (guile) parameterize)
910
(ice-9 pretty-print))
1011

1112
(define (bound? sym) (symbol-bound? #f sym))
1213
(define aset! vector-set!)
1314
(define aref vector-ref)
1415
(define (atom? obj) (not (pair? obj)))
15-
16+
(define bco (create-bco))
17+
(define env (env.new))
18+
(define (compile-one-form)
19+
(let ((res (read)))
20+
(if (eof-object? res)
21+
(values)
22+
(begin
23+
(compile-form res env bco)
24+
(compile-one-form)))))
25+
(let ((tmp-bco (create-bco))
26+
(tmp-env (env.new)))
27+
(emit-constant tmp-bco 'alpha)
28+
(emit-constant tmp-bco 'alpha)
29+
(assert (= 1 (bco.consts-len tmp-bco))))
30+
(define (compile-file filename)
31+
(with-input-from-file filename compile-one-form))
1632
(define (main args)
17-
(with-input-from-file (cadr args)
18-
(lambda ()
19-
(let ((list-to-build (cons #f '())))
20-
(let cont ((env (env.new))
21-
(bco (create-bco))
22-
(last-compiled-head list-to-build))
23-
(let ((res (read)))
24-
(if (eof-object? res)
25-
(cdr list-to-build)
26-
(let-values (((_ just-compiled)
27-
(compile-form res env bco)))
28-
(let ((instrs
29-
(vector-copy (bco.instrs just-compiled)
30-
0
31-
(bco.len just-compiled)
32-
#f)))
33-
(pretty-print
34-
`#(,instrs
35-
,(vector-copy (bco.consts just-compiled)
36-
0
37-
(bco.consts-len just-compiled)
38-
#f)))
39-
#;(pretty-print
40-
(assemble-bytecode
41-
(vector->list instrs)))
42-
(cont env bco (list just-compiled)))))))))))
43-
33+
(for-each compile-file (cdr args))
34+
(let ((instrs
35+
(vector-copy (bco.instrs bco)
36+
0
37+
(bco.len bco)
38+
#f)))
39+
(pretty-print
40+
`#(,instrs
41+
,(vector-copy (bco.consts bco)
42+
0
43+
(bco.consts-len bco)
44+
#f)))))
45+
#;(pretty-print
46+
(assemble-bytecode
47+
(vector->list instrs)))
48+
(fluid-set! read-eval? #t)
4449
(pretty-print (main (command-line)))

0 commit comments

Comments
 (0)