vseloved / rutils

Radical Utilities for Common Lisp
Other
250 stars 37 forks source link

Fails to loop `:in-vector` #67

Closed jcguu95 closed 5 months ago

jcguu95 commented 2 years ago

Based on the documentation of rutils, it seems that rutils:iter should behave in the same way as iter:iter, except that keywords are actually keywords. While looping across a vector, I realized there's a deviation from that promise.

iter>  (iter (for x in-vector (vector 1 2 3))
       (collect x))
(1 2 3)
iter>  (rutils:iter (:for x :in-vector (vector 1 2 3))
       (:collect x))
; Debugger entered on #<TYPE-ERROR expected-type: NUMBER datum: NIL>

Here is the full debugger info.

The value
  NIL
is not of type
  NUMBER
   [Condition of type TYPE-ERROR]

Restarts:
 0: [RETRY] Retry SLY mREPL evaluation request.
 1: [*ABORT] Return to SLY's top level.
 2: [ABORT] abort thread (#<THREAD "sly-channel-1-mrepl-remote-1" RUNNING {100BEC4633}>)

Backtrace:
 0: (SB-KERNEL:%NEGATE NIL)
 1: (- NIL)
 2: (SB-INT:SIMPLE-EVAL-IN-LEXENV (- NIL) #<NULL-LEXENV>)
 3: (EVAL (- NIL))
 4: (RUTILS.ITER::RETURN-SEQ-CODE :ELEMENT-VAR X :SEQUENCE (VECTOR 1 2 3) :ACCESS-FN AREF :SIZE-FN #<unavailable argument> :ELEMENT-TYPE NIL :SEQUENCE-TYPE #<unavailable argument> :FROM #<unavailable argu..
 5: (RUTILS.ITER::APPLY-CLAUSE-FUNCTION #<unavailable argument> #<unavailable argument>)
 6: (RUTILS.ITER::PROCESS-CLAUSE #<unavailable argument>)
 7: (RUTILS.ITER::WALK-LIST-NCONCING #<unavailable argument> #<FUNCTION RUTILS.ITER::WALK> #<FUNCTION (LAMBDA (RUTILS.ITER::FORM RUTILS.ITER::BODY) :IN "/Users/jin/.roswell/lisp/quicklisp/dists/quicklisp/..
 8: ((MACRO-FUNCTION RUTILS.ITER:ITER) #<unavailable argument> #<unavailable argument>)
 9: ((FLET SB-IMPL::PERFORM-EXPANSION :IN MACROEXPAND-1) #<FUNCTION (MACRO-FUNCTION RUTILS.ITER:ITER) {2312B26B}> NIL)
10: (MACROEXPAND (RUTILS.ITER:ITER (:FOR X :IN-VECTOR (VECTOR 1 2 3)) (:COLLECT X)) #<NULL-LEXENV>)
11: (SB-INT:SIMPLE-EVAL-IN-LEXENV (RUTILS.ITER:ITER (:FOR X :IN-VECTOR (VECTOR 1 2 3)) (:COLLECT X)) #<NULL-LEXENV>)
12: (EVAL (RUTILS.ITER:ITER (:FOR X :IN-VECTOR (VECTOR 1 2 3)) (:COLLECT X)))
13: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
14: (SLYNK::CALL-WITH-RETRY-RESTART "Retry SLY mREPL evaluation request." #<CLOSURE (LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1) {104761E12B}>)
15: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
16: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
17: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "ITER">) (*DEFAULT-PATHNAME-DEFAULTS* . #P"/Users/jin/") (* . #1=(1 2 3)) (** 1 2 3) (*** 1 2 3) (/ #1#) ...) #<CLOSURE (LAMBDA NIL :IN ..
18: (SLYNK-MREPL::MREPL-EVAL-1 #<SLYNK-MREPL::MREPL mrepl-1-1> " (rutils:iter (:for x :in-vector (vector 1 2 3)) ..)
19: (SLYNK-MREPL::MREPL-EVAL #<SLYNK-MREPL::MREPL mrepl-1-1> " (rutils:iter (:for x :in-vector (vector 1 2 3)) ..)
20: (SLYNK:PROCESS-REQUESTS NIL)
21: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
22: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
23: (SLYNK-SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {100BEBFE6B}>)
24: ((FLET SLYNK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/Users/jin/.emacs.d/.local/straight/repos/sly/slynk/backend/sbcl.lisp") #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-C..
25: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
26: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "ITER">) (*DEFAULT-PATHNAME-DEFAULTS* . #P"/Users/jin/") (* . #1=(1 2 3)) (** 1 2 3) (*** 1 2 3) (/ #1#) ...) #<CLOSURE (LAMBDA NIL :IN ..
27: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
28: ((FLET SB-UNIX::BODY :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE))
29: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE))
30: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE))
31: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
32: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE) {D1F7E7B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD "sly-chan..
33: (SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE #<SB-THREAD:THREAD "sly-channel-1-mrepl-remote-1" RUNNING {100BEC4633}> NIL #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {100BEC3C1B}> NIL)
34: ("foreign function: call_into_lisp")
35: ("foreign function: new_thread_trampoline")
jcguu95 commented 5 months ago

This issue was raised in https://github.com/vseloved/rutils/issues/61 and fixed (PR to be merged though).