Skip to content

Commit 197a397

Browse files
zhujinxuannikic
authored andcommitted
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
1 parent 322c5c0 commit 197a397

File tree

8 files changed

+41
-10
lines changed

8 files changed

+41
-10
lines changed

spec/10-expressions.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ exit;
479479

480480
<!-- GRAMMAR
481481
isset-intrinsic:
482-
'isset' '(' variable-list ')'
482+
'isset' '(' variable-list ','? ')'
483483
484484
variable-list:
485485
variable
@@ -488,7 +488,7 @@ variable-list:
488488

489489
<pre>
490490
<i id="grammar-isset-intrinsic">isset-intrinsic:</i>
491-
isset ( <i><a href="#grammar-variable-list">variable-list</a></i> )
491+
isset ( <i><a href="#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> )
492492

493493
<i id="grammar-variable-list">variable-list:</i>
494494
<i><a href="#grammar-variable">variable</a></i>
@@ -655,6 +655,7 @@ class C
655655
<!-- GRAMMAR
656656
object-creation-expression:
657657
'new' class-type-designator '(' argument-expression-list? ')'
658+
'new' class-type-designator '(' argument-expression-list ','? ')'
658659
'new' class-type-designator
659660
'new' 'class' '(' argument-expression-list? ')' class-base-clause? class-interface-clause? '{' class-member-declarations? '}'
660661
'new' 'class' class-base-clause? class-interface-clause? '{' class-member-declarations? '}'
@@ -676,6 +677,7 @@ new-variable:
676677
<pre>
677678
<i id="grammar-object-creation-expression">object-creation-expression:</i>
678679
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> )
680+
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> )
679681
new <i><a href="#grammar-class-type-designator">class-type-designator</a></i>
680682
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> }
681683
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)
10441046
<!-- GRAMMAR
10451047
function-call-expression:
10461048
qualified-name '(' argument-expression-list? ')'
1049+
qualified-name '(' argument-expression-list ',' ')'
10471050
callable-expression '(' argument-expression-list? ')'
1051+
callable-expression '(' argument-expression-list ',' ')'
10481052
10491053
argument-expression-list:
10501054
argument-expression
@@ -1061,7 +1065,9 @@ variadic-unpacking:
10611065
<pre>
10621066
<i id="grammar-function-call-expression">function-call-expression:</i>
10631067
<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> )
1068+
<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> , )
10641069
<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> )
1070+
<i><a href="#grammar-callable-expression">callable-expression</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , )
10651071

10661072
<i id="grammar-argument-expression-list">argument-expression-list:</i>
10671073
<i><a href="#grammar-argument-expression">argument-expression</a></i>
@@ -1263,11 +1269,13 @@ $c = $p1->color; // turned into $c = $p1->__get("color");
12631269
<!-- GRAMMAR
12641270
member-call-expression:
12651271
dereferencable-expression '->' member-name '(' argument-expression-list? ')'
1272+
dereferencable-expression '->' member-name '(' argument-expression-list ',' ')'
12661273
-->
12671274

12681275
<pre>
12691276
<i id="grammar-member-call-expression">member-call-expression:</i>
12701277
<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> )
1278+
<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> , )
12711279
</pre>
12721280

12731281
**Constraints**
@@ -1496,6 +1504,7 @@ scoped-property-access-expression:
14961504
14971505
scoped-call-expression:
14981506
scope-resolution-qualifier '::' member-name '(' argument-expression-list? ')'
1507+
scope-resolution-qualifier '::' member-name '(' argument-expression-list ',' ')'
14991508
15001509
class-constant-access-expression:
15011510
scope-resolution-qualifier '::' name
@@ -1517,6 +1526,7 @@ relative-scope:
15171526

15181527
<i id="grammar-scoped-call-expression">scoped-call-expression:</i>
15191528
<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> )
1529+
<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> , )
15201530

15211531
<i id="grammar-class-constant-access-expression">class-constant-access-expression:</i>
15221532
<i><a href="#grammar-scope-resolution-qualifier">scope-resolution-qualifier</a></i> :: <i><a href="09-lexical-structure.md#grammar-name">name</a></i>

spec/11-statements.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,12 +1361,12 @@ echo "$v3\n";
13611361

13621362
<!-- GRAMMAR
13631363
unset-statement:
1364-
'unset' '(' variable-list ')' ';'
1364+
'unset' '(' variable-list ','? ')' ';'
13651365
-->
13661366

13671367
<pre>
13681368
<i id="grammar-unset-statement">unset-statement:</i>
1369-
unset ( <i><a href="10-expressions.md#grammar-variable-list">variable-list</a></i> ) ;
1369+
unset ( <i><a href="10-expressions.md#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> ) ;
13701370
</pre>
13711371

13721372
**Semantics**

spec/19-grammar.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md#
403403
die ( <i><a href="#grammar-expression">expression</a></i><sub>opt</sub> )
404404

405405
<i id="grammar-isset-intrinsic">isset-intrinsic:</i>
406-
isset ( <i><a href="#grammar-variable-list">variable-list</a></i> )
406+
isset ( <i><a href="#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> )
407407

408408
<i id="grammar-variable-list">variable-list:</i>
409409
<i><a href="#grammar-variable">variable</a></i>
@@ -424,6 +424,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md#
424424

425425
<i id="grammar-object-creation-expression">object-creation-expression:</i>
426426
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> )
427+
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> )
427428
new <i><a href="#grammar-class-type-designator">class-type-designator</a></i>
428429
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> }
429430
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#
468469

