summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMárcio Almada <marcio3w@gmail.com>2015-03-07 17:59:20 -0300
committerMárcio Almada <marcio3w@gmail.com>2015-03-08 12:50:57 -0300
commit22d6cc7c8c9485f90ab8356d1f51caa20de1c088 (patch)
tree268fae3368857c1b52c10e454933180eeeb6c4af
parent072d1dad1578149b1bf0c5bd2748dca167d46d46 (diff)
downloadphp-git-22d6cc7c8c9485f90ab8356d1f51caa20de1c088.tar.gz
fix compilation warnings, rename batch_use to group_use
-rw-r--r--Zend/tests/ns_088.phpt2
-rw-r--r--Zend/tests/ns_089.phpt2
-rw-r--r--Zend/tests/ns_090.phpt2
-rw-r--r--Zend/tests/ns_091.phpt2
-rw-r--r--Zend/tests/ns_092.phpt2
-rw-r--r--Zend/tests/ns_093.phpt2
-rw-r--r--Zend/tests/ns_094.phpt16
-rw-r--r--Zend/zend_ast.h2
-rw-r--r--Zend/zend_compile.c45
-rw-r--r--Zend/zend_language_parser.y33
10 files changed, 63 insertions, 45 deletions
diff --git a/Zend/tests/ns_088.phpt b/Zend/tests/ns_088.phpt
index 484fae38df..7af8dcc8d3 100644
--- a/Zend/tests/ns_088.phpt
+++ b/Zend/tests/ns_088.phpt
@@ -1,5 +1,5 @@
--TEST--
-Nested batch use statements syntax error
+Nested group use statements syntax error
--FILE--
<?php
namespace Fiz\Biz\Buz {
diff --git a/Zend/tests/ns_089.phpt b/Zend/tests/ns_089.phpt
index 81c4c02db9..c752eafb34 100644
--- a/Zend/tests/ns_089.phpt
+++ b/Zend/tests/ns_089.phpt
@@ -1,5 +1,5 @@
--TEST--
-Batch use statements
+Group use statements
--FILE--
<?php
namespace Foo\Bar\Baz {
diff --git a/Zend/tests/ns_090.phpt b/Zend/tests/ns_090.phpt
index 73c859544c..608d3fcf8e 100644
--- a/Zend/tests/ns_090.phpt
+++ b/Zend/tests/ns_090.phpt
@@ -1,5 +1,5 @@
--TEST--
-Batch use statements declared inline
+Group use statements declared inline
--FILE--
<?php
namespace Foo\Bar\Baz {
diff --git a/Zend/tests/ns_091.phpt b/Zend/tests/ns_091.phpt
index 8d93dd789e..b7eadeb10d 100644
--- a/Zend/tests/ns_091.phpt
+++ b/Zend/tests/ns_091.phpt
@@ -1,5 +1,5 @@
--TEST--
-Batch use statements with compound namespaces
+Group use statements with compound namespaces
--FILE--
<?php
namespace Foo\Bar {
diff --git a/Zend/tests/ns_092.phpt b/Zend/tests/ns_092.phpt
index c69ada91e2..a5d1bcb6e9 100644
--- a/Zend/tests/ns_092.phpt
+++ b/Zend/tests/ns_092.phpt
@@ -1,5 +1,5 @@
--TEST--
-Typed batch use statements
+Typed group use statements
--FILE--
<?php
namespace Foo\Bar {
diff --git a/Zend/tests/ns_093.phpt b/Zend/tests/ns_093.phpt
index cc82bd4885..e0b3e6a1d1 100644
--- a/Zend/tests/ns_093.phpt
+++ b/Zend/tests/ns_093.phpt
@@ -1,5 +1,5 @@
--TEST--
-Batch use declarations and whitespace nuances
+Group use declarations and whitespace nuances
--FILE--
<?php
diff --git a/Zend/tests/ns_094.phpt b/Zend/tests/ns_094.phpt
new file mode 100644
index 0000000000..792b2eba1d
--- /dev/null
+++ b/Zend/tests/ns_094.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Type group use declarations should not allow override on inner itens
+--FILE--
+<?php
+
+// should not throw syntax errors
+
+use const Foo\Bar\{
+ A,
+ const B,
+ function C
+};
+
+--EXPECTF--
+
+Parse error: syntax error, unexpected 'const' (T_CONST), expecting identifier (T_STRING) or \\ (T_NS_SEPARATOR) in %s on line 7
diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h
index 854576df0c..8cd06419be 100644
--- a/Zend/zend_ast.h
+++ b/Zend/zend_ast.h
@@ -132,7 +132,7 @@ enum _zend_ast_kind {
ZEND_AST_NAMESPACE,
ZEND_AST_USE_ELEM,
ZEND_AST_TRAIT_ALIAS,
- ZEND_AST_BATCH_USE,
+ ZEND_AST_GROUP_USE,
/* 3 child nodes */
ZEND_AST_METHOD_CALL = 3 << ZEND_AST_NUM_CHILDREN_SHIFT,
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index c32e7cb193..4e35fbfea3 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -4935,26 +4935,6 @@ static void zend_check_already_in_use(uint32_t type, zend_string *old_name, zend
}
/* }}} */
-void zend_compile_batch_use(zend_ast *ast) /* {{{ */
-{
- zend_string *ns = zend_ast_get_str(ast->child[0]);
- zend_ast_list *list = zend_ast_get_list(ast->child[1]);
- uint32_t i;
-
- for (i = 0; i < list->children; i++) {
- zend_ast *use = list->child[i];
- zval *name_zval = zend_ast_get_zval(use->child[0]);
- zend_string *name = Z_STR_P(name_zval);
- zend_string *compound_ns = zend_concat_names(ns->val, ns->len, name->val, name->len);
- zend_string_release(name);
- ZVAL_STR(name_zval, compound_ns);
- zend_ast_list *inline_use = zend_ast_create_list(1, ZEND_AST_USE, use);
- inline_use->attr = ast->attr ? ast->attr : use->attr;
- zend_compile_use(inline_use);
- }
-}
-/* }}} */
-
void zend_compile_use(zend_ast *ast) /* {{{ */
{
zend_ast_list *list = zend_ast_get_list(ast);
@@ -5064,6 +5044,27 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
}
/* }}} */
+void zend_compile_group_use(zend_ast *ast) /* {{{ */
+{
+ zend_string *ns = zend_ast_get_str(ast->child[0]);
+ zend_ast_list *list = zend_ast_get_list(ast->child[1]);
+ uint32_t i;
+
+ for (i = 0; i < list->children; i++) {
+ zend_ast *use = list->child[i];
+ zval *name_zval = zend_ast_get_zval(use->child[0]);
+ zend_string *name = Z_STR_P(name_zval);
+ zend_string *compound_ns = zend_concat_names(ns->val, ns->len, name->val, name->len);
+ zend_string_release(name);
+ ZVAL_STR(name_zval, compound_ns);
+ zend_ast *inline_use = zend_ast_create_list(1, ZEND_AST_USE, use);
+ inline_use->attr = ast->attr ? ast->attr : use->attr;
+ zend_compile_use(inline_use);
+ }
+}
+/* }}} */
+
+
void zend_compile_const_decl(zend_ast *ast) /* {{{ */
{
zend_ast_list *list = zend_ast_get_list(ast);
@@ -6459,8 +6460,8 @@ void zend_compile_stmt(zend_ast *ast) /* {{{ */
case ZEND_AST_CLASS:
zend_compile_class_decl(ast);
break;
- case ZEND_AST_BATCH_USE:
- zend_compile_batch_use(ast);
+ case ZEND_AST_GROUP_USE:
+ zend_compile_group_use(ast);
break;
case ZEND_AST_USE:
zend_compile_use(ast);
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index a9a93b86a6..69544ecf04 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -229,8 +229,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%type <ast> top_statement namespace_name name statement function_declaration_statement
%type <ast> class_declaration_statement trait_declaration_statement
%type <ast> interface_declaration_statement interface_extends_list
-%type <ast> batch_use_declarations inline_use_declarations inline_use_declaration
-%type <ast> mixed_batch_use_declarations use_declaration const_decl inner_statement
+%type <ast> group_use_declaration inline_use_declarations inline_use_declaration
+%type <ast> mixed_group_use_declaration use_declaration const_decl inner_statement
%type <ast> expr optional_expr while_statement for_statement foreach_variable
%type <ast> foreach_statement declare_statement finally_statement unset_variable variable
%type <ast> extends_from parameter optional_type argument expr_without_variable global_var
@@ -253,7 +253,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%type <num> returns_ref function is_reference is_variadic variable_modifiers
%type <num> method_modifiers trait_modifiers non_empty_member_modifiers member_modifier
-%type <num> class_modifiers class_modifier
+%type <num> class_modifiers class_modifier use_type
%type <str> backup_doc_comment
@@ -298,23 +298,29 @@ top_statement:
| T_NAMESPACE { RESET_DOC_COMMENT(); }
'{' top_statement_list '}'
{ $$ = zend_ast_create(ZEND_AST_NAMESPACE, NULL, $4); }
- | T_USE mixed_batch_use_declarations ';' { $$ = $2; }
- | T_USE T_FUNCTION batch_use_declarations ';' { $$ = $3; $3->attr = T_FUNCTION; }
- | T_USE T_CONST batch_use_declarations ';' { $$ = $3; $3->attr = T_CONST; }
+ | T_USE mixed_group_use_declaration ';' { $$ = $2; }
+ | T_USE T_FUNCTION group_use_declaration ';' { $$ = $3; $$->attr = T_FUNCTION; }
+ | T_USE T_CONST group_use_declaration ';' { $$ = $3; $$->attr = T_CONST; }
| T_USE use_declarations ';' { $$ = $2; $$->attr = T_CLASS; }
| T_USE T_FUNCTION use_declarations ';' { $$ = $3; $$->attr = T_FUNCTION; }
| T_USE T_CONST use_declarations ';' { $$ = $3; $$->attr = T_CONST; }
| T_CONST const_list ';' { $$ = $2; }
;
-batch_use_declarations:
+use_type:
+ /* empty */ { $$ = T_CLASS; }
+ | T_FUNCTION { $$ = T_FUNCTION; }
+ | T_CONST { $$ = T_CONST; }
+;
+
+group_use_declaration:
namespace_name T_NS_SEPARATOR '{' use_declarations '}'
- {$$ = zend_ast_create(ZEND_AST_BATCH_USE, $1, $4); }
+ {$$ = zend_ast_create(ZEND_AST_GROUP_USE, $1, $4); }
;
-mixed_batch_use_declarations:
+mixed_group_use_declaration:
namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
- {$$ = zend_ast_create(ZEND_AST_BATCH_USE, $1, $4);}
+ {$$ = zend_ast_create(ZEND_AST_GROUP_USE, $1, $4);}
;
inline_use_declarations:
@@ -325,12 +331,7 @@ inline_use_declarations:
;
inline_use_declaration:
- use_declaration
- { $$ = $1; $$->attr = T_CLASS; }
- | T_FUNCTION use_declaration
- { $$ = $2; $$->attr = T_FUNCTION; }
- | T_CONST use_declaration
- { $$ = $2; $$->attr = T_CONST; }
+ use_type use_declaration { $$ = $2; $$->attr = $1; }
;
use_declarations: