Author: jonathan
Date: Tue Mar 25 16:14:15 2008
New Revision: 26549

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

Log:
[rakudo] Add the Whatever class and * syntax for it, and give it an ACCEPTS 
method so when * { ... } always runs.

Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST      (original)
+++ trunk/MANIFEST      Tue Mar 25 16:14:15 2008
@@ -1832,6 +1832,7 @@
 languages/perl6/src/classes/Role.pir                        [perl6]
 languages/perl6/src/classes/Str.pir                         [perl6]
 languages/perl6/src/classes/Sub.pir                         [perl6]
+languages/perl6/src/classes/Whatever.pir                    [perl6]
 languages/perl6/src/classes/Undef.pir                       [perl6]
 languages/perl6/src/parser/actions.pm                       [perl6]
 languages/perl6/src/parser/expression.pir                   [perl6]

Modified: trunk/languages/perl6/config/makefiles/root.in
==============================================================================
--- trunk/languages/perl6/config/makefiles/root.in      (original)
+++ trunk/languages/perl6/config/makefiles/root.in      Tue Mar 25 16:14:15 2008
@@ -51,6 +51,7 @@
   src/classes/Undef.pir \
   src/classes/Role.pir \
   src/classes/Pair.pir \
+  src/classes/Whatever.pir \
   src/builtins/assign.pir \
   src/builtins/cmp.pir \
   src/builtins/control.pir \

Added: trunk/languages/perl6/src/classes/Whatever.pir
==============================================================================
--- (empty file)
+++ trunk/languages/perl6/src/classes/Whatever.pir      Tue Mar 25 16:14:15 2008
@@ -0,0 +1,31 @@
+## $Id$
+
+=head1 TITLE
+
+Whatever - Perl 6 Whatever class
+
+=head1 DESCRIPTION
+
+This file implements the Whatever class.
+
+=cut
+
+.namespace ['Whatever']
+
+.sub 'onload' :anon :init :load
+    $P0 = subclass 'Perl6Object', 'Whatever'
+    $P1 = get_hll_global ['Perl6Object'], 'make_proto'
+    $P1($P0, 'Whatever')
+.end
+
+.sub 'ACCEPTS' :method
+    .param pmc topic
+    $P0 = get_hll_global ['Bool'], 'True'
+    .return ($P0)
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Modified: trunk/languages/perl6/src/parser/actions.pm
==============================================================================
--- trunk/languages/perl6/src/parser/actions.pm (original)
+++ trunk/languages/perl6/src/parser/actions.pm Tue Mar 25 16:14:15 2008
@@ -1307,6 +1307,21 @@
 }
 
 
+method whatever($/) {
+    my $past := PAST::Op.new(
+        :pasttype('callmethod'),
+        :name('new'),
+        :node($/),
+        PAST::Var.new(
+            :name('Whatever'),
+            :scope('package'),
+            :node($/)
+        )
+    );
+    make $past;
+}
+
+
 # Used by all calling code to process arguments into the correct form.
 sub process_arguments($call_past, $args) {
     for @($args) {

Modified: trunk/languages/perl6/src/parser/grammar.pg
==============================================================================
--- trunk/languages/perl6/src/parser/grammar.pg (original)
+++ trunk/languages/perl6/src/parser/grammar.pg Tue Mar 25 16:14:15 2008
@@ -442,6 +442,7 @@
     | <regex_declarator> {*}                     #= regex_declarator
     | <colonpair> {*}                            #= colonpair
     | <fatarrow> {*}                             #= fatarrow
+    | <whatever> {*}                             #= whatever
     | 'self' {*}                                 #= self
     | 'undef' {*}                                #= undef
 }
@@ -672,6 +673,8 @@
     {*}
 }
 
+token whatever { '*' {*} }
+
 #### expressions and operators ####
 
 ##  The EXPR rule is our entry point into the operator

Reply via email to