Skip to content

Commit 5faad01

Browse files
committed
show start of node in eof error
1 parent 11a0f42 commit 5faad01

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

source/error.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ struct ErrorInfo {
1313
size_t line;
1414
size_t col;
1515
size_t length;
16+
17+
string toString() => format("%s:%d:%d", file, line, col);
1618
}
1719

1820
private string FixPath(string path) => path.asRelativePath(getcwd()).array;

source/parser.d

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,7 @@ class Parser {
574574
size_t i;
575575
Node[] nodes;
576576
NodeType parsing;
577+
Token parseStart;
577578

578579
this() {
579580

@@ -597,7 +598,7 @@ class Parser {
597598

598599
if (i >= tokens.length) {
599600
-- i;
600-
Error("Unexpected EOF while parsing %s", parsing);
601+
Error("Unexpected EOF while parsing %s at %s", parsing, parseStart.GetError());
601602
}
602603
}
603604

@@ -641,6 +642,7 @@ class Parser {
641642
auto ret = new FuncDefNode(GetError());
642643
ret.inline = inline;
643644
parsing = NodeType.FuncDef;
645+
parseStart = tokens[i];
644646

645647
bool readingAttr = true;
646648
while (readingAttr) {
@@ -709,6 +711,7 @@ class Parser {
709711
Node ParseInclude() {
710712
auto ret = new IncludeNode(GetError());
711713
parsing = NodeType.Include;
714+
parseStart = tokens[i];
712715

713716
Next();
714717
Expect(TokenType.String);
@@ -720,6 +723,7 @@ class Parser {
720723
Node ParseAsm() {
721724
auto ret = new AsmNode(GetError());
722725
parsing = NodeType.Asm;
726+
parseStart = tokens[i];
723727
Next();
724728

725729
while (true) {
@@ -751,6 +755,7 @@ class Parser {
751755
ret.condition ~= new Node[](0);
752756
ret.doIf ~= new Node[](0);
753757
parsing = NodeType.If;
758+
parseStart = tokens[i];
754759
Next();
755760

756761
while (true) {
@@ -820,6 +825,7 @@ class Parser {
820825
Node ParseWhile() {
821826
auto ret = new WhileNode(GetError());
822827
parsing = NodeType.While;
828+
parseStart = tokens[i];
823829
Next();
824830

825831
while (true) {
@@ -857,6 +863,7 @@ class Parser {
857863
Node ParseLet() {
858864
auto ret = new LetNode(GetError());
859865
parsing = NodeType.Let;
866+
parseStart = tokens[i];
860867

861868
Next();
862869
Expect(TokenType.Identifier);
@@ -882,6 +889,7 @@ class Parser {
882889
Node ParseEnable() {
883890
auto ret = new EnableNode(GetError());
884891
parsing = NodeType.Enable;
892+
parseStart = tokens[i];
885893

886894
Next();
887895
Expect(TokenType.Identifier);
@@ -893,6 +901,7 @@ class Parser {
893901
Node ParseRequires() {
894902
auto ret = new RequiresNode(GetError());
895903
parsing = NodeType.Requires;
904+
parseStart = tokens[i];
896905

897906
Next();
898907
Expect(TokenType.Identifier);
@@ -904,6 +913,7 @@ class Parser {
904913
Node ParseArray() {
905914
auto ret = new ArrayNode(GetError());
906915
parsing = NodeType.Array;
916+
parseStart = tokens[i];
907917

908918
switch (tokens[i].contents) {
909919
case "c": {
@@ -937,6 +947,7 @@ class Parser {
937947
Node ParseString() {
938948
auto ret = new StringNode(GetError());
939949
parsing = NodeType.String;
950+
parseStart = tokens[i];
940951

941952
switch (tokens[i].extra) {
942953
case "c": {
@@ -956,6 +967,7 @@ class Parser {
956967
Node ParseStruct() {
957968
auto ret = new StructNode(GetError());
958969
parsing = NodeType.Struct;
970+
parseStart = tokens[i];
959971

960972
Next();
961973
Expect(TokenType.Identifier);
@@ -1016,6 +1028,7 @@ class Parser {
10161028
Node ParseVersion() {
10171029
auto ret = new VersionNode(GetError());
10181030
parsing = NodeType.Version;
1031+
parseStart = tokens[i];
10191032

10201033
Next();
10211034
Expect(TokenType.Identifier);
@@ -1047,6 +1060,7 @@ class Parser {
10471060
Node ParseConst() {
10481061
auto ret = new ConstNode(GetError());
10491062
parsing = NodeType.Const;
1063+
parseStart = tokens[i];
10501064

10511065
Next();
10521066
Expect(TokenType.Identifier);
@@ -1062,6 +1076,7 @@ class Parser {
10621076
Node ParseEnum() {
10631077
auto ret = new EnumNode(GetError());
10641078
parsing = NodeType.Enum;
1079+
parseStart = tokens[i];
10651080

10661081
Next();
10671082
Expect(TokenType.Identifier);
@@ -1106,6 +1121,7 @@ class Parser {
11061121
Node ParseRestrict() {
11071122
auto ret = new RestrictNode(GetError());
11081123
parsing = NodeType.Restrict;
1124+
parseStart = tokens[i];
11091125

11101126
Next();
11111127
Expect(TokenType.Identifier);
@@ -1117,6 +1133,7 @@ class Parser {
11171133
Node ParseUnion() {
11181134
auto ret = new UnionNode(GetError());
11191135
parsing = NodeType.Union;
1136+
parseStart = tokens[i];
11201137

11211138
Next();
11221139
Expect(TokenType.Identifier);
@@ -1140,6 +1157,7 @@ class Parser {
11401157
Node ParseAlias() {
11411158
auto ret = new AliasNode(GetError());
11421159
parsing = NodeType.Alias;
1160+
parseStart = tokens[i];
11431161

11441162
Next();
11451163
Expect(TokenType.Identifier);
@@ -1162,6 +1180,7 @@ class Parser {
11621180
Node ParseExtern() {
11631181
auto ret = new ExternNode(GetError());
11641182
parsing = NodeType.Extern;
1183+
parseStart = tokens[i];
11651184

11661185
Next();
11671186
Expect(TokenType.Identifier);
@@ -1213,6 +1232,7 @@ class Parser {
12131232
Node ParseAddr() {
12141233
auto ret = new AddrNode(GetError());
12151234
parsing = NodeType.Addr;
1235+
parseStart = tokens[i];
12161236

12171237
Next();
12181238
Expect(TokenType.Identifier);
@@ -1224,6 +1244,7 @@ class Parser {
12241244
Node ParseImplement() {
12251245
auto ret = new ImplementNode(GetError());
12261246
parsing = NodeType.Implement;
1247+
parseStart = tokens[i];
12271248

12281249
Next();
12291250
Expect(TokenType.Identifier);
@@ -1257,6 +1278,7 @@ class Parser {
12571278
Node ParseSet() {
12581279
auto ret = new SetNode(GetError());
12591280
parsing = NodeType.Set;
1281+
parseStart = tokens[i];
12601282

12611283
Next();
12621284
Expect(TokenType.Identifier);
@@ -1268,6 +1290,7 @@ class Parser {
12681290
Node ParseTryCatch() {
12691291
auto ret = new TryCatchNode(GetError());
12701292
parsing = NodeType.TryCatch;
1293+
parseStart = tokens[i];
12711294

12721295
Next();
12731296
Expect(TokenType.Identifier);
@@ -1289,6 +1312,7 @@ class Parser {
12891312
Node ParseUnsafe() {
12901313
auto ret = new UnsafeNode(GetError());
12911314
parsing = NodeType.Unsafe;
1315+
parseStart = tokens[i];
12921316

12931317
Next();
12941318

0 commit comments

Comments
 (0)