Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1345c1f

Browse files
Add expecting tokens info in parse error
1 parent e4ab641 commit 1345c1f

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

‎PHP.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7491,8 +7491,32 @@ PHP.Parser = function ( preprocessedTokens, eval ) {
74917491
} else {
74927492
/* error */
74937493
if (eval !== true) {
7494-
throw new PHP.ParseError("syntax error, unexpected " + terminals[ tokenId ] + ", expecting identifier", this.startAttributes['startLine']);
7495-
throw new Error('Unexpected token ' + terminals[ tokenId ] + ", tokenId " + tokenId + " line " + this.startAttributes['startLine']);
7494+
7495+
var expected = [];
7496+
7497+
for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {
7498+
if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i
7499+
|| state < this.YY2TBLSTATE
7500+
&& (yyn = yybase[ state + this.YYNLSTATES] + i)
7501+
&& yyn < this.YYLAST && yycheck[ yyn ] == i
7502+
) {
7503+
if (yyaction[ yyn ] != this.YYUNEXPECTED) {
7504+
if (expected.length == 4) {
7505+
/* Too many expected tokens */
7506+
expected = [];
7507+
break;
7508+
}
7509+
7510+
expected.push( this.terminals[ i ] );
7511+
}
7512+
}
7513+
}
7514+
7515+
var expectedString = '';
7516+
if (expected.length) {
7517+
expectedString = ', expecting ' + expected.join(' or ');
7518+
}
7519+
throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);
74967520
} else {
74977521
return this.startAttributes['startLine'];
74987522
}

‎src/parser/parser.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,32 @@ PHP.Parser = function ( preprocessedTokens, eval ) {
177177
} else {
178178
/* error */
179179
if (eval !== true) {
180-
throw new PHP.ParseError("syntax error, unexpected " + terminals[ tokenId ] + ", expecting identifier", this.startAttributes['startLine']);
181-
throw new Error('Unexpected token ' + terminals[ tokenId ] + ", tokenId " + tokenId + " line " + this.startAttributes['startLine']);
180+
181+
var expected = [];
182+
183+
for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {
184+
if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i
185+
|| state < this.YY2TBLSTATE
186+
&& (yyn = yybase[ state + this.YYNLSTATES] + i)
187+
&& yyn < this.YYLAST && yycheck[ yyn ] == i
188+
) {
189+
if (yyaction[ yyn ] != this.YYUNEXPECTED) {
190+
if (expected.length == 4) {
191+
/* Too many expected tokens */
192+
expected = [];
193+
break;
194+
}
195+
196+
expected.push( this.terminals[ i ] );
197+
}
198+
}
199+
}
200+
201+
var expectedString = '';
202+
if (expected.length) {
203+
expectedString = ', expecting ' + expected.join(' or ');
204+
}
205+
throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);
182206
} else {
183207
return this.startAttributes['startLine'];
184208
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /