Acme-Gosub
view release on metacpan or search on metacpan
lib/Acme/Gosub.pm view on Meta::CPAN
my $future_pos_source = $pos_source + pos($source_for_text_balanced);
print join(",",@pos), "\n";
$arg = filter_blocks(substr($source_for_text_balanced,1,$pos[4]-$pos[0]),line(substr($source_for_text_balanced,0,1),$line));
print "\$arg = $arg\n";
pos($source) = $future_pos_source;
}
my $next_ret_label = "__G_O_S_U_B_RET_LABEL_" .
($next_label_idx++);
$text .= "push \@{\$Acme::Gosub::ret_labels{(caller(0))[3]}}, \"$next_ret_label\";";
$text .= "goto $arg;";
$text .= "$next_ret_label:";
next component;
}
elsif ($source =~ m/\G(\s*)greturn\s*;/gc)
{
$text .= $1;
$text .= "goto (pop(\@{\$Acme::Gosub::ret_labels{(caller(0))[3]}}));";
next component;
}
$source =~ m/\G(\s*(-[sm]\s+|\w+|#.*\n|\W))/gc;
$text .= $1;
}
$text;
}
1;
( run in 1.792 second using v1.01-cache-2.11-cpan-b61123c0432 )