NOTE: In typical me fashion, this is based on a previous pull request (#142), and shouldn't be merged (or really looked at in detail) until that one is up.
This is a fairly heavy PRQ (got a bit carried away with simplification, as usual) that does a lot of simplifying and expressivity-boosting changes to the primitive commands (assignment, postfix, assume, etc).
What does this do?
Atomic assignments and postfixes can now mention thread-local variables anywhere. (I think they're still restricted inside indices to only using thread-local variables, but I didn't check as this isn't a problem yet.)
Microcode and PrimCommands have been merged (sort of): Microcode can now contain stored commands (atomic function calls), and does so until the point where we used to expand out PrimCommands. PrimCommand is now a type alias for a certain type of Microcode. This makes Microcode the only internal representation of Starling's command language.
Internally, every stored command other than BCAS and ICAS is gone, and the modeller models postfixes, assumes, and id-transitions directly as microcode.
Local commands now use the exact same AST and internal representation as atomics. The only difference between the two, now, is that local commands can only name thread-local variables. This means commands like {| foo() |} local++ {| bar() |} are now possible.
NOTE: In typical me fashion, this is based on a previous pull request (#142), and shouldn't be merged (or really looked at in detail) until that one is up.
This is a fairly heavy PRQ (got a bit carried away with simplification, as usual) that does a lot of simplifying and expressivity-boosting changes to the primitive commands (assignment, postfix, assume, etc).
What does this do?
Microcode
andPrimCommand
s have been merged (sort of): Microcode can now contain stored commands (atomic function calls), and does so until the point where we used to expand out PrimCommands.PrimCommand
is now a type alias for a certain type ofMicrocode
. This makesMicrocode
the only internal representation of Starling's command language.BCAS
andICAS
is gone, and the modeller models postfixes, assumes, and id-transitions directly as microcode.{| foo() |} local++ {| bar() |}
are now possible.