(import (scheme base) (only (csc gensym) gensym) (only (csc ir2) *globals* make-apply make-constant make-fix make-primitive make-variable) (only (csc loop) loop return) (only (csc match) match) (only (csc testing) assert-equal test) (csc codegen)) (define transform-bytecode (list (cons (lambda (expr) (match expr (('label _) #t) (_ #f))) (lambda (expr) 'label)) (cons (lambda (expr) (match expr (('local _) #t) (_ #f))) (lambda (expr) 'local)))) (define (test-var) (make-variable (gensym))) (test codegen-apply (assert-equal '((peek (local #f) (local #f) (const 5)) (mov (local #f) (const 10)) (jmp (local #f))) (ir2->ir3 (make-fix '() (make-primitive 'peek (list *globals* (make-constant 5)) (list (test-var)) (make-apply (test-var) (list (make-constant 10)))))) transform-bytecode))