File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ <?php declare (strict_types = 1 );
2+
3+ namespace BenchOrChainResolveTypeBlowup ;
4+
5+ /**
6+ * Regression test for O(N^2) in deep BooleanOr chains resolved via BooleanOrHandler::resolveType().
7+ * Without the flattening, resolving the boolean type of the chain recursed into the left operand
8+ * and re-narrowed the whole left chain with filterByFalseyValue() at each level, creating O(N^2)
9+ * scope operations. Uses instanceof arms so the per-level narrowing is expensive enough to show
10+ * at the BOOLEAN_EXPRESSION_MAX_PROCESS_DEPTH = 4 default (no raised cap needed).
11+ */
12+ final class C1 {}
13+ final class C2 {}
14+ final class C3 {}
15+ final class C4 {}
16+ final class C5 {}
17+ final class C6 {}
18+ final class C7 {}
19+ final class C8 {}
20+ final class C9 {}
21+ final class C10 {}
22+ final class C11 {}
23+ final class C12 {}
24+ final class C13 {}
25+ final class C14 {}
26+ final class C15 {}
27+ final class C16 {}
28+ final class C17 {}
29+ final class C18 {}
30+ final class C19 {}
31+ final class C20 {}
32+ final class C21 {}
33+ final class C22 {}
34+ final class C23 {}
35+ final class C24 {}
36+ final class C25 {}
37+ final class C26 {}
38+ final class C27 {}
39+ final class C28 {}
40+ final class C29 {}
41+ final class C30 {}
42+ final class C31 {}
43+ final class C32 {}
44+ final class C33 {}
45+ final class C34 {}
46+ final class C35 {}
47+ final class C36 {}
48+ final class C37 {}
49+ final class C38 {}
50+ final class C39 {}
51+ final class C40 {}
52+ final class C41 {}
53+ final class C42 {}
54+ final class C43 {}
55+ final class C44 {}
56+ final class C45 {}
57+ final class C46 {}
58+ final class C47 {}
59+ final class C48 {}
60+ final class C49 {}
61+ final class C50 {}
62+ final class C51 {}
63+ final class C52 {}
64+ final class C53 {}
65+ final class C54 {}
66+ final class C55 {}
67+ final class C56 {}
68+ final class C57 {}
69+ final class C58 {}
70+ final class C59 {}
71+ final class C60 {}
72+ final class C61 {}
73+ final class C62 {}
74+ final class C63 {}
75+ final class C64 {}
76+ final class C65 {}
77+ final class C66 {}
78+ final class C67 {}
79+ final class C68 {}
80+ final class C69 {}
81+ final class C70 {}
82+ final class C71 {}
83+ final class C72 {}
84+ final class C73 {}
85+ final class C74 {}
86+ final class C75 {}
87+ final class C76 {}
88+ final class C77 {}
89+ final class C78 {}
90+ final class C79 {}
91+ final class C80 {}
92+ final class C81 {}
93+ final class C82 {}
94+ final class C83 {}
95+ final class C84 {}
96+ final class C85 {}
97+ final class C86 {}
98+ final class C87 {}
99+ final class C88 {}
100+ final class C89 {}
101+ final class C90 {}
102+ final class C91 {}
103+ final class C92 {}
104+ final class C93 {}
105+ final class C94 {}
106+ final class C95 {}
107+ final class C96 {}
108+ final class C97 {}
109+ final class C98 {}
110+ final class C99 {}
111+ final class C100 {}
112+
113+ function test (object $ x ): void {
114+ if ($ x instanceof C1 || $ x instanceof C2 || $ x instanceof C3 || $ x instanceof C4 || $ x instanceof C5 || $ x instanceof C6 || $ x instanceof C7 || $ x instanceof C8 || $ x instanceof C9 || $ x instanceof C10 || $ x instanceof C11 || $ x instanceof C12 || $ x instanceof C13 || $ x instanceof C14 || $ x instanceof C15 || $ x instanceof C16 || $ x instanceof C17 || $ x instanceof C18 || $ x instanceof C19 || $ x instanceof C20 || $ x instanceof C21 || $ x instanceof C22 || $ x instanceof C23 || $ x instanceof C24 || $ x instanceof C25 || $ x instanceof C26 || $ x instanceof C27 || $ x instanceof C28 || $ x instanceof C29 || $ x instanceof C30 || $ x instanceof C31 || $ x instanceof C32 || $ x instanceof C33 || $ x instanceof C34 || $ x instanceof C35 || $ x instanceof C36 || $ x instanceof C37 || $ x instanceof C38 || $ x instanceof C39 || $ x instanceof C40 || $ x instanceof C41 || $ x instanceof C42 || $ x instanceof C43 || $ x instanceof C44 || $ x instanceof C45 || $ x instanceof C46 || $ x instanceof C47 || $ x instanceof C48 || $ x instanceof C49 || $ x instanceof C50 || $ x instanceof C51 || $ x instanceof C52 || $ x instanceof C53 || $ x instanceof C54 || $ x instanceof C55 || $ x instanceof C56 || $ x instanceof C57 || $ x instanceof C58 || $ x instanceof C59 || $ x instanceof C60 || $ x instanceof C61 || $ x instanceof C62 || $ x instanceof C63 || $ x instanceof C64 || $ x instanceof C65 || $ x instanceof C66 || $ x instanceof C67 || $ x instanceof C68 || $ x instanceof C69 || $ x instanceof C70 || $ x instanceof C71 || $ x instanceof C72 || $ x instanceof C73 || $ x instanceof C74 || $ x instanceof C75 || $ x instanceof C76 || $ x instanceof C77 || $ x instanceof C78 || $ x instanceof C79 || $ x instanceof C80 || $ x instanceof C81 || $ x instanceof C82 || $ x instanceof C83 || $ x instanceof C84 || $ x instanceof C85 || $ x instanceof C86 || $ x instanceof C87 || $ x instanceof C88 || $ x instanceof C89 || $ x instanceof C90 || $ x instanceof C91 || $ x instanceof C92 || $ x instanceof C93 || $ x instanceof C94 || $ x instanceof C95 || $ x instanceof C96 || $ x instanceof C97 || $ x instanceof C98 || $ x instanceof C99 || $ x instanceof C100 ) {
115+ echo "yes " ;
116+ }
117+ }
You can’t perform that action at this time.
0 commit comments