On Thu, Apr 17, 2008 at 10:20 PM, Jonathan Worthington via RT
<[EMAIL PROTECTED]> wrote:
>
> Stéphane Payrard wrote:
>  > running the code with --target=pir, I see that the 'token a'  regex
>  > is generated as a method with an empty namespace.
>  >
>  As far as I'm aware, the grammar keyword isn't properly implemented yet
>  (it'll parse, but that's probably about it).
>
>  Jonathan
>
>
>

There is not much missing.

The following patch already gets .WHAT to work.
The code for grammar methods  is apparently correctly generated except
for the namespace.

grammar A { token aa { baba }  };    say A.WHAT;

Index: languages/perl6/src/parser/actions.pm
===================================================================
--- languages/perl6/src/parser/actions.pm       (revision 27021)
+++ languages/perl6/src/parser/actions.pm       (working copy)
@@ -796,11 +796,11 @@
     if $key eq 'open' {
         # Start of the block; if it's a class or role, need to make $?CLASS or
         # $?ROLE available for storing current definition in.
-        if $<sym> eq 'class' || $<sym> eq 'role' {
+        if $<sym> eq 'class' || $<sym> eq 'role' || $<sym> eq 'grammar' {
             my $decl_past := PAST::Stmts.new();

             # If it's a class...
-            if $<sym> eq 'class' {
+            if $<sym> eq 'class' || $<sym> eq 'grammar' {
                 # Call method to create the class.
                 $decl_past.push(PAST::Op.new(
                     :pasttype('bind'),
@@ -914,7 +914,7 @@
         $past.blocktype('declaration');
         $past.pirflags(':init :load');

-        if $<sym> eq 'class' {
+        if $<sym> eq 'class' || $<sym> eq 'grammar' {
             # Make proto-object.
             $?CLASS.push(PAST::Op.new(
                 :pasttype('call'),

-- 
cognominal stef

Reply via email to