Skip to content

Instantly share code, notes, and snippets.

@lizmat
Created February 12, 2022 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lizmat/633bdd2a45416f2bd39968ed5c53d879 to your computer and use it in GitHub Desktop.
Save lizmat/633bdd2a45416f2bd39968ed5c53d879 to your computer and use it in GitHub Desktop.
Making $_ a `uint` in simple `for ^10` loops
diff --git a/src/Perl6/Optimizer.nqp b/src/Perl6/Optimizer.nqp
index 660b83794..fac0ca42f 100644
--- a/src/Perl6/Optimizer.nqp
+++ b/src/Perl6/Optimizer.nqp
@@ -3787,20 +3787,20 @@ class Perl6::Optimizer {
$op.op('stmts');
$op.push(QAST::Stmts.new(
-# my int $it := $start - $step
+# my uint $it := $start - $step
QAST::Op.new( :op<bind>,
QAST::Var.new(
- :name($it_var), :scope<local>, :decl<var>, :returns(int)
+ :name($it_var), :scope<local>, :decl<var>, :returns(uint)
),
nqp::istype($start, QAST::IVal)
?? QAST::IVal.new( :value($start.value - $step) )
!! QAST::Op.new( :op<sub_i>, $start, QAST::IVal.new( :value($step)))
),
-# my int $last := $end
+# my uint $last := $end
QAST::Op.new( :op<bind>,
QAST::Var.new(
- :name($last_var), :scope<local>, :decl<var>, :returns(int)
+ :name($last_var), :scope<local>, :decl<var>, :returns(uint)
),
$end
),
@@ -3820,19 +3820,19 @@ class Perl6::Optimizer {
QAST::Op.new(
op => $step < 0 ?? "isge_i" !! "isle_i",
QAST::Op.new( :op<bind>,
- QAST::Var.new(:name($it_var), :scope<local>, :returns(int)),
+ QAST::Var.new(:name($it_var), :scope<local>, :returns(uint)),
QAST::Op.new( :op<add_i>,
- QAST::Var.new(:name($it_var),:scope<local>,:returns(int)),
+ QAST::Var.new(:name($it_var),:scope<local>,:returns(uint)),
QAST::IVal.new( :value($step) )
)
),
- QAST::Var.new(:name($last_var), :scope<local>, :returns(int))
+ QAST::Var.new(:name($last_var), :scope<local>, :returns(uint))
),
# nqp::call($callee, $it)
QAST::Op.new( :op<call>,
QAST::Var.new(:name($callee_var), :scope<local> ),
- QAST::Var.new(:name($it_var), :scope<local>, :returns(int))
+ QAST::Var.new(:name($it_var), :scope<local>, :returns(uint))
)
),
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment