[svn:parrot] r44855 - branches/ops_pct/compilers/opsc/src/Ops/Compiler
bacek at svn.parrot.org
bacek at svn.parrot.org
Wed Mar 10 10:19:00 UTC 2010
Author: bacek
Date: Wed Mar 10 10:19:00 2010
New Revision: 44855
URL: https://trac.parrot.org/parrot/changeset/44855
Log:
Resurrect merging on 'inline' chunks
Modified:
branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
Modified: branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm Wed Mar 10 10:18:35 2010 (r44854)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm Wed Mar 10 10:19:00 2010 (r44855)
@@ -74,12 +74,11 @@
my $op := Ops::Op.new(
:name(~$<op_name>),
- #$<op_body>.ast
);
- for $<op_body><body_word> {
- #say('# BANG');
- $op.push($_.ast);
+ # Flatten PAST::Stmts into Op.
+ for @($<op_body>.ast) {
+ $op.push($_);
}
# FIXME op.jump($<op_body>.ast<jump>);
@@ -230,8 +229,8 @@
make $past;
}
-method _op_body($/) {
- my $past := PAST::Block.new(
+method op_body($/) {
+ my $past := PAST::Stmts.new(
:node($/),
);
$past<jump> := 0;
@@ -249,43 +248,12 @@
$prev_words
));
$prev_words := '';
-
+
if $_<macro_param> {
- $past.push(PAST::Var.new(
- :name(~$_<macro_param><num>)
- ));
+ $past.push($_<macro_param>.ast);
}
elsif $_<op_macro> {
- my $op := $_<op_macro>;
- my $op_arg;
- #macro_sanity_checks($op);
- if $op<macro_arg><macro_param> {
- $op_arg := PAST::Var.new(
- :name(~$op<macro_arg><macro_param><num>)
- );
- }
- elsif $op<macro_arg><macro_word> {
- $op_arg := PAST::Op.new(
- :pasttype('inline'),
- ~$op<macro_arg><macro_word>
- );
- }
- else {
- $op_arg := PAST::Op.new(
- :pasttype('inline'),
- ''
- );
- }
- my $macro_name := ~$op<macro_type> ~ '_' ~ lc(~$op<macro_destination>);
- if $macro_name eq 'restart_offset' || $macro_name eq 'goto_offset' {
- $past<jump> := 'PARROT_JUMP_RELATIVE';
- }
- my $macro_past := PAST::Op.new(
- :pasttype('call'),
- :name($macro_name),
- $op_arg
- );
- $past.push($macro_past);
+ $past.push($_<op_macro>.ast);
}
}
}
More information about the parrot-commits
mailing list