- Removed the Makefile. People who want a Makefile are advised to use ufo. - Fixed two erroneous tests. - Updated lib/Tardis.pm and the tardis script to work with the latest Yapsi. The old Tardis code was tailored for the pre-refactor Yapsi. All tests now pass.
Tardis now uses Yapsi to compile and run Perl 6 code.
Added it as a dependency instead.
Turns out we needed to declare the lexicals at the beginning of a scope, too, because there has to be a difference between 'undefined' and 'no such variable' at runtime.
It doesn't handle binding yet; only assignment. Still, it prints things!
We now have full conformity with yapsi-prototype, plus an extra 'say' opcode that will make an actual runtime slightly less than 100% side-effect-free.
For some reason 'my $a = 42;' and 'my $a; my $a; my $a' don't parse yet. Need to find out why.
All tests in t/yapsi/parse.t now pass.
Also realized that the case of a negative tick will never occur.
- added interpreter #! line - changed an underscore to a dash in an identifier - allowed empty commands - more detached error messages - more conformant 'look' output - don't wrap ticks stepping (probably more confusing than helpful) - distinguish goto >max and goto <min error messages - unify the former with the error message in &step - add RAKUDO comment about Num parameter really wanting to be Int
Better to do the binding to either a variable name or a register. Otherwise there will be an unfortunate ambiguity as soon as we allow literal strings.
Suggested by TimToady++'s STD.pm.
Turns out if you re-declare a variable in the same scope, it's the same container. No re-initialization being done. That's much simpler.
After the decluttering, there might be holes in the register numbers. This new sub collapses away the holes. It's possible to be even smarter and re-use 'freed' registers, but this works for now.