On Thu, Dec 9, 2010 at 4:48 AM, Sunil S Nandihalli
<sunil.nandiha...@gmail.com> wrote:
> hmm.. so how do we get the file name inside our macro??

I guess we ask nicely for it to be added to the &form metadata in 1.3. :)

Interestingly, extracting the correct line number in cases of
multi-line forms is already handled:

(ns faddle)
(defmacro foo [x] `(quote ~(meta (second &form))))
(defn futz [] (foo
                (bar baz)))
faddle=> (futz)
{:line 4}

Not 3 or nil, 4. The subform (bar baz) has its own metadata with the
correct line number. Since new, non-blank lines almost always start
with an open parenthesis after the leading whitespace, pretty much any
error can be localized to the correct line number even if the macro
body spans multiple lines. Furthermore, the exception lines tend to
contain a literal followed by a close paren, as with the final line in

(if foo
  (bar quux baz)
  42)

and there's *usually* nothing that can go wrong on such a line. When
there is it's usually an error in a *form* inside the literal:

(if foo
  (bar quux baz)
  [42 (count mumble) (.lastIndexOf frotz \q) 3 (19)])
;oops! -----------------------------------------^^

and that form will again have line metadata.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to