[gambit-list] Any way in the Scheme code to get filename, define name and line number at compile time for debug?

Marc Feeley feeley at iro.umontreal.ca
Fri Jun 24 08:29:58 EDT 2016


You need ##define-syntax for that…

 (##define-syntax loc
   (lambda (src)
     (let ((loc
            (call-with-output-string
             "location: "
             (lambda (port)
               (##display-locat (##source-locat src) #t port)))))
       (println loc)
       #f)))

Note that you get the filename, line and column numbers, but you don’t have access to the name of the global function that contains the macro call (this is only known after the macro expansion pass).

Marc


> On Jun 24, 2016, at 4:55 AM, Adam <adam.mlmb at gmail.com> wrote:
> 
> Marc, is there any way I can get the sourcecode filename, name of global define, and line number, that a particular line was compiled at?
> 
> E.g. (so here, ##file, ##in-define and ##line would be output by the macro so the compiler would actually compile those at line 3, 6 and 8.)
> 
> (define-macro (loc) `(print "This was printed at " ##file " in define " ##in-define " line " ##line "\n"))
> 
> (loc)
> 
> (define (something)
>   (loc))
> 
> (loc)
> 
> ?
> 
> Thanks.
> 




More information about the Gambit-list mailing list