Skip to content

Commit 0716cd8

Browse files
committed
constants without slash are deprecated (BC break)
1 parent 43d3ea3 commit 0716cd8

File tree

12 files changed

+65
-84
lines changed

12 files changed

+65
-84
lines changed

src/Latte/Compiler/Nodes/Php/NameNode.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public function __construct(
3535
$this->kind = self::KindFullyQualified;
3636
$this->name = substr($name, 1);
3737
} else {
38+
if ($kind === -1 && !str_starts_with($name, '__')) {
39+
trigger_error("Using unqualified constant '$name' is deprecated. Use '\\$name' with a leading backslash $position", E_USER_DEPRECATED);
40+
}
3841
$this->kind = self::KindNormal;
3942
}
4043
}

src/Latte/Compiler/TagParserData.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,8 @@ protected function reduce(int $rule, int $pos): void
542542
180, 182 => fn() => $this->semValue = $this->checkFunctionName(new Expression\FunctionCallableNode($this->semStack[$pos - 3], $this->startTokenStack[$pos - 3]->position)),
543543
183 => fn() => $this->semValue = new Expression\StaticMethodCallNode($this->semStack[$pos - 3], $this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 3]->position),
544544
184 => fn() => $this->semValue = new Expression\StaticMethodCallableNode($this->semStack[$pos - 5], $this->semStack[$pos - 3], $this->startTokenStack[$pos - 5]->position),
545-
186, 188, 189 => fn() => $this->semValue = new Node\NameNode($this->semStack[$pos], Node\NameNode::KindNormal, $this->startTokenStack[$pos]->position),
545+
186, 189 => fn() => $this->semValue = new Node\NameNode($this->semStack[$pos], Node\NameNode::KindNormal, $this->startTokenStack[$pos]->position),
546+
188 => fn() => $this->semValue = new Node\NameNode($this->semStack[$pos], -1, $this->startTokenStack[$pos]->position),
546547
190 => fn() => $this->semValue = new Node\NameNode($this->semStack[$pos], Node\NameNode::KindFullyQualified, $this->startTokenStack[$pos]->position),
547548
198 => fn() => $this->semValue = new Expression\ConstantFetchNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
548549
199 => fn() => $this->semValue = new Expression\ClassConstantFetchNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),

