Vim Tips Wiki
Register
(standard format)
(Change <tt> to <code>, perhaps also minor tweak.)
 
Line 7: Line 7:
 
I've also found the bug "Out of range errors" just like what's described in that bug report, read as "Hanoi gives out of range errors (list element -1) after moving the cursor to an empty pole, and stops."
 
I've also found the bug "Out of range errors" just like what's described in that bug report, read as "Hanoi gives out of range errors (list element -1) after moving the cursor to an empty pole, and stops."
   
To fix this bug, I've read the script and found a leak when process <tt>PoleMoveDisk</tt>. It forgot to determine the condition that the target pole to select (i.e. to move to) should have disks when selecting a pole!
+
To fix this bug, I've read the script and found a leak when process <code>PoleMoveDisk</code>. It forgot to determine the condition that the target pole to select (i.e. to move to) should have disks when selecting a pole!
   
So to fix it, I make up the condition determination in {{tt|function! s:play()}} at row 266/271 in script file <tt>autoload/hanoi.vim</tt> by adding statement:
+
So to fix it, I make up the condition determination in <code>function! s:play()</code> at row 266/271 in script file <code>autoload/hanoi.vim</code> by adding statement:
   
{{tt|if s:curpole.next.NOD() > 0}} and adding <tt>endif</tt> after statement {{tt|call s:PoleSelectPole(s:curpole.next/prev)}} to close <tt>if</tt> statement.
+
<code>if s:curpole.next.NOD() > 0</code> and adding <code>endif</code> after statement <code>call s:PoleSelectPole(s:curpole.next/prev)</code> to close <code>if</code> statement.
   
To be more robust, I add another condition determination statement in {{tt|function! s:PoleSelectPole(newPole)}} at row 508 in script file <tt>autoload/hanoi.vim</tt> by adding {{tt| && a:newPole.NOD() > 0}} in the if statement {{tt|1=if s:curpole != a:newPole }}. Of course, this supplement is optional if the above leak has been fixed.
+
To be more robust, I add another condition determination statement in <code>function! s:PoleSelectPole(newPole)</code> at row 508 in script file <code>autoload/hanoi.vim</code> by adding <code> && a:newPole.NOD() > 0</code> in the if statement <code>if s:curpole != a:newPole </code>. Of course, this supplement is optional if the above leak has been fixed.
   
 
Hope the author fix the bug and offer the latest copy for downloading. --[[Special:Contributions/218.189.38.36|218.189.38.36]] 05:39, November 23, 2011 (UTC)
 
Hope the author fix the bug and offer the latest copy for downloading. --[[Special:Contributions/218.189.38.36|218.189.38.36]] 05:39, November 23, 2011 (UTC)

Latest revision as of 09:54, 14 July 2012

Use this page to discuss script 900 hanoi: Tower of Hanoi game for Vim

  • Add constructive comments, bug reports, or discuss improvements (see the guideline).
  • Do not document the script here (the author should do that on vim.org).
  • This page may be out of date: check the script's vim.org page above, and its release notes.

Bug: Out of range errors[]

Hanoi gives out of range errors (list element -1) after moving the cursor to an empty pole, and stops. --June 20, 2011

Fix[]

I've also found the bug "Out of range errors" just like what's described in that bug report, read as "Hanoi gives out of range errors (list element -1) after moving the cursor to an empty pole, and stops."

To fix this bug, I've read the script and found a leak when process PoleMoveDisk. It forgot to determine the condition that the target pole to select (i.e. to move to) should have disks when selecting a pole!

So to fix it, I make up the condition determination in function! s:play() at row 266/271 in script file autoload/hanoi.vim by adding statement:

if s:curpole.next.NOD() > 0 and adding endif after statement call s:PoleSelectPole(s:curpole.next/prev) to close if statement.

To be more robust, I add another condition determination statement in function! s:PoleSelectPole(newPole) at row 508 in script file autoload/hanoi.vim by adding && a:newPole.NOD() > 0 in the if statement if s:curpole != a:newPole . Of course, this supplement is optional if the above leak has been fixed.

Hope the author fix the bug and offer the latest copy for downloading. --218.189.38.36 05:39, November 23, 2011 (UTC)

Comments[]