From 68986fe0410584c6934c835bb0ee784655f5f8c5 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 11 Jan 2022 22:01:23 -0800 Subject: Move scheme compiler into a separate directory. --- linker.csc | 67 -------------------------------------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 linker.csc (limited to 'linker.csc') diff --git a/linker.csc b/linker.csc deleted file mode 100644 index 852ee13..0000000 --- a/linker.csc +++ /dev/null @@ -1,67 +0,0 @@ -(define-library (csc linker) - (export link remove-labels make-label-map translate-labels) - (import (scheme base) - (only (csc encoding) encode) - (only (csc format) sprintf) - (only (csc hash-map) - hash-bytevector - insert - lookup - make-map) - (only (csc list) - enumerate - filter) - (only (csc match) match)) - (begin - ; A CSC bytecode program is a list of opcodes. An opcode is a symbol, or a 2 - ; item list of a symbol and an argument. The full list of opcodes can be - ; found in encoding.csc. - - - (define (translate-labels program label-map) - (map - (lambda (x) - (match x - ((i . ((! 'if) label)) - ; Compute offset from the current position. Subtract 1 - ; because the instruction pointer is incremented each - ; time already. - (list 'if (- (lookup label-map label) i 1))) - ((_ . ((! 'call) label)) - (list 'call (lookup label-map label))) - ((_ . opcode) opcode))) - (enumerate program))) - (lambda (i . opcode) - (match opcode - (((! 'if) label) #t) - (_ #f))) - - - (define (hash-string s) - (hash-bytevector (string->utf8 s))) - - - (define (make-label-map program) - (let loop ((m (make-map hash-string string