For those of you not watching the Parrot subversion log (and why not?):

 * Opcodes {get,make}*namespace and {get,set}*global again accept arrays of
   names in place of constant keys ...
 * ... obviating the corresponding Namespace PMC methods, which are now gone.
 * Time to 'make realclean'.

(And of course I repeat a gentle reminder that the old find_global and
store_global opcodes will eventually [eventually!] go away, so convert
to the {get,make}*namespace and {get,set}*global opcodes instead.)

In the process of the above change, these more fundamental low-level changes
were needed (or at least helpful):

 * Keys passed to opcodes as plain values -- i.e. as namespace or class
   identifier rather than for their classic indexing purpose -- are now
   encoded in opcodes differently, as "_pc" ("inconst PMC") rather than
   the historical and ambiguous "_kc" ("inconst KEY").

 * Therefore if you can get a Key PMC into a PMC register, many of the
   key-accepting opcodes will accept the key via the register.  However,
   some won't; see "Note" below.

 * Op parameters "in PMC" used to be silently treated as "invar PMC" (i.e.
   no PMC constants allowed).  This is no longer true.  However, most
   opcodes still behave just like before, thanks to a massive search-and-
   replace of "in PMC" with "invar PMC".

Note on an insteresting design issue: The new 'subclass' opcode variants
demonstrates the inherent ambiguity between class names and class PMCs;
merely being a PMC or not isn't enough to distinguish the intent of
specifying class vs. class name.  (Keys are PMCs.)  This should be resolved
in a general way for all class-accepting opcodes.
-- 
Chip Salzenberg <[EMAIL PROTECTED]>

Reply via email to