From e1b5c02916ed9b248f9afcc4260b231e6e03202a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 19 Aug 2012 09:31:05 -0500 Subject: allow "fun Foo::foo ..." --- Fun.xs | 14 ++++++++++++-- t/package.t | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 t/package.t diff --git a/Fun.xs b/Fun.xs index 9488c80..e808cd7 100644 --- a/Fun.xs +++ b/Fun.xs @@ -248,8 +248,18 @@ static OP *parse_fun(pTHX_ GV *namegv, SV *psobj, U32 *flagsp) floor = start_subparse(0, CVf_ANON); lex_read_space(0); - if (isIDFIRST(*(PL_parser->bufptr))) { - function_name = parse_idword(""); + if (isIDFIRST(*(PL_parser->bufptr)) || *(PL_parser->bufptr) == ':') { + function_name = sv_2mortal(newSVpvs("")); + while (isIDFIRST(*(PL_parser->bufptr)) || *(PL_parser->bufptr) == ':') { + if (lex_peek_unichar(0) == ':') { + demand_unichar(':', DEMAND_IMMEDIATE); + demand_unichar(':', DEMAND_IMMEDIATE); + sv_catpvs(function_name, "::"); + } + else { + sv_catsv(function_name, parse_idword("")); + } + } } lex_read_space(0); diff --git a/t/package.t b/t/package.t new file mode 100644 index 0000000..2e672d1 --- /dev/null +++ b/t/package.t @@ -0,0 +1,16 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Fun; + +fun Foo::foo ($x, $y) { + $x + $y; +} + +ok(!main->can('foo')); +ok(Foo->can('foo')); +is(Foo::foo(1, 2), 3); + +done_testing; -- cgit v1.2.3-54-g00ecf