From 89b96ef9f30391bfe53738c74b8258fa0c3dc928 Mon Sep 17 00:00:00 2001 From: John Clements Date: Sun, 18 May 2014 00:18:54 -0700 Subject: [PATCH] simplify stepper and fix unevaluated id bug --- pkgs/htdp-pkgs/htdp-lib/stepper/DESIGN-NOTES | 14 ++++++++++++++ .../htdp-lib/stepper/private/annotate.rkt | 15 ++++----------- pkgs/htdp-pkgs/htdp-lib/stepper/private/model.rkt | 1 + 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/pkgs/htdp-pkgs/htdp-lib/stepper/DESIGN-NOTES b/pkgs/htdp-pkgs/htdp-lib/stepper/DESIGN-NOTES index db1547d503..79d351879f 100644 --- a/pkgs/htdp-pkgs/htdp-lib/stepper/DESIGN-NOTES +++ b/pkgs/htdp-pkgs/htdp-lib/stepper/DESIGN-NOTES @@ -962,3 +962,17 @@ code, and works better, too. Nice to be here again... 2010-12-04 + +************** + +How time flies. Small bug fixes; it's now illegal to refer to undefined +values. That is, (letrec ([a a]) 3) is illegal. This caused stepper +breakage, and I was worried that fixing this was going to require some +terrible deep surgery. In fact, though, it looks like this change +makes things *simpler*; it looks like I was going out of my way to +preserve the undefined values for situations where it might turn up in +student programs, and now I can omit that check. + +2013-05-18 + +************** diff --git a/pkgs/htdp-pkgs/htdp-lib/stepper/private/annotate.rkt b/pkgs/htdp-pkgs/htdp-lib/stepper/private/annotate.rkt index aabeab2901..0150c8d83b 100644 --- a/pkgs/htdp-pkgs/htdp-lib/stepper/private/annotate.rkt +++ b/pkgs/htdp-pkgs/htdp-lib/stepper/private/annotate.rkt @@ -436,7 +436,7 @@ ; wish me luck. - (define (let-abstraction stx output-identifier make-init-list) + (define (let-abstraction stx output-identifier) (with-syntax ([(_ ([(var ...) val] ...) . bodies) stx]) (match-let* ([binding-sets (map syntax->list (syntax->list #'((var ...) ...)))] @@ -491,7 +491,7 @@ free-varref-sets-vals)) binding-list)] [counter-id #`lifting-counter] - [unevaluated-list (make-init-list binding-list)] + [unevaluated-list (map (lambda (b) *unevaluated*) binding-list)] [outer-initialization #`([(#,@lifted-vars #,@binding-list #,let-counter) (values #,@(append (map (lambda (dc_binding) counter-id) @@ -788,16 +788,9 @@ #,rolled-into-fakes)) all-free-vars))] - [(let-values . _) - (let-abstraction exp - #`let-values - (lambda (bindings) - (map (lambda (_) *unevaluated*) bindings)))] + [(let-values . _) (let-abstraction exp #`let-values)] - [(letrec-values . _) - (let-abstraction exp - #`letrec-values - (lambda (bindings) (map (lambda (b) #`#,b) bindings)))] + [(letrec-values . _) (let-abstraction exp #`letrec-values)] ; $ diff --git a/pkgs/htdp-pkgs/htdp-lib/stepper/private/model.rkt b/pkgs/htdp-pkgs/htdp-lib/stepper/private/model.rkt index 8dea5d1d7e..785d02b26e 100644 --- a/pkgs/htdp-pkgs/htdp-lib/stepper/private/model.rkt +++ b/pkgs/htdp-pkgs/htdp-lib/stepper/private/model.rkt @@ -522,6 +522,7 @@ ;; step through a single expanded expression. (define (step-through-expression expanded) (define annotated (a:annotate expanded break show-lambdas-as-lambdas?)) + #;(printf "annotated: ~s\n" annotated) (parameterize ([test-engine:test-silence #t]) (eval-syntax annotated)))