I've been having issues with compiling Arturo with the latest Nim version and 
finally I managed to at least spot one piece of code that behaves weirdly.

The piece of code in question (along with different debugging `echo` 
statements) is this: 
<https://github.com/arturo-lang/arturo/blob/upgrade-to-nim-2.0.0/src/vm/stack.nim#L65-L73>

which gets called from here:

<https://github.com/arturo-lang/arturo/blob/upgrade-to-nim-2.0.0/src/vm/lib.nim#L266>

(The `require` template is actually embedded in a `proc` that gets called at 
runtime: 
<https://github.com/arturo-lang/arturo/blob/upgrade-to-nim-2.0.0/src/vm/lib.nim#L108>)

Now, the whole thing was working flawlessly before; now it doesn't.

And, while try to look into the produced code, I'm seeing this:
    
    
    //        debugEcho "requires >= 1 param"
            echoBinSafe(TM__IPU5x6F5i1TFKZ7WkUj8KQ_14, 1);
    //        let x {.inject.} = move stack.pop()
    //        let x {.inject.} = move stack.pop()
    //        let x {.inject.} = move stack.pop()
    //    debugEcho "popping..."
            echoBinSafe(TM__IPU5x6F5i1TFKZ7WkUj8KQ_16, 1);
    //        SP -= 1
            SP__vmZstack_u8 -= ((NI)1);
            x = Stack__vmZstack_u7.p->data[SP__vmZstack_u8];
    //    debugEcho "popping..."
            echoBinSafe(TM__IPU5x6F5i1TFKZ7WkUj8KQ_16, 1);
    //        SP -= 1
            SP__vmZstack_u8 -= ((NI)1);
    //    obj = default(typeof(obj))
            
eqwasMoved___vmZvaluesZvalue_u2216(&Stack__vmZstack_u7.p->data[SP__vmZstack_u8]);
    
    
    Run

(which clearly calls `pop`, twice!)

What is going on here? Is there anything specific related to the latest release 
that you can point me to that could be the possible culprit?

Reply via email to