Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"SET-DISPATCH-MACRO-CHARACTER would modify the standard readtable." on SBCL 2.0.8 #12

Closed
svetlyak40wt opened this issue Oct 16, 2020 · 6 comments

Comments

@svetlyak40wt
Copy link

I constantly get this error when loading :poftheday system (https://github.com/40ants/lisp-project-of-the-day).

The problem is in this method:

(defmethod asdf/system:find-system :around (name &optional (error-p t))
  (literate-lisp:with-literate-syntax
    (call-next-method)))

I see that with-literate-syntax macro copies *readtable* only for Allegro:

(*readtable* #-allegro *readtable* #+allegro(copy-readtable nil)

Why it modifies existing readtable for all other lisps?

@svetlyak40wt
Copy link
Author

Here is the full stack trace:

SET-DISPATCH-MACRO-CHARACTER would modify the standard readtable.
   [Condition of type SB-INT:STANDARD-READTABLE-MODIFIED-ERROR]

Restarts:
 0: [CONTINUE] Frob it anyway!
 1: [RETRY] Retry #<PROCESS-OP > on #<GROVEL-FILE "osicat" "posix" "unixint">.
 2: [ACCEPT] Continue, treating #<PROCESS-OP > on #<GROVEL-FILE "osicat" "posix" "unixint"> as having been successful.
 3: [RETRY] Retry ASDF operation.
 4: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
 5: [RETRY] Retry ASDF operation.
 --more--

Backtrace:
 0: (SET-DISPATCH-MACRO-CHARACTER #\# #\+ #<FUNCTION SB-IMPL::SHARP-PLUS-MINUS> #<NAMED-READTABLE :CURRENT {1000027DE3}>)
 1: ((FLET "CLEANUP-FUN-33" :IN ASDF/SYSTEM:FIND-SYSTEM)) [cleanup]
 2: ((:METHOD ASDF/SYSTEM:FIND-SYSTEM :AROUND (T)) :CFFI-GROVEL) [fast-method]
 3: ((:METHOD ASDF/SYSTEM:SYSTEM-SOURCE-FILE (SYMBOL)) :CFFI-GROVEL) [fast-method]
 4: (ASDF/SYSTEM:SYSTEM-SOURCE-DIRECTORY :CFFI-GROVEL)
 5: (CFFI-GROVEL::CC-INCLUDE-GROVEL-ARGUMENT)
 6: ((FLET "THUNK" :IN CFFI-GROVEL:PROCESS-GROVEL-FILE))
 7: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (FLET "THUNK" :IN CFFI-GROVEL:PROCESS-GROVEL-FILE) {8831B3B}>)
 8: (CFFI-GROVEL:PROCESS-GROVEL-FILE #P"/Users/art/projects/lisp/lisp-project-of-the-day/.qlot/dists/ultralisp/software/osicat-osicat-20200721100919/posix/unixint.lisp" #P"/Users/art/.cache/common-lisp/sb..
 9: ((:METHOD ASDF/ACTION:PERFORM (CFFI-GROVEL::PROCESS-OP CFFI-GROVEL:GROVEL-FILE)) #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "osicat" "posix" "unixint">) [fast-method]
10: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "osicat" "posix" "unixint">)
11: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
12: ((:METHOD ASDF/ACTION:PERFORM :AROUND (CFFI-GROVEL::PROCESS-OP CFFI-GROVEL::CC-FLAGS-MIXIN)) #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "osicat" "posix" "unixint">) [fast-method]
13: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "osicat" "posix" "unixint">) [fast-method]
14: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1004AD5CB3}>) [fast-method]
15: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
16: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1004AD5CB3}>) [fast-method]
17: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "poftheday"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-method]
18: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "poftheday"> :VERBOSE NIL)
19: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
20: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "poftheday"> :VERBOSE NIL) [fast-method]
21: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "poftheday" :VERBOSE NIL)
22: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
23: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "poftheday" :VERBOSE NIL) [fast-method]
24: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1004AB2D6B}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T :OVERRIDE-FORCING NIL)
25: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
26: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1004AA471B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
27: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "poftheday" :VERBOSE NIL) [fast-method]
28: (ASDF/OPERATE:LOAD-SYSTEM "poftheday" :VERBOSE NIL)
29: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {1004AA466B}>)
30: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "poftheday" :PROMPT NIL)
31: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unused argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10049C35FB}>) [fast-method]
32: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {10050F5A63}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {10049C35FB}>) [fast-me..
33: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) :POFTHEDAY :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method]
34: ((SB-PCL::EMF QUICKLISP-CLIENT:QUICKLOAD) #<unused argument> #<unused argument> :POFTHEDAY)
35: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {10049AB5BB}>)
36: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD :POFTHEDAY) #<NULL-LEXENV>)
37: (EVAL (QUICKLISP-CLIENT:QUICKLOAD :POFTHEDAY))
38: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
39: (SLYNK::CALL-WITH-RETRY-RESTART "Retry SLY mREPL evaluation request." #<CLOSURE (LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1) {10049AA79B}>)
40: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
41: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
42: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "COMMON-LISP-USER">) (* . #1="2.0.8") (**) (*** . #<ASDF/SYSTEM:SYSTEM "winhttp">) (/ #1#) (// NIL) ...) #<CLOSURE (LAMBDA NIL :IN SLYNK::CALL-WITH-L..
43: (SLYNK-MREPL::MREPL-EVAL-1 #<SLYNK-MREPL::MREPL mrepl-1-1> "(ql:quickload :poftheday)")
44: (SLYNK-MREPL::MREPL-EVAL #<SLYNK-MREPL::MREPL mrepl-1-1> "(ql:quickload :poftheday)")
45: (SLYNK::PROCESS-REQUESTS NIL)
46: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
47: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
48: (SLYNK-SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {10036B000B}>)
49: ((FLET SLYNK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/Users/art/.roswell/lisp/sly/git/slynk/backend/sbcl.lisp") #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD..
50: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
51: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "COMMON-LISP-USER">) (* . #1="2.0.8") (**) (*** . #<ASDF/SYSTEM:SYSTEM "winhttp">) (/ #1#) (// NIL) ...) #<CLOSURE (LAMBDA NIL :IN SLYNK::CALL-WITH-L..
52: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
53: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
54: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::RUN))
55: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
56: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::RUN))
57: (SB-THREAD::RUN)

@svetlyak40wt
Copy link
Author

Also, why do we need the code for keeping and restoring sharp-space and sharp-plus if we can always copy the readable and the previous version will be restored after the let automatically?

@svetlyak40wt
Copy link
Author

Probably, it will be better to use named-readtables like this:

CL-USER> (named-readtables:defreadtable literate-lisp::syntax
           (:merge :standard)
           (:dispatch-macro-char #\# #\space #'literate-lisp::sharp-space)
           (:dispatch-macro-char #\# #\+ #'literate-lisp::sharp-plus))
#<NAMED-READTABLE LITERATE-LISP::SYNTAX {1001AD8413}>

CL-USER> (named-readtables:find-readtable 'literate-lisp::syntax)
#<NAMED-READTABLE LITERATE-LISP::SYNTAX {1001AD8413}>

CL-USER> (let ((*readtable* (named-readtables:find-readtable 'literate-lisp::syntax)))
           (read-from-string "
# -*- encoding:utf-8 Mode: POLY-ORG;  -*- ---

This is the literate code:

#+BEGIN_SRC lisp
(defun foo ()
  :bar)
#+END_SRC

Now examples ends.
"))
(DEFUN FOO () :BAR)
115

@jingtaozf
Copy link
Owner

I have updated the codes to use a new readtable anyway.
And I have added your codes for named-readtables as a demo.
https://github.com/jingtaozf/literate-lisp/blob/master/literate-lisp.org#install-the-new-reader-syntax

@jingtaozf
Copy link
Owner

Thanks.

@svetlyak40wt
Copy link
Author

Great! Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants