Show More
@@ -434,9 +434,9 def _optimize(x, small): | |||||
434 | flushss() |
|
434 | flushss() | |
435 | if len(ts) == 1: |
|
435 | if len(ts) == 1: | |
436 | return ws[0], ts[0] # 'or' operation is fully optimized out |
|
436 | return ws[0], ts[0] # 'or' operation is fully optimized out | |
437 | # we can't reorder trees by weight because it would change the order. |
|
437 | if order != defineorder: | |
438 | # ("sort(a + b)" == "sort(b + a)", but "a + b" != "b + a") |
|
438 | # reorder by weight only when f(a + b) == f(b + a) | |
439 |
|
|
439 | ts = [wt[1] for wt in sorted(zip(ws, ts), key=lambda wt: wt[0])] | |
440 | return max(ws), (op, ('list',) + tuple(ts), order) |
|
440 | return max(ws), (op, ('list',) + tuple(ts), order) | |
441 | elif op == 'not': |
|
441 | elif op == 'not': | |
442 | # Optimize not public() to _notpublic() because we have a fast version |
|
442 | # Optimize not public() to _notpublic() because we have a fast version |
@@ -1420,19 +1420,19 ordering defined by it. | |||||
1420 | define) |
|
1420 | define) | |
1421 | (or |
|
1421 | (or | |
1422 | (list |
|
1422 | (list | |
|
1423 | ('symbol', '2') | |||
1423 | (range |
|
1424 | (range | |
1424 | ('symbol', '0') |
|
1425 | ('symbol', '0') | |
1425 | ('symbol', '1') |
|
1426 | ('symbol', '1') | |
1426 | follow) |
|
1427 | follow)) | |
1427 | ('symbol', '2')) |
|
|||
1428 | follow) |
|
1428 | follow) | |
1429 | define) |
|
1429 | define) | |
1430 | * set: |
|
1430 | * set: | |
1431 | <filteredset |
|
1431 | <filteredset | |
1432 | <spanset- 0:2>, |
|
1432 | <spanset- 0:2>, | |
1433 | <addset |
|
1433 | <addset | |
1434 |
< |
|
1434 | <baseset [2]>, | |
1435 |
< |
|
1435 | <spanset+ 0:1>>> | |
1436 | 2 |
|
1436 | 2 | |
1437 | 1 |
|
1437 | 1 | |
1438 | 0 |
|
1438 | 0 | |
@@ -1917,6 +1917,69 ordering defined by it. | |||||
1917 | 1 |
|
1917 | 1 | |
1918 | 0 |
|
1918 | 0 | |
1919 |
|
1919 | |||
|
1920 | 'A + B' can be rewritten to 'B + A' by weight only when the order doesn't | |||
|
1921 | matter (e.g. 'X & (A + B)' can be 'X & (B + A)', but '(A + B) & X' can't): | |||
|
1922 | ||||
|
1923 | $ try -p optimized '0:2 & (reverse(contains("a")) + 2)' | |||
|
1924 | * optimized: | |||
|
1925 | (and | |||
|
1926 | (range | |||
|
1927 | ('symbol', '0') | |||
|
1928 | ('symbol', '2') | |||
|
1929 | define) | |||
|
1930 | (or | |||
|
1931 | (list | |||
|
1932 | ('symbol', '2') | |||
|
1933 | (func | |||
|
1934 | ('symbol', 'reverse') | |||
|
1935 | (func | |||
|
1936 | ('symbol', 'contains') | |||
|
1937 | ('string', 'a') | |||
|
1938 | define) | |||
|
1939 | follow)) | |||
|
1940 | follow) | |||
|
1941 | define) | |||
|
1942 | * set: | |||
|
1943 | <filteredset | |||
|
1944 | <spanset+ 0:2>, | |||
|
1945 | <addset | |||
|
1946 | <baseset [2]>, | |||
|
1947 | <filteredset | |||
|
1948 | <fullreposet+ 0:9>, | |||
|
1949 | <contains 'a'>>>> | |||
|
1950 | 0 | |||
|
1951 | 1 | |||
|
1952 | 2 | |||
|
1953 | ||||
|
1954 | $ try -p optimized '(reverse(contains("a")) + 2) & 0:2' | |||
|
1955 | * optimized: | |||
|
1956 | (and | |||
|
1957 | (range | |||
|
1958 | ('symbol', '0') | |||
|
1959 | ('symbol', '2') | |||
|
1960 | follow) | |||
|
1961 | (or | |||
|
1962 | (list | |||
|
1963 | (func | |||
|
1964 | ('symbol', 'reverse') | |||
|
1965 | (func | |||
|
1966 | ('symbol', 'contains') | |||
|
1967 | ('string', 'a') | |||
|
1968 | define) | |||
|
1969 | define) | |||
|
1970 | ('symbol', '2')) | |||
|
1971 | define) | |||
|
1972 | define) | |||
|
1973 | * set: | |||
|
1974 | <addset | |||
|
1975 | <filteredset | |||
|
1976 | <spanset- 0:2>, | |||
|
1977 | <contains 'a'>>, | |||
|
1978 | <baseset [2]>> | |||
|
1979 | 1 | |||
|
1980 | 0 | |||
|
1981 | 2 | |||
|
1982 | ||||
1920 | test sort revset |
|
1983 | test sort revset | |
1921 | -------------------------------------------- |
|
1984 | -------------------------------------------- | |
1922 |
|
1985 |
General Comments 0
You need to be logged in to leave comments.
Login now