objects/simple-generics-chainup.vala \
objects/singleton.vala \
objects/type-narrowing.vala \
+ objects/type-narrowing-by-precondition.vala \
objects/type-narrowing-fallback.vala \
objects/test-025.vala \
objects/test-026.vala \
bool is_negation = false;
unowned CodeNode? parent = parent_node;
unowned IfStatement? if_statement = null;
+ var scope_type_checks = new ArrayList<unowned TypeCheck> ();
while (parent != null && !(parent is Method)) {
if (parent is TypeCheck) {
parent = null;
is_negation = if_statement.false_statement == parent;
break;
}
+ if (parent.parent_node is Method) {
+ foreach (Expression expr in ((Method) parent.parent_node).get_preconditions ()) {
+ if (expr is TypeCheck) {
+ scope_type_checks.add ((TypeCheck) expr);
+ }
+ }
+ break;
+ }
parent = parent.parent_node;
}
}
}
}
+ if (value_type.context_symbol == null) {
+ foreach (TypeCheck type_check in scope_type_checks) {
+ unowned TypeSymbol? narrowed_symnol = type_check.type_reference.type_symbol;
+ if (variable == type_check.expression.symbol_reference) {
+ if (narrowed_symnol != value_type.type_symbol) {
+ value_type.context_symbol = narrowed_symnol;
+ }
+ value_type.nullable = false;
+ }
+ }
+ }
}
}