From df4462b43661d56cba2b1e0fa8a2408a7554b81c Mon Sep 17 00:00:00 2001 From: Jacob Signorovitch Date: Mon, 25 May 2026 13:18:48 -0400 Subject: [PATCH] Yes --- 15-compilation-part-2/main.rkt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/15-compilation-part-2/main.rkt b/15-compilation-part-2/main.rkt index 2b74379..552d360 100644 --- a/15-compilation-part-2/main.rkt +++ b/15-compilation-part-2/main.rkt @@ -15,6 +15,8 @@ | { ... } |# +(define-type BINDINGS (Listof (Listof Symbol))) + ;; A matching abstract syntax tree datatype: (define-type TOY [Num Number] @@ -185,23 +187,23 @@ ;; a global flag that can disable the compiler (define compiler-enabled? (box #f)) -(: compile-body : (Listof TOY) -> (ENV -> VAL)) +(: compile-body : (Listof TOY) BINDINGS -> (ENV -> VAL)) ;; compiles a list of expressions to a single Racket function. -(define (compile-body exprs) +(define (compile-body exprs bin) (unless (unbox compiler-enabled?) (error 'compile-body "compiler disabled")) - (let ([compiled-1st (compile (first exprs))] + (let ([compiled-1st (compile (first exprs) bin)] [rest (rest exprs)]) (if (null? rest) compiled-1st - (let ([compiled-rest (compile-body rest)]) + (let ([compiled-rest (compile-body rest bin)]) (lambda (env) (define ignored (compiled-1st env)) (compiled-rest env)))))) -(: compile-get-boxes : (Listof TOY) -> (ENV -> (Listof (Boxof VAL)))) +(: compile-get-boxes : (Listof TOY) BINDINGS -> (ENV -> (Listof (Boxof VAL)))) ;; utility for applying rfun -(define (compile-get-boxes exprs) +(define (compile-get-boxes exprs bin) (: compile-getter : TOY -> (ENV -> (Boxof VAL))) (define (compile-getter expr) (cases expr @@ -218,9 +220,9 @@ (map (lambda ([get-box : (ENV -> (Boxof VAL))]) (get-box env)) getters)))) -(: compile : TOY -> (ENV -> VAL)) +(: compile : TOY BINDINGS -> (ENV -> VAL)) ;; compiles TOY expressions to Racket functions. -(define (compile expr) +(define (compile expr bin) ;; convenient helper for running compiled code (: caller : ENV -> ((ENV -> VAL) -> VAL)) (define (caller env)