(int var, Expr.Cast expr, Typing typing, Environment environment)
| 1605 | } |
| 1606 | |
| 1607 | private Typing pushCast(int var, Expr.Cast expr, Typing typing, Environment environment) { |
| 1608 | // Filter target type |
| 1609 | Typing nTyping = typing.map(row -> filterOnSubtype(row, var, expr.getType(), environment)); |
| 1610 | // Sanity check typing |
| 1611 | checkForError(expr, typing, nTyping, var, expr.getType()); |
| 1612 | // <<< Propagate backwards from children |
| 1613 | nTyping = pullExpression(expr.getOperand(), true, nTyping, environment); |
| 1614 | int src = nTyping.top(); |
| 1615 | // Check cast makes sense |
| 1616 | Typing nnTyping = nTyping.filter(r -> isSensibleCast(expr.getType(), r.get(src), environment)); |
| 1617 | // Report errors |
| 1618 | checkForError(expr.getOperand(), nTyping, nnTyping, expr.getType(), src); |
| 1619 | // Done |
| 1620 | return nnTyping; |
| 1621 | } |
| 1622 | |
| 1623 | private Typing pushConditionExpression(int var, Expr expr, Typing typing, Environment environment) { |
| 1624 | // Filter target type |
no test coverage detected