[armedbear-devel] [j-devel] slime swank-abcl.lisp

Tobias C. Rittweiler tcr at freebits.de
Wed Sep 16 14:05:12 UTC 2009


Mark Evenson writes:

> On 9/16/09 12:23 AM, Tobias C. Rittweiler wrote:
> […]
>> I think there's an off-by-one in SOURCE-LOCATION. In Emacs, a buffer
>> starts at 1, but in Common Lisp a file-position starts at 0.
>>
>> (Caveat: `(goto-char 0)' in DWIM fashion will also bring you to the
>> beginning of a buffer.)
>>
>> I think that's the reason why you put the (PLUSP POS) there to guard
>> against this issue, but merely passing (IF POS (1+ POS) 1) should also
>> suffice. Perhaps you want to put this into an extra function so the
>> casual hacker will be aware of it more easily.
>
> There certainly is an "off-by-one" here if Emacs buffers start at 1 
> (this surprised me!), but I don't quite understand what Tobias is 
> proposing here.
>
> The intention of the first operand in the (AND POS (PLUSP POS) was to 
> guard against getting a nil from EXT:SOURCE-FILE-POSITION, right?  So 
> don't we want this implementation:
>
> (defun source-location (symbol)
>    (when (pathnamep (ext:source-pathname symbol))
>      (let ((pos (ext:source-file-position symbol)))
>        `(((,symbol)
>           (:location
>             (:file ,(namestring (ext:source-pathname symbol)))
>             ,(if pos
>                  (list :position (1+ pos))
>                  (list :function-name (string symbol)))
>             (:align t)))))))

Yes, exactly.

  -T.





More information about the armedbear-devel mailing list