Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Thu, 08 Aug 2013 15:27:25 UTC Commit: fb7bd34592e2905b83aee43c1a396354dfd6867a https://github.com/geany/geany/commit/fb7bd34592e2905b83aee43c1a396354dfd686...
Log Message: ----------- PHP: Fix parsing of anonymous functions returning a reference
Modified Paths: -------------- tagmanager/ctags/php.c tests/ctags/Makefile.am tests/ctags/anonymous_functions.php tests/ctags/anonymous_functions.php.tags
Modified: tagmanager/ctags/php.c 14 files changed, 8 insertions(+), 6 deletions(-) =================================================================== @@ -1084,7 +1084,8 @@ static boolean parseTrait (tokenInfo *const token) * function &myfunc($foo, $bar) {} * * if @name is not NULL, parses an anonymous function with name @name - * $foo = function($foo, $bar) {} */ + * $foo = function($foo, $bar) {} + * $foo = function&($foo, $bar) {} */ static boolean parseFunction (tokenInfo *const token, const tokenInfo *name) { boolean readNext = TRUE; @@ -1092,20 +1093,21 @@ static boolean parseFunction (tokenInfo *const token, const tokenInfo *name) implType impl = CurrentStatement.impl; tokenInfo *nameFree = NULL;
+ readToken (token); + /* skip a possible leading ampersand (return by reference) */ + if (token->type == TOKEN_AMPERSAND) + readToken (token); + if (! name) { - readToken (token); - /* skip a possible leading ampersand (return by reference) */ - if (token->type == TOKEN_AMPERSAND) - readToken (token); if (token->type != TOKEN_IDENTIFIER) return FALSE;
name = nameFree = newToken (); copyToken (nameFree, token, TRUE); + readToken (token); }
- readToken (token); if (token->type == TOKEN_OPEN_PAREN) { vString *arglist = vStringNew ();
Modified: tests/ctags/Makefile.am 1 files changed, 1 insertions(+), 0 deletions(-) =================================================================== @@ -13,6 +13,7 @@ test_sources = \ 3526726.tex \ 68hc11.asm \ angle_bracket.cpp \ + anonymous_functions.php \ array_ref_and_out.cs \ array_spec.f90 \ array-spec.f90 \
Modified: tests/ctags/anonymous_functions.php 24 files changed, 24 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,24 @@ +<?php + +$a = function() {}; + +$b = function($x, $y) {}; + +/* return a value */ +$c = function() { + return 42; +}; + +/* return a function */ +$d = function() { + return function() { + return "hello"; + }; +}; + +/* return by reference */ +$_g = 42; +$e = function&() { + global $_g; + return $_g; +};
Modified: tests/ctags/anonymous_functions.php.tags 7 files changed, 7 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,7 @@ +# format=tagmanager +_g�16384�0 +a�16�()�0 +b�16�($x, $y)�0 +c�16�()�0 +d�16�()�0 +e�16�()�0
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).