@@ -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