Skip to content

Instantly share code, notes, and snippets.

--- ./src/Perl6/Actions.pm.orig 2011-08-02 12:56:25.000000000 +0000
+++ ./src/Perl6/Actions.pm 2011-08-05 11:51:53.000000000 +0000
@@ -3537,8 +3549,11 @@ class Perl6::Actions is HLL::Actions {
PAST::Var.new( :scope('lexical_6model'), :name('$!'), :isdecl(1) ),
PAST::Var.new( :scope('lexical_6model'), :name('$_') ),
),
+ PAST::Op.new( :pasttype('try'),
PAST::Op.new( :pasttype('call'),
$handler,
+ ),
--- src/Perl6/Actions.pm.orig 2011-08-05 14:23:41.000000000 +0000
+++ src/Perl6/Actions.pm 2011-08-05 15:07:23.000000000 +0000
@@ -706,6 +706,9 @@ class Perl6::Actions is HLL::Actions {
}
method statement_control:sym<CATCH>($/) {
+ if has_block_handler($*ST.cur_lexpad(), 'CONTROL', :except(1)) {
+ $/.CURSOR.panic("only one CATCH block allowed");
+ }
my $block := $<block>.ast;
--- src/Perl6/Actions.pm.orig 2011-08-24 13:34:35.000000000 +0000
+++ src/Perl6/Actions.pm 2011-08-24 13:36:30.000000000 +0000
@@ -3790,17 +3790,18 @@ class Perl6::Actions is HLL::Actions {
sub wrap_return_handler($past) {
PAST::Op.new(
:pirop('perl6_type_check_return_value 0P'),
- PAST::Stmts.new( :signature('0Pv'),
- PAST::Op.new(:pasttype<lexotic>, :name<RETURN>,
- # If we fall off the bottom, decontainerize if
- # rw not set.
--- src/core/Num.pm.orig 2011-08-25 18:24:42.000000000 +0000
+++ src/core/Num.pm 2011-08-25 18:26:47.000000000 +0000
@@ -24,8 +24,8 @@ my class Num {
my Num $r = $num - $num.Int;
my Int $q = $num.Int;
- my ($a, $b) = 1, $q;
- my ($c, $d) = 0, 1;
+ my ($a, $b) = 1e0, $q.Num;
+ my ($c, $d) = 0e0, 1e0;
--- src/core/Num.pm.orig 2011-08-25 18:24:42.000000000 +0000
+++ src/core/Num.pm 2011-08-26 09:37:08.000000000 +0000
@@ -30,6 +30,7 @@ my class Num {
while $r != 0 && abs($num - ($b/$d)) > $epsilon {
($r, $q) = modf(1/$r);
+ die("Provided Num does not fit into a Rat\n") if $a < 0 || $b < 0;
($a, $b) = ($b, $q*$b + $a);
($c, $d) = ($d, $q*$d + $c);
}
--- src/binder/multidispatch.c.orig 2011-08-26 15:13:52.000000000 +0000
+++ src/binder/multidispatch.c 2011-08-26 15:24:12.000000000 +0000
@@ -292,6 +292,8 @@ static Rakudo_md_candidate_info** sort_c
if (info) {
if (info->types)
mem_sys_free(info->types);
+ if (info->definednesses)
+ mem_sys_free(info->definednesses);
if (info->constraints)
mem_sys_free(info->constraints);
--- nqp/src/6model/multi_dispatch.c.orig 2011-08-26 16:05:00.000000000 +0000
+++ nqp/src/6model/multi_dispatch.c 2011-08-26 17:21:15.000000000 +0000
@@ -222,6 +222,14 @@ static candidate_info** sort_candidates(
/* Free memory associated with the graph. */
for (i = 0; i < num_candidates; i++) {
+ candidate_info *info = graph[i]->info;
+ if (info) {
+ mem_sys_free(info);
+ if (info->types)
--- CREDITS.orig 2011-08-26 17:23:15.000000000 +0000
+++ CREDITS 2011-08-26 17:25:12.000000000 +0000
@@ -274,6 +274,11 @@ N: Matt Diephouse
U: mdiep
E: matt@diephouse.com
+N: Michael Schroeder
+E: mls@suse.de
+U: mls
+U: mlschroe
--- src/ops/perl6.ops.orig 2011-08-25 13:31:36.000000000 +0000
+++ src/ops/perl6.ops 2011-08-29 13:24:12.000000000 +0000
@@ -726,6 +752,7 @@ inline op perl6_enter_multi_dispatch_fro
opcode_t *addr;
Parrot_pcc_set_signature(interp, cur_ctx, cur_ctx);
interp->current_cont = Parrot_pcc_get_continuation(interp, cur_ctx);
+ Parrot_pcc_free_registers(interp, cur_ctx);
addr = VTABLE_invoke(interp, chosen, expr NEXT());
Parrot_pcc_set_caller_ctx(interp, cur_ctx, orig_caller);
goto ADDRESS(addr);
--- ./src/pmc/sub.pmc.orig 2011-08-30 15:52:12.000000000 +0000
+++ ./src/pmc/sub.pmc 2011-08-30 15:56:05.000000000 +0000
@@ -428,6 +428,9 @@ Invokes the subroutine.
Parrot_pcc_set_context(INTERP, context);
Parrot_pcc_set_caller_ctx(INTERP, context, caller_ctx);
+ /* support callcontext reuse */
+ if (context == caller_ctx)
+ Parrot_pcc_free_registers(INTERP, context);
Parrot_pcc_allocate_registers(INTERP, context, sub->n_regs_used);