Thanks for the kind words!
Ouch, that looks like a weird problem. ASM is generating an incorrect local variable count in the bytecode. There is no good reason for this =( Let me take a closer look at that.
In the meantime, using only list patterns should fix your issue:
>> test(ls) =>
| [] : true
| [x:xs] : false
|
ok
>> [].test()
true
>> [1, 2].test()
false
>>