I've looked over over the diffs between trunk and leo-ctx5, and here
are my notes.


{{ OVERALL }}

A significant improvement.  Good work, y'all.


{{ USER-VISIBLE }}

* optional parameter interface: ":opt_count" -> ":opt_flag"

    + As some of you may recall, ":opt_count" semantics don't work if
      we ever support named parameters ... and given that p6l may be
      moving toward making P6 named parameters less insane[*], this is
      not impossible for Parrot 1.1 or something.

      So ":opt_count" should be replaced with ":opt_flag", which sets
      its target register to a boolean indicating whether the
      immediately preceding parameter was passed or not, rather than a
      count of optionals present.

      If you want to do this after the merge, OK, but please don't
      release with ":opt_count".

      I also had some idea of how to spell this more compactly, but
      ":opt_flag" has to work first, so let's start with that.

      This needs to be fixed before merge, to minimize PIR language
      shift for users.


* subroutine attribute spelling: "method" -> ":method"

    + Some time ago, in a conversation perhaps lost to time, I pointed
      to ':method', not 'method', as the way method tags should look
      on sub definitions.  No commas, just ':method' and, at some
      point (if not yet), ':multi':

           .sub "foo" :multi(_,int) :method

      Of course, for the time being, "@MULTI" is a synonym for ":multi".


* src/embed.c : setup_argv() - setting P5

    + Looks like this function is still setting P5.  Hm.  (?)


* src/inter_run.c : runops_args() - argument limit

    + Looks like this function fails if someone passes more than eight
      parameters.  Why?  Buffer malloc is cheap.


* DELETED opcode(s) can die

    + The changes to the invoke opcodes are binary-incompatible, which
      I have NO PROBLEM with, but as long as we're breaking things, you
      might as well get rid of "DELETED" opcodes, like "DELETED_invoke".


* Tests may not use literal get/set flags

    + The values of the flags for get_params/set_args/etc. should not
      escape in numeric form, even to the self-tests.  If they're out
      there in symbolic form, fine.  Just not as numbers.  I want to
      be able to change those numbers without causing errors; and more
      to the point, I want to make sure that the tests that use a given
      feature fail if that feature is removed.

      The tests that use literal numeric get/set flag values should be
      using PIR instead, I suppose.  Or the syntax should be extended
      to allow symbolic values instead of numbers.  Whatever.  The
      point is that this, from pmc/mmd.t, should not exist:

        get_params "(0,0,0x20,0x40)", P5, I5, P6, I7


{{ INTERNAL }}

* struct Parrot_Context

    + "ref_count"

      Why are we going there?  Refcounting bad, reference observation
      via GC good, right?  I may have totally missed the point of this.


* classes/bound_nci.pmc

    + The invoke() method is still setting P2, but P2 isn't supposed
      to be special any more.

      Update: On IRC, Leo describes bound_nci as "b0rken"; OK, but
      it'd be better to nuke that code and replace it with a die and
      comment as to what should happen.


* include/parrot/interpreter.h

    + There are two different structures with "current_object".
      Is this OK, or a surprise bug, a temporary hack, or ... ?


* imcc/pbc.c

    + A comment has been removed from verify_signature, but it still
      applies, and should be restored.  (Please don't remove 'todo'
      comments without discussion.)

- * Actually it doesn't verify anything, but rather, it _corrects_ it,
- * silently.  Which needs to change.  XXX CHS


* pcc/get/args.c

    + I think this comment speaks for itself:

        +        strcat(buf, s);         /* XXX check avail len */

      That's a security/coredump problem.  It can't wait until later.


* documentation

    + I'm not asking you to go back and add docs for everything -- not
      that I'd mind! -- but when you touch a function so that its API
      changes (and creating a subroutine where none had existed counts
      as an API change), the function needs to be (re)documented.
      It's just a matter of making sure everyone knows what it's
      supposed to do and how to call it.


[*] I think we can all agree that it would be impossible to make them
    _more_ insane.
-- 
Chip Salzenberg <[EMAIL PROTECTED]>

Reply via email to