More better error handling
This commit is contained in:
parent
7e50111724
commit
eeecd0225a
|
@ -252,7 +252,7 @@ namespace Upsilon.Evaluator
|
|||
}
|
||||
goto default;
|
||||
default:
|
||||
throw new Exception("Invalid Unary Operator: " + e.Operator.Kind);
|
||||
throw new EvaluationException(_script.FileName, "Invalid Unary Operator: " + e.Operator.Kind, e.Span);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -449,7 +449,9 @@ namespace Upsilon.Evaluator
|
|||
{
|
||||
return val;
|
||||
}
|
||||
throw new Exception($"Cannot find variable: '{e.Variable.VariableSymbol.Name}'");
|
||||
|
||||
throw new EvaluationException(_script.FileName, $"Cannot find variable: '{e.Variable.VariableSymbol.Name}'",
|
||||
e.Span);
|
||||
}
|
||||
|
||||
private readonly Stack<BoundStatement> _todoStatements = new Stack<BoundStatement>();
|
||||
|
@ -548,7 +550,8 @@ namespace Upsilon.Evaluator
|
|||
var variable = EvaluateExpression(boundFunctionCallExpression.Identifier);
|
||||
if (!(variable is ScriptFunction function))
|
||||
{
|
||||
throw new Exception($"Variable is not a function.");
|
||||
throw new EvaluationException(_script.FileName, $"Variable is not a function.",
|
||||
boundFunctionCallExpression.Identifier.Span);
|
||||
}
|
||||
var ls = new List<ScriptType>();
|
||||
foreach (var t in boundFunctionCallExpression.Parameters)
|
||||
|
@ -610,9 +613,14 @@ namespace Upsilon.Evaluator
|
|||
private ScriptType EvaluateIndexExpression(BoundIndexExpression e)
|
||||
{
|
||||
var variable = EvaluateExpression(e.Identifier);
|
||||
if (variable.Type == Type.Nil)
|
||||
{
|
||||
throw new EvaluationException(_script.FileName, $"Nil variable can't be indexed", e.Span);
|
||||
}
|
||||
if (!(variable is IIndexable indexable))
|
||||
{
|
||||
throw new Exception("Variable is not indexable.");
|
||||
throw new EvaluationException(_script.FileName,
|
||||
$"Variable of type '{variable.Type}' is not indexable.", e.Span);
|
||||
}
|
||||
|
||||
var scope = Scope;
|
||||
|
|
Loading…
Reference in New Issue