Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Shadow twenty PHPStan\Parser\*Visitor classes natively
The node traverser calls every registered visitor once per node, which made
visitor enterNode()/leaveNode() bodies 18.1M of the run's 19.26M native->PHP
crossings under PhpParser\NodeTraverser — 46.5% of all crossings, spread
over twenty classes that mostly type-check the node and return null.

Each ported visitor is declared under its real name at activation like any
other shadowed class, so a direct $visitor->enterNode($node) still works, and
additionally registers a pt_native_visitor entry: NodeTraverser's per-traverse
visitor plan resolves it by class entry and calls the C++ function pointer
instead of crossing into the engine. The entry is only an optimisation — a
NULL hook falls back to the engine call, and the PHP twin stays the reference
implementation.

Only visitors whose enterNode()/leaveNode() always return null and whose
beforeTraverse() only resets state qualify, so the traverser's return-value
protocol does not have to be duplicated in the fast path. GotoLabelVisitor,
AnonymousClassVisitor, PipeTransformerVisitor, StandaloneThrowExprVisitor and
UseAliasVisitor stay in PHP.

ParserVisitors.h holds what the bodies share: NodeProp, a monomorphic inline
cache of a subnode's property offset resolved against the pt_class() entry it
is declared on, plus php-parser's toLowerString() comparison and
CallLike::isFirstClassCallable()/getArgs().

tests/parser-visitors.php traverses crafted snippets and real source files
four ways — PHP and native visitors under the PHP and native traversers — and
requires byte-identical serialized ASTs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MShHKdUB19w38vboJLPKXy
  • Loading branch information
ondrejmirtes and claude committed Sep 22, 2026
commit 9607444bcd259750ce41d83a2d446bc0ce6ab8de
18 changes: 18 additions & 0 deletions build/PHPStan/Build/TurboAttributeCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@
use PhpParser\Node\Expr\ArrayDimFetch;
use PhpParser\Node\Expr\ArrowFunction;
use PhpParser\Node\Expr\Assign;
use PhpParser\Node\Expr\AssignOp;
use PhpParser\Node\Expr\AssignRef;
use PhpParser\Node\Expr\CallLike;
use PhpParser\Node\Expr\ClassConstFetch;
use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Expr\ConstFetch;
use PhpParser\Node\Expr\FuncCall;
use PhpParser\Node\Expr\Instanceof_;
use PhpParser\Node\Expr\List_;
use PhpParser\Node\Expr\Match_;
use PhpParser\Node\Expr\MethodCall;
Expand All @@ -43,14 +46,20 @@
use PhpParser\Node\Scalar;
use PhpParser\Node\Scalar\Float_;
use PhpParser\Node\Scalar\Int_;
use PhpParser\Node\Scalar\InterpolatedString;
use PhpParser\Node\Scalar\MagicConst;
use PhpParser\Node\Scalar\String_;
use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Catch_;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Declare_;
use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\HaltCompiler;
use PhpParser\Node\Stmt\InlineHTML;
use PhpParser\Node\Stmt\Namespace_;
use PhpParser\Node\Stmt\Trait_;
use PhpParser\Node\Stmt\TryCatch;
use PhpParser\Node\VariadicPlaceholder;
use PhpParser\Node\VarLikeIdentifier;
use PhpParser\NodeTraverser;
Expand Down Expand Up @@ -214,6 +223,15 @@ final class TurboAttributeCollector
'classMethodStmt' => ClassMethod::class,
'adapterReflectionClass' => \PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass::class,
'betterReflectionClass' => \PHPStan\BetterReflection\Reflection\ReflectionClass::class,
'magicConst' => MagicConst::class,
'assignRefExpr' => AssignRef::class,
'assignOpExpr' => AssignOp::class,
'traitStmt' => Trait_::class,
'inlineHtmlStmt' => InlineHTML::class,
'interpolatedString' => InterpolatedString::class,
'instanceofExpr' => Instanceof_::class,
'tryCatchStmt' => TryCatch::class,
'catchStmt' => Catch_::class,
];

