From 2c1bab05d6c2debf71ea313901dc751a753880c4 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Thu, 28 Jul 2022 15:41:42 -0700 Subject: Use a better interface for linker. --- csc/linker-test.csc | 17 ++----------- csc/linker.csc | 73 +++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 53 insertions(+), 37 deletions(-) (limited to 'csc') diff --git a/csc/linker-test.csc b/csc/linker-test.csc index 70e5e31..7b5d5db 100644 --- a/csc/linker-test.csc +++ b/csc/linker-test.csc @@ -16,17 +16,6 @@ (begin - (define compare-globals - (make-comparer - (lambda (x) - (hash-bytevector (string->utf8 (sprintf "{}" x)))) - (lambda (x y) - (cond - ((equal? x y) 0) - ((string= v next-global-id) (set! next-global-id (+ 1 v)))) environment) - (define (translate-global x) - (or (lookup environment x #f) - (let ((id next-global-id)) - (set! next-global-id (+ 1 next-global-id)) - (set! environment (insert environment x id)) - id))) + (loop for opcode in (apply append programs) + do (loop for arg in (cdr opcode) + do (match arg + (('global name lib) + (define id next-global-id) + (set! next-global-id (+ 1 next-global-id)) + (set! environment (insert environment arg id)))))) + environment) + + + (define compare-globals + (make-comparer + (lambda (x) + (hash-bytevector (string->utf8 (sprintf "{}" x)))) + (lambda (x y) + (cond + ((equal? x y) 0) + ((string