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 2018-11-14 13:58:12 +01:00
parent 3efa6a6359
commit 82e13a85e2
No known key found for this signature in database
GPG Key ID: B4C087AC81641654
2 changed files with 12 additions and 4 deletions

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);
}
}
}

View File

@ -10,7 +10,7 @@ namespace Upsilon.Binder
Name = name;
}
public Type Type { get; }
public Type Type { get; set; }
public string Name { get; }
}
}