diff options
| author | Rose Hogenson <rhogenson@posteo.net> | 2022-07-29 17:52:54 -0700 |
|---|---|---|
| committer | Rose Hogenson <rhogenson@posteo.net> | 2022-07-29 17:52:54 -0700 |
| commit | 762431b0f0a6ead18a93a05c0f3269dca5b8fef1 (patch) | |
| tree | 068057d0da92aa852fd4674477f7f50784e7f652 /csc/linker.csc | |
| parent | Handle the (csc builtins) library separately. (diff) | |
| download | chromatopelma-762431b0f0a6ead18a93a05c0f3269dca5b8fef1.tar.zst | |
Insert an exit op at the end of the program.
Diffstat (limited to 'csc/linker.csc')
| -rw-r--r-- | csc/linker.csc | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/csc/linker.csc b/csc/linker.csc index 9095647..a2ab447 100644 --- a/csc/linker.csc +++ b/csc/linker.csc @@ -38,8 +38,6 @@ unless (symbol=? op 'label) collect (cons op (loop for arg in args collect (match arg - (('label 'init) - (list 'const (lookup label-map -1))) (('label x) (list 'const (lookup label-map x))) (_ arg)))))) @@ -50,12 +48,9 @@ for i from offset with m = (make-map compare-numbers) do (match op - (('label 'init) - (set! m (insert m -1 i)) - (set! i (- i 1))) ; Labels will be removed later. (('label id) (set! m (insert m id i)) - (set! i (- i 1)))) + (set! i (- i 1)))) ; Labels will be removed later. finally (return m))) @@ -103,12 +98,9 @@ (translate-globals (loop for prog in programs for off = 0 then (+ off (length converted-prog)) - for converted-prog = (let ((prog-prelude (cons - (list 'jmp '(label init)) - prog))) - (translate-labels - prog-prelude - (make-label-map off prog-prelude))) + for converted-prog = (translate-labels + prog + (make-label-map off prog)) append converted-prog) environment)) ((programs) |
