I was uneasy when the C<num_eq> and C<str_eq> vtable entries were first
proposed. Sure, they get the job done for Perl 5, but Perl 6 is
expanding its notion of context beyond those compiled in. You're
supposed to be able to add, say, "nontransitive ring" context if you
want.
There needs to be a way to pass context into not only sub calls, but
vtable methods, and maybe even certain non-vtable ops. Rather than add
an extra op parameter for each of these, I propose we make it stateful,
like:
num_eq $P0, $P1, foo
str_eq $P0, $P1, bar
Becomes
context .NUMERIC
eq $P0, $P1, foo
context .STRING
eq $P0, $P1, bar
This works efficiently since context often propigates inward, as in:
if $x + $y > $z {...}
-------
num
------------
num
---------------
bool
And that, like classes, contexts would be specified by integer
descriptor, or at worst, constant PMC.
This might also be modified to fit in nicely with the proposed "key
registers" idea.
Luke