I was trying to investigate the expansion behavior of a piece of code for which 
I just submitted a bug, and used the macro stepper.  I was confused by what I 
saw. Here's the program:

#lang racket

(define (takes-kwd-arg #:kwd-arg opt)
  (not opt))

(let ([named-val (takes-kwd-arg #:kwd-arg #t)])
  named-val)

I ran the macro stepper  button, and got this as the result of the step:

(module anonymous-module racket
  (#%module-begin
   (define (takes-kwd-arg #:kwd-arg opt) (not opt))
   (let ([named-val
          (let ((named-val takes-kwd-arg) (temp6 #t))
            (if (variable-reference-constant? (#%variable-reference 
takes-kwd-arg5))
              (takes-kwd-arg3 temp6)
              ((checked-procedure-check-and-extract struct:keyword-procedure 
named-val keyword-procedure-extract '(#:kwd-arg) 2)
               '(#:kwd-arg)
               (list temp6))))])
     named-val)))

There are a bunch of identifiers without obvious binding instances here: for 
instance, "takes-kwd-arg3".  I'm guessing that these identifiers have binding 
information that's not shown by the macro stepper. 

What was much *more* confusing, though, was that when I turned *off* "Hide 
Library Syntax", the bottom half suddenly turned into:

(module anonymous-module racket
  (#%module-begin
   (printing-module-begin (define (takes-kwd-arg #:kwd-arg opt) (not opt)))
   (printing-module-begin (let ([named-val (takes-kwd-arg #:kwd-arg #t)]) 
named-val))))

... which suggested that "hiding Library Syntax" caused *more* detail to be 
shown.

I've been mulling this over, and finally realized that when the box was 
checked, I was seeing step 1 of 1. When the box was unchecked, I was seeing 
only the first of several steps. 

Can I suggest that it might be clearer what's going on if the macro stepper 
displays something like "step <n> of <n>" somewhere? This might have clued me 
in to my oversight.

John



Attachment: smime.p7s
Description: S/MIME cryptographic signature

_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to