- Fix code editor resize problems

- Fix crash when using `get` our `out` multiple times with the same variable name
- Show the name of the file in which the error occured
This commit is contained in:
Stone_Red
2022-01-13 07:30:37 +01:00
parent 719db0f74b
commit ea5bbda2c7
8 changed files with 76 additions and 29 deletions
+16
View File
@@ -0,0 +1,16 @@
namespace YesNt.Interpreter.Runtime
{
internal class Line
{
public Line(string content, string fileName, int lineNumber)
{
Content = content;
FileName = fileName;
LineNumber = lineNumber;
}
public string Content { get; set; }
public string FileName { get; set; }
public int LineNumber { get; set; }
}
}
@@ -19,7 +19,7 @@ namespace YesNt.Interpreter
public Stack<FunctionScope> FunctionCallStack { get; } = new();
public Stack<string> InParametersStack { get; } = new();
public Stack<string> OutParametersStack { get; set; } = new();
public List<string> Lines { get; set; } = new();
public List<Line> Lines { get; set; } = new();
public string CurrentLine { get; set; } = string.Empty;
public string SearchLabel { get; set; } = string.Empty;
public string SearchFunction { get; set; } = string.Empty;
@@ -132,7 +132,8 @@ namespace YesNt.Interpreter
{
if (!Stop)
{
WriteLine($"{Environment.NewLine}[{(IsTask ? $"Task: {TaskId}" : "The process")} was terminated at line {LineNumber + 1} with the message: {message}]", true);
Line line = Lines[Math.Min(LineNumber, Lines.Count - 1)];
WriteLine($"{Environment.NewLine}[{(IsTask ? $"Task: {TaskId}" : "The process")} was terminated at line {line.LineNumber + 1} in the file \"{line.FileName}\" with the message: {message}]", true);
Stop = true;
}
if (stopAllTasks == true && StopAllTasks == false)
@@ -99,7 +99,7 @@ namespace YesNt.Interpreter
Execute();
}
internal void Execute(List<string> lines, Dictionary<string, string> gloablVariables, int startLine, RuntimeInformation parentRuntimeInformation)
internal void Execute(List<Line> lines, Dictionary<string, string> gloablVariables, int startLine, RuntimeInformation parentRuntimeInformation)
{
runtimeInfo.Reset();
runtimeInfo.IsDebugMode = parentRuntimeInformation.IsDebugMode;
@@ -124,7 +124,7 @@ namespace YesNt.Interpreter
break;
}
runtimeInfo.CurrentLine = runtimeInfo.Lines[runtimeInfo.LineNumber].TrimEnd().Replace("\r", string.Empty);
runtimeInfo.CurrentLine = runtimeInfo.Lines[runtimeInfo.LineNumber].Content.TrimEnd().Replace("\r", string.Empty);
DebugEventArgs debugEventArgs = new DebugEventArgs()
{
@@ -134,7 +134,7 @@ namespace YesNt.Interpreter
TaskId = runtimeInfo.TaskId
};
if (string.IsNullOrWhiteSpace(runtimeInfo.CurrentLine))
if (string.IsNullOrWhiteSpace(runtimeInfo.CurrentLine) || runtimeInfo.CurrentLine.StartsWith('#'))
{
continue;
}
@@ -254,8 +254,12 @@ namespace YesNt.Interpreter
return;
}
IEnumerable<string> lines = File.ReadAllLines(path);
runtimeInfo.Lines.AddRange(lines);
string[] lines = File.ReadAllLines(path);
for (int i = 0; i < lines.Length; i++)
{
runtimeInfo.Lines.Add(new Line(lines[i], Path.GetFileName(path), i));
}
}
}
}