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!
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:
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?
(##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