Fix error when trying to generate PDT error message at the very beginning or end of the source.

This commit is contained in:
2023-04-08 13:31:26 +08:00
parent 3d8a4a64a9
commit 916c55b4b2

View File

@@ -1,10 +1,10 @@
using Cryville.Common.Collections; using Cryville.Common.Collections;
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using CMath = System.Math;
namespace Cryville.Common.Pdt { namespace Cryville.Common.Pdt {
/// <summary> /// <summary>
@@ -302,13 +302,13 @@ namespace Cryville.Common.Pdt {
int pos = interpreter.Position; int pos = interpreter.Position;
if (pos >= src.Length) return "Failed to interpret the PDT: There are some missing or redundant tokens"; if (pos >= src.Length) return "Failed to interpret the PDT: There are some missing or redundant tokens";
int lineStartPos = src.LastIndexOf('\n', pos) + 1; int lineStartPos = src.LastIndexOf('\n', pos) + 1;
int previewStartPos = src.LastIndexOf('\n', pos, 64); int previewStartPos = src.LastIndexOf('\n', pos, CMath.Min(64, pos));
if (previewStartPos == -1) { if (previewStartPos == -1) {
previewStartPos = pos - 64; previewStartPos = pos - 64;
if (previewStartPos < 0) previewStartPos = 0; if (previewStartPos < 0) previewStartPos = 0;
} }
else previewStartPos++; else previewStartPos++;
int previewEndPos = src.IndexOf('\n', pos, 64); int previewEndPos = src.IndexOf('\n', pos, CMath.Min(64, src.Length - pos));
if (previewEndPos == -1) { if (previewEndPos == -1) {
previewEndPos = pos + 64; previewEndPos = pos + 64;
if (previewEndPos > src.Length) previewEndPos = src.Length; if (previewEndPos > src.Length) previewEndPos = src.Length;