@@ -1402,6 +1402,10 @@ public function getDeclarationName($stackPtr)
1402
1402
* 'readonly_token' => integer, // The stack pointer to the readonly modifier token.
1403
1403
* // This index will only be set if the property is readonly.
1404
1404
*
1405
+ * ... and if the promoted property uses asymmetric visibility, these additional array indexes will also be available:
1406
+ * 'set_visibility' => string, // The property set-visibility as declared.
1407
+ * 'set_visibility_token' => integer, // The stack pointer to the set-visibility modifier token.
1408
+ *
1405
1409
* @param int $stackPtr The position in the stack of the function token
1406
1410
* to acquire the parameters for.
1407
1411
*
@@ -1453,10 +1457,11 @@ public function getMethodParameters($stackPtr)
1453
1457
$ variadicToken = false ;
1454
1458
$ typeHint = '' ;
1455
1459
$ typeHintToken = false ;
1456
- $ typeHintEndToken = false ;
1457
- $ nullableType = false ;
1458
- $ visibilityToken = null ;
1459
- $ readonlyToken = null ;
1460
+ $ typeHintEndToken = false ;
1461
+ $ nullableType = false ;
1462
+ $ visibilityToken = null ;
1463
+ $ setVisibilityToken = null ;
1464
+ $ readonlyToken = null ;
1460
1465
1461
1466
for ($ i = $ paramStart ; $ i <= $ closer ; $ i ++) {
1462
1467
// Check to see if this token has a parenthesis or bracket opener. If it does
@@ -1591,6 +1596,13 @@ public function getMethodParameters($stackPtr)
1591
1596
$ visibilityToken = $ i ;
1592
1597
}
1593
1598
break ;
1599
+ case T_PUBLIC_SET :
1600
+ case T_PROTECTED_SET :
1601
+ case T_PRIVATE_SET :
1602
+ if ($ defaultStart === null ) {
1603
+ $ setVisibilityToken = $ i ;
1604
+ }
1605
+ break ;
1594
1606
case T_READONLY :
1595
1607
if ($ defaultStart === null ) {
1596
1608
$ readonlyToken = $ i ;
@@ -1625,16 +1637,21 @@ public function getMethodParameters($stackPtr)
1625
1637
$ vars [$ paramCount ]['type_hint_end_token ' ] = $ typeHintEndToken ;
1626
1638
$ vars [$ paramCount ]['nullable_type ' ] = $ nullableType ;
1627
1639
1628
- if ($ visibilityToken !== null || $ readonlyToken !== null ) {
1640
+ if ($ visibilityToken !== null || $ setVisibilityToken !== null || $ readonlyToken !== null ) {
1629
1641
$ vars [$ paramCount ]['property_visibility ' ] = 'public ' ;
1630
1642
$ vars [$ paramCount ]['visibility_token ' ] = false ;
1631
- $ vars [$ paramCount ]['property_readonly ' ] = false ;
1632
1643
1633
1644
if ($ visibilityToken !== null ) {
1634
1645
$ vars [$ paramCount ]['property_visibility ' ] = $ this ->tokens [$ visibilityToken ]['content ' ];
1635
1646
$ vars [$ paramCount ]['visibility_token ' ] = $ visibilityToken ;
1636
1647
}
1637
1648
1649
+ if ($ setVisibilityToken !== null ) {
1650
+ $ vars [$ paramCount ]['set_visibility ' ] = $ this ->tokens [$ setVisibilityToken ]['content ' ];
1651
+ $ vars [$ paramCount ]['set_visibility_token ' ] = $ setVisibilityToken ;
1652
+ }
1653
+
1654
+ $ vars [$ paramCount ]['property_readonly ' ] = false ;
1638
1655
if ($ readonlyToken !== null ) {
1639
1656
$ vars [$ paramCount ]['property_readonly ' ] = true ;
1640
1657
$ vars [$ paramCount ]['readonly_token ' ] = $ readonlyToken ;
@@ -1648,21 +1665,22 @@ public function getMethodParameters($stackPtr)
1648
1665
}
1649
1666
1650
1667
// Reset the vars, as we are about to process the next parameter.
1651
- $ currVar = null ;
1652
- $ paramStart = ($ i + 1 );
1653
- $ defaultStart = null ;
1654
- $ equalToken = null ;
1655
- $ hasAttributes = false ;
1656
- $ passByReference = false ;
1657
- $ referenceToken = false ;
1658
- $ variableLength = false ;
1659
- $ variadicToken = false ;
1660
- $ typeHint = '' ;
1661
- $ typeHintToken = false ;
1662
- $ typeHintEndToken = false ;
1663
- $ nullableType = false ;
1664
- $ visibilityToken = null ;
1665
- $ readonlyToken = null ;
1668
+ $ currVar = null ;
1669
+ $ paramStart = ($ i + 1 );
1670
+ $ defaultStart = null ;
1671
+ $ equalToken = null ;
1672
+ $ hasAttributes = false ;
1673
+ $ passByReference = false ;
1674
+ $ referenceToken = false ;
1675
+ $ variableLength = false ;
1676
+ $ variadicToken = false ;
1677
+ $ typeHint = '' ;
1678
+ $ typeHintToken = false ;
1679
+ $ typeHintEndToken = false ;
1680
+ $ nullableType = false ;
1681
+ $ visibilityToken = null ;
1682
+ $ setVisibilityToken = null ;
1683
+ $ readonlyToken = null ;
1666
1684
1667
1685
$ paramCount ++;
1668
1686
break ;
@@ -1870,6 +1888,9 @@ public function getMethodProperties($stackPtr)
1870
1888
* array(
1871
1889
* 'scope' => string, // Public, private, or protected.
1872
1890
* 'scope_specified' => boolean, // TRUE if the scope was explicitly specified.
1891
+ * 'set_scope' => string|false, // Scope for asymmetric visibility.
1892
+ * // Either public, private, or protected or
1893
+ * // FALSE if no set scope is specified.
1873
1894
* 'is_static' => boolean, // TRUE if the static keyword was found.
1874
1895
* 'is_readonly' => boolean, // TRUE if the readonly keyword was found.
1875
1896
* 'is_final' => boolean, // TRUE if the final keyword was found.
@@ -1920,19 +1941,18 @@ public function getMemberProperties($stackPtr)
1920
1941
}
1921
1942
1922
1943
$ valid = [
1923
- T_PUBLIC => T_PUBLIC ,
1924
- T_PRIVATE => T_PRIVATE ,
1925
- T_PROTECTED => T_PROTECTED ,
1926
- T_STATIC => T_STATIC ,
1927
- T_VAR => T_VAR ,
1928
- T_READONLY => T_READONLY ,
1929
- T_FINAL => T_FINAL ,
1944
+ T_STATIC => T_STATIC ,
1945
+ T_VAR => T_VAR ,
1946
+ T_READONLY => T_READONLY ,
1947
+ T_FINAL => T_FINAL ,
1930
1948
];
1931
1949
1950
+ $ valid += Tokens::SCOPE_MODIFIERS ;
1932
1951
$ valid += Tokens::EMPTY_TOKENS ;
1933
1952
1934
1953
$ scope = 'public ' ;
1935
1954
$ scopeSpecified = false ;
1955
+ $ setScope = false ;
1936
1956
$ isStatic = false ;
1937
1957
$ isReadonly = false ;
1938
1958
$ isFinal = false ;
@@ -1965,6 +1985,15 @@ public function getMemberProperties($stackPtr)
1965
1985
$ scope = 'protected ' ;
1966
1986
$ scopeSpecified = true ;
1967
1987
break ;
1988
+ case T_PUBLIC_SET :
1989
+ $ setScope = 'public ' ;
1990
+ break ;
1991
+ case T_PROTECTED_SET :
1992
+ $ setScope = 'protected ' ;
1993
+ break ;
1994
+ case T_PRIVATE_SET :
1995
+ $ setScope = 'private ' ;
1996
+ break ;
1968
1997
case T_STATIC :
1969
1998
$ isStatic = true ;
1970
1999
break ;
@@ -2026,6 +2055,7 @@ public function getMemberProperties($stackPtr)
2026
2055
return [
2027
2056
'scope ' => $ scope ,
2028
2057
'scope_specified ' => $ scopeSpecified ,
2058
+ 'set_scope ' => $ setScope ,
2029
2059
'is_static ' => $ isStatic ,
2030
2060
'is_readonly ' => $ isReadonly ,
2031
2061
'is_final ' => $ isFinal ,
0 commit comments