[svn:parrot] r44574 - in branches/ops_pct/compilers/opsc: src/Ops src/Ops/Compiler t
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon Mar 1 12:35:02 UTC 2010
Author: bacek
Date: Mon Mar 1 12:35:02 2010
New Revision: 44574
URL: https://trac.parrot.org/parrot/changeset/44574
Log:
Create op variants during parsing
Modified:
branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
branches/ops_pct/compilers/opsc/src/Ops/Op.pm
branches/ops_pct/compilers/opsc/t/03-past.t
Modified: branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm Mon Mar 1 12:34:35 2010 (r44573)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm Mon Mar 1 12:35:02 2010 (r44574)
@@ -51,6 +51,10 @@
@args := @($<op_params>[0].ast);
}
+ my @norm_args := normalize_args(@args);
+ # We have to clone @norm_args. Otherwise it will be destroyed...
+ my @variants := expand_args(pir::clone__PP(@norm_args));
+
my $past := Ops::Op.new(
:code(-1),
:name(~$<op_name>),
@@ -58,12 +62,14 @@
:flags(%flags),
:args(@args),
- :normalized_args(normalize_args(@args)),
+ :normalized_args(@norm_args),
+ :variants(@variants),
$<op_body>.ast
);
make $past;
+
}
# Normalize args
@@ -131,7 +137,7 @@
=end
sub expand_args(@args) {
- return list() unless + at args;
+ return list() unless @args;
my $arg := @args.shift;
Modified: branches/ops_pct/compilers/opsc/src/Ops/Op.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Op.pm Mon Mar 1 12:34:35 2010 (r44573)
+++ branches/ops_pct/compilers/opsc/src/Ops/Op.pm Mon Mar 1 12:35:02 2010 (r44574)
@@ -86,7 +86,7 @@
=end
-method new(:$code!, :$type!, :$name!, :@args!, :@normalized_args!, :%flags!) {
+method new(:$code!, :$type!, :$name!, :@args!, :@normalized_args!, :@variants!, :%flags!) {
self<CODE> := $code;
self<TYPE> := $type;
@@ -94,6 +94,7 @@
self<NAME> := $name;
self<ARGS> := @args;
self<NORMARGS> := @normalized_args;
+ self<VARIANTS> := @variants;
self<FLAGS> := %flags;
self<BODY> := '';
self<JUMP> := 0;
@@ -141,6 +142,8 @@
method arguments() { self<ARGS> }
+method variants() { self<VARIANTS> }
+
method full_name() {
my $name := self.name;
my @arg_types := self.arg_types;
@@ -152,6 +155,7 @@
return $trans.prefix ~ self.full_name;
}
+
=begin
=item C<flags()>
Modified: branches/ops_pct/compilers/opsc/t/03-past.t
==============================================================================
--- branches/ops_pct/compilers/opsc/t/03-past.t Mon Mar 1 12:34:35 2010 (r44573)
+++ branches/ops_pct/compilers/opsc/t/03-past.t Mon Mar 1 12:35:02 2010 (r44574)
@@ -82,7 +82,7 @@
ok($arg<type> eq 'nc', 'Third type is correct');
ok(!($arg<variant>), 'Third arg without variant');
-my @expanded := Ops::Compiler::Actions::expand_args(@args);
+my @expanded := $op.variants;
#_dumper(@expanded);
ok( @expanded[0].join('_') eq 'i_p_nc', "First variant correct");
More information about the parrot-commits
mailing list