tests/common/NodeHelpers.toValue().phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Assert::exception(
4949
// constant
5050
const FOO = 123;
5151

52-
$node = parse('FOO');
52+
$node = parse('\FOO');
5353
Assert::exception(
5454
fn() => NodeHelpers::toValue($node),
5555
InvalidArgumentException::class,
@@ -60,7 +60,7 @@ Assert::equal(
6060
NodeHelpers::toValue($node, constants: true),
6161
);
6262

63-
$node = parse('BAR');
63+
$node = parse('\BAR');
6464
Assert::exception(
6565
fn() => NodeHelpers::toValue($node, constants: true),
6666
InvalidArgumentException::class,

tests/phpParser/constantDeref.phpt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ use Tester\Assert;
99
require __DIR__ . '/../bootstrap.php';
1010

1111
$test = <<<'XX'
12-
A->length,
13-
A->length(),
14-
A[0],
15-
A[0][1][2],
12+
\A->length,
13+
\A->length(),
14+
\A[0],
15+
\A[0][1][2],
1616
x\foo[0],
1717
1818
A::B[0],
@@ -45,12 +45,12 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
4545
| | | object: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
4646
| | | | name: Latte\Compiler\Nodes\Php\NameNode
4747
| | | | | name: 'A'
48-
| | | | | kind: 1
48+
| | | | | kind: 2
4949
| | | | | position: 1:1
5050
| | | | position: 1:1
5151
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
5252
| | | | name: 'length'
53-
| | | | position: 1:4
53+
| | | | position: 1:5
5454
| | | nullsafe: false
5555
| | | position: 1:1
5656
| | key: null
@@ -62,12 +62,12 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
6262
| | | object: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
6363
| | | | name: Latte\Compiler\Nodes\Php\NameNode
6464
| | | | | name: 'A'
65-
| | | | | kind: 1
65+
| | | | | kind: 2
6666
| | | | | position: 2:1
6767
| | | | position: 2:1
6868
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
6969
| | | | name: 'length'
70-
| | | | position: 2:4
70+
| | | | position: 2:5
7171
| | | args: array (0)
7272
| | | nullsafe: false
7373
| | | position: 2:1
@@ -80,13 +80,13 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
8080
| | | expr: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
8181
| | | | name: Latte\Compiler\Nodes\Php\NameNode
8282
| | | | | name: 'A'
83-
| | | | | kind: 1
83+
| | | | | kind: 2
8484
| | | | | position: 3:1
8585
| | | | position: 3:1
8686
| | | index: Latte\Compiler\Nodes\Php\Scalar\IntegerNode
8787
| | | | value: 0
8888
| | | | kind: 10
89-
| | | | position: 3:3
89+
| | | | position: 3:4
9090
| | | position: 3:1
9191
| | key: null
9292
| | byRef: false
@@ -99,23 +99,23 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
9999
| | | | | expr: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
100100
| | | | | | name: Latte\Compiler\Nodes\Php\NameNode
101101
| | | | | | | name: 'A'
102-
| | | | | | | kind: 1
102+
| | | | | | | kind: 2
103103
| | | | | | | position: 4:1
104104
| | | | | | position: 4:1
105105
| | | | | index: Latte\Compiler\Nodes\Php\Scalar\IntegerNode
106106
| | | | | | value: 0
107107
| | | | | | kind: 10
108-
| | | | | | position: 4:3
108+
| | | | | | position: 4:4
109109
| | | | | position: 4:1
110110
| | | | index: Latte\Compiler\Nodes\Php\Scalar\IntegerNode
111111
| | | | | value: 1
112112
| | | | | kind: 10
113-
| | | | | position: 4:6
113+
| | | | | position: 4:7
114114
| | | | position: 4:1
115115
| | | index: Latte\Compiler\Nodes\Php\Scalar\IntegerNode
116116
| | | | value: 2
117117
| | | | kind: 10
118-
| | | | position: 4:9
118+
| | | | position: 4:10
119119
| | | position: 4:1
120120
| | key: null
121121
| | byRef: false

tests/phpParser/constantFetch.phpt

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use Tester\Assert;
99
require __DIR__ . '/../bootstrap.php';
1010

1111
$test = <<<'XX'
12-
A,
1312
\A,
1413
A::B,
1514
A::class,
@@ -28,21 +27,27 @@ Assert::same(
2827

2928
__halt_compiler();
3029
Latte\Compiler\Nodes\Php\Expression\ArrayNode
31-
items: array (8)
30+
items: array (7)
3231
| 0 => Latte\Compiler\Nodes\Php\ArrayItemNode
33-
| | value: Latte\Compiler\Nodes\Php\Scalar\StringNode
34-
| | | value: 'A'
32+
| | value: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
33+
| | | name: Latte\Compiler\Nodes\Php\NameNode
34+
| | | | name: 'A'
35+
| | | | kind: 2
36+
| | | | position: 1:1
3537
| | | position: 1:1
3638
| | key: null
3739
| | byRef: false
3840
| | unpack: false
3941
| | position: 1:1
4042
| 1 => Latte\Compiler\Nodes\Php\ArrayItemNode
41-
| | value: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
42-
| | | name: Latte\Compiler\Nodes\Php\NameNode
43+
| | value: Latte\Compiler\Nodes\Php\Expression\ClassConstantFetchNode
44+
| | | class: Latte\Compiler\Nodes\Php\NameNode
4345
| | | | name: 'A'
44-
| | | | kind: 2
46+
| | | | kind: 1
4547
| | | | position: 2:1
48+
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
49+
| | | | name: 'B'
50+
| | | | position: 2:4
4651
| | | position: 2:1
4752
| | key: null
4853
| | byRef: false
@@ -55,7 +60,7 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
5560
| | | | kind: 1
5661
| | | | position: 3:1
5762
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
58-
| | | | name: 'B'
63+
| | | | name: 'class'
5964
| | | | position: 3:4
6065
| | | position: 3:1
6166
| | key: null
@@ -64,13 +69,12 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
6469
| | position: 3:1
6570
| 3 => Latte\Compiler\Nodes\Php\ArrayItemNode
6671
| | value: Latte\Compiler\Nodes\Php\Expression\ClassConstantFetchNode
67-
| | | class: Latte\Compiler\Nodes\Php\NameNode
68-
| | | | name: 'A'
69-
| | | | kind: 1
72+
| | | class: Latte\Compiler\Nodes\Php\Expression\VariableNode
73+
| | | | name: 'a'
7074
| | | | position: 4:1
7175
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
72-
| | | | name: 'class'
73-
| | | | position: 4:4
76+
| | | | name: 'B'
77+
| | | | position: 4:5
7478
| | | position: 4:1
7579
| | key: null
7680
| | byRef: false
@@ -82,7 +86,7 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
8286
| | | | name: 'a'
8387
| | | | position: 5:1
8488
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
85-
| | | | name: 'B'
89+
| | | | name: 'class'
8690
| | | | position: 5:5
8791
| | | position: 5:1
8892
| | key: null
@@ -91,50 +95,37 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
9195
| | position: 5:1
9296
| 5 => Latte\Compiler\Nodes\Php\ArrayItemNode
9397
| | value: Latte\Compiler\Nodes\Php\Expression\ClassConstantFetchNode
94-
| | | class: Latte\Compiler\Nodes\Php\Expression\VariableNode
95-
| | | | name: 'a'
96-
| | | | position: 6:1
97-
| | | name: Latte\Compiler\Nodes\Php\IdentifierNode
98-
| | | | name: 'class'
99-
| | | | position: 6:5
100-
| | | position: 6:1
101-
| | key: null
102-
| | byRef: false
103-
| | unpack: false
104-
| | position: 6:1
105-
| 6 => Latte\Compiler\Nodes\Php\ArrayItemNode
106-
| | value: Latte\Compiler\Nodes\Php\Expression\ClassConstantFetchNode
10798
| | | class: Latte\Compiler\Nodes\Php\NameNode
10899
| | | | name: 'Foo'
109100
| | | | kind: 1
110-
| | | | position: 7:1
101+
| | | | position: 6:1
111102
| | | name: Latte\Compiler\Nodes\Php\Expression\FunctionCallNode
112103
| | | | name: Latte\Compiler\Nodes\Php\NameNode
113104
| | | | | name: 'bar'
114105
| | | | | kind: 1
115-
| | | | | position: 7:7
106+
| | | | | position: 6:7
116107
| | | | args: array (0)
117-
| | | | position: 7:7
118-
| | | position: 7:1
108+
| | | | position: 6:7
109+
| | | position: 6:1
119110
| | key: null
120111
| | byRef: false
121112
| | unpack: false
122-
| | position: 7:1
123-
| 7 => Latte\Compiler\Nodes\Php\ArrayItemNode
113+
| | position: 6:1
114+
| 6 => Latte\Compiler\Nodes\Php\ArrayItemNode
124115
| | value: Latte\Compiler\Nodes\Php\Expression\ClassConstantFetchNode
125116
| | | class: Latte\Compiler\Nodes\Php\Expression\VariableNode
126117
| | | | name: 'foo'
127-
| | | | position: 8:1
118+
| | | | position: 7:1
128119
| | | name: Latte\Compiler\Nodes\Php\Expression\FunctionCallNode
129120
| | | | name: Latte\Compiler\Nodes\Php\NameNode
130121
| | | | | name: 'bar'
131122
| | | | | kind: 1
132-
| | | | | position: 8:8
123+
| | | | | position: 7:8
133124
| | | | args: array (0)
134-
| | | | position: 8:8
135-
| | | position: 8:1
125+
| | | | position: 7:8
126+
| | | position: 7:1
136127
| | key: null
137128
| | byRef: false
138129
| | unpack: false
139-
| | position: 8:1
130+
| | position: 7:1
140131
position: 1:1

tests/phpParser/numberSeparators.phpt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ $test = <<<'XX'
1414
0xCAFE_F00D,
1515
0b0101_1111,
1616
0137_041,
17-
18-
/* already a valid constant name */
19-
_100,
2017
XX;
2118

2219
$node = parseCode($test);
@@ -28,7 +25,7 @@ Assert::same(
2825

2926
__halt_compiler();
3027
Latte\Compiler\Nodes\Php\Expression\ArrayNode
31-
items: array (6)
28+
items: array (5)
3229
| 0 => Latte\Compiler\Nodes\Php\ArrayItemNode
3330
| | value: Latte\Compiler\Nodes\Php\Scalar\FloatNode
3431
| | | value: 6.674083e-11
@@ -73,15 +70,4 @@ Latte\Compiler\Nodes\Php\Expression\ArrayNode
7370
| | byRef: false
7471
| | unpack: false
7572
| | position: 5:1
76-
| 5 => Latte\Compiler\Nodes\Php\ArrayItemNode
77-
| | value: Latte\Compiler\Nodes\Php\Expression\ConstantFetchNode
78-
| | | name: Latte\Compiler\Nodes\Php\NameNode
79-
| | | | name: '_100'
80-
| | | | kind: 1
81-
| | | | position: 8:1
82-
| | | position: 8:1
83-
| | key: null
84-
| | byRef: false
85-
| | unpack: false
86-
| | position: 8:1
8773
position: 1:1

tests/phpParser/unquotedStrings.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ $test = <<<'XX'
1717
a--b--c,
1818
XX;
1919

20-
$node = parseCode($test);
20+
$node = @parseCode($test); // deprecated constants
2121

2222
Assert::same(
2323
loadContent(__FILE__, __COMPILER_HALT_OFFSET__),

tests/phpPrint/constantDeref.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ use Tester\Assert;
99
require __DIR__ . '/../bootstrap.php';
1010

1111
$test = <<<'XX'
12-
A->length,
13-
A->length(),
14-
A[0],
15-
A[0][1][2],
12+
\A->length,
13+
\A->length(),
14+
\A[0],
15+
\A[0][1][2],
1616
x\foo[0],
1717
1818
A::B[0],
@@ -39,10 +39,10 @@ Assert::same(
3939
);
4040

4141
__halt_compiler();
42-
A->length,
43-
A->length(),
44-
A[0],
45-
A[0][1][2],
42+
\A->length,
43+
\A->length(),
44+
\A[0],
45+
\A[0][1][2],
4646
x\foo[0],
4747
A::B[0],
4848
A::B[0][1][2],

tests/phpPrint/reserved.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use Tester\Assert;
99
require __DIR__ . '/../bootstrap.php';
1010

1111
$test = <<<'XX'
12-
__FUNCTION__,
12+
__FUNCTION__[0],
1313
class,
1414
class::$x,
1515
class::interface,
@@ -27,7 +27,7 @@ Assert::same(
2727
);
2828

2929
__halt_compiler();
30-
namespace\__FUNCTION__,
30+
namespace\__FUNCTION__[0],
3131
'class',
3232
namespace\class::$x,
3333
namespace\class::interface,

tests/phpPrint/unquotedStrings.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ $test = <<<'XX'
2828
foo(aa, bb, cc)
2929
XX;
3030

31-
$node = parseCode($test);
31+
$node = @parseCode($test); // deprecated constants
3232
$code = printNode($node);
3333

3434
Assert::same(

0 commit comments

Comments
 (0)