1
my $ops := QAST::Compiler.operations();
3
$ops.add_hll_op('nqp', 'preinc', -> $qastcomp, $op {
5
unless nqp::istype($var, QAST::Var) {
6
nqp::die("Pre-increment can only work on a variable");
8
$qastcomp.as_post(QAST::Op.new(
14
QAST::IVal.new( :value(1) )
18
$ops.add_hll_op('nqp', 'predec', -> $qastcomp, $op {
20
unless nqp::istype($var, QAST::Var) {
21
nqp::die("Pre-decrement can only work on a variable");
23
$qastcomp.as_post(QAST::Op.new(
29
QAST::IVal.new( :value(1) )
33
$ops.add_hll_op('nqp', 'postinc', -> $qastcomp, $op {
35
my $tmp := QAST::Op.unique('tmp');
36
unless nqp::istype($var, QAST::Var) {
37
nqp::die("Post-increment can only work on a variable");
39
$qastcomp.as_post(QAST::Stmt.new(
43
QAST::Var.new( :name($tmp), :scope('local'), :decl('var'), :returns($var.returns) ),
51
QAST::Var.new( :name($tmp), :scope('local'), :returns($var.returns) ),
52
QAST::IVal.new( :value(1) )
57
$ops.add_hll_op('nqp', 'postdec', -> $qastcomp, $op {
59
my $tmp := QAST::Op.unique('tmp');
60
unless nqp::istype($var, QAST::Var) {
61
nqp::die("Post-decrement can only work on a variable");
63
$qastcomp.as_post(QAST::Stmt.new(
67
QAST::Var.new( :name($tmp), :scope('local'), :decl('var') ),
75
QAST::Var.new( :name($tmp), :scope('local') ),
76
QAST::IVal.new( :value(1) )
81
$ops.add_hll_op('nqp', 'numify', -> $qastcomp, $op {
82
$qastcomp.as_post($op[0], :want('n'))
85
$ops.add_hll_op('nqp', 'stringify', -> $qastcomp, $op {
86
$qastcomp.as_post($op[0], :want('s'))
89
$ops.add_hll_op('nqp', 'falsey', -> $qastcomp, $op {
90
my $res := $*REGALLOC.fresh_i();
91
my $ops := PIRT::Ops.new(:result($res));
92
my $arg_post := $qastcomp.as_post($op[0]);
93
if nqp::lc($qastcomp.infer_type($arg_post.result)) eq 'i' {
95
$ops.push_pirop('not', $res, $arg_post);
98
$arg_post := $qastcomp.coerce($arg_post, 'P');
100
$ops.push_pirop('isfalse', $res, $arg_post);