From 4c594adce99ab5a481d3ce47a3990c96ca1d5cba Mon Sep 17 00:00:00 2001 From: pmichaud Date: Mon, 26 Oct 2009 14:54:48 -0500 Subject: [PATCH] [nqp]: Add simple parameters to signatures. --- src/NQP/Actions.pm | 15 +++++++++++++++ src/NQP/Grammar.pm | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/src/NQP/Actions.pm b/src/NQP/Actions.pm index 0dee712..7efbb90 100644 --- a/src/NQP/Actions.pm +++ b/src/NQP/Actions.pm @@ -145,6 +145,21 @@ method routine_def($/) { make $past; } +method signature($/) { + my $BLOCKINIT := @BLOCK[0][0]; + for $ { $BLOCKINIT.push($_.ast); } +} + +method parameter($/) { make $.ast; } + +method param_var($/) { + my $past := $.ast; + $past.isdecl(1); + $past.scope('parameter'); + @BLOCK[0].symbol($past.name, :scope('lexical') ); + make $past; +} + method term:sym($/) { my $past := $.ast; $past.name(~$); diff --git a/src/NQP/Grammar.pm b/src/NQP/Grammar.pm index 077c733..de819e4 100644 --- a/src/NQP/Grammar.pm +++ b/src/NQP/Grammar.pm @@ -100,9 +100,17 @@ token routine_declarator:sym { } rule routine_def { ? <.newpad> + [ '(' ')' + || <.panic: 'Routine declaration requires a signature'> ] } +token signature { [ [<.ws><.ws>] ** ',' ]? } + +token parameter { } + +token param_var { } + proto token term { <...> } token term:sym {