diff options
| author | Rose Hogenson <rhogenson@posteo.net> | 2022-07-30 09:50:29 -0700 |
|---|---|---|
| committer | Rose Hogenson <rhogenson@posteo.net> | 2022-07-30 09:50:29 -0700 |
| commit | 351bcc91b53c3559309002388fd3357f5700f4b6 (patch) | |
| tree | 3dac2dafa5f2842c6716864e14582fc6d15e5ffe /csc/linker.csc | |
| parent | Write more tests for decode. (diff) | |
| download | chromatopelma-351bcc91b53c3559309002388fd3357f5700f4b6.tar.zst | |
Fix some test cases in the compiler.
Diffstat (limited to 'csc/linker.csc')
| -rw-r--r-- | csc/linker.csc | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/csc/linker.csc b/csc/linker.csc index a2ab447..6502cb0 100644 --- a/csc/linker.csc +++ b/csc/linker.csc @@ -92,16 +92,28 @@ (_ arg)))))) + (define (num-globals environment) + (define n 0) + (map-for-each (lambda (k v) + (when (<= n v) + (set! n (+ 1 v)))) + environment) + n) + + (define link (case-lambda ((programs environment) - (translate-globals - (loop for prog in programs - for off = 0 then (+ off (length converted-prog)) - for converted-prog = (translate-labels - prog - (make-label-map off prog)) - append converted-prog) - environment)) + (append + (list + (list 'alloc (list 'local 0) (list 'const (num-globals environment)))) + (translate-globals + (loop for prog in programs + for off = 0 then (+ off (length converted-prog)) + for converted-prog = (translate-labels + prog + (make-label-map off prog)) + append converted-prog) + environment))) ((programs) (link programs (add-to-environment (make-map compare-globals) programs))))))) |
