25 |
(* pushApply:ein_exp * ein_exp list ->int* ein_exp |
(* pushApply:ein_exp * ein_exp list ->int* ein_exp |
26 |
* Moves non-field expression outside of apply |
* Moves non-field expression outside of apply |
27 |
*) |
*) |
28 |
fun pushApply (del, p) = (case Filter.filterField p |
fun pushApply (del, p) = (case Filter.partitionField p |
29 |
of ([], []) => raise Fail "No Field in Apply expression" |
of ([], []) => raise Fail "No Field in Apply expression" |
30 |
| ([], post) => (false, rewriteApply(del, post)) |
| ([], post) => (false, rewriteApply(del, post)) |
31 |
| (pre, post) => (true, rewriteProd(pre@[rewriteApply(del, post)])) |
| (pre, post) => (true, rewriteProd(pre@[rewriteApply(del, post)])) |
50 |
| E.Op1(op1, e1) => E.Op1(op1,order e1) |
| E.Op1(op1, e1) => E.Op1(op1,order e1) |
51 |
| E.Op2(op2, e1,e2) => E.Op2(op2,order e1,order e2) |
| E.Op2(op2, e1,e2) => E.Op2(op2,order e1,order e2) |
52 |
| E.Opn(E.Prod, es) => let |
| E.Opn(E.Prod, es) => let |
53 |
val (s, eps, dels, p) = Filter.filterGreek es |
val (s, eps, dels, p) = Filter.partitionGreek es |
54 |
val p' = List.map order p |
val p' = List.map order p |
55 |
in |
in |
56 |
E.Opn(E.Prod, s@eps@dels@p') |
E.Opn(E.Prod, s@eps@dels@p') |
71 |
val b' = order b |
val b' = order b |
72 |
*) |
*) |
73 |
in |
in |
74 |
Ein.EIN{params=params, index=index, body=b'} |
Ein.EIN{params=params, index=index, body=b} |
75 |
end |
end |
76 |
|
|
77 |
end |
end |