The Return of caseNext

The Return of caseNext

Rogue has a conditional called which that is analogous to C's switch conditional. It has the added perks of allowing any kind of expression (not just literal integers), allowing multiple expressions to match a single case, and the arguable improvement of not having control flow drop through to the next case if you forget to put a break.

Slag (Rogue's ancestor)  had a nifty caseNext command as well. It's pretty simple: writing caseNext is equivalent to writing case N+1, where N is whatever value the previous case checked for.

I had mostly forgotten about it, in large part because I hadn't needed anything like since I started work on Rogue. But while working on Axor the Mighty today, suddenly I needed it real bad!

I'm starting to create the tutorial levels. Each one has a single state integer called progress which is used to control the next step of the tutorial. The commands issued in each state automatically increment progress. With this system all that matters is that each case is the next sequential integer; the integer values themselves aren't important.

At first I had case 0, case 1, ... case 10. After needing to insert a new step a few times - and having to reorder all the case numbers - I decided to bring caseNext back to Rogue. Now it's much easier and quicker to reorder those commands and insert new ones!

It was pretty simple to implement. I've never really thought to share compiler implementation details in my blogs before, but I'll start now with a link to the commit on GitHub:

[Rogue] Added ‘which/caseNext’ · AbePralle/Rogue@af7f69b
In a 'which'- If the previous case was 'case N', then 'caseNext' is equivalent to 'case N+1'.- 'caseNext' as the first case is equivalent to 'case 0&#3...

Okay that preview text is a little rough but good enough!