[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