mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
revset: do not flip "and" arguments when optimizing
Rewrite `flipand(y, x)` to `andsmally(x, y)` so the AST order is unchanged, which could be more friendly to developers. Differential Revision: https://phab.mercurial-scm.org/D579
This commit is contained in:
parent
507a4c9e22
commit
4cd80fdd9c
@ -169,8 +169,8 @@ def andset(repo, subset, x, y, order):
|
||||
yorder = followorder
|
||||
return getset(repo, getset(repo, subset, x, order), y, yorder)
|
||||
|
||||
def flipandset(repo, subset, y, x, order):
|
||||
# 'flipand(y, x)' is equivalent to 'and(x, y)', but faster when y is small
|
||||
def andsmallyset(repo, subset, x, y, order):
|
||||
# 'andsmally(x, y)' is equivalent to 'and(x, y)', but faster when y is small
|
||||
if order == anyorder:
|
||||
yorder = anyorder
|
||||
else:
|
||||
@ -2101,7 +2101,7 @@ methods = {
|
||||
"string": stringset,
|
||||
"symbol": stringset,
|
||||
"and": andset,
|
||||
"flipand": flipandset,
|
||||
"andsmally": andsmallyset,
|
||||
"or": orset,
|
||||
"not": notset,
|
||||
"difference": differenceset,
|
||||
|
@ -374,7 +374,7 @@ def _optimize(x, small):
|
||||
if tb is not None and tb[0] == 'not':
|
||||
return wa, ('difference', ta, tb[1])
|
||||
if wa > wb:
|
||||
return w, ('flipand', tb, ta)
|
||||
op = 'andsmally'
|
||||
return w, (op, ta, tb)
|
||||
elif op == 'or':
|
||||
# fast path for machine-generated expression, that is likely to have
|
||||
|
@ -714,11 +714,11 @@ verify optimized tree:
|
||||
None)
|
||||
('symbol', '2'))
|
||||
* optimized:
|
||||
(flipand
|
||||
('symbol', '2')
|
||||
(andsmally
|
||||
(func
|
||||
('symbol', 'r3232')
|
||||
None))
|
||||
None)
|
||||
('symbol', '2'))
|
||||
* analyzed set:
|
||||
<baseset [2]>
|
||||
* optimized set:
|
||||
@ -2056,13 +2056,13 @@ ordering defined by it.
|
||||
('symbol', '_intlist')
|
||||
('string', '0\x001\x002')))
|
||||
* optimized:
|
||||
(flipand
|
||||
(func
|
||||
('symbol', '_intlist')
|
||||
('string', '0\x001\x002'))
|
||||
(andsmally
|
||||
(range
|
||||
('symbol', '2')
|
||||
('symbol', '0')))
|
||||
('symbol', '0'))
|
||||
(func
|
||||
('symbol', '_intlist')
|
||||
('string', '0\x001\x002')))
|
||||
* set:
|
||||
<filteredset
|
||||
<spanset- 0:3>,
|
||||
@ -2130,13 +2130,13 @@ ordering defined by it.
|
||||
('symbol', '2')
|
||||
('symbol', '0')))
|
||||
* optimized:
|
||||
(flipand
|
||||
(range
|
||||
('symbol', '2')
|
||||
('symbol', '0'))
|
||||
(andsmally
|
||||
(func
|
||||
('symbol', '_hexlist')
|
||||
('string', '*'))) (glob)
|
||||
('string', '*')) (glob)
|
||||
(range
|
||||
('symbol', '2')
|
||||
('symbol', '0')))
|
||||
* set:
|
||||
<baseset [0, 2, 1]>
|
||||
0
|
||||
@ -2415,13 +2415,13 @@ ordering defined by it.
|
||||
('symbol', '0')
|
||||
('symbol', '1')))))
|
||||
* optimized:
|
||||
(flipand
|
||||
(func
|
||||
('symbol', '_list')
|
||||
('string', '2\x000\x001'))
|
||||
(andsmally
|
||||
(func
|
||||
('symbol', 'contains')
|
||||
('string', 'glob:*')))
|
||||
('string', 'glob:*'))
|
||||
(func
|
||||
('symbol', '_list')
|
||||
('string', '2\x000\x001')))
|
||||
* set:
|
||||
<filteredset
|
||||
<baseset+ [0, 1, 2]>,
|
||||
@ -2447,15 +2447,15 @@ ordering defined by it.
|
||||
('symbol', '2')
|
||||
('symbol', '1')))))
|
||||
* optimized:
|
||||
(flipand
|
||||
(func
|
||||
('symbol', '_list')
|
||||
('string', '0\x002\x001'))
|
||||
(andsmally
|
||||
(func
|
||||
('symbol', 'reverse')
|
||||
(func
|
||||
('symbol', 'contains')
|
||||
('string', 'glob:*'))))
|
||||
('string', 'glob:*')))
|
||||
(func
|
||||
('symbol', '_list')
|
||||
('string', '0\x002\x001')))
|
||||
* set:
|
||||
<filteredset
|
||||
<baseset- [0, 1, 2]>,
|
||||
@ -3154,11 +3154,11 @@ no crash by empty group "()" while optimizing to "only()"
|
||||
(group
|
||||
None))
|
||||
* optimized:
|
||||
(flipand
|
||||
None
|
||||
(andsmally
|
||||
(func
|
||||
('symbol', 'ancestors')
|
||||
('symbol', '1')))
|
||||
('symbol', '1'))
|
||||
None)
|
||||
hg: parse error: missing argument
|
||||
[255]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user