equal
deleted
inserted
replaced
457 return w, (op, x[1], t) |
457 return w, (op, x[1], t) |
458 elif op == 'func': |
458 elif op == 'func': |
459 f = getsymbol(x[1]) |
459 f = getsymbol(x[1]) |
460 wa, ta = _optimize(x[2]) |
460 wa, ta = _optimize(x[2]) |
461 w = getattr(symbols.get(f), '_weight', 1) |
461 w = getattr(symbols.get(f), '_weight', 1) |
|
462 m = _match('commonancestors(_)', ta) |
|
463 |
|
464 # Optimize heads(commonancestors(_)) because we have a fast version |
|
465 if f == 'heads' and m: |
|
466 return w + wa, _build('_commonancestorheads(_)', m[1]) |
|
467 |
462 return w + wa, (op, x[1], ta) |
468 return w + wa, (op, x[1], ta) |
463 raise ValueError('invalid operator %r' % op) |
469 raise ValueError('invalid operator %r' % op) |
464 |
470 |
465 def optimize(tree): |
471 def optimize(tree): |
466 """Optimize evaluatable tree |
472 """Optimize evaluatable tree |