- Timestamp:
- 11/05/08 19:13:11 (2 months ago)
- Location:
- v6/mildew
- Files:
-
- 2 modified
-
mildew (modified) (1 diff)
-
src/AST.pm (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
v6/mildew/mildew
r22860 r22887 362 362 print $mold->pretty,"\n" if $desugar; 363 363 exit if $desugar; 364 my $m0ld = <<'BOILERPLATE'.$mold-> emit_('$main').<<'CALL_MAIN';364 my $m0ld = <<'BOILERPLATE'.$mold->m0ld('$main').<<'CALL_MAIN'; 365 365 my $void; 366 366 BOILERPLATE -
v6/mildew/src/AST.pm
r22860 r22887 22 22 my $self = shift; 23 23 my $id = AST::unique_id; 24 $AST::CODE .= do {local $AST::CODE='';$AST::CODE . $self->m0ld($id)}; 25 return $id; 26 27 } 28 sub emit_ { 29 local $AST::CODE = ''; 30 my ($self,$ret) = @_; 31 my $mold = $self->m0ld($ret); 32 $AST::CODE . $mold; 24 return $self->m0ld($id); 25 33 26 } 34 27 sub pretty { … … 52 45 my $then = $self->then->m0ld($id_then); 53 46 54 $cond. $/.47 $cond. 55 48 'my '.$id_cond.'_val = '.$id_cond.'."FETCH"();'.$/. 56 49 'my '.$id_cond.'_bool = '.$id_cond.'_val."bool"();'.$/. … … 70 63 "my $ret = mold {\n" 71 64 . join('',map {'my $'.$_.";\n"} @{$self->regs}) 72 . join("",map { $_-> emit_('$void') } @{$self->stmts})65 . join("",map { $_->m0ld('$void') } @{$self->stmts}) 73 66 . "};\n"; 74 67 } … … 138 131 my ($self,$ret) = @_; 139 132 if ($self->capture->isa("AST::Capture")) { 140 "my $ret = " 141 . $self->capture->invocant->emit 142 . "." . $self->identifier->emit 143 . "(" . join(',', map {$_->emit} $self->arguments) . ")" . ";\n"; 133 my @args; 134 my $code = ''; 135 for ($self->arguments) { 136 my $id = AST::unique_id(); 137 $code .= $_->m0ld($id); 138 push @args, $id; 139 } 140 my $invocant = AST::unique_id(); 141 $code .= $self->capture->invocant->m0ld($invocant); 142 my $identifier = AST::unique_id(); 143 $code .= $self->identifier->m0ld($identifier); 144 $code .= "my $ret = " 145 . $invocant 146 . "." . $identifier 147 . "(" . join(',', @args) . ")" . ";\n"; 144 148 } else { 145 149 die 'unimplemented'; … … 206 210 } 207 211 sub m0ld { 208 die "method m0ld is not supported on AST::Reg, m0ld doesn't support register aliasing\n" 212 my ($self,$ret) = @_; 213 "my $ret = ".$self->name."\n"; 209 214 } 210 215 sub pretty {
