From e930f4b081ec1606bb4330b8d80349350e81c116 Mon Sep 17 00:00:00 2001 From: Gilles Crettenand Date: Wed, 12 Oct 2016 10:05:28 +0200 Subject: [PATCH 1/2] Allow function import in the current namespace using `use` --- lib/Boris/ShallowParser.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/Boris/ShallowParser.php b/lib/Boris/ShallowParser.php index 75a1727..a055502 100644 --- a/lib/Boris/ShallowParser.php +++ b/lib/Boris/ShallowParser.php @@ -217,7 +217,17 @@ private function _scanChar($result) private function _scanUse($result) { - if (preg_match("/^use (.+?);/", $result->buffer, $use)) { + if (preg_match("/^use function (.+?);/", $result->buffer, $use)) { + $result->buffer = substr($result->buffer, strlen($use[0])); + if (strpos($use[0], ' as ') !== false) { + list($function, $alias) = explode(' as ', $use[1]); + } else { + $function = $use[1]; + $alias = substr($use[1], strrpos($use[1], '\\') + 1); + } + $result->statements[] = sprintf("function %s() { return call_user_func_array('%s', func_get_args()); };", $alias, $function); + return true; + } else if (preg_match("/^use (.+?);/", $result->buffer, $use)) { $result->buffer = substr($result->buffer, strlen($use[0])); if (strpos($use[0], ' as ') !== false) { list($class, $alias) = explode(' as ', $use[1]); From c6927e03ee6e128533faeb3df069262762f57075 Mon Sep 17 00:00:00 2001 From: Gilles Crettenand Date: Wed, 12 Oct 2016 11:07:00 +0200 Subject: [PATCH 2/2] Allow const import in the current namespace using `use` --- lib/Boris/ShallowParser.php | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/Boris/ShallowParser.php b/lib/Boris/ShallowParser.php index a055502..011129b 100644 --- a/lib/Boris/ShallowParser.php +++ b/lib/Boris/ShallowParser.php @@ -214,28 +214,28 @@ private function _scanChar($result) return true; } - + private function _scanUse($result) { - if (preg_match("/^use function (.+?);/", $result->buffer, $use)) { + if (preg_match("/^use (?Pfunction |const )?(?P.+?)( as (?P.+?))?;/", $result->buffer, $use)) { $result->buffer = substr($result->buffer, strlen($use[0])); - if (strpos($use[0], ' as ') !== false) { - list($function, $alias) = explode(' as ', $use[1]); - } else { - $function = $use[1]; - $alias = substr($use[1], strrpos($use[1], '\\') + 1); + + if (! isset($use['alias']) || strlen($use['alias']) == 0) { + $use['alias'] = substr($use['name'], strrpos($use['name'], '\\') + 1); } - $result->statements[] = sprintf("function %s() { return call_user_func_array('%s', func_get_args()); };", $alias, $function); - return true; - } else if (preg_match("/^use (.+?);/", $result->buffer, $use)) { - $result->buffer = substr($result->buffer, strlen($use[0])); - if (strpos($use[0], ' as ') !== false) { - list($class, $alias) = explode(' as ', $use[1]); - } else { - $class = $use[1]; - $alias = substr($use[1], strrpos($use[1], '\\') + 1); + + switch(trim($use['type'])) { + case 'function': + $result->statements[] = sprintf("function %s() { return call_user_func_array('%s', func_get_args()); };", $use['alias'], $use['name']); + break; + case 'const': + $result->statements[] = sprintf("define('%s', %s);", $use['alias'], $use['name']); + break; + default: + $result->statements[] = sprintf("class_alias('%s', '%s');", $use['name'], $use['alias']); + break; } - $result->statements[] = sprintf("class_alias('%s', '%s');", $class, $alias); + return true; } else { return false;