com php-langspec: Add trialing comma description for constructs and functions: spec/10-expressions.md spec/11-statements.md spec/19-grammar.md
tests/classes/dynamic_methods.phpt tests/classes/property _initializer.phpt tests/expressions/primary_expressions /intrinsics_isset.phpt
tests/expressions/primary_expres sions/intrinsics_unset.phpt tests/functions/basics.phpt

From: Date: Sat, 22 Dec 2018 12:27:47 +0000
Subject: com php-langspec: Add trialing comma description for constructs and functions: spec/10-expressions.md spec/11-statements.md spec/19-grammar.md
tests/classes/dynamic_methods.phpt tests/classes/property _initializer.phpt tests/expressions/primary_expressions /intrinsics_isset.phpt
tests/expressions/primary_expres sions/intrinsics_unset.phpt tests/functions/basics.phpt
Groups: php.standards.cvs 
Request: Send a blank email to standards--cvs+get-423@lists.php.net to get a copy of this message
Commit: 197a397cf84bdcd3f896aebf15a73b5fd45a174d Author: zhujinxuan <zhujinxuan@gmail.com> Thu, 20 Dec 2018 17:03:48 -0500 Committer: Nikita Popov <nikita.ppv@gmail.com> Sat, 22 Dec 2018 13:27:47 +0100 Parents: 322c5c037eb3fcc9fc87ba9c20c2a002a1562704 Branches: master Link: http://git.php.net/?p=php-langspec.git;a=commitdiff;h=197a397cf84bdcd3f896aebf15a73b5fd45a174d Log: Add trialing comma description for constructs and functions * Add trailing comma for - isset and unset - static and dynamic methods - functions and closure as functions - new statement * Add or change the related tests to support the trialing comma Changed paths: M spec/10-expressions.md M spec/11-statements.md M spec/19-grammar.md M tests/classes/dynamic_methods.phpt M tests/classes/property_initializer.phpt M tests/expressions/primary_expressions/intrinsics_isset.phpt M tests/expressions/primary_expressions/intrinsics_unset.phpt M tests/functions/basics.phpt

