[svn:parrot] r44563 - 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 09:41:28 UTC 2010
Author: bacek
Date: Mon Mar 1 09:41:28 2010
New Revision: 44563
URL: https://trac.parrot.org/parrot/changeset/44563
Log:
Made Ops::Op inherited from PAST::Block and construct them during compilation phase
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 09:24:13 2010 (r44562)
+++ branches/ops_pct/compilers/opsc/src/Ops/Compiler/Actions.pm Mon Mar 1 09:41:28 2010 (r44563)
@@ -39,22 +39,23 @@
}
method op($/) {
- my $past := PAST::Block.new(
- :name(~$<op_name>),
- :node($/),
-
- $<op_body>.ast
- );
# Handling flags.
+ my %flags := pir::new__Ps('Hash');
for $<op_flag> {
- $past<op_flags>{~$_<identifier>} := 1;
+ %flags{~$_<identifier>} := 1;
}
- # Handling parameters.
- if $<op_params> {
- $past<parameters> := $<op_params>[0].ast;
- }
+ my $past := Ops::Op.new(
+ :code(-1),
+ :name(~$<op_name>),
+ :type(~$<op_type>),
+
+ :flags(%flags),
+ :args($<op_params>[0].ast),
+
+ $<op_body>.ast
+ );
make $past;
}
Modified: branches/ops_pct/compilers/opsc/src/Ops/Op.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Op.pm Mon Mar 1 09:24:13 2010 (r44562)
+++ branches/ops_pct/compilers/opsc/src/Ops/Op.pm Mon Mar 1 09:41:28 2010 (r44563)
@@ -64,11 +64,11 @@
=end
-class Ops::Op is Hash;
+class Ops::Op is PAST::Block;
=begin
-=item C<BUILD(:$code, :$type, :$name, :@args, :%flags)>
+=item C<new(:$code, :$type, :$name, :@args, :%flags)>
Allocates a new bodyless op. A body must be provided eventually for the
op to be usable.
@@ -138,6 +138,8 @@
method name() { self<NAME> }
+method arguments() { self<ARGS> }
+
method full_name() {
my $name := self.name;
my @arg_types := self.arg_types;
Modified: branches/ops_pct/compilers/opsc/t/03-past.t
==============================================================================
--- branches/ops_pct/compilers/opsc/t/03-past.t Mon Mar 1 09:24:13 2010 (r44562)
+++ branches/ops_pct/compilers/opsc/t/03-past.t Mon Mar 1 09:41:28 2010 (r44563)
@@ -40,11 +40,11 @@
# Check op
.local pmc op
op = $P0[0]
- $S0 = op['name']
+ $S0 = op.'name'()
is($S0, 'foo', "Name parsed")
# Check op flags
- $P1 = op['op_flags']
+ $P1 = op.'flags'()
$I0 = $P1['flow']
is(1, $I0, ':flow flag parsed')
@@ -55,7 +55,7 @@
is($I0, 2, "And there are only 2 flags")
# Check op params
- $P1 = op['parameters']
+ $P1 = op.'arguments'()
$P1 = $P1.'list'()
$I0 = $P1
is($I0, 3, "Got 3 parameters")
More information about the parrot-commits
mailing list