Skip to content
  • Christophe Rhodes's avatar
    srcrefs in swank:compile-string-for-emacs · 16e6dc8f
    Christophe Rhodes authored
    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.
    16e6dc8f