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

Wrong type argument: wholenump, -1.0 #37

Closed
manuel-uberti opened this issue May 5, 2015 · 14 comments
Closed

Wrong type argument: wholenump, -1.0 #37

manuel-uberti opened this issue May 5, 2015 · 14 comments

Comments

@manuel-uberti
Copy link

This is my setup for ace-window:

(use-package ace-window ; Better movements between windows and characters
  :ensure t
  :commands ace-window
  :bind (("C-x o" . ace-window)
         ("C-c j" . avi-goto-word-1)
         ("C-c J" . avi-goto-char))
  :config (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l) ; Use home row
                avi-keys ; Use home row here too
                '(?a ?s ?d ?e ?f ?h ?j ?k ?l ?n ?m ?v ?r ?u)))

If I do C-c J a I get: Wrong type argument: wholenump, -1.0.
Everything is working fine using avi-goto-char-2.

@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

If I use C-c j a I get: Wrong type argument: wholenump, -1.0.

I expect that this does not happen for all buffers.
Can you give me a minimal buffer contents for which this happens?

@manuel-uberti
Copy link
Author

Sure, here we go.
2015-05-05-140049_1280x800_scrot

This is right after I did C-c J a

@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

This is right after I did C-c J a

So you called avi-goto-char-2 with C-c J, then entered a, but that command wants to read two chars, not one. Did the error happen right after a? I'm getting no error for e.g. C-c J at.

@manuel-uberti
Copy link
Author

No, C-c J calls avi-goto-char, as shown in my config in the opening post, not avi-goto-char-2 (which works fine with another keybinding).

abo-abo added a commit that referenced this issue May 5, 2015
@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

I think the issue could be a conflict with a package that's on your system but not on mine.
Can you try to reproduce with:

make run

This command will start a fresh Emacs with nothing but ace-window and avy-jump loaded.

@manuel-uberti
Copy link
Author

It is working fine doing as you say.
This is the stacktrace for when it fails with my current configuration:

Debugger entered--Lisp error: (wrong-type-argument wholenump -1.0)
  make-list(-1.0 0.07142857142857142)
  avy-subdiv(14 14)
  avy-tree((((25 . 26) . #<window 3 on custom-helm.el>) ((37 . 38) . #<window 3 on custom-helm.el>) ((56 . 57) . #<window 3 on custom-helm.el>) ((105 . 106) . #<window 3 on custom-helm.el>) ((122 . 123) . #<window 3 on custom-helm.el>) ((131 . 132) . #<window 3 on custom-helm.el>) ((146 . 147) . #<window 3 on custom-helm.el>) ((156 . 157) . #<window 3 on custom-helm.el>) ((161 . 162) . #<window 3 on custom-helm.el>) ((205 . 206) . #<window 3 on custom-helm.el>) ((247 . 248) . #<window 3 on custom-helm.el>) ((272 . 273) . #<window 3 on custom-helm.el>) ((275 . 276) . #<window 3 on custom-helm.el>) ((421 . 422) . #<window 3 on custom-helm.el>) ((426 . 427) . #<window 3 on custom-helm.el>)) (97 115 100 101 102 104 106 107 108 110 109 118 114 117))
  avi--process((((25 . 26) . #<window 3 on custom-helm.el>) ((37 . 38) . #<window 3 on custom-helm.el>) ((56 . 57) . #<window 3 on custom-helm.el>) ((105 . 106) . #<window 3 on custom-helm.el>) ((122 . 123) . #<window 3 on custom-helm.el>) ((131 . 132) . #<window 3 on custom-helm.el>) ((146 . 147) . #<window 3 on custom-helm.el>) ((156 . 157) . #<window 3 on custom-helm.el>) ((161 . 162) . #<window 3 on custom-helm.el>) ((205 . 206) . #<window 3 on custom-helm.el>) ((247 . 248) . #<window 3 on custom-helm.el>) ((272 . 273) . #<window 3 on custom-helm.el>) ((275 . 276) . #<window 3 on custom-helm.el>) ((421 . 422) . #<window 3 on custom-helm.el>) ((426 . 427) . #<window 3 on custom-helm.el>)) avi--overlay-post)
  avi--generic-jump("a" nil)
  avi-goto-char(nil)
  funcall-interactively(avi-goto-char nil)
  call-interactively(avi-goto-char nil nil)
  command-execute(avi-goto-char)

@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

Very interesting. On your system (avy-subdiv 14 14) fails.
On my system, it returns:

(avy-subdiv 14 14)
;; =>
;; (1 1 1 1 1 1 1 1 1 1 1 1 1 1)

avy-subdiv is a 10 line function that calls: floor, log, expt and make-list. Nothing else. Could you try to debug this call to see where it fails?

@manuel-uberti
Copy link
Author

This is what I get:

Debugger entered: nil
  edebug--display-1(nil 0 before)
  edebug--display(nil 0 before)
  edebug-debugger(0 before nil)
  edebug-before(0)
  (edebug-after (edebug-before 0) 55 (let* ((p (edebug-after (edebug-before 1) 8 (1- (edebug-after (edebug-before 2) 7 (floor ...))))) (x1 (edebug-after (edebug-before 9) 12 (expt (edebug-after 0 10 b) (edebug-after 0 11 p)))) (x2 (edebug-after (edebug-before 13) 16 (* (edebug-after 0 14 b) (edebug-after 0 15 x1)))) (delta (edebug-after (edebug-before 17) 20 (- (edebug-after 0 18 n) (edebug-after 0 19 x2)))) (n2 (edebug-after (edebug-before 21) 27 (/ (edebug-after 0 22 delta) (edebug-after (edebug-before 23) 26 (- ... ...))))) (n1 (edebug-after (edebug-before 28) 31 (- (edebug-after 0 29 b) (edebug-after 0 30 n2) 1)))) (edebug-after (edebug-before 32) 54 (append (edebug-after (edebug-before 33) 36 (make-list (edebug-after 0 34 n1) (edebug-after 0 35 x1))) (edebug-after (edebug-before 37) 49 (list (edebug-after (edebug-before 38) 48 (- ... ... ...)))) (edebug-after (edebug-before 50) 53 (make-list (edebug-after 0 51 n2) (edebug-after 0 52 x2)))))))
  (closure ((b . 14) (n . 14) t) nil (edebug-after (edebug-before 0) 55 (let* ((p (edebug-after (edebug-before 1) 8 (1- (edebug-after ... 7 ...)))) (x1 (edebug-after (edebug-before 9) 12 (expt (edebug-after 0 10 b) (edebug-after 0 11 p)))) (x2 (edebug-after (edebug-before 13) 16 (* (edebug-after 0 14 b) (edebug-after 0 15 x1)))) (delta (edebug-after (edebug-before 17) 20 (- (edebug-after 0 18 n) (edebug-after 0 19 x2)))) (n2 (edebug-after (edebug-before 21) 27 (/ (edebug-after 0 22 delta) (edebug-after ... 26 ...)))) (n1 (edebug-after (edebug-before 28) 31 (- (edebug-after 0 29 b) (edebug-after 0 30 n2) 1)))) (edebug-after (edebug-before 32) 54 (append (edebug-after (edebug-before 33) 36 (make-list (edebug-after 0 34 n1) (edebug-after 0 35 x1))) (edebug-after (edebug-before 37) 49 (list (edebug-after ... 48 ...))) (edebug-after (edebug-before 50) 53 (make-list (edebug-after 0 51 n2) (edebug-after 0 52 x2))))))))()
  edebug-enter(avy-subdiv (14 14) (closure ((b . 14) (n . 14) t) nil (edebug-after (edebug-before 0) 55 (let* ((p (edebug-after (edebug-before 1) 8 (1- (edebug-after ... 7 ...)))) (x1 (edebug-after (edebug-before 9) 12 (expt (edebug-after 0 10 b) (edebug-after 0 11 p)))) (x2 (edebug-after (edebug-before 13) 16 (* (edebug-after 0 14 b) (edebug-after 0 15 x1)))) (delta (edebug-after (edebug-before 17) 20 (- (edebug-after 0 18 n) (edebug-after 0 19 x2)))) (n2 (edebug-after (edebug-before 21) 27 (/ (edebug-after 0 22 delta) (edebug-after ... 26 ...)))) (n1 (edebug-after (edebug-before 28) 31 (- (edebug-after 0 29 b) (edebug-after 0 30 n2) 1)))) (edebug-after (edebug-before 32) 54 (append (edebug-after (edebug-before 33) 36 (make-list (edebug-after 0 34 n1) (edebug-after 0 35 x1))) (edebug-after (edebug-before 37) 49 (list (edebug-after ... 48 ...))) (edebug-after (edebug-before 50) 53 (make-list (edebug-after 0 51 n2) (edebug-after 0 52 x2)))))))))
  edebug-enter(avy-subdiv (14 14) (closure ((b . 14) (n . 14) t) nil (edebug-after (edebug-before 0) 55 (let* ((p (edebug-after (edebug-before 1) 8 (1- (edebug-after ... 7 ...)))) (x1 (edebug-after (edebug-before 9) 12 (expt (edebug-after 0 10 b) (edebug-after 0 11 p)))) (x2 (edebug-after (edebug-before 13) 16 (* (edebug-after 0 14 b) (edebug-after 0 15 x1)))) (delta (edebug-after (edebug-before 17) 20 (- (edebug-after 0 18 n) (edebug-after 0 19 x2)))) (n2 (edebug-after (edebug-before 21) 27 (/ (edebug-after 0 22 delta) (edebug-after ... 26 ...)))) (n1 (edebug-after (edebug-before 28) 31 (- (edebug-after 0 29 b) (edebug-after 0 30 n2) 1)))) (edebug-after (edebug-before 32) 54 (append (edebug-after (edebug-before 33) 36 (make-list (edebug-after 0 34 n1) (edebug-after 0 35 x1))) (edebug-after (edebug-before 37) 49 (list (edebug-after ... 48 ...))) (edebug-after (edebug-before 50) 53 (make-list (edebug-after 0 51 n2) (edebug-after 0 52 x2)))))))))
  avy-subdiv(14 14)
  (progn (avy-subdiv 14 14))
  eval((progn (avy-subdiv 14 14)) t)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)
  recursive-edit()
  debug(error (wrong-type-argument wholenump -1.0))
  make-list(-1.0 0.07142857142857142)
  avy-subdiv(14 14)

@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

That's not what I meant. I wanted a list like this:

p 0
x1 1
x2 14
delta 0
n2 0
n1 13

This is what happens on my system if I step into (avy-subdiv 14 14).
All numbers are integer, but on your system a float is coming from somewhere.
Just give me the corresponding list from your system, and we'll see where the error is.

@manuel-uberti
Copy link
Author

Ok.

p -1 (#o7777777777, #x3fffffff)
x1 0.07142857142857142
x2 1.0
delta 13.0
n2 14.0
n1 -1.0

@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

So on your system, (floor (log 14 14)) returns 0 and not 1?

@abo-abo abo-abo closed this as completed in ee76efd May 5, 2015
@manuel-uberti
Copy link
Author

Yes.

0 (#o0, #x0, ?\C-@)

@abo-abo
Copy link
Owner

abo-abo commented May 5, 2015

Well, it can happen. I didn't expect to get into floating point issues with Elisp. Can you confirm that the issue is fixed now?

@manuel-uberti
Copy link
Author

Yes, it works now. 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