[gambit-list] equiv of __FILE__ and __LINE__
lowly coder
lowlycoder at huoyanjinjing.com
Thu May 7 03:06:23 EDT 2009
Let's see how much of this I can understand.
1) FILE & LINE are macros.
2) in (lambda (src <-- this variable here
the src is linked to the reader/parser object, which is why we can query
it for the current line / file number?
3) Why the ##'s
Thanks!
On Sat, May 2, 2009 at 8:23 PM, Marc Feeley <feeley at iro.umontreal.ca> wrote:
>
> On 1-May-09, at 5:38 PM, lowly coder wrote:
>
> For C macros, I tend to use __FILE__ and __LINE__ alot. Does gambit have
>> an equiv for this?
>>
>
>
> There's a builtin macro to get the current source file, which is called
> "this-source-file". Nothing is builtin to get the line, but you can get
> that in the following way:
>
> (##define-syntax FILE
> (lambda (src)
> (if (not (##source? src))
> (error "expected a source object")
> (let ((locat (##source-locat src)))
> (if (not locat)
> (error "location unknown")
> (let ((container (##locat-container locat))
> (position (##locat-position locat)))
> (let ((path (##container->path container)))
> path)))))))
>
> (##define-syntax LINE
> (lambda (src)
> (if (not (##source? src))
> (error "expected a source object")
> (let ((locat (##source-locat src)))
> (if (not locat)
> (error "location unknown")
> (let ((position (##locat-position locat)))
> (let ((filepos (##position->filepos position)))
> (let ((line (##fixnum.+ (##filepos-line filepos) 1)))
> line))))))))
>
> (pp (list (FILE) (LINE)))
> (pp (list (this-source-file) (LINE)))
>
> ;; prints:
> ;;
> ;; ("/u/feeley/test.scm" 25)
> ;; ("/u/feeley/test.scm" 26)
>
> Marc
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20090507/105af79c/attachment.htm>
More information about the Gambit-list
mailing list