private string $realRoot;
Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ArrayFilterArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ArrayFilterArgVisitor.cpp')]
final class ArrayFilterArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ArrayFindArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function in_array;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ArrayFindArgVisitor.cpp')]
final class ArrayFindArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ArrayMapArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function array_slice;
use function count;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ArrayMapArgVisitor.cpp')]
final class ArrayMapArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ArrayOffsetNormalizingVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use PhpParser\Node\Scalar\String_;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function preg_match;

/**
Expand All @@ -28,6 +29,7 @@
* for these nodes.
*/
#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ArrayOffsetNormalizingVisitor.cpp')]
final class ArrayOffsetNormalizingVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ArrayWalkArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ArrayWalkArgVisitor.cpp')]
final class ArrayWalkArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ArrowFunctionArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function count;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ArrowFunctionArgVisitor.cpp')]
final class ArrowFunctionArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ClosureArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function count;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ClosureArgVisitor.cpp')]
final class ClosureArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ClosureBindArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
use PhpParser\Node\Identifier;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function count;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ClosureBindArgVisitor.cpp')]
final class ClosureBindArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ClosureBindToVarVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
use PhpParser\Node\Identifier;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ClosureBindToVarVisitor.cpp')]
final class ClosureBindToVarVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/CurlSetOptArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/CurlSetOptArgVisitor.cpp')]
final class CurlSetOptArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/CurlSetOptArrayArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/CurlSetOptArrayArgVisitor.cpp')]
final class CurlSetOptArrayArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/DeclarePositionVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function str_starts_with;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/DeclarePositionVisitor.cpp')]
final class DeclarePositionVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ImmediatelyInvokedClosureVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ImmediatelyInvokedClosureVisitor.cpp')]
final class ImmediatelyInvokedClosureVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ImplodeArgVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function in_array;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ImplodeArgVisitor.cpp')]
final class ImplodeArgVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/MagicConstantParamDefaultVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/MagicConstantParamDefaultVisitor.cpp')]
final class MagicConstantParamDefaultVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/NewAssignedToPropertyVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/NewAssignedToPropertyVisitor.cpp')]
final class NewAssignedToPropertyVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/ParentStmtTypesVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function array_pop;
use function count;
use function get_class;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/ParentStmtTypesVisitor.cpp')]
final class ParentStmtTypesVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/TraitCollectingVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
use Override;
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/TraitCollectingVisitor.cpp')]
final class TraitCollectingVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/TryCatchTypeVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;
use function array_last;
use function array_pop;
use function array_reverse;
use function count;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/TryCatchTypeVisitor.cpp')]
final class TryCatchTypeVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 2 additions & 0 deletions src/Parser/TypeTraverserInstanceofVisitor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Turbo\ShadowedByTurboExtension;

