2471 elif op == 'list': |
2471 elif op == 'list': |
2472 return (op,) + tuple(_analyze(y, order) for y in x[1:]) |
2472 return (op,) + tuple(_analyze(y, order) for y in x[1:]) |
2473 elif op == 'keyvalue': |
2473 elif op == 'keyvalue': |
2474 return (op, x[1], _analyze(x[2], order)) |
2474 return (op, x[1], _analyze(x[2], order)) |
2475 elif op == 'func': |
2475 elif op == 'func': |
2476 return (op, x[1], _analyze(x[2], defineorder), order) |
2476 f = getsymbol(x[1]) |
|
2477 d = defineorder |
|
2478 if f == 'present': |
|
2479 # 'present(set)' is known to return the argument set with no |
|
2480 # modification, so forward the current order to its argument |
|
2481 d = order |
|
2482 return (op, x[1], _analyze(x[2], d), order) |
2477 raise ValueError('invalid operator %r' % op) |
2483 raise ValueError('invalid operator %r' % op) |
2478 |
2484 |
2479 def analyze(x, order=defineorder): |
2485 def analyze(x, order=defineorder): |
2480 """Transform raw parsed tree to evaluatable tree which can be fed to |
2486 """Transform raw parsed tree to evaluatable tree which can be fed to |
2481 optimize() or getset() |
2487 optimize() or getset() |