Author: jonathan
Date: Fri Jan  9 11:05:59 2009
New Revision: 35318

Added:
   trunk/languages/perl6/src/parser/methods.pir   (contents, props changed)
Modified:
   trunk/MANIFEST
   trunk/languages/perl6/config/makefiles/root.in
   trunk/languages/perl6/perl6.pir
   trunk/languages/perl6/src/parser/grammar.pg

Log:
[rakudo] Start getting the type registry stuff in place. This patch adds 
(currently stub) add_type and is_type method on Perl6::Grammar and inserts 
calls to them, following the STD.pm approach. No functional changes.

Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST      (original)
+++ trunk/MANIFEST      Fri Jan  9 11:05:59 2009
@@ -2167,6 +2167,7 @@
 languages/perl6/src/parser/expression.pir                   [perl6]
 languages/perl6/src/parser/grammar-oper.pg                  [perl6]
 languages/perl6/src/parser/grammar.pg                       [perl6]
+languages/perl6/src/parser/methods.pir                      [perl6]
 languages/perl6/src/parser/quote_expression.pir             [perl6]
 languages/perl6/src/pmc/mutablevar.pmc                      [perl6]
 languages/perl6/src/pmc/objectref_pmc.template              [perl6]

Modified: trunk/languages/perl6/config/makefiles/root.in
==============================================================================
--- trunk/languages/perl6/config/makefiles/root.in      (original)
+++ trunk/languages/perl6/config/makefiles/root.in      Fri Jan  9 11:05:59 2009
@@ -41,6 +41,7 @@
   src/gen_metaop.pir \
   src/gen_junction.pir \
   src/parser/expression.pir \
+  src/parser/methods.pir \
   src/parser/quote_expression.pir \
   $(PERL6_GROUP) \
   src/ops/perl6_ops$(LOAD_EXT)

Modified: trunk/languages/perl6/perl6.pir
==============================================================================
--- trunk/languages/perl6/perl6.pir     (original)
+++ trunk/languages/perl6/perl6.pir     Fri Jan  9 11:05:59 2009
@@ -204,6 +204,7 @@
 
 .include 'src/gen_grammar.pir'
 .include 'src/parser/expression.pir'
+.include 'src/parser/methods.pir'
 .include 'src/parser/quote_expression.pir'
 .include 'src/gen_actions.pir'
 .include 'src/gen_metaop.pir'

Modified: trunk/languages/perl6/src/parser/grammar.pg
==============================================================================
--- trunk/languages/perl6/src/parser/grammar.pg (original)
+++ trunk/languages/perl6/src/parser/grammar.pg Fri Jan  9 11:05:59 2009
@@ -450,6 +450,11 @@
 rule type_declarator {
     'subset'
     <name>
+    {{
+        $P0 = match['name']
+        $S0 = $P0.'text'()
+        match.'add_type'($S0)
+    }}
     [ of <typename> ]? # XXX should be <fulltypename>
     where <EXPR>
     {*}
@@ -615,6 +620,12 @@
 rule package_def {
     [
         <module_name=name>
+        {{
+            $P0 = match['module_name']
+            $P0 = $P0[0]
+            $S0 = $P0.'text'()
+            match.'add_type'($S0)
+        }}
     ]? 
     <trait>*
     [
@@ -626,7 +637,17 @@
 
 
 rule enum_declarator {
-    'enum' <name>?
+    'enum'
+    [
+        <name> ::
+        {{
+            $P0 = match['name']
+            $P0 = $P0[0]
+            $S0 = $P0.'text'()
+            match.'add_type'($S0)
+        }}
+    ]?
+
     [
     | <?before '[' > <circumfix> {*}             #= circumfix
     | <?before '<' | '«' > <quote> {*}          #= quote
@@ -719,6 +740,11 @@
 
 token typename {
     <?before <.upper> | '::' > <name>
+    <?{{
+        $P0 = match['name']
+        $S0 = $P0.'text'()
+        $I0 = match.'is_type'($S0)
+    }}>
     {*}
 }
 

Added: trunk/languages/perl6/src/parser/methods.pir
==============================================================================
--- (empty file)
+++ trunk/languages/perl6/src/parser/methods.pir        Fri Jan  9 11:05:59 2009
@@ -0,0 +1,46 @@
+## $Id$
+
+=head1 TITLE
+
+methods.pir - Methods on Perl6::Grammar.
+
+=head2 DESCRIPTION
+
+STD.pm contains various methods. This file implements some of them.
+
+=over 4
+
+=item C<add_type(type_name)>
+
+Registers a type in the namespace.
+
+=cut
+
+.namespace [ "Perl6";"Grammar" ]
+.sub "add_type" :method
+    .param string name
+    # XXX TODO
+.end
+
+
+=item C<is_type(name)>
+
+Checks if the name we have been passed represents a type.
+
+=cut
+
+.sub 'is_type' :method
+    .param string name
+    # XXX TODO
+    .return (1)
+.end
+
+=back
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Reply via email to