$I0 = defined $P0[0]
$P1 = clone $P2
but these were handled with explicite rules. And I found me often writing:
len = length $S0
which wasn't a valid syntax.
I've now tossed the special handling of defined and clone. Instead PIR
allows now generally to write
lhs = PARROT_OP args
so these instructions:
$I0 = defined a
$I0 = defined a[0]
b = clone a
$I0 = length s
$N0 = sin 0
$I0 = can $P0, "puts"
$I0 = isa $P0, "scalar"
are now (amongst many more) valid PIR syntax. There are currently no
checks, if this instructions is something meaningfull too. It's just
converted to
PARROT_OP lhs[, args]
So you can write:
$I0 = add 10, 20
or even:
.sub _main
$P0 = find_global "_s"
$P0 = invokecc
$S0 = "done\n"
$S0 = print
end
.end
.sub _s
print "in sub\n"
P1 = invoke
.end
where it really gets ugly. We could of course limit this syntax to more
useful constructs.
leo