Change Binder variable type if value is assigned to null variable, or null is assigned to a variable type

This commit is contained in:
Deukhoofd committed 2018-11-14 13:58:12 +01:00
1 parent 3efa6a6359
commit 82e13a85e2
2 files changed
+12 -4

No files matched your search

+11 -3
View File
@@ -159,10 +159,18 @@ namespace Upsilon.Binder
}
else
{
if (boundExpression.Type != variable.Type)
// don't allow assigning different typed variables to a variable, unless either of them is nil, allow assigning nil to all variables
if (boundExpression.Type != variable.Type && (variable.Type != Type.Nil || boundExpression.Type == Type.Nil))
{
_diagnostics.LogCannotConvert(boundExpression.Type, variable.Type, e.Span);
return new BoundExpressionStatement(boundExpression);
if (variable.Type == Type.Nil || boundExpression.Type == Type.Nil)
{
variable.Type = boundExpression.Type;
}
else
{
_diagnostics.LogCannotConvert(boundExpression.Type, variable.Type, e.Span);
return new BoundExpressionStatement(boundExpression);
}
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ namespace Upsilon.Binder
Name = name;
}
public Type Type { get; }
public Type Type { get; set; }
public string Name { get; }
}
}