Christophe Weblog Wiki Code Publications Music
srcrefs in swank:compile-string-for-emacs
authorChristophe Rhodes <csr21@cantab.net>
Fri, 8 Oct 2010 09:12:38 +0000 (10:12 +0100)
committerChristophe Rhodes <csr21@cantab.net>
Fri, 8 Oct 2010 09:12:38 +0000 (10:12 +0100)
commit16e6dc8f53a9ae9af754fae24cb83aa82f933229
tree1bdfce52b47afb11f216d4a217bd7162bea9890a
parent579190b3a2da212458bb12fedbadca6dad37e960
srcrefs in swank:compile-string-for-emacs

Wow, this was hard.  parse() constructs a vector with mode
"expression", consisting of multiple, possibly nested calls.
Scattered throughout this structure are srcrefs with absolute
locations.  This means that we need to walk the parsed data structure
and adjust every srcref that we can find, giving it an offset based on
the location information passed to compile-string-for-emacs (which
requires bleeding-edge 2010-10-08 slime, because earlier versions
don't pass line/column information in the position argument).

But we can't simply adjust the "srcref" attribute on our parsed data
structure, because R tries very hard to be pure.  Instead we need to
return a copy with the right modifications (but preserving everything
else of importance).  It's straightforward once you know how, but
there were many painful missteps to get to this point.  Still, now
M-. works on function names assigned with C-c C-c in source buffers.
BUGS.org
swank.R