summaryrefslogtreecommitdiff
path: root/ext/B/B/CC.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ext/B/B/CC.pm')
-rw-r--r--ext/B/B/CC.pm10
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/B/B/CC.pm b/ext/B/B/CC.pm
index 4affda0014..9369464344 100644
--- a/ext/B/B/CC.pm
+++ b/ext/B/B/CC.pm
@@ -101,7 +101,8 @@ sub debug {
if ($debug_runtime) {
warn(@_);
} else {
- runtime(map { chomp; "/* $_ */"} @_);
+ my @tmp=@_;
+ runtime(map { chomp; "/* $_ */"} @tmp);
}
}
@@ -1480,6 +1481,11 @@ sub compile_bblock {
sub cc {
my ($name, $root, $start, @padlist) = @_;
my $op;
+ if($done{$$start}){
+ #warn "repeat=>".ref($start)."$name,\n";#debug
+ $decl->add(sprintf("#define $name %s",$done{$$start}));
+ return;
+ }
init_pp($name);
load_pad(@padlist);
B::Pseudoreg->new_scope;
@@ -1503,7 +1509,7 @@ sub cc {
next if !defined($op) || !$$op || $done{$$op};
#warn "...compiling it\n"; # debug
do {
- $done{$$op} = 1;
+ $done{$$op} = $name;
$op = compile_bblock($op);
if ($need_freetmps && $freetmps_each_bblock) {
runtime("FREETMPS;");