It is worth pointing out that Check Syntax does not see the result of
your reader, it sees the fully-expanded module and performs its analysis
from there. Therefore, it can be useful to use the macro stepper with
macro hiding disabled to inspect the fully-expanded module to make sure
that the information at least appears to be in place.

In the case of your language, I would use the macro stepper to ensure
the following three things are happening:

  1. The `sum` identifier appears in binding position in the
     fully-expanded program, and it has the appropriate source location

  2. The `sum` identifier also appears in use position in the
     fully-expanded program, and it has distinct source location
     information from the identifier in binding position.

  3. Both identifiers are syntax-original?.

If those things are all the case, it’s difficult for me to say much more
without looking at the code itself.

(As an aside, you should probably be providing the first argument of
my-read-syntax as the first argument to `parse` instead of (object-name
in), but I’m not sure if that’s at all related to the issue here.)

> On Feb 13, 2018, at 23:33, Sorawee Porncharoenwase
> <> wrote:
> I have a similar problem but I can't figure out a way to fix it yet
> :(
> So, when I hover on `sum` on line 3, I get "no bound occurrences".
> That's definitely false since the program runs fine, and `sum` has a
> bound occurrence below (e.g., line 5).
> I print the syntax objects passed into `#%module-begin` in the REPL.
> The srcloc seems right to me.
> What baffles me further is that when I follow Robby's suggestion to
> insert a printf inside check-syntax code:
> (printf "~a ~a ~a\n" stx-obj (syntax-source stx-obj) (syntax-line stx-obj))
> I get the following result (only relevant lines shown)
> #<syntax temp1> #f #f
> #<syntax temp1> #f #f
> #<syntax:3:20 s> string 3
> #<syntax:3:23 id> string 3
> #<syntax temp1> #f #f
> #<syntax:3:9 id> string 3
> #<syntax f3> #f #f
> #<syntax:5:0 sum> string 5
> #<syntax temp9> #f #f
> #<syntax temp9> #f #f
> #<syntax:7:16 sum> string 7
> #<syntax:7:21 id> string 7
> #<syntax:7:29 id> string 7
> #<syntax temp9> #f #f
> #<syntax:7:10 z> string 7
> ...
> So: the sum on line 3 is either missing or somehow becomes `#<syntax
> temp1> #f #f`
> And sum on line 7 has a correct srcloc, except that the syntax-source
> somehow changes from `'unsaved-editor` to `string`?!?
> FYI, I use megaparsack's `parse-syntax-string` like this:
> (define (parse src in)
>   (define len (string-length "#lang recursive-language"))
>   (parse-result!
>    (parse-syntax-string toplevel/p
>                         (datum->syntax #f (port->string in)
>                                        (list src 1 len (add1 len) 0))))
> And this is my module reader
> (module reader racket
>   (require syntax/strip-context)
>   (require "parser.rkt")
>   (provide (rename-out [my-read-syntax read-syntax]
>                        [my-read read]))
>   (define (my-read in) (syntax->datum (my-read-syntax #f in)))
>   (define (my-read-syntax _ in)
>     (datum->syntax #f
>       `(module src recursive-language
>         ,@(parse (object-name in) in)))))
> Any idea how to fix this? Also feel free to suggest anything that you
> find wrong -- this is the first time I touch the reader!
> Thank you :)

You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
For more options, visit

Reply via email to