On Thu Dec 13 05:54:17 2007, kjs wrote:
> On Tue Jun 14 02:30:00 2005, chip wrote:
> > It makes sense to allow e.g. C<$P0 = add $P1, $P2> as alternative
> > syntax for C<add $P0, $P1, $P2>.  However, when the first parameter is
> > "inout" rather than "out", assignment syntax is *not* appropriate.
> > 
> > For example, C<substr $P0, 1, 2, "x"> actually modifies $P0 rather
> > than just assigning to it, so C<$P0 = substr 1, 2, "x"> is just wrong,
> > and should be a compile-time error.
> 
> In order to make this work, a check should be done for each op in the
> pir compiler. Besides the question whether an identifier is an op
> (is_op() ), its meta-data must be retrieved. While I'm sure this is
> possible, by having the .ops pre-processor store the mode of the op
> parameters somewhere, it does involve extra checks, making the pir
> compiler slower.
> 
> Also, for ops in dyn.op.libs written by third parties, which are only
> distributed in binary form (as the .so or .dll file), which does not
> include any source, this check cannot be done, EXCEPT this check is ALSO
> done during runtime. 
> 
> In short, this issue is a pain to solve; is it worth fixing?
> (probably that's why this ticket is stalled.)

on second thought, I had another idea.

currently the PIR compiler (IMCC) will select the appropriate operation
based on the types of the arguments. So:

print "hi"

will become:

print_sc "hi" # print s(tring) c(onstant).

Currently, you can also write:

$S0 = "hi"
$S0 = print

Maybe it's an idea that inout arguments are marked using the same
strategy; so for instance:

$S0 = print

will be translated to:

print_sco # "print" s(tring) c(onstant) o(utput)

or whatever letter/mark is chosen to mark that a parameter is an output
parameter; surely, Parrot won't have a print_sco instruction, only a
print_sc (or, if you want to make it explicit: print_sci).

This way, there's no additional overhead of checking any meta data, but
we can easily emit an error message when writing stuff like "$S0 = print".

just some thoughts.

kjs



Reply via email to