Closed PuercoPop closed 9 years ago
I don't think it has anything to do with SLY at all. The handler code in your handler-case
that computes the restarts runs when the stack is already unwound after the error you caught, i.e. by definition those restarts are no longer available. I think you possibly meant:
(catch 'aha
(handler-bind
((error (lambda (e)
(throw 'aha (compute-restarts e)))))
(defpackage #:foo
(:use #:cl)
(:import-from #:bar
#:bar))))
Evaluating this gives me:
(#<RESTART SB-IMPL::SHADOWING-IMPORT-IT {1005419FA3}>
#<RESTART SB-IMPL::DONT-IMPORT-IT {100541A023}>
#<RESTART SB-EXT:RESOLVE-CONFLICT {100541A0A3}>
#<RESTART SLYNK::RETRY {10053CC283}>
#<RESTART ABORT {10053CB613}>
#<RESTART ABORT {10053CB1B3}>)
The three restarts you were seeing were indeed the only restarts available on the stack, albeit the higher-level ones for aborting/retrying the slynk request and killing the whole thread and such.
Also, I believe that the conflict-resolving restarts aren't standard, they're "nice-to-haves": some implementations have them, some don't, and some have them by different names. I tested in SBCL which is what I assume you are using (right?)
Yes I am using SBCL. You are right about the test-code of the restarts, the shadowing-import-it restart is there when using catch-throw. But I think I didn't make myself clear as to what is the crux of the issue. I am seeing no restarts, just a condition in sly-db and a message in the minibuffer
IMPORT BAR:BAR causes name-conflicts in #<PACKAGE "FOO"> between
the following symbols:
BAR:BAR, FOO::BAR
[Condition of type SB-EXT:NAME-CONFLICT]
error in process filter: [sly] Elisp sly-dcase failed: (:references ((:ansi-cl :section (11 1 1 2 5))))
(when debug-on-error is t)
Debugger entered--Lisp error: (error "[sly] Elisp sly-dcase failed: (:references ((:ansi-cl :section (11 1 1 2 5))))")
signal(error ("[sly] Elisp sly-dcase failed: (:references ((:ansi-cl :section (11 1 1 2 5))))"))
error("[sly] Elisp sly-dcase failed: %S" (:references ((:ansi-cl :section (11 1 1 2 5)))))
apply(error "[sly] Elisp sly-dcase failed: %S" (:references ((:ansi-cl :section (11 1 1 2 5)))))
sly-error("Elisp sly-dcase failed: %S" (:references ((:ansi-cl :section (11 1 1 2 5)))))
sly-stickers--handle-break((:references ((:ansi-cl :section (11 1 1 2 5)))))
run-hook-with-args-until-success(sly-stickers--handle-break (:references ((:ansi-cl :section (11 1 1 2 5)))))
sly-db-dispatch-extras(((:references ((:ansi-cl :section (11 1 1 2 5))))))
sly-db-insert-condition((#("IMPORT BAR:BAR causes name-conflicts in #<PACKAGE \"FOO\"> between\nthe following symbols:\n BAR:BAR, FOO::BAR" 0 107 (face sly-db-topline-face)) #(" [Condition of type SB-EXT:NAME-CONFLICT]" 0 43 (face sly-db-condition-face)) ((:references ((:ansi-cl :section (11 1 1 2 5)))))))
sly-db-setup(2 1 (#("IMPORT BAR:BAR causes name-conflicts in #<PACKAGE \"FOO\"> between\nthe following symbols:\n BAR:BAR, FOO::BAR" 0 107 (face sly-db-topline-face)) #(" [Condition of type SB-EXT:NAME-CONFLICT]" 0 43 (face sly-db-condition-face)) ((:references ((:ansi-cl :section (11 1 1 2 5)))))) (("SHADOWING-IMPORT-IT" "Shadowing-import BAR:BAR, uninterning BAR.") ("DONT-IMPORT-IT" "Don't import BAR:BAR, keeping BAR.") ("RESOLVE-CONFLICT" "Resolve conflict.") ("RETRY" "Retry SLY interactive evaluation request.") ("*ABORT" "Return to SLY's top level.") ("ABORT" "abort thread (#<THREAD \"slynk-worker\" RUNNING {1007AD6DF3}>)")) ((0 "(SB-EXT:NAME-CONFLICT #<PACKAGE \"FOO\"> IMPORT BAR:BAR BAR:BAR BAR)") (1 "((FLET SB-IMPL::THUNK :IN IMPORT))") (2 "((FLET #:WITHOUT-INTERRUPTS-BODY-561 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))") (3 "(SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-IMPL::CALL-WITH-PACKAGE-GRAPH) {7FFFF21E50EB}> #<SB-THREAD:MUTEX \"Package Graph Lock\" owner: #<SB-THREA..") (4 "(SB-IMPL::CALL-WITH-PACKAGE-GRAPH #<CLOSURE (FLET SB-IMPL::THUNK :IN IMPORT) {7FFFF21E513B}>)") (5 "(IMPORT (BAR:BAR) #<PACKAGE \"FOO\">)") (6 "(SB-IMPL::UPDATE-PACKAGE #<PACKAGE \"FOO\"> NIL #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING NIL :TOPLEVEL-FORM-NUMBER NIL :FORM-NUMBER NIL :PLIST NIL) NIL NIL (#<PACKAGE \"COMMON-LISP\">) (BAR:BAR) NIL..") (7 "((FLET #:WITHOUT-INTERRUPTS-BODY-561 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))") (8 "(SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-IMPL::CALL-WITH-PACKAGE-GRAPH) {7FFFF21E540B}> #<SB-THREAD:MUTEX \"Package Graph Lock\" owner: #<SB-THREA..") (9 "(SB-IMPL::CALL-WITH-PACKAGE-GRAPH #<CLOSURE (FLET SB-IMPL::THUNK :IN SB-IMPL::%DEFPACKAGE) {7FFFF21E545B}>)") (10 "(SB-IMPL::%DEFPACKAGE \"FOO\" NIL NIL NIL NIL (\"CL\") ((\"BAR\" \"BAR\")) NIL NIL (\"FOO\") NIL NIL #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING NIL :TOPLEVEL-FORM-NUMBER NIL :FORM-NUMBER NIL :PLIST NIL) NIL..") (11 "(SB-INT:SIMPLE-EVAL-IN-LEXENV (SB-IMPL::%DEFPACKAGE \"FOO\" (QUOTE NIL) (QUOTE NIL) (QUOTE NIL) (QUOTE NIL) ...) #<NULL-LEXENV>)") (12 "(SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFPACKAGE #:FOO (:USE #:CL) (:IMPORT-FROM #:BAR #:BAR)) #<NULL-LEXENV>)") (13 "(EVAL (DEFPACKAGE #:FOO (:USE #:CL) (:IMPORT-FROM #:BAR #:BAR)))") (14 "((LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL))" (:restartable t)) (15 "(SLYNK::CALL-WITH-RETRY-RESTART \"Retry SLY interactive evaluation request.\" #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912CB}>)" (:restartable t)) (16 "((LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL))" (:restartable t)) (17 "(SLYNK-BACKEND:CALL-WITH-SYNTAX-HOOKS #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912AB}>)" (:restartable t)) (18 "(SLYNK::CALL-WITH-BUFFER-SYNTAX NIL NIL #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912AB}>)" (:restartable t)) (19 "(SLYNK:INTERACTIVE-EVAL \"(defpackage #:foo ..)" (:restartable t))) (40))
sly-dispatch-event((:debug 2 1 (#("IMPORT BAR:BAR causes name-conflicts in #<PACKAGE \"FOO\"> between\nthe following symbols:\n BAR:BAR, FOO::BAR" 0 107 (face sly-db-topline-face)) #(" [Condition of type SB-EXT:NAME-CONFLICT]" 0 43 (face sly-db-condition-face)) ((:references ((:ansi-cl :section (11 1 1 2 5)))))) (("SHADOWING-IMPORT-IT" "Shadowing-import BAR:BAR, uninterning BAR.") ("DONT-IMPORT-IT" "Don't import BAR:BAR, keeping BAR.") ("RESOLVE-CONFLICT" "Resolve conflict.") ("RETRY" "Retry SLY interactive evaluation request.") ("*ABORT" "Return to SLY's top level.") ("ABORT" "abort thread (#<THREAD \"slynk-worker\" RUNNING {1007AD6DF3}>)")) ((0 "(SB-EXT:NAME-CONFLICT #<PACKAGE \"FOO\"> IMPORT BAR:BAR BAR:BAR BAR)") (1 "((FLET SB-IMPL::THUNK :IN IMPORT))") (2 "((FLET #:WITHOUT-INTERRUPTS-BODY-561 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))") (3 "(SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-IMPL::CALL-WITH-PACKAGE-GRAPH) {7FFFF21E50EB}> #<SB-THREAD:MUTEX \"Package Graph Lock\" owner: #<SB-THREA..") (4 "(SB-IMPL::CALL-WITH-PACKAGE-GRAPH #<CLOSURE (FLET SB-IMPL::THUNK :IN IMPORT) {7FFFF21E513B}>)") (5 "(IMPORT (BAR:BAR) #<PACKAGE \"FOO\">)") (6 "(SB-IMPL::UPDATE-PACKAGE #<PACKAGE \"FOO\"> NIL #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING NIL :TOPLEVEL-FORM-NUMBER NIL :FORM-NUMBER NIL :PLIST NIL) NIL NIL (#<PACKAGE \"COMMON-LISP\">) (BAR:BAR) NIL..") (7 "((FLET #:WITHOUT-INTERRUPTS-BODY-561 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))") (8 "(SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-IMPL::CALL-WITH-PACKAGE-GRAPH) {7FFFF21E540B}> #<SB-THREAD:MUTEX \"Package Graph Lock\" owner: #<SB-THREA..") (9 "(SB-IMPL::CALL-WITH-PACKAGE-GRAPH #<CLOSURE (FLET SB-IMPL::THUNK :IN SB-IMPL::%DEFPACKAGE) {7FFFF21E545B}>)") (10 "(SB-IMPL::%DEFPACKAGE \"FOO\" NIL NIL NIL NIL (\"CL\") ((\"BAR\" \"BAR\")) NIL NIL (\"FOO\") NIL NIL #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING NIL :TOPLEVEL-FORM-NUMBER NIL :FORM-NUMBER NIL :PLIST NIL) NIL..") (11 "(SB-INT:SIMPLE-EVAL-IN-LEXENV (SB-IMPL::%DEFPACKAGE \"FOO\" (QUOTE NIL) (QUOTE NIL) (QUOTE NIL) (QUOTE NIL) ...) #<NULL-LEXENV>)") (12 "(SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFPACKAGE #:FOO (:USE #:CL) (:IMPORT-FROM #:BAR #:BAR)) #<NULL-LEXENV>)") (13 "(EVAL (DEFPACKAGE #:FOO (:USE #:CL) (:IMPORT-FROM #:BAR #:BAR)))") (14 "((LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL))" (:restartable t)) (15 "(SLYNK::CALL-WITH-RETRY-RESTART \"Retry SLY interactive evaluation request.\" #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912CB}>)" (:restartable t)) (16 "((LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL))" (:restartable t)) (17 "(SLYNK-BACKEND:CALL-WITH-SYNTAX-HOOKS #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912AB}>)" (:restartable t)) (18 "(SLYNK::CALL-WITH-BUFFER-SYNTAX NIL NIL #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912AB}>)" (:restartable t)) (19 "(SLYNK:INTERACTIVE-EVAL \"(defpackage #:foo ..)" (:restartable t))) (40)) #<process sly-1>)
sly-process-available-input(#<process sly-1>)
sly-net-filter(#<process sly-1> "000B60(:debug 2 1 (\"IMPORT BAR:BAR causes name-conflicts in #<PACKAGE \\\"FOO\\\"> between\nthe following symbols:\n BAR:BAR, FOO::BAR\" \" [Condition of type SB-EXT:NAME-CONFLICT]\" ((:references ((:ansi-cl :section (11 1 1 2 5)))))) ((\"SHADOWING-IMPORT-IT\" \"Shadowing-import BAR:BAR, uninterning BAR.\") (\"DONT-IMPORT-IT\" \"Don't import BAR:BAR, keeping BAR.\") (\"RESOLVE-CONFLICT\" \"Resolve conflict.\") (\"RETRY\" \"Retry SLY interactive evaluation request.\") (\"*ABORT\" \"Return to SLY's top level.\") (\"ABORT\" \"abort thread (#<THREAD \\\"slynk-worker\\\" RUNNING {1007AD6DF3}>)\")) ((0 \"(SB-EXT:NAME-CONFLICT #<PACKAGE \\\"FOO\\\"> IMPORT BAR:BAR BAR:BAR BAR)\") (1 \"((FLET SB-IMPL::THUNK :IN IMPORT))\") (2 \"((FLET #:WITHOUT-INTERRUPTS-BODY-561 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))\") (3 \"(SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-IMPL::CALL-WITH-PACKAGE-GRAPH) {7FFFF21E50EB}> #<SB-THREAD:MUTEX \\\"Package Graph Lock\\\" owner: #<SB-THREA..\") (4 \"(SB-IMPL::CALL-WITH-PACKAGE-GRAPH #<CLOSURE (FLET SB-IMPL::THUNK :IN IMPORT) {7FFFF21E513B}>)\") (5 \"(IMPORT (BAR:BAR) #<PACKAGE \\\"FOO\\\">)\") (6 \"(SB-IMPL::UPDATE-PACKAGE #<PACKAGE \\\"FOO\\\"> NIL #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING NIL :TOPLEVEL-FORM-NUMBER NIL :FORM-NUMBER NIL :PLIST NIL) NIL NIL (#<PACKAGE \\\"COMMON-LISP\\\">) (BAR:BAR) NIL..\") (7 \"((FLET #:WITHOUT-INTERRUPTS-BODY-561 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))\") (8 \"(SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-IMPL::CALL-WITH-PACKAGE-GRAPH) {7FFFF21E540B}> #<SB-THREAD:MUTEX \\\"Package Graph Lock\\\" owner: #<SB-THREA..\") (9 \"(SB-IMPL::CALL-WITH-PACKAGE-GRAPH #<CLOSURE (FLET SB-IMPL::THUNK :IN SB-IMPL::%DEFPACKAGE) {7FFFF21E545B}>)\") (10 \"(SB-IMPL::%DEFPACKAGE \\\"FOO\\\" NIL NIL NIL NIL (\\\"CL\\\") ((\\\"BAR\\\" \\\"BAR\\\")) NIL NIL (\\\"FOO\\\") NIL NIL #S(SB-C:DEFINITION-SOURCE-LOCATION :NAMESTRING NIL :TOPLEVEL-FORM-NUMBER NIL :FORM-NUMBER NIL :PLIST NIL) NIL..\") (11 \"(SB-INT:SIMPLE-EVAL-IN-LEXENV (SB-IMPL::%DEFPACKAGE \\\"FOO\\\" (QUOTE NIL) (QUOTE NIL) (QUOTE NIL) (QUOTE NIL) ...) #<NULL-LEXENV>)\") (12 \"(SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFPACKAGE #:FOO (:USE #:CL) (:IMPORT-FROM #:BAR #:BAR)) #<NULL-LEXENV>)\") (13 \"(EVAL (DEFPACKAGE #:FOO (:USE #:CL) (:IMPORT-FROM #:BAR #:BAR)))\") (14 \"((LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL))\" (:restartable t)) (15 \"(SLYNK::CALL-WITH-RETRY-RESTART \\\"Retry SLY interactive evaluation request.\\\" #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912CB}>)\" (:restartable t)) (16 \"((LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL))\" (:restartable t)) (17 \"(SLYNK-BACKEND:CALL-WITH-SYNTAX-HOOKS #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912AB}>)\" (:restartable t)) (18 \"(SLYNK::CALL-WITH-BUFFER-SYNTAX NIL NIL #<CLOSURE (LAMBDA NIL :IN SLYNK:INTERACTIVE-EVAL) {1007A912AB}>)\" (:restartable t)) (19 \"(SLYNK:INTERACTIVE-EVAL \\\"(defpackage #:foo ..)\" (:restartable t))) (40))")
This is a unexpected behavior right?
This is a unexpected behavior right?
@PuercoPop, oh yes indeed :) but are you sure you have e2f77d119a64b36c38387effe39981458ddf6488 of three weeks ago?
It should fix this very same issue...
I'm up to date with the current master afaik. Will double check when I get to a machine
After doing make clean; make on the current master you are right that the issue is no longer present.
Maybe it was a stale .elc? Anyhow sorry for the false report.
Maybe it was a stale .elc?
Seems likely... There's a new emacs option that always prefers newer el
over elc
, but it's off by default. I forgot the name, it should contain "prefer" and "new" tho...
The name is load-prefer-newer
How to reproduce
What do I see
Error message displayed on the minibuffer
What I expect
To see a list of restarts to handle the condition, including the shadowing-import-it from name-conflict. Note there may be two issues here as I don't find the shadowing-import-it restart in the available restarts
Test Code