Skip to content

Commit f5f7dff

Browse files
desIstUrGuaddesIstUrGuad
authored andcommitted
wip
1 parent 8d5e0f8 commit f5f7dff

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

Zend/zend_language_scanner.l

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,12 +1538,12 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
15381538
RETURN_TOKEN_WITH_IDENT(T_PRINT);
15391539
}
15401540

1541-
<ST_IN_FUNC_DEF,ST_IN_GENERIC> "<" {
1541+
<ST_IN_FUNC_DEF,ST_IN_GENERIC,ST_IN_CLASS_DEF> "<" {
15421542
yy_push_state(ST_IN_GENERIC);
15431543
RETURN_TOKEN(T_GENERIC_START);
15441544
}
15451545

1546-
<ST_IN_FUNC_DEF,ST_IN_GENERIC> ">" {
1546+
<ST_IN_FUNC_DEF,ST_IN_GENERIC,ST_IN_CLASS_DEF> ">" {
15471547
yy_pop_state();
15481548
RETURN_TOKEN(T_GENERIC_END);
15491549
}
@@ -1554,9 +1554,19 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
15541554

15551555

15561556
<ST_IN_SCRIPTING>"class" {
1557+
yy_push_state(ST_IN_CLASS_DEF);
15571558
RETURN_TOKEN_WITH_IDENT(T_CLASS);
15581559
}
15591560

1561+
1562+
1563+
<ST_IN_CLASS_DEF>"{" {
1564+
yy_pop_state();
1565+
yy_push_state(ST_IN_SCRIPTING);
1566+
enter_nesting('{');
1567+
RETURN_TOKEN('{');
1568+
}
1569+
15601570
<ST_IN_SCRIPTING>"interface" {
15611571
RETURN_TOKEN_WITH_IDENT(T_INTERFACE);
15621572
}
@@ -1578,11 +1588,11 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
15781588
RETURN_TOKEN_WITH_IDENT(T_ENUM);
15791589
}
15801590

1581-
<ST_IN_SCRIPTING>"extends" {
1591+
<ST_IN_CLASS_DEF>"extends" {
15821592
RETURN_TOKEN_WITH_IDENT(T_EXTENDS);
15831593
}
15841594

1585-
<ST_IN_SCRIPTING>"implements" {
1595+
<ST_IN_CLASS_DEF>"implements" {
15861596
RETURN_TOKEN_WITH_IDENT(T_IMPLEMENTS);
15871597
}
15881598

@@ -1596,7 +1606,7 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
15961606
RETURN_TOKEN(T_NULLSAFE_OBJECT_OPERATOR);
15971607
}
15981608

1599-
<ST_IN_SCRIPTING,ST_LOOKING_FOR_PROPERTY, ST_IN_FUNC_DEF>{WHITESPACE}+ {
1609+
<ST_IN_SCRIPTING,ST_LOOKING_FOR_PROPERTY,ST_IN_FUNC_DEF,ST_IN_GENERIC,ST_IN_CLASS_DEF>{WHITESPACE}+ {
16001610
goto return_whitespace;
16011611
}
16021612

@@ -1738,9 +1748,14 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
17381748
}
17391749

17401750
<ST_IN_SCRIPTING>"private" {
1751+
yy_push_state(ST_IN_PROPERTY_TYPE_DEF);
17411752
RETURN_TOKEN_WITH_IDENT(T_PRIVATE);
17421753
}
17431754

1755+
<ST_IN_PROPERTY_TYPE_DEF> {
1756+
1757+
}
1758+
17441759
<ST_IN_SCRIPTING>"protected" {
17451760
RETURN_TOKEN_WITH_IDENT(T_PROTECTED);
17461761
}
@@ -1925,8 +1940,13 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
19251940
}
19261941

19271942
<ST_IN_FUNC_DEF>"(" {
1928-
enter_nesting('(');
19291943
yy_pop_state();
1944+
enter_nesting(yytext[0]);
1945+
RETURN_TOKEN(yytext[0]);
1946+
}
1947+
1948+
<ST_IN_GENERIC>":"|"," {
1949+
RETURN_TOKEN(yytext[0]);
19301950
}
19311951

19321952
<ST_IN_SCRIPTING>{TOKENS} {
@@ -2415,7 +2435,7 @@ inline_char_handler:
24152435
RETURN_TOKEN(T_NS_SEPARATOR);
24162436
}
24172437
2418-
<ST_IN_SCRIPTING,ST_VAR_OFFSET,ST_IN_FUNC_DEF>{LABEL} {
2438+
<ST_IN_SCRIPTING,ST_VAR_OFFSET,ST_IN_FUNC_DEF,ST_IN_CLASS_DEF>{LABEL} {
24192439
RETURN_TOKEN_WITH_STR(T_STRING, 0);
24202440
}
24212441
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
<?php
22

3-
function
4-
5-
class GenericTestClass<T> {
3+
class GenericTestClass<T: Serializable> {
64
// T can be used as type alias inside of 'GenericTestClass'
75
public function __construct(
86
private T $property

t.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
class RandomAssSerializableContaier!🥖T, K : Serializer!🥖T, K, A!🥥!🥥 {
3+
class RandomAssSerializableContaier<T, K : Serialize<T, K, A>> {
44

55
private array $content = [];
66

tree.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<?php
2-
$tokens = token_get_all('<?php
3-
function noOp(): void {}');
2+
$classTokens = token_get_all(
3+
'<?php
4+
class Test<T: Serializable, K> {
5+
public Serializable<T> $test;
6+
function __construct<T>() {}
7+
}
8+
');
49

5-
var_export($tokens);
10+
var_export($classTokens);

0 commit comments

Comments
 (0)