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