#[AutowiredService]
#[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/TypeTraverserInstanceofVisitor.cpp')]
final class TypeTraverserInstanceofVisitor extends NodeVisitorAbstract
{

Expand Down
2 changes: 1 addition & 1 deletion turbo-ext/config.w32
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ if (PHP_PHPSTAN_TURBO != "no") {
// directory by splitting on backslashes only — with forward slashes the
// objects compile flat while the link list expects the subpath
EXTENSION("phpstan_turbo",
"src\\main.cpp src\\support.cpp src\\AbsorbedTemplateArgumentType.cpp src\\AcceptsResult.cpp src\\AccessoryArrayListType.cpp src\\AccessoryDecimalIntegerStringType.cpp src\\AccessoryLiteralStringType.cpp src\\AccessoryLowercaseStringType.cpp src\\AccessoryNonEmptyStringType.cpp src\\AccessoryNonFalsyStringType.cpp src\\AccessoryNumericStringType.cpp src\\AccessoryUppercaseStringType.cpp src\\ArenaCache.cpp src\\ArrayType.cpp src\\BenevolentUnionType.cpp src\\BooleanType.cpp src\\CallableType.cpp src\\CallableTypeHelper.cpp src\\CallbackUnresolvedMethodPrototypeReflection.cpp src\\CallbackUnresolvedPropertyPrototypeReflection.cpp src\\CalledOnTypeUnresolvedMethodPrototypeReflection.cpp src\\CalledOnTypeUnresolvedPropertyPrototypeReflection.cpp src\\CircularTypeAliasErrorType.cpp src\\ClassConstantAccessType.cpp src\\ClassReflection.cpp src\\ClassStringType.cpp src\\ClosureType.cpp src\\CombinationsHelper.cpp src\\ConditionalExpressionHolder.cpp src\\ConditionalType.cpp src\\ConditionalTypeForParameter.cpp src\\ConstantArrayType.cpp src\\ConstantArrayTypeBuilder.cpp src\\ConstantBooleanType.cpp src\\ConstantFloatType.cpp src\\ConstantIntegerType.cpp src\\ConstantStringType.cpp src\\ConstantTypeHelper.cpp src\\EnumCaseObjectType.cpp src\\ErrorType.cpp src\\ExpressionResult.cpp src\\ExpressionResultStorage.cpp src\\ExpressionResultStorageStack.cpp src\\ExpressionTypeHolder.cpp src\\FiniteTypeSet.cpp src\\FloatType.cpp src\\GenericClassStringType.cpp src\\GenericObjectType.cpp src\\GenericStaticType.cpp src\\GetTemplateTypeType.cpp src\\HasMethodType.cpp src\\HasOffsetType.cpp src\\HasOffsetValueType.cpp src\\HasPropertyType.cpp src\\IntegerRangeType.cpp src\\IntegerType.cpp src\\IntersectionType.cpp src\\IsSuperTypeOfResult.cpp src\\IterableType.cpp src\\KeyOfType.cpp src\\LateResolvableArrayShapeType.cpp src\\LruCache.cpp src\\MixedType.cpp src\\MutatingScope.cpp src\\NativeParameterReflection.cpp src\\NeverType.cpp src\\NewObjectType.cpp src\\NodeScanner.cpp src\\NodeTraverser.cpp src\\NonAcceptingNeverType.cpp src\\NonEmptyArrayType.cpp src\\NonexistentParentClassType.cpp src\\NullType.cpp src\\ObjectShapeType.cpp src\\ObjectType.cpp src\\ObjectWithoutClassType.cpp src\\OffsetAccessType.cpp src\\OversizedArrayType.cpp src\\PharForkGuard.cpp src\\PhpClassReflectionExtension.cpp src\\PhpFileCleaner.cpp src\\RecursionGuard.cpp src\\ReflectionAccess.cpp src\\ResourceType.cpp src\\ScopeContext.cpp src\\ScopeOps.cpp src\\Shadow.cpp src\\StaticType.cpp src\\StaticTypeFactory.cpp src\\StrictMixedType.cpp src\\StringAlwaysAcceptingObjectWithToStringType.cpp src\\StringNeverAcceptingObjectWithToStringType.cpp src\\StringType.cpp src\\SymbolFinderInFiles.cpp src\\TemplateArrayType.cpp src\\TemplateBenevolentUnionType.cpp src\\TemplateBooleanType.cpp src\\TemplateConstantArrayType.cpp src\\TemplateConstantIntegerType.cpp src\\TemplateConstantStringType.cpp src\\TemplateFloatType.cpp src\\TemplateGenericObjectType.cpp src\\TemplateIntegerType.cpp src\\TemplateIntersectionType.cpp src\\TemplateIterableType.cpp src\\TemplateKeyOfType.cpp src\\TemplateMixedType.cpp src\\TemplateNullType.cpp src\\TemplateObjectShapeType.cpp src\\TemplateObjectType.cpp src\\TemplateObjectWithoutClassType.cpp src\\TemplateStrictMixedType.cpp src\\TemplateStringType.cpp src\\TemplateTypeArgumentStrategy.cpp src\\TemplateTypeFactory.cpp src\\TemplateTypeHelper.cpp src\\TemplateTypeMap.cpp src\\TemplateTypeParameterStrategy.cpp src\\TemplateTypeReference.cpp src\\TemplateTypeScope.cpp src\\TemplateTypeVariance.cpp src\\TemplateTypeVarianceMap.cpp src\\TemplateUnionType.cpp src\\ThisType.cpp src\\TrinaryLogic.cpp src\\TrustedTypes.cpp src\\TypeCombinator.cpp src\\TypeCombinatorCache.cpp src\\TypehintHelper.cpp src\\TypeOps.cpp src\\TypeProjectionHelper.cpp src\\TypeResult.cpp src\\TypeTraits.cpp src\\TypeTraverser.cpp src\\TypeUtils.cpp src\\UnionType.cpp src\\UnionTypeHelper.cpp src\\UnresolvableTypeHelper.cpp src\\UnresolvedTemplateArgumentType.cpp src\\ValueOfType.cpp src\\VariableFlow.cpp src\\VariableFlowBuilder.cpp src\\VariableLivenessResolver.cpp src\\VerbosityLevel.cpp src\\VoidType.cpp src\\VolatileExpressionHelper.cpp",
"src\\main.cpp src\\support.cpp src\\AbsorbedTemplateArgumentType.cpp src\\AcceptsResult.cpp src\\AccessoryArrayListType.cpp src\\AccessoryDecimalIntegerStringType.cpp src\\AccessoryLiteralStringType.cpp src\\AccessoryLowercaseStringType.cpp src\\AccessoryNonEmptyStringType.cpp src\\AccessoryNonFalsyStringType.cpp src\\AccessoryNumericStringType.cpp src\\AccessoryUppercaseStringType.cpp src\\ArenaCache.cpp src\\ArrayFilterArgVisitor.cpp src\\ArrayFindArgVisitor.cpp src\\ArrayMapArgVisitor.cpp src\\ArrayOffsetNormalizingVisitor.cpp src\\ArrayType.cpp src\\ArrayWalkArgVisitor.cpp src\\ArrowFunctionArgVisitor.cpp src\\BenevolentUnionType.cpp src\\BooleanType.cpp src\\CallableType.cpp src\\CallableTypeHelper.cpp src\\CallbackUnresolvedMethodPrototypeReflection.cpp src\\CallbackUnresolvedPropertyPrototypeReflection.cpp src\\CalledOnTypeUnresolvedMethodPrototypeReflection.cpp src\\CalledOnTypeUnresolvedPropertyPrototypeReflection.cpp src\\CircularTypeAliasErrorType.cpp src\\ClassConstantAccessType.cpp src\\ClassReflection.cpp src\\ClassStringType.cpp src\\ClosureArgVisitor.cpp src\\ClosureBindArgVisitor.cpp src\\ClosureBindToVarVisitor.cpp src\\ClosureType.cpp src\\CombinationsHelper.cpp src\\ConditionalExpressionHolder.cpp src\\ConditionalType.cpp src\\ConditionalTypeForParameter.cpp src\\ConstantArrayType.cpp src\\ConstantArrayTypeBuilder.cpp src\\ConstantBooleanType.cpp src\\ConstantFloatType.cpp src\\ConstantIntegerType.cpp src\\ConstantStringType.cpp src\\ConstantTypeHelper.cpp src\\CurlSetOptArgVisitor.cpp src\\CurlSetOptArrayArgVisitor.cpp src\\DeclarePositionVisitor.cpp src\\EnumCaseObjectType.cpp src\\ErrorType.cpp src\\ExpressionResult.cpp src\\ExpressionResultStorage.cpp src\\ExpressionResultStorageStack.cpp src\\ExpressionTypeHolder.cpp src\\FiniteTypeSet.cpp src\\FloatType.cpp src\\GenericClassStringType.cpp src\\GenericObjectType.cpp src\\GenericStaticType.cpp src\\GetTemplateTypeType.cpp src\\HasMethodType.cpp src\\HasOffsetType.cpp src\\HasOffsetValueType.cpp src\\HasPropertyType.cpp src\\ImmediatelyInvokedClosureVisitor.cpp src\\ImplodeArgVisitor.cpp src\\IntegerRangeType.cpp src\\IntegerType.cpp src\\IntersectionType.cpp src\\IsSuperTypeOfResult.cpp src\\IterableType.cpp src\\KeyOfType.cpp src\\LateResolvableArrayShapeType.cpp src\\LruCache.cpp src\\MagicConstantParamDefaultVisitor.cpp src\\MixedType.cpp src\\MutatingScope.cpp src\\NativeParameterReflection.cpp src\\NeverType.cpp src\\NewAssignedToPropertyVisitor.cpp src\\NewObjectType.cpp src\\NodeScanner.cpp src\\NodeTraverser.cpp src\\NonAcceptingNeverType.cpp src\\NonEmptyArrayType.cpp src\\NonexistentParentClassType.cpp src\\NullType.cpp src\\ObjectShapeType.cpp src\\ObjectType.cpp src\\ObjectWithoutClassType.cpp src\\OffsetAccessType.cpp src\\OversizedArrayType.cpp src\\ParentStmtTypesVisitor.cpp src\\PharForkGuard.cpp src\\PhpClassReflectionExtension.cpp src\\PhpFileCleaner.cpp src\\RecursionGuard.cpp src\\ReflectionAccess.cpp src\\ResourceType.cpp src\\ScopeContext.cpp src\\ScopeOps.cpp src\\Shadow.cpp src\\StaticType.cpp src\\StaticTypeFactory.cpp src\\StrictMixedType.cpp src\\StringAlwaysAcceptingObjectWithToStringType.cpp src\\StringNeverAcceptingObjectWithToStringType.cpp src\\StringType.cpp src\\SymbolFinderInFiles.cpp src\\TemplateArrayType.cpp src\\TemplateBenevolentUnionType.cpp src\\TemplateBooleanType.cpp src\\TemplateConstantArrayType.cpp src\\TemplateConstantIntegerType.cpp src\\TemplateConstantStringType.cpp src\\TemplateFloatType.cpp src\\TemplateGenericObjectType.cpp src\\TemplateIntegerType.cpp src\\TemplateIntersectionType.cpp src\\TemplateIterableType.cpp src\\TemplateKeyOfType.cpp src\\TemplateMixedType.cpp src\\TemplateNullType.cpp src\\TemplateObjectShapeType.cpp src\\TemplateObjectType.cpp src\\TemplateObjectWithoutClassType.cpp src\\TemplateStrictMixedType.cpp src\\TemplateStringType.cpp src\\TemplateTypeArgumentStrategy.cpp src\\TemplateTypeFactory.cpp src\\TemplateTypeHelper.cpp src\\TemplateTypeMap.cpp src\\TemplateTypeParameterStrategy.cpp src\\TemplateTypeReference.cpp src\\TemplateTypeScope.cpp src\\TemplateTypeVariance.cpp src\\TemplateTypeVarianceMap.cpp src\\TemplateUnionType.cpp src\\ThisType.cpp src\\TraitCollectingVisitor.cpp src\\TrinaryLogic.cpp src\\TrustedTypes.cpp src\\TryCatchTypeVisitor.cpp src\\TypeCombinator.cpp src\\TypeCombinatorCache.cpp src\\TypehintHelper.cpp src\\TypeOps.cpp src\\TypeProjectionHelper.cpp src\\TypeResult.cpp src\\TypeTraits.cpp src\\TypeTraverser.cpp src\\TypeTraverserInstanceofVisitor.cpp src\\TypeUtils.cpp src\\UnionType.cpp src\\UnionTypeHelper.cpp src\\UnresolvableTypeHelper.cpp src\\UnresolvedTemplateArgumentType.cpp src\\ValueOfType.cpp src\\VariableFlow.cpp src\\VariableFlowBuilder.cpp src\\VariableLivenessResolver.cpp src\\VerbosityLevel.cpp src\\VoidType.cpp src\\VolatileExpressionHelper.cpp",
true,
flags);
ADD_SOURCES(configure_module_dirname + "/src/parser",
Expand Down
Loading