Lines Matching defs:b

130         PredictionContext $b,
135 if ($a->equals($b)) {
139 if ($a instanceof SingletonPredictionContext && $b instanceof SingletonPredictionContext) {
140 return self::mergeSingletons($a, $b, $rootIsWildcard, $mergeCache);
143 // At least one of a or b is array
150 if ($b instanceof EmptyPredictionContext) {
151 return $b;
160 if ($b instanceof SingletonPredictionContext) {
161 $b = ArrayPredictionContext::fromOne($b);
164 if (!$a instanceof ArrayPredictionContext || !$b instanceof ArrayPredictionContext) {
168 return self::mergeArrays($a, $b, $rootIsWildcard, $mergeCache);
189 * @param SingletonPredictionContext $b The second {@see SingletonPredictionContext}
195 SingletonPredictionContext $b,
200 $previous = $mergeCache->getByTwoKeys($a, $b);
206 $previous = $mergeCache->getByTwoKeys($b, $a);
213 $rootMerge = self::mergeRoot($a, $b, $rootIsWildcard);
217 $mergeCache->set($a, $b, $rootMerge);
223 if ($a->returnState === $b->returnState) {
224 if ($a->parent === null || $b->parent === null) {
228 $parent = self::merge($a->parent, $b->parent, $rootIsWildcard, $mergeCache);
230 // If parent is same as existing a or b parent or reduced to a parent, return it
232 return $a; // ax + bx = ax, if a=b
235 if ($parent === $b->parent) {
236 return $b; // ax + bx = bx, if a=b
247 $mergeCache->set($a, $b, $spc);
251 // a != b payloads differ
255 if ($a === $b || ($a->parent !== null && $a->parent === $b->parent)) {
258 // [a,b]x
265 $payloads = [$a->returnState, $b->returnState];
267 if ($a->returnState > $b->returnState) {
268 $payloads[0] = $b->returnState;
276 $mergeCache->set($a, $b, $apc);
285 $payloads = [$a->returnState, $b->returnState];
286 $parents = [$a->parent, $b->parent];
288 if ($a->returnState > $b->returnState) {
290 $payloads[0] = $b->returnState;
292 $parents = [$b->parent, $a->parent];
298 $mergeCache->set($a, $b, $a_);
306 * Handle case where at least one of `a` or `b` is
343 SingletonPredictionContext $b,
348 return self::empty();// // + b =//
351 if ($b === self::empty()) {
355 if ($a === self::empty() && $b === self::empty()) {
361 $payloads = [$b->returnState, self::EMPTY_RETURN_STATE];
362 $parents = [$b->parent, null];
367 if ($b === self::empty()) {
405 ArrayPredictionContext $b,
410 $previous = $mergeCache->getByTwoKeys($a, $b);
416 $previous = $mergeCache->getByTwoKeys($b, $a);
423 // merge sorted payloads a + b => M
425 $j = 0;// walks b
432 while ($i < \count($a->returnStates) && $j < \count($b->returnStates)) {
434 $b_parent = $b->parents[$j];
436 if ($a->returnStates[$i] === $b->returnStates[$j]) {
462 } elseif ($a->returnStates[$i] < $b->returnStates[$j]) {
468 // b > a, copy b[j] to M
470 $mergedReturnStates[$k] = $b->returnStates[$j];
485 for ($p = $j, $count = \count($b->returnStates); $p < $count; $p++) {
486 $mergedParents[$k] = $b->parents[$p];
487 $mergedReturnStates[$k] = $b->returnStates[$p];
500 $mergeCache->set($a, $b, $a_);
514 // if we created same array as a or b, return that instead
518 $mergeCache->set($a, $b, $a);
524 if ($M === $b) {
526 $mergeCache->set($a, $b, $b);
529 return $b;
533 $mergeCache->set($a, $b, $M);