develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35642 - in trunk/languages/pipp: src/pct t/php

From:
bernhard
Date:
January 16, 2009 10:48
Subject:
[svn:parrot] r35642 - in trunk/languages/pipp: src/pct t/php
Message ID:
20090116184758.EF2F2CB9F9@x12.develooper.com
Author: bernhard
Date: Fri Jan 16 10:47:58 2009
New Revision: 35642

Modified:
   trunk/languages/pipp/src/pct/actions.pm
   trunk/languages/pipp/t/php/oo.t

Log:
[Pipp] track the current class in $?CLASS

Modified: trunk/languages/pipp/src/pct/actions.pm
==============================================================================
--- trunk/languages/pipp/src/pct/actions.pm	(original)
+++ trunk/languages/pipp/src/pct/actions.pm	Fri Jan 16 10:47:58 2009
@@ -20,7 +20,8 @@
 class Pipp::Grammar::Actions;
 
 method TOP($/, $key) {
-    our $?NS := '';
+    our $?NS    := '';
+    our $?CLASS := '';
     our @?BLOCK; # A stack of PAST::Block
     our @?SUPER_GLOBALS :=
           ( '$_GET', '$_POST', '$_SERVER', '$_GLOBALS',
@@ -295,6 +296,7 @@
 
 # class constants could probably also be set in a class init block
 method class_constant_definition($/) {
+    our $?CLASS;
     my $past := PAST::Block.new( :name('class_constant_definition') );
     my $loadinit := $past.loadinit();
     $loadinit.unshift(
@@ -303,7 +305,7 @@
             :name('define'),
             :node( $/ ),
             PAST::Val.new(
-                :value( 'Foo::' ~ ~$<CONSTANT_NAME> ),
+                :value( $?CLASS ~ '::' ~ ~$<CONSTANT_NAME> ),
                 :returns('PhpString'),
             ),
             $( $<literal> ),
@@ -707,12 +709,15 @@
 
 method class_definition($/, $key) {
     our @?BLOCK; # A stack of PAST::Block
+    our $?CLASS; # for namespacing of constants
 
     if $key eq 'open' {
+        $?CLASS := ~$<CLASS_NAME>;
         my $block := PAST::Block.new(
                 :node($/),
                 :blocktype('declaration'),
-                :pirflags( ':init :load' )
+                :pirflags( ':init :load' ),
+                :namespace( $?CLASS )
             );
 
         # set up scope 'package' for the superglobals
@@ -723,8 +728,6 @@
     }
     else {
         my $block := @?BLOCK.shift();
-        my $class_name := ~$<CLASS_NAME><ident>;
-        $block.namespace( $class_name );
         $block.push(
             # Start of class definition; make PAST to create class object if
             # we're creating a new class.
@@ -738,7 +741,7 @@
                 PAST::Op.new(
                     :pasttype('call'),
                     :name('pipp_create_class'),
-                    PAST::Val.new( :value($class_name) )
+                    PAST::Val.new( :value($?CLASS) )
                 )
             )
         );
@@ -837,6 +840,8 @@
 
         $block.push( $methods_block );
 
+        $?CLASS := '';
+
         make $block;
     }
 }

Modified: trunk/languages/pipp/t/php/oo.t
==============================================================================
--- trunk/languages/pipp/t/php/oo.t	(original)
+++ trunk/languages/pipp/t/php/oo.t	Fri Jan 16 10:47:58 2009
@@ -54,7 +54,7 @@
 constant bar in class Foo
 OUT
 
-language_output_is( 'Pipp', <<'CODE', <<'OUT', 'class constant in Bar', todo => 'Foo is hardwired' );
+language_output_is( 'Pipp', <<'CODE', <<'OUT', 'class constant in Bar' );
 <?php
 
 class Bar {
@@ -66,7 +66,7 @@
 
 ?>
 CODE
-constant bar in class Foo
+constant bar in class Bar
 OUT
 
 language_output_is( 'Pipp', <<'CODE', <<'OUT', 'calling an instance method' );



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About