These past couple weeks, I’ve run across a couple of rather serious bugs, resulting in fixes now incorporated in version 0.41 (master/Enu). On the C++ side, everything was fine, but as far as the language of Copper is concerned, certain things were horribly wrong. Such is the nature of software.
The first bug was an address issue. When parsing input from the console had to be paused in the middle of the parsing of a variable address, part of the address would be doubled. The error was limited to console input and required there to be members of the address, which is why it had remained hidden for a long time. Sadly, in infected branches as far back as Cheetah since it used the same parsing system. It took awhile to find and was an easy fix.
Another bug dealt with looping keywords. The context in which the skip keyword was used was not appropriately checked. Using it outside of any structure (loop or if) or function resulted in a segfault because no parsing task existed.
The last bug was discovered as I was writing out documentation. As I wrote about the variable address resolution, I realized a class of scenarios in which the engine would perform the wrong action. I hadn’t tested such a scenario before, so it’s no wonder I never ran across the problem. It was an easy fix, and ironically, optimized the code!
I’m hoping these are the last of the “big bugs”, but unless I test every possible scenario, I can never be certain. I’ve considered automated testing with Python, but some issues tie up the program and thus require manual interference to stop the virtual machine (as is the case when loops are involved).