469470
<i id="grammar-function-call-expression">function-call-expression:</i>
470471
<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> )
472+
<i><a href="#grammar-qualified-name">qualified-name</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , )
471473
<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> )
474+
<i><a href="#grammar-callable-expression">callable-expression</a></i> ( <i><a href="#grammar-argument-expression-list">argument-expression-list</a></i> , )
472475

473476
<i id="grammar-argument-expression-list">argument-expression-list:</i>
474477
<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#
491494

492495
<i id="grammar-member-call-expression">member-call-expression:</i>
493496
<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> )
497+
<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> , )
494498

495499
<i id="grammar-postfix-increment-expression">postfix-increment-expression:</i>
496500
<i><a href="#grammar-variable">variable</a></i> ++
@@ -512,6 +516,7 @@ The grammar notation is described in [Grammars section](09-lexical-structure.md#
512516

513517
<i id="grammar-scoped-call-expression">scoped-call-expression:</i>
514518
<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> )
519+
<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> , )
515520

516521
<i id="grammar-class-constant-access-expression">class-constant-access-expression:</i>
517522
<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#
897902
<i><a href="#grammar-expression-list">expression-list</a></i> , <i><a href="#grammar-expression">expression</a></i>
898903

899904
<i id="grammar-unset-statement">unset-statement:</i>
900-
unset ( <i><a href="#grammar-variable-list">variable-list</a></i> ) ;
905+
unset ( <i><a href="#grammar-variable-list">variable-list</a></i> ,<sub>opt</sub> ) ;
901906
</pre>
902907

903908
### Functions

tests/classes/dynamic_methods.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ $obj = new Widget;
5050
$v = $obj->iDoit();
5151
$obj->__call('iDoit', []);
5252

53-
$v = $obj->iMethod(10, TRUE, "abc");
53+
$v = $obj->iMethod(10, TRUE, "abc",);
5454
var_dump($v);
5555
$obj->__call('iMethod', array(10, TRUE, "abc"));
5656
$obj->__call('123#$%', []);
5757

5858
$v = Widget::sDoit();
5959
Widget::__callStatic('sDoit', []);
6060

61-
$v = Widget::sMethod(NULL, 1.234);
61+
$v = Widget::sMethod(NULL, 1.234,);
6262
var_dump($v);
6363
Widget::__callStatic('sMethod', array(NULL, 1.234));
6464
Widget::__callStatic('[]{}', []);

tests/classes/property_initializer.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ echo $p . "\n";
3535
$p = new Point();
3636
echo $p . "\n";
3737

38-
$p = new Point(100);
38+
$p = new Point(100,);
3939
echo $p . "\n";
4040

4141
$p = new Point(1000, 2000);

tests/expressions/primary_expressions/intrinsics_isset.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ echo "--------- TRUE -------------\n";
1515

1616
$v = TRUE;
1717
var_dump(isset($v));
18+
echo "--------- TRUE -------------\n";
19+
20+
$v = TRUE;
21+
var_dump(isset($v,));
1822

1923
echo "--------- NULL -------------\n";
2024

@@ -52,6 +56,8 @@ var_dump(isset($x2->m));
5256
--EXPECTF--
5357
--------- TRUE -------------
5458
bool(true)
59+
--------- TRUE -------------
60+
bool(true)
5561
--------- NULL -------------
5662
bool(false)
5763
--------- TRUE, 12.3, NULL -------------

tests/expressions/primary_expressions/intrinsics_unset.phpt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ var_dump(isset($v));
1818
unset($v);
1919
var_dump(isset($v));
2020

21+
echo "--------- TRUE -------------\n";
22+
23+
$v = TRUE;
24+
var_dump(isset($v));
25+
unset($v,);
26+
var_dump(isset($v));
27+
2128
echo "--------- NULL -------------\n";
2229

2330
$v = NULL;
@@ -164,6 +171,9 @@ print_r($a);
164171
--------- TRUE -------------
165172
bool(true)
166173
bool(false)
174+
--------- TRUE -------------
175+
bool(true)
176+
bool(false)
167177
--------- NULL -------------
168178
bool(false)
169179
bool(false)

tests/functions/basics.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ $f(); // call f1 indirectly via $f
3939
// f1() = 123; // a function return is not an lvalue
4040

4141
f1();
42-
f1(10);
42+
f1(10,);
4343
f1(TRUE, "green");
4444
f1(23.45, NULL, array(1,2,3));
4545

0 commit comments

Comments
 (0)