Skip to content

Commit 8b87ef4

Browse files
committed
Ensure scope is generic before rewriting
1 parent 9d16eee commit 8b87ef4

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/main/php/lang/ast/syntax/php/Generics.class.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,9 @@ public function setup($language, $emitter) {
237237

238238
// Rewrite `new T(...)` -> `$T->newInstance(...)` if T is a component
239239
if (
240+
($name= $codegen->scope[0]->type->name ?? null) instanceof IsGenericDeclaration &&
240241
$node->type instanceof IsValue &&
241-
$generic= self::generic($node->type, $codegen->scope[0]->type->name->components())
242+
$generic= self::generic($node->type, $name->components())
242243
) {
243244
return new InvokeExpression(
244245
new InstanceExpression(new Variable($generic), new Literal('newInstance')),
@@ -253,8 +254,9 @@ public function setup($language, $emitter) {
253254

254255
// Rewrite `... instanceof T` -> `$T->isInstance(...)` if T is a component
255256
if (
257+
($name= $codegen->scope[0]->type->name ?? null) instanceof IsGenericDeclaration &&
256258
is_string($node->type) &&
257-
$generic= self::generic(new IsValue($node->type), $codegen->scope[0]->type->name->components())
259+
$generic= self::generic(new IsValue($node->type), $name->components())
258260
) {
259261
return new InvokeExpression(
260262
new InstanceExpression(new Variable($generic), new Literal('isInstance')),
@@ -269,9 +271,10 @@ public function setup($language, $emitter) {
269271

270272
// Rewrite `T::class` to `$T->literal()` if T is a component
271273
if (
274+
($name= $codegen->scope[0]->type->name ?? null) instanceof IsGenericDeclaration &&
272275
$node->member instanceof Literal &&
273276
'class' === $node->member->expression &&
274-
$generic= self::generic(new IsValue($node->type), $codegen->scope[0]->type->name->components())
277+
$generic= self::generic(new IsValue($node->type), $name->components())
275278
) {
276279
return new InvokeExpression(
277280
new InstanceExpression(new Variable($generic), new Literal('literal')),

0 commit comments

Comments
 (0)