Commit 3f5f2de
Add flattening optimization for deep
Unlike `BooleanOr` which already had `specifyTypesForFlattenedBooleanOr`,
`BooleanAnd` chains had no flattening — each level recursed through
`specifyTypesInCondition` and `filterByTruthyValue`, creating O(N²)
scope operations. This was slow even at the original
`BOOLEAN_EXPRESSION_MAX_PROCESS_DEPTH = 4`.
Add `specifyTypesForFlattenedBooleanAnd` that flattens the chain,
processes each arm independently in the original scope, and batches
the type union construction to avoid incremental O(N²) growth.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>BooleanAnd chains in truthy context1 parent 7eab3d2 commit 3f5f2de
File tree
2 files changed
+76
-0
lines changed- src/Analyser
- tests/bench/data
2 files changed
+76
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
714 | 714 | | |
715 | 715 | | |
716 | 716 | | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
717 | 728 | | |
718 | 729 | | |
719 | 730 | | |
| |||
2075 | 2086 | | |
2076 | 2087 | | |
2077 | 2088 | | |
| 2089 | + | |
| 2090 | + | |
| 2091 | + | |
| 2092 | + | |
| 2093 | + | |
| 2094 | + | |
| 2095 | + | |
| 2096 | + | |
| 2097 | + | |
| 2098 | + | |
| 2099 | + | |
| 2100 | + | |
| 2101 | + | |
| 2102 | + | |
| 2103 | + | |
| 2104 | + | |
| 2105 | + | |
| 2106 | + | |
| 2107 | + | |
| 2108 | + | |
| 2109 | + | |
| 2110 | + | |
| 2111 | + | |
| 2112 | + | |
| 2113 | + | |
| 2114 | + | |
| 2115 | + | |
| 2116 | + | |
| 2117 | + | |
| 2118 | + | |
| 2119 | + | |
| 2120 | + | |
| 2121 | + | |
| 2122 | + | |
| 2123 | + | |
| 2124 | + | |
| 2125 | + | |
| 2126 | + | |
| 2127 | + | |
| 2128 | + | |
| 2129 | + | |
| 2130 | + | |
| 2131 | + | |
| 2132 | + | |
| 2133 | + | |
| 2134 | + | |
| 2135 | + | |
| 2136 | + | |
| 2137 | + | |
| 2138 | + | |
2078 | 2139 | | |
2079 | 2140 | | |
2080 | 2141 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
0 commit comments