function definitions from REPL substandard

Bug #1000783 reported by Nikodemus Siivola on 2012-05-17
This bug affects 1 person
Affects Status Importance Assigned to Milestone

Bug Description

* (defun foo (x) (declare (optimize debug)) (let ((y (- x x))) (/ x y)))

* (function-lambda-expression #'foo)

* (foo 1)

debugger invoked on a DIVISION-BY-ZERO in thread
#<THREAD "main thread" RUNNING {1003600F43}>:
  arithmetic error DIVISION-BY-ZERO signalled
Operation was SB-KERNEL::DIVISION, operands (1 0).

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

0] d
(FOO 1)
1] source

debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {1003600F43}>:
  The source path no longer exists.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Reduce debugger level (to debug level 1).
  1: Exit debugger, returning to top level.


Nikodemus Siivola (nikodemus) wrote :

commit 04a651e749befd65ffd8bf49f689b6e7d55607e2
Author: Nikodemus Siivola <email address hidden>
Date: Thu May 17 15:22:22 2012 +0300

    fix source information for functions from EVAL

     * Removed the breathtaking (NAMED-LAMBDA (EVAL (DEFUN FOO)) ...) hack, which
       caused inconsistent source locations, and broke the built-in debugger
       source command for evaluated functions.

       Replace it with *SOURCE-FORM-CONTEXT-ALIST*, which allows the simple
       evaluator to communicate the original context to the compiler without
       messing with the function source.

       This also means we no longer have to wrap named-lambdas and lambdas in
       another lambda, but can instead compile them directly -- which in turn
       allows FUNCTION-LAMBDA-EXPRESSION to work correctly for definitions from
       EVAL and LOAD.

     * Additionally, use a handler to muffle any compiler notes from EVAL instead
       of using a declaration: those can leak to the user via F-L-E.

     * Change ACTUALLY-COMPILE to return a function signaling an error instead of
       returning NIL when compilation fails fatally. Doing this in
       ACTUALLY-COMPILE allows us to rely on COMPILE-IN-LEXENV always returning a
       function, and gives easy access to a better error message.

     * Properly associate COMPILER-ERRORS with their SIGNAL-ERROR restart.

     * Adjust debug.impure.lisp to be less dependent on the details of

     * Test cases. Pay special attention to TEST-DEBUGGER in debug.impure.lisp.

     * New docstring for COMPILE. Added a sneaky teaser about COMPILE being able
       to recompile things, which is new starting to look feasible.

Changed in sbcl:
assignee: Nikodemus Siivola (nikodemus) → nobody
status: In Progress → Fix Committed
Changed in sbcl:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers