| 507 |
let res = Sequence.concat t1 t2 in |
let res = Sequence.concat t1 t2 in |
| 508 |
check loc res constr ""; |
check loc res constr ""; |
| 509 |
if precise then res else constr |
if precise then res else constr |
| 510 |
|
| Op ("flatten", [e]) -> |
| 511 |
|
let constr' = Sequence.star |
| 512 |
|
(Sequence.approx (Types.cap Sequence.any constr)) in |
| 513 |
|
let sconstr' = Sequence.star constr' in |
| 514 |
|
let exact = Types.subtype constr' constr in |
| 515 |
|
if exact then |
| 516 |
|
let t = type_check env e sconstr' precise in |
| 517 |
|
if precise then Sequence.flatten t else constr |
| 518 |
|
else |
| 519 |
|
let t = type_check env e sconstr' true in |
| 520 |
|
let res = Sequence.flatten t in |
| 521 |
|
check loc res constr ""; |
| 522 |
|
if precise then res else constr |
| 523 |
| _ -> |
| _ -> |
| 524 |
let t : Types.descr = compute_type' loc env e in |
let t : Types.descr = compute_type' loc env e in |
| 525 |
check loc t constr ""; |
check loc t constr ""; |