| 612 |
|
|
| 613 |
and type_op loc op args = |
and type_op loc op args = |
| 614 |
match (op,args) with |
match (op,args) with |
| 615 |
| ("+", [loc1,t1; loc2,t2]) -> |
| "+", [loc1,t1; loc2,t2] -> |
| 616 |
type_int_binop Intervals.add loc1 t1 loc2 t2 |
type_int_binop Intervals.add loc1 t1 loc2 t2 |
| 617 |
| ("*", [loc1,t1; loc2,t2]) -> |
| "-", [loc1,t1; loc2,t2] -> |
| 618 |
|
type_int_binop Intervals.sub loc1 t1 loc2 t2 |
| 619 |
|
| ("*" | "/"), [loc1,t1; loc2,t2] -> |
| 620 |
type_int_binop (fun i1 i2 -> Intervals.any) loc1 t1 loc2 t2 |
type_int_binop (fun i1 i2 -> Intervals.any) loc1 t1 loc2 t2 |
| 621 |
| ("@", [loc1,t1; loc2,t2]) -> |
| "@", [loc1,t1; loc2,t2] -> |
| 622 |
check loc1 t1 Sequence.any |
check loc1 t1 Sequence.any |
| 623 |
"The first argument of @ must be a sequence"; |
"The first argument of @ must be a sequence"; |
| 624 |
Sequence.concat t1 t2 |
Sequence.concat t1 t2 |
| 625 |
| ("flatten", [loc1,t1]) -> |
| "flatten", [loc1,t1] -> |
| 626 |
check loc1 t1 Sequence.seqseq |
check loc1 t1 Sequence.seqseq |
| 627 |
"The argument of flatten must be a sequence of sequences"; |
"The argument of flatten must be a sequence of sequences"; |
| 628 |
Sequence.flatten t1 |
Sequence.flatten t1 |