diff --git a/spec/10-expressions.md b/spec/10-expressions.md index 3d69387..060f1f3 100644 --- a/spec/10-expressions.md +++ b/spec/10-expressions.md @@ -479,7 +479,7 @@ exit; <!-- GRAMMAR isset-intrinsic: - 'isset' '(' variable-list ')' + 'isset' '(' variable-list ','? ')' variable-list: variable @@ -488,7 +488,7 @@ variable-list: <pre> <i id="grammar-isset-intrinsic">isset-intrinsic:</i> - isset ( <i><a href="#grammar-variable-list">variable-list</a></i> ) + isset ( <i><a href="#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> ) <i id="grammar-variable-list">variable-list:</i> <i><a href="#grammar-variable">variable</a></i> @@ -655,6 +655,7 @@ class C <!-- GRAMMAR object-creation-expression: 'new' class-type-designator '(' argument-expression-list? ')' + 'new' class-type-designator '(' argument-expression-list ','? ')' 'new' class-type-designator 'new' 'class' '(' argument-expression-list? ')' class-base-clause? class-interface-clause? '{' class-member-declarations? '}' 'new' 'class' class-base-clause? class-interface-clause? '{' class-member-declarations? '}' @@ -676,6 +677,7 @@ new-variable: <pre> <i id="grammar-object-creation-expression">object-creation-expression:</i> new <i><a href="#grammar-class-type-designator">class-type-designator</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + new <i><a href="#grammar-class-type-designator">class-type-designator</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> ,<sub>opt</sub> ) new <i><a href="#grammar-class-type-designator">class-type-designator</a></i> new class ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) <i><a href="14-classes.md#grammar-class-base-clause">class-base-clause</a></i><sub>opt</sub> <i><a href="14-classes.md#grammar-class-interface-clause">class-interface-clause</a></i><sub>opt</sub> { <i><a href="14-classes.md#grammar-class-member-declarations">class-member-declarations</a></i><sub>opt</sub> } new class <i><a href="14-classes.md#grammar-class-base-clause">class-base-clause</a></i><sub>opt</sub> <i><a href="14-classes.md#grammar-class-interface-clause">class-interface-clause</a></i><sub>opt</sub> { <i><a href="14-classes.md#grammar-class-member-declarations">class-member-declarations</a></i><sub>opt</sub> } @@ -1044,7 +1046,9 @@ $x = $vect1[1]; // calls Vector::offsetGet(1) <!-- GRAMMAR function-call-expression: qualified-name '(' argument-expression-list? ')' + qualified-name '(' argument-expression-list ',' ')' callable-expression '(' argument-expression-list? ')' + callable-expression '(' argument-expression-list ',' ')' argument-expression-list: argument-expression @@ -1061,7 +1065,9 @@ variadic-unpacking: <pre> <i id="grammar-function-call-expression">function-call-expression:</i> <i><a href="09-lexical-structure.md#grammar-qualified-name">qualified-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="09-lexical-structure.md#grammar-qualified-name">qualified-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i><a href="#grammar-callable-expression">callable-expression</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-callable-expression">callable-expression</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i id="grammar-argument-expression-list">argument-expression-list:</i> <i><a href="#grammar-argument-expression">argument-expression</a></i> @@ -1263,11 +1269,13 @@ $c = $p1->color; // turned into $c = $p1->__get("color"); <!-- GRAMMAR member-call-expression: dereferencable-expression '->' member-name '(' argument-expression-list? ')' + dereferencable-expression '->' member-name '(' argument-expression-list ',' ')' --> <pre> <i id="grammar-member-call-expression">member-call-expression:</i> <i><a href="#grammar-dereferencable-expression">dereferencable-expression</a></i> -&gt; <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-dereferencable-expression">dereferencable-expression</a></i> -&gt; <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) </pre> **Constraints** @@ -1496,6 +1504,7 @@ scoped-property-access-expression: scoped-call-expression: scope-resolution-qualifier '::' member-name '(' argument-expression-list? ')' + scope-resolution-qualifier '::' member-name '(' argument-expression-list ',' ')' class-constant-access-expression: scope-resolution-qualifier '::' name @@ -1517,6 +1526,7 @@ relative-scope: <i id="grammar-scoped-call-expression">scoped-call-expression:</i> <i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i id="grammar-class-constant-access-expression">class-constant-access-expression:</i> <i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="09-lexical-structure.md#grammar-name">name</a></i> diff --git a/spec/11-statements.md b/spec/11-statements.md index 6534929..39bd0ce 100644 --- a/spec/11-statements.md +++ b/spec/11-statements.md @@ -1361,12 +1361,12 @@ echo "$v3\n"; <!-- GRAMMAR unset-statement: - 'unset' '(' variable-list ')' ';' + 'unset' '(' variable-list ','? ')' ';' --> <pre> <i id="grammar-unset-statement">unset-statement:</i> - unset ( <i><a href="10-expressions.md#grammar-variable-list">variable-list</a></i> ) ; + unset ( <i><a href="10-expressions.md#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> ) ; </pre> **Semantics** diff --git a/spec/19-grammar.md b/spec/19-grammar.md index e647342..c9cd828 100644 --- a/spec/19-grammar.md +++ b/spec/19-grammar.md @@ -403,7 +403,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md# die ( <i><a href="#grammar-expression">expression</a></i><sub>opt</sub> ) <i id="grammar-isset-intrinsic">isset-intrinsic:</i> - isset ( <i><a href="#grammar-variable-list">variable-list</a></i> ) + isset ( <i><a href="#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> ) <i id="grammar-variable-list">variable-list:</i> <i><a href="#grammar-variable">variable</a></i> @@ -424,6 +424,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md# <i id="grammar-object-creation-expression">object-creation-expression:</i> new <i><a href="#grammar-class-type-designator">class-type-designator</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + new <i><a href="#grammar-class-type-designator">class-type-designator</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> ,<sub>opt</sub> ) new <i><a href="#grammar-class-type-designator">class-type-designator</a></i> new class ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) <i><a href="#grammar-class-base-clause">class-base-clause</a></i><sub>opt</sub> <i><a href="#grammar-class-interface-clause">class-interface-clause</a></i><sub>opt</sub> { <i><a href="#grammar-class-member-declarations">class-member-declarations</a></i><sub>opt</sub> } new class <i><a href="#grammar-class-base-clause">class-base-clause</a></i><sub>opt</sub> <i><a href="#grammar-class-interface-clause">class-interface-clause</a></i><sub>opt</sub> { <i><a href="#grammar-class-member-declarations">class-member-declarations</a></i><sub>opt</sub> } @@ -468,7 +469,9 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md# <i id="grammar-function-call-expression">function-call-expression:</i> <i><a href="#grammar-qualified-name">qualified-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-qualified-name">qualified-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i><a href="#grammar-callable-expression">callable-expression</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-callable-expression">callable-expression</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i id="grammar-argument-expression-list">argument-expression-list:</i> <i><a href="#grammar-argument-expression">argument-expression</a></i> @@ -491,6 +494,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md# <i id="grammar-member-call-expression">member-call-expression:</i> <i><a href="#grammar-dereferencable-expression">dereferencable-expression</a></i> -&gt; <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-dereferencable-expression">dereferencable-expression</a></i> -&gt; <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i id="grammar-postfix-increment-expression">postfix-increment-expression:</i> <i><a href="#grammar-variable">variable</a></i> ++ @@ -512,6 +516,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md# <i id="grammar-scoped-call-expression">scoped-call-expression:</i> <i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i><sub>opt</sub> ) + <i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="#grammar-member-name">member-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , ) <i id="grammar-class-constant-access-expression">class-constant-access-expression:</i> <i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="#grammar-name">name</a></i> @@ -897,7 +902,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md# <i><a href="#grammar-expression-list">expression-list</a></i> , <i><a href="#grammar-expression">expression</a></i> <i id="grammar-unset-statement">unset-statement:</i> - unset ( <i><a href="#grammar-variable-list">variable-list</a></i> ) ; + unset ( <i><a href="#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> ) ; </pre> ### Functions diff --git a/tests/classes/dynamic_methods.phpt b/tests/classes/dynamic_methods.phpt index 0fb4b6a..002497e 100644 --- a/tests/classes/dynamic_methods.phpt +++ b/tests/classes/dynamic_methods.phpt @@ -50,7 +50,7 @@ $obj = new Widget; $v = $obj->iDoit(); $obj->__call('iDoit', []); -$v = $obj->iMethod(10, TRUE, "abc"); +$v = $obj->iMethod(10, TRUE, "abc",); var_dump($v); $obj->__call('iMethod', array(10, TRUE, "abc")); $obj->__call('123#$%', []); @@ -58,7 +58,7 @@ $obj->__call('123#$%', []); $v = Widget::sDoit(); Widget::__callStatic('sDoit', []); -$v = Widget::sMethod(NULL, 1.234); +$v = Widget::sMethod(NULL, 1.234,); var_dump($v); Widget::__callStatic('sMethod', array(NULL, 1.234)); Widget::__callStatic('[]{}', []); diff --git a/tests/classes/property_initializer.phpt b/tests/classes/property_initializer.phpt index 368de32..8837354 100644 --- a/tests/classes/property_initializer.phpt +++ b/tests/classes/property_initializer.phpt @@ -35,7 +35,7 @@ echo $p . "\n"; $p = new Point(); echo $p . "\n"; -$p = new Point(100); +$p = new Point(100,); echo $p . "\n"; $p = new Point(1000, 2000); diff --git a/tests/expressions/primary_expressions/intrinsics_isset.phpt b/tests/expressions/primary_expressions/intrinsics_isset.phpt index 86293ee..2dfd490 100644 --- a/tests/expressions/primary_expressions/intrinsics_isset.phpt +++ b/tests/expressions/primary_expressions/intrinsics_isset.phpt @@ -15,6 +15,10 @@ echo "--------- TRUE -------------\n"; $v = TRUE; var_dump(isset($v)); +echo "--------- TRUE -------------\n"; + +$v = TRUE; +var_dump(isset($v,)); echo "--------- NULL -------------\n"; @@ -52,6 +56,8 @@ var_dump(isset($x2->m)); --EXPECTF-- --------- TRUE ------------- bool(true) +--------- TRUE ------------- +bool(true) --------- NULL ------------- bool(false) --------- TRUE, 12.3, NULL ------------- diff --git a/tests/expressions/primary_expressions/intrinsics_unset.phpt b/tests/expressions/primary_expressions/intrinsics_unset.phpt index 3e77580..7ec56a4 100644 --- a/tests/expressions/primary_expressions/intrinsics_unset.phpt +++ b/tests/expressions/primary_expressions/intrinsics_unset.phpt @@ -18,6 +18,13 @@ var_dump(isset($v)); unset($v); var_dump(isset($v)); +echo "--------- TRUE -------------\n"; + +$v = TRUE; +var_dump(isset($v)); +unset($v,); +var_dump(isset($v)); + echo "--------- NULL -------------\n"; $v = NULL; @@ -164,6 +171,9 @@ print_r($a); --------- TRUE ------------- bool(true) bool(false) +--------- TRUE ------------- +bool(true) +bool(false) --------- NULL ------------- bool(false) bool(false) diff --git a/tests/functions/basics.phpt b/tests/functions/basics.phpt index 5cebce8..f8e1bec 100644 --- a/tests/functions/basics.phpt +++ b/tests/functions/basics.phpt @@ -39,7 +39,7 @@ $f(); // call f1 indirectly via $f // f1() = 123; // a function return is not an lvalue f1(); -f1(10); +f1(10,); f1(TRUE, "green"); f1(23.45, NULL, array(1,2,3));
« previous php.standards.cvs (#423) next »