truj / midica

A Music programming language. Translates source code into MIDI. Includes a player. Supports MIDI-Karaoke. Includes a MIDI analyzer.
https://www.midica.org/
Mozilla Public License 2.0
111 stars 13 forks source link

condition problems #68

Closed truj closed 3 years ago

truj commented 3 years ago

In some cases conditions don't work correctly. I'll add an appropriate example later.

truj commented 3 years ago

Here's an example:

CALL f()         // IF (bug!)
CALL f(IF)       // IF (as expected)
CALL f(UNKNOWN)  // ELSE (as expected)

FUNCTION f
    { if $[0] == IF
        0  a  /4  l=IF
    }
    { else
        0  b  /4  l=ELSE
    }
END

However if the if/else blocks are nested, it works like expected:

CALL f()         // ELSE (as expected)
CALL f(IF)       // IF (as expected)
CALL f(UNKNOWN)  // ELSE (as expected)

FUNCTION f
    {
        { if $[0] == IF
            0  a  /4  l=IF_
        }
        { else
            0  b  /4  l=ELSE_
        }
    }
END