This is an automated email from the ASF dual-hosted git repository.
markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push:
new 4b67be6578 Ensure internal state is reset before re-using ELParser
4b67be6578 is described below
commit 4b67be657895fb080307b3539d68a2eb35910b40
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Jul 9 15:22:01 2026 +0100
Ensure internal state is reset before re-using ELParser
---
java/org/apache/el/parser/ELParser.java | 537 +++++++++++----------
java/org/apache/el/parser/ELParser.jjt | 10 +
.../org/apache/el/parser/ELParserTokenManager.java | 9 +
java/org/apache/el/parser/NodeVisitor.java | 1 +
webapps/docs/changelog.xml | 3 +
5 files changed, 292 insertions(+), 268 deletions(-)
diff --git a/java/org/apache/el/parser/ELParser.java
b/java/org/apache/el/parser/ELParser.java
index 094373b47e..d4f679a85f 100644
--- a/java/org/apache/el/parser/ELParser.java
+++ b/java/org/apache/el/parser/ELParser.java
@@ -35,6 +35,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
boolean jjtc000 = true;
jjtree.openNodeScope(jjtn000);
try {
+ token_source.reset();
label_1:
while (true) {
switch ((jj_ntk == -1) ? jj_ntk_f() : jj_ntk) {
@@ -594,7 +595,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
}
/*
- * Ternary For '?:' '? :', then Or
+ * Ternary For '??' '?:' '? :', then Or
*/
final public void Ternary() throws ParseException {
Or();
@@ -2783,30 +2784,72 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
}
}
- private boolean jj_3R_LambdaExpressionOrInvocation_144_45_28() {
- if (jj_3R_Ternary_155_5_30()) {
+ private boolean jj_3R_Equality_185_5_45() {
+ if (jj_3R_Compare_199_5_48()) {
+ return true;
+ }
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_Equality_187_9_49()) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_MapEntry_374_5_111() {
+ if (jj_3R_Expression_95_5_33()) {
+ return true;
+ }
+ if (jj_scan_token(COLON)) {
+ return true;
+ }
+ if (jj_3R_Expression_95_5_33()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_MapData_368_11_109() {
+ if (jj_3R_MapEntry_374_5_111()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_LambdaExpression_120_68_27() {
+ if (jj_3R_Ternary_151_5_30()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_LambdaExpressionOrInvocation_140_45_28() {
+ if (jj_3R_Ternary_151_5_30()) {
return true;
}
return false;
}
- private boolean jj_3R_SetData_353_26_34() {
+ private boolean jj_3R_SetData_349_26_34() {
if (jj_scan_token(COMMA)) {
return true;
}
- if (jj_3R_Expression_99_5_33()) {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
return false;
}
- private boolean jj_3R_MapData_371_5_103() {
+ private boolean jj_3R_MapData_367_5_103() {
if (jj_scan_token(START_SET_OR_MAP)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_MapData_372_11_109()) {
+ if (jj_3R_MapData_368_11_109()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RBRACE)) {
@@ -2815,26 +2858,26 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_And_180_5_40() {
- if (jj_3R_Equality_189_5_45()) {
+ private boolean jj_3R_And_176_5_40() {
+ if (jj_3R_Equality_185_5_45()) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_And_181_17_46()) {
+ if (jj_3R_And_177_17_46()) {
jj_scanpos = xsp;
}
return false;
}
- private boolean jj_3R_Or_172_12_42() {
+ private boolean jj_3R_Or_168_12_42() {
Token xsp;
- if (jj_3R_Or_171_13_47()) {
+ if (jj_3R_Or_167_13_47()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Or_171_13_47()) {
+ if (jj_3R_Or_167_13_47()) {
jj_scanpos = xsp;
break;
}
@@ -2842,7 +2885,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Or_171_13_47() {
+ private boolean jj_3R_Or_167_13_47() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(41)) {
@@ -2851,20 +2894,20 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_And_180_5_40()) {
+ if (jj_3R_And_176_5_40()) {
return true;
}
return false;
}
- private boolean jj_3R_ListData_360_11_108() {
- if (jj_3R_Expression_99_5_33()) {
+ private boolean jj_3R_ListData_356_11_108() {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_ListData_360_26_113()) {
+ if (jj_3R_ListData_356_26_113()) {
jj_scanpos = xsp;
break;
}
@@ -2872,35 +2915,35 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_LambdaParameters_132_46_41() {
+ private boolean jj_3R_LambdaParameters_128_46_41() {
if (jj_scan_token(COMMA)) {
return true;
}
- if (jj_3R_Identifier_387_5_36()) {
+ if (jj_3R_Identifier_383_5_36()) {
return true;
}
return false;
}
- private boolean jj_3R_Or_171_5_35() {
- if (jj_3R_And_180_5_40()) {
+ private boolean jj_3R_Or_167_5_35() {
+ if (jj_3R_And_176_5_40()) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Or_172_12_42()) {
+ if (jj_3R_Or_168_12_42()) {
jj_scanpos = xsp;
}
return false;
}
- private boolean jj_3R_ListData_359_5_102() {
+ private boolean jj_3R_ListData_355_5_102() {
if (jj_scan_token(LBRACK)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_ListData_360_11_108()) {
+ if (jj_3R_ListData_356_11_108()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RBRACK)) {
@@ -2909,14 +2952,14 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_SetData_353_11_29() {
- if (jj_3R_Expression_99_5_33()) {
+ private boolean jj_3R_SetData_349_11_29() {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_SetData_353_26_34()) {
+ if (jj_3R_SetData_349_26_34()) {
jj_scanpos = xsp;
break;
}
@@ -2924,11 +2967,11 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Ternary_161_9_43() {
+ private boolean jj_3R_Ternary_157_9_43() {
if (jj_scan_token(QUESTIONMARK)) {
return true;
}
- if (jj_3R_Ternary_155_5_30()) {
+ if (jj_3R_Ternary_151_5_30()) {
return true;
}
if (jj_scan_token(COLON)) {
@@ -2944,27 +2987,27 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
if (jj_scan_token(COLON)) {
return true;
}
- if (jj_3R_Ternary_155_5_30()) {
+ if (jj_3R_Ternary_151_5_30()) {
return true;
}
return false;
}
- private boolean jj_3R_MethodParameters_327_31_115() {
+ private boolean jj_3R_MethodParameters_323_31_115() {
if (jj_scan_token(COMMA)) {
return true;
}
return false;
}
- private boolean jj_3R_Ternary_157_9_38() {
+ private boolean jj_3R_Ternary_153_9_38() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_5()) {
jj_scanpos = xsp;
if (jj_3_6()) {
jj_scanpos = xsp;
- if (jj_3R_Ternary_161_9_43()) {
+ if (jj_3R_Ternary_157_9_43()) {
return true;
}
}
@@ -2979,19 +3022,19 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
if (jj_scan_token(QUESTIONMARK)) {
return true;
}
- if (jj_3R_Ternary_155_5_30()) {
+ if (jj_3R_Ternary_151_5_30()) {
return true;
}
return false;
}
- private boolean jj_3R_SetData_352_5_24() {
+ private boolean jj_3R_SetData_348_5_24() {
if (jj_scan_token(START_SET_OR_MAP)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_SetData_353_11_29()) {
+ if (jj_3R_SetData_349_11_29()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RBRACE)) {
@@ -3000,7 +3043,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_null_338_18_23() {
+ private boolean jj_3R_null_334_18_23() {
if (jj_scan_token(IDENTIFIER)) {
return true;
}
@@ -3013,7 +3056,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
private boolean jj_3_9() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_null_338_18_23()) {
+ if (jj_3R_null_334_18_23()) {
jj_scanpos = xsp;
}
if (jj_scan_token(IDENTIFIER)) {
@@ -3025,14 +3068,14 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_LambdaParameters_132_31_37() {
- if (jj_3R_Identifier_387_5_36()) {
+ private boolean jj_3R_LambdaParameters_128_31_37() {
+ if (jj_3R_Identifier_383_5_36()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_LambdaParameters_132_46_41()) {
+ if (jj_3R_LambdaParameters_128_46_41()) {
jj_scanpos = xsp;
break;
}
@@ -3040,14 +3083,14 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Ternary_155_5_30() {
- if (jj_3R_Or_171_5_35()) {
+ private boolean jj_3R_Ternary_151_5_30() {
+ if (jj_3R_Or_167_5_35()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Ternary_157_9_38()) {
+ if (jj_3R_Ternary_153_9_38()) {
jj_scanpos = xsp;
break;
}
@@ -3055,60 +3098,60 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_NonLiteral_342_7_93() {
- if (jj_3R_MapData_371_5_103()) {
+ private boolean jj_3R_NonLiteral_338_7_93() {
+ if (jj_3R_MapData_367_5_103()) {
return true;
}
return false;
}
private boolean jj_3_3() {
- if (jj_3R_LambdaExpression_124_5_21()) {
+ if (jj_3R_LambdaExpression_120_5_21()) {
return true;
}
return false;
}
- private boolean jj_3R_NonLiteral_341_7_92() {
- if (jj_3R_ListData_359_5_102()) {
+ private boolean jj_3R_NonLiteral_337_7_92() {
+ if (jj_3R_ListData_355_5_102()) {
return true;
}
return false;
}
private boolean jj_3_10() {
- if (jj_3R_SetData_352_5_24()) {
+ if (jj_3R_SetData_348_5_24()) {
return true;
}
return false;
}
- private boolean jj_3R_NonLiteral_339_7_91() {
- if (jj_3R_Identifier_387_5_36()) {
+ private boolean jj_3R_NonLiteral_335_7_91() {
+ if (jj_3R_Identifier_383_5_36()) {
return true;
}
return false;
}
private boolean jj_3_4() {
- if (jj_3R_LambdaExpression_124_5_21()) {
+ if (jj_3R_LambdaExpression_120_5_21()) {
return true;
}
return false;
}
- private boolean jj_3R_NonLiteral_338_7_90() {
- if (jj_3R_Function_400_5_101()) {
+ private boolean jj_3R_NonLiteral_334_7_90() {
+ if (jj_3R_Function_396_5_101()) {
return true;
}
return false;
}
- private boolean jj_3R_NonLiteral_337_7_89() {
+ private boolean jj_3R_NonLiteral_333_7_89() {
if (jj_scan_token(LPAREN)) {
return true;
}
- if (jj_3R_Expression_99_5_33()) {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
if (jj_scan_token(RPAREN)) {
@@ -3117,14 +3160,14 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_MethodParameters_327_16_114() {
- if (jj_3R_Expression_99_5_33()) {
+ private boolean jj_3R_MethodParameters_323_16_114() {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_MethodParameters_327_31_115()) {
+ if (jj_3R_MethodParameters_323_31_115()) {
jj_scanpos = xsp;
break;
}
@@ -3132,13 +3175,13 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_LambdaParameters_132_20_32() {
+ private boolean jj_3R_LambdaParameters_128_20_32() {
if (jj_scan_token(LPAREN)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_LambdaParameters_132_31_37()) {
+ if (jj_3R_LambdaParameters_128_31_37()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RPAREN)) {
@@ -3147,29 +3190,29 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_ValueSuffix_301_41_112() {
- if (jj_3R_MethodParameters_327_5_110()) {
+ private boolean jj_3R_ValueSuffix_297_41_112() {
+ if (jj_3R_MethodParameters_323_5_110()) {
return true;
}
return false;
}
- private boolean jj_3R_NonLiteral_336_5_81() {
+ private boolean jj_3R_NonLiteral_332_5_81() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_8()) {
jj_scanpos = xsp;
- if (jj_3R_NonLiteral_337_7_89()) {
+ if (jj_3R_NonLiteral_333_7_89()) {
jj_scanpos = xsp;
- if (jj_3R_NonLiteral_338_7_90()) {
+ if (jj_3R_NonLiteral_334_7_90()) {
jj_scanpos = xsp;
- if (jj_3R_NonLiteral_339_7_91()) {
+ if (jj_3R_NonLiteral_335_7_91()) {
jj_scanpos = xsp;
if (jj_3_10()) {
jj_scanpos = xsp;
- if (jj_3R_NonLiteral_341_7_92()) {
+ if (jj_3R_NonLiteral_337_7_92()) {
jj_scanpos = xsp;
- if (jj_3R_NonLiteral_342_7_93()) {
+ if (jj_3R_NonLiteral_338_7_93()) {
return true;
}
}
@@ -3182,17 +3225,17 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
}
private boolean jj_3_8() {
- if (jj_3R_LambdaExpressionOrInvocation_141_5_22()) {
+ if (jj_3R_LambdaExpressionOrInvocation_137_5_22()) {
return true;
}
return false;
}
- private boolean jj_3R_LambdaExpressionOrInvocation_141_5_22() {
+ private boolean jj_3R_LambdaExpressionOrInvocation_137_5_22() {
if (jj_scan_token(LPAREN)) {
return true;
}
- if (jj_3R_LambdaParameters_132_5_26()) {
+ if (jj_3R_LambdaParameters_128_5_26()) {
return true;
}
if (jj_scan_token(ARROW)) {
@@ -3202,7 +3245,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
xsp = jj_scanpos;
if (jj_3_4()) {
jj_scanpos = xsp;
- if (jj_3R_LambdaExpressionOrInvocation_144_45_28()) {
+ if (jj_3R_LambdaExpressionOrInvocation_140_45_28()) {
return true;
}
}
@@ -3212,13 +3255,13 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_MethodParameters_327_5_110() {
+ private boolean jj_3R_MethodParameters_323_5_110() {
if (jj_scan_token(LPAREN)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_MethodParameters_327_16_114()) {
+ if (jj_3R_MethodParameters_323_16_114()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RPAREN)) {
@@ -3227,30 +3270,30 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_LambdaParameters_132_5_31() {
- if (jj_3R_Identifier_387_5_36()) {
+ private boolean jj_3R_LambdaParameters_128_5_31() {
+ if (jj_3R_Identifier_383_5_36()) {
return true;
}
return false;
}
- private boolean jj_3R_LambdaParameters_132_5_26() {
+ private boolean jj_3R_LambdaParameters_128_5_26() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_LambdaParameters_132_5_31()) {
+ if (jj_3R_LambdaParameters_128_5_31()) {
jj_scanpos = xsp;
- if (jj_3R_LambdaParameters_132_20_32()) {
+ if (jj_3R_LambdaParameters_128_20_32()) {
return true;
}
}
return false;
}
- private boolean jj_3R_BracketSuffix_319_5_95() {
+ private boolean jj_3R_BracketSuffix_315_5_95() {
if (jj_scan_token(LBRACK)) {
return true;
}
- if (jj_3R_Expression_99_5_33()) {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
if (jj_scan_token(RBRACK)) {
@@ -3263,21 +3306,21 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
if (jj_scan_token(ASSIGN)) {
return true;
}
- if (jj_3R_Assignment_115_5_20()) {
+ if (jj_3R_Assignment_111_5_20()) {
return true;
}
return false;
}
- private boolean jj_3R_ValueSuffix_301_21_83() {
- if (jj_3R_BracketSuffix_319_5_95()) {
+ private boolean jj_3R_ValueSuffix_297_21_83() {
+ if (jj_3R_BracketSuffix_315_5_95()) {
return true;
}
return false;
}
- private boolean jj_3R_LambdaExpression_124_5_21() {
- if (jj_3R_LambdaParameters_132_5_26()) {
+ private boolean jj_3R_LambdaExpression_120_5_21() {
+ if (jj_3R_LambdaParameters_128_5_26()) {
return true;
}
if (jj_scan_token(ARROW)) {
@@ -3287,24 +3330,24 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
xsp = jj_scanpos;
if (jj_3_3()) {
jj_scanpos = xsp;
- if (jj_3R_LambdaExpression_124_68_27()) {
+ if (jj_3R_LambdaExpression_120_68_27()) {
return true;
}
}
return false;
}
- private boolean jj_3R_Semicolon_107_20_44() {
+ private boolean jj_3R_Semicolon_103_20_44() {
if (jj_scan_token(SEMICOLON)) {
return true;
}
- if (jj_3R_Assignment_115_5_20()) {
+ if (jj_3R_Assignment_111_5_20()) {
return true;
}
return false;
}
- private boolean jj_3R_DotSuffix_310_5_94() {
+ private boolean jj_3R_DotSuffix_306_5_94() {
if (jj_scan_token(DOT)) {
return true;
}
@@ -3314,8 +3357,8 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Assignment_116_5_25() {
- if (jj_3R_Ternary_155_5_30()) {
+ private boolean jj_3R_Assignment_112_5_25() {
+ if (jj_3R_Ternary_151_5_30()) {
return true;
}
Token xsp;
@@ -3330,62 +3373,62 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
}
private boolean jj_3_2() {
- if (jj_3R_LambdaExpression_124_5_21()) {
+ if (jj_3R_LambdaExpression_120_5_21()) {
return true;
}
return false;
}
- private boolean jj_3R_Assignment_115_5_20() {
+ private boolean jj_3R_Assignment_111_5_20() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_2()) {
jj_scanpos = xsp;
- if (jj_3R_Assignment_116_5_25()) {
+ if (jj_3R_Assignment_112_5_25()) {
return true;
}
}
return false;
}
- private boolean jj_3R_ValueSuffix_301_7_82() {
- if (jj_3R_DotSuffix_310_5_94()) {
+ private boolean jj_3R_ValueSuffix_297_7_82() {
+ if (jj_3R_DotSuffix_306_5_94()) {
return true;
}
return false;
}
- private boolean jj_3R_ValueSuffix_301_5_79() {
+ private boolean jj_3R_ValueSuffix_297_5_79() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_ValueSuffix_301_7_82()) {
+ if (jj_3R_ValueSuffix_297_7_82()) {
jj_scanpos = xsp;
- if (jj_3R_ValueSuffix_301_21_83()) {
+ if (jj_3R_ValueSuffix_297_21_83()) {
return true;
}
}
xsp = jj_scanpos;
- if (jj_3R_ValueSuffix_301_41_112()) {
+ if (jj_3R_ValueSuffix_297_41_112()) {
jj_scanpos = xsp;
}
return false;
}
- private boolean jj_3R_Value_282_21_76() {
- if (jj_3R_ValueSuffix_301_5_79()) {
+ private boolean jj_3R_Value_278_21_76() {
+ if (jj_3R_ValueSuffix_297_5_79()) {
return true;
}
return false;
}
- private boolean jj_3R_Semicolon_107_5_39() {
- if (jj_3R_Assignment_115_5_20()) {
+ private boolean jj_3R_Semicolon_103_5_39() {
+ if (jj_3R_Assignment_111_5_20()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Semicolon_107_20_44()) {
+ if (jj_3R_Semicolon_103_20_44()) {
jj_scanpos = xsp;
break;
}
@@ -3393,47 +3436,47 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_ValuePrefix_292_7_78() {
- if (jj_3R_NonLiteral_336_5_81()) {
+ private boolean jj_3R_ValuePrefix_288_7_78() {
+ if (jj_3R_NonLiteral_332_5_81()) {
return true;
}
return false;
}
- private boolean jj_3R_ValuePrefix_291_5_77() {
- if (jj_3R_Literal_418_5_80()) {
+ private boolean jj_3R_ValuePrefix_287_5_77() {
+ if (jj_3R_Literal_414_5_80()) {
return true;
}
return false;
}
- private boolean jj_3R_ValuePrefix_291_5_75() {
+ private boolean jj_3R_ValuePrefix_287_5_75() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_ValuePrefix_291_5_77()) {
+ if (jj_3R_ValuePrefix_287_5_77()) {
jj_scanpos = xsp;
- if (jj_3R_ValuePrefix_292_7_78()) {
+ if (jj_3R_ValuePrefix_288_7_78()) {
return true;
}
}
return false;
}
- private boolean jj_3R_Expression_99_5_33() {
- if (jj_3R_Semicolon_107_5_39()) {
+ private boolean jj_3R_Expression_95_5_33() {
+ if (jj_3R_Semicolon_103_5_39()) {
return true;
}
return false;
}
- private boolean jj_3R_Value_282_5_74() {
- if (jj_3R_ValuePrefix_291_5_75()) {
+ private boolean jj_3R_Value_278_5_74() {
+ if (jj_3R_ValuePrefix_287_5_75()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Value_282_21_76()) {
+ if (jj_3R_Value_278_21_76()) {
jj_scanpos = xsp;
break;
}
@@ -3441,31 +3484,31 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Null_468_5_100() {
+ private boolean jj_3R_Null_464_5_100() {
if (jj_scan_token(NULL)) {
return true;
}
return false;
}
- private boolean jj_3R_Unary_273_9_70() {
- if (jj_3R_Value_282_5_74()) {
+ private boolean jj_3R_Unary_269_9_70() {
+ if (jj_3R_Value_278_5_74()) {
return true;
}
return false;
}
- private boolean jj_3R_Unary_271_9_69() {
+ private boolean jj_3R_Unary_267_9_69() {
if (jj_scan_token(EMPTY)) {
return true;
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
}
- private boolean jj_3R_Unary_269_9_68() {
+ private boolean jj_3R_Unary_265_9_68() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(37)) {
@@ -3474,7 +3517,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
@@ -3492,31 +3535,31 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
if (jj_scan_token(EMPTY)) {
return true;
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
}
- private boolean jj_3R_String_459_5_99() {
+ private boolean jj_3R_String_455_5_99() {
if (jj_scan_token(STRING_LITERAL)) {
return true;
}
return false;
}
- private boolean jj_3R_Unary_264_9_63() {
+ private boolean jj_3R_Unary_260_9_63() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Unary_264_9_67()) {
+ if (jj_3R_Unary_260_9_67()) {
jj_scanpos = xsp;
if (jj_3_7()) {
jj_scanpos = xsp;
- if (jj_3R_Unary_269_9_68()) {
+ if (jj_3R_Unary_265_9_68()) {
jj_scanpos = xsp;
- if (jj_3R_Unary_271_9_69()) {
+ if (jj_3R_Unary_267_9_69()) {
jj_scanpos = xsp;
- if (jj_3R_Unary_273_9_70()) {
+ if (jj_3R_Unary_269_9_70()) {
return true;
}
}
@@ -3526,24 +3569,24 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Unary_264_9_67() {
+ private boolean jj_3R_Unary_260_9_67() {
if (jj_scan_token(MINUS)) {
return true;
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
}
- private boolean jj_3R_Integer_450_5_98() {
+ private boolean jj_3R_Integer_446_5_98() {
if (jj_scan_token(INTEGER_LITERAL)) {
return true;
}
return false;
}
- private boolean jj_3R_Multiplication_254_9_73() {
+ private boolean jj_3R_Multiplication_250_9_73() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(50)) {
@@ -3552,13 +3595,13 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
}
- private boolean jj_3R_Multiplication_252_9_72() {
+ private boolean jj_3R_Multiplication_248_9_72() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(48)) {
@@ -3567,20 +3610,20 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
}
- private boolean jj_3R_Multiplication_250_9_64() {
+ private boolean jj_3R_Multiplication_246_9_64() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Multiplication_250_9_71()) {
+ if (jj_3R_Multiplication_246_9_71()) {
jj_scanpos = xsp;
- if (jj_3R_Multiplication_252_9_72()) {
+ if (jj_3R_Multiplication_248_9_72()) {
jj_scanpos = xsp;
- if (jj_3R_Multiplication_254_9_73()) {
+ if (jj_3R_Multiplication_250_9_73()) {
return true;
}
}
@@ -3588,31 +3631,31 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Multiplication_250_9_71() {
+ private boolean jj_3R_Multiplication_246_9_71() {
if (jj_scan_token(MULT)) {
return true;
}
- if (jj_3R_Unary_264_9_63()) {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
return false;
}
- private boolean jj_3R_FloatingPoint_441_5_97() {
+ private boolean jj_3R_FloatingPoint_437_5_97() {
if (jj_scan_token(FLOATING_POINT_LITERAL)) {
return true;
}
return false;
}
- private boolean jj_3R_Multiplication_248_5_61() {
- if (jj_3R_Unary_264_9_63()) {
+ private boolean jj_3R_Multiplication_244_5_61() {
+ if (jj_3R_Unary_260_9_63()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Multiplication_250_9_64()) {
+ if (jj_3R_Multiplication_246_9_64()) {
jj_scanpos = xsp;
break;
}
@@ -3620,72 +3663,72 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Boolean_433_7_105() {
+ private boolean jj_3R_Boolean_429_7_105() {
if (jj_scan_token(FALSE)) {
return true;
}
return false;
}
- private boolean jj_3R_Math_238_9_66() {
+ private boolean jj_3R_Math_234_9_66() {
if (jj_scan_token(MINUS)) {
return true;
}
- if (jj_3R_Multiplication_248_5_61()) {
+ if (jj_3R_Multiplication_244_5_61()) {
return true;
}
return false;
}
- private boolean jj_3R_Boolean_431_5_104() {
+ private boolean jj_3R_Boolean_427_5_104() {
if (jj_scan_token(TRUE)) {
return true;
}
return false;
}
- private boolean jj_3R_Boolean_431_5_96() {
+ private boolean jj_3R_Boolean_427_5_96() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Boolean_431_5_104()) {
+ if (jj_3R_Boolean_427_5_104()) {
jj_scanpos = xsp;
- if (jj_3R_Boolean_433_7_105()) {
+ if (jj_3R_Boolean_429_7_105()) {
return true;
}
}
return false;
}
- private boolean jj_3R_Math_236_9_62() {
+ private boolean jj_3R_Math_232_9_62() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Math_236_9_65()) {
+ if (jj_3R_Math_232_9_65()) {
jj_scanpos = xsp;
- if (jj_3R_Math_238_9_66()) {
+ if (jj_3R_Math_234_9_66()) {
return true;
}
}
return false;
}
- private boolean jj_3R_Math_236_9_65() {
+ private boolean jj_3R_Math_232_9_65() {
if (jj_scan_token(PLUS)) {
return true;
}
- if (jj_3R_Multiplication_248_5_61()) {
+ if (jj_3R_Multiplication_244_5_61()) {
return true;
}
return false;
}
- private boolean jj_3R_Math_234_5_55() {
- if (jj_3R_Multiplication_248_5_61()) {
+ private boolean jj_3R_Math_230_5_55() {
+ if (jj_3R_Multiplication_244_5_61()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Math_236_9_62()) {
+ if (jj_3R_Math_232_9_62()) {
jj_scanpos = xsp;
break;
}
@@ -3693,45 +3736,45 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Literal_422_7_88() {
- if (jj_3R_Null_468_5_100()) {
+ private boolean jj_3R_Literal_418_7_88() {
+ if (jj_3R_Null_464_5_100()) {
return true;
}
return false;
}
- private boolean jj_3R_Literal_421_7_87() {
- if (jj_3R_String_459_5_99()) {
+ private boolean jj_3R_Literal_417_7_87() {
+ if (jj_3R_String_455_5_99()) {
return true;
}
return false;
}
- private boolean jj_3R_Literal_420_7_86() {
- if (jj_3R_Integer_450_5_98()) {
+ private boolean jj_3R_Literal_416_7_86() {
+ if (jj_3R_Integer_446_5_98()) {
return true;
}
return false;
}
- private boolean jj_3R_Literal_419_7_85() {
- if (jj_3R_FloatingPoint_441_5_97()) {
+ private boolean jj_3R_Literal_415_7_85() {
+ if (jj_3R_FloatingPoint_437_5_97()) {
return true;
}
return false;
}
- private boolean jj_3R_Concatenation_224_10_56() {
+ private boolean jj_3R_Concatenation_220_10_56() {
if (jj_scan_token(CONCAT)) {
return true;
}
- if (jj_3R_Math_234_5_55()) {
+ if (jj_3R_Math_230_5_55()) {
return true;
}
return false;
}
- private boolean jj_3R_Function_400_24_106() {
+ private boolean jj_3R_Function_396_24_106() {
if (jj_scan_token(COLON)) {
return true;
}
@@ -3741,25 +3784,25 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Literal_418_5_84() {
- if (jj_3R_Boolean_431_5_96()) {
+ private boolean jj_3R_Literal_414_5_84() {
+ if (jj_3R_Boolean_427_5_96()) {
return true;
}
return false;
}
- private boolean jj_3R_Literal_418_5_80() {
+ private boolean jj_3R_Literal_414_5_80() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Literal_418_5_84()) {
+ if (jj_3R_Literal_414_5_84()) {
jj_scanpos = xsp;
- if (jj_3R_Literal_419_7_85()) {
+ if (jj_3R_Literal_415_7_85()) {
jj_scanpos = xsp;
- if (jj_3R_Literal_420_7_86()) {
+ if (jj_3R_Literal_416_7_86()) {
jj_scanpos = xsp;
- if (jj_3R_Literal_421_7_87()) {
+ if (jj_3R_Literal_417_7_87()) {
jj_scanpos = xsp;
- if (jj_3R_Literal_422_7_88()) {
+ if (jj_3R_Literal_418_7_88()) {
return true;
}
}
@@ -3769,14 +3812,14 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Concatenation_222_6_51() {
- if (jj_3R_Math_234_5_55()) {
+ private boolean jj_3R_Concatenation_218_6_51() {
+ if (jj_3R_Math_230_5_55()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Concatenation_224_10_56()) {
+ if (jj_3R_Concatenation_220_10_56()) {
jj_scanpos = xsp;
break;
}
@@ -3784,14 +3827,14 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Function_409_7_107() {
- if (jj_3R_MethodParameters_327_5_110()) {
+ private boolean jj_3R_Function_405_7_107() {
+ if (jj_3R_MethodParameters_323_5_110()) {
return true;
}
return false;
}
- private boolean jj_3R_Compare_211_9_60() {
+ private boolean jj_3R_Compare_207_9_60() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(29)) {
@@ -3800,13 +3843,13 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Concatenation_222_6_51()) {
+ if (jj_3R_Concatenation_218_6_51()) {
return true;
}
return false;
}
- private boolean jj_3R_Compare_209_9_59() {
+ private boolean jj_3R_Compare_205_9_59() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(31)) {
@@ -3815,13 +3858,13 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Concatenation_222_6_51()) {
+ if (jj_3R_Concatenation_218_6_51()) {
return true;
}
return false;
}
- private boolean jj_3R_Compare_207_9_58() {
+ private boolean jj_3R_Compare_203_9_58() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(25)) {
@@ -3830,27 +3873,27 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Concatenation_222_6_51()) {
+ if (jj_3R_Concatenation_218_6_51()) {
return true;
}
return false;
}
- private boolean jj_3R_Function_400_5_101() {
+ private boolean jj_3R_Function_396_5_101() {
if (jj_scan_token(IDENTIFIER)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Function_400_24_106()) {
+ if (jj_3R_Function_396_24_106()) {
jj_scanpos = xsp;
}
- if (jj_3R_Function_409_7_107()) {
+ if (jj_3R_Function_405_7_107()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Function_409_7_107()) {
+ if (jj_3R_Function_405_7_107()) {
jj_scanpos = xsp;
break;
}
@@ -3858,16 +3901,16 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Compare_205_9_52() {
+ private boolean jj_3R_Compare_201_9_52() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Compare_205_9_57()) {
+ if (jj_3R_Compare_201_9_57()) {
jj_scanpos = xsp;
- if (jj_3R_Compare_207_9_58()) {
+ if (jj_3R_Compare_203_9_58()) {
jj_scanpos = xsp;
- if (jj_3R_Compare_209_9_59()) {
+ if (jj_3R_Compare_205_9_59()) {
jj_scanpos = xsp;
- if (jj_3R_Compare_211_9_60()) {
+ if (jj_3R_Compare_207_9_60()) {
return true;
}
}
@@ -3876,7 +3919,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Compare_205_9_57() {
+ private boolean jj_3R_Compare_201_9_57() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(27)) {
@@ -3885,20 +3928,20 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Concatenation_222_6_51()) {
+ if (jj_3R_Concatenation_218_6_51()) {
return true;
}
return false;
}
- private boolean jj_3R_Compare_203_5_48() {
- if (jj_3R_Concatenation_222_6_51()) {
+ private boolean jj_3R_Compare_199_5_48() {
+ if (jj_3R_Concatenation_218_6_51()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_Compare_205_9_52()) {
+ if (jj_3R_Compare_201_9_52()) {
jj_scanpos = xsp;
break;
}
@@ -3906,7 +3949,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_Equality_193_9_54() {
+ private boolean jj_3R_Equality_189_9_54() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(35)) {
@@ -3915,32 +3958,32 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Compare_203_5_48()) {
+ if (jj_3R_Compare_199_5_48()) {
return true;
}
return false;
}
- private boolean jj_3R_Identifier_387_5_36() {
+ private boolean jj_3R_Identifier_383_5_36() {
if (jj_scan_token(IDENTIFIER)) {
return true;
}
return false;
}
- private boolean jj_3R_Equality_191_9_49() {
+ private boolean jj_3R_Equality_187_9_49() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_Equality_191_9_53()) {
+ if (jj_3R_Equality_187_9_53()) {
jj_scanpos = xsp;
- if (jj_3R_Equality_193_9_54()) {
+ if (jj_3R_Equality_189_9_54()) {
return true;
}
}
return false;
}
- private boolean jj_3R_Equality_191_9_53() {
+ private boolean jj_3R_Equality_187_9_53() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(33)) {
@@ -3949,20 +3992,20 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Compare_203_5_48()) {
+ if (jj_3R_Compare_199_5_48()) {
return true;
}
return false;
}
- private boolean jj_3R_And_181_17_46() {
+ private boolean jj_3R_And_177_17_46() {
Token xsp;
- if (jj_3R_And_180_18_50()) {
+ if (jj_3R_And_176_18_50()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_And_180_18_50()) {
+ if (jj_3R_And_176_18_50()) {
jj_scanpos = xsp;
break;
}
@@ -3970,7 +4013,7 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return false;
}
- private boolean jj_3R_And_180_18_50() {
+ private boolean jj_3R_And_176_18_50() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(39)) {
@@ -3979,59 +4022,17 @@ public class ELParser/* @bgen(jjtree) */ implements
ELParserTreeConstants, ELPar
return true;
}
}
- if (jj_3R_Equality_189_5_45()) {
+ if (jj_3R_Equality_185_5_45()) {
return true;
}
return false;
}
- private boolean jj_3R_ListData_360_26_113() {
+ private boolean jj_3R_ListData_356_26_113() {
if (jj_scan_token(COMMA)) {
return true;
}
- if (jj_3R_Expression_99_5_33()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_Equality_189_5_45() {
- if (jj_3R_Compare_203_5_48()) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_Equality_191_9_49()) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_MapEntry_378_5_111() {
- if (jj_3R_Expression_99_5_33()) {
- return true;
- }
- if (jj_scan_token(COLON)) {
- return true;
- }
- if (jj_3R_Expression_99_5_33()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_MapData_372_11_109() {
- if (jj_3R_MapEntry_378_5_111()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_LambdaExpression_124_68_27() {
- if (jj_3R_Ternary_155_5_30()) {
+ if (jj_3R_Expression_95_5_33()) {
return true;
}
return false;
diff --git a/java/org/apache/el/parser/ELParser.jjt
b/java/org/apache/el/parser/ELParser.jjt
index 7464ff83c7..e2336e7bad 100644
--- a/java/org/apache/el/parser/ELParser.jjt
+++ b/java/org/apache/el/parser/ELParser.jjt
@@ -53,6 +53,7 @@ PARSER_END( ELParser )
*/
AstCompositeExpression CompositeExpression() #CompositeExpression : {}
{
+ { token_source.reset(); }
(DeferredExpression() |
DynamicExpression() |
LiteralExpression())* <EOF> { return jjtThis; }
@@ -468,6 +469,15 @@ void Null() #Null : {}
TOKEN_MGR_DECLS:
{
java.util.Deque<Integer> deque = new java.util.ArrayDeque<Integer>();
+
+ /*
+ * Field initialisers only run when the token manager is constructed, not
when it is re-initialised via ReInit().
+ * Reset any state added above so that a token manager reused across
parses (e.g. after a previous parse failed part
+ * way through) starts from a known state.
+ */
+ void reset() {
+ deque.clear();
+ }
}
<DEFAULT> TOKEN :
{
diff --git a/java/org/apache/el/parser/ELParserTokenManager.java
b/java/org/apache/el/parser/ELParserTokenManager.java
index aed970cd01..66b7f572fe 100644
--- a/java/org/apache/el/parser/ELParserTokenManager.java
+++ b/java/org/apache/el/parser/ELParserTokenManager.java
@@ -7,6 +7,15 @@ package org.apache.el.parser;
public class ELParserTokenManager implements ELParserConstants {
java.util.Deque<Integer> deque = new java.util.ArrayDeque<Integer>();
+ /*
+ * Field initialisers only run when the token manager is constructed, not
when it is re-initialised via ReInit().
+ * Reset any state added above so that a token manager reused across
parses (e.g. after a previous parse failed part
+ * way through) starts from a known state.
+ */
+ void reset() {
+ deque.clear();
+ }
+
/** Debug output. */
public java.io.PrintStream debugStream = System.out;
diff --git a/java/org/apache/el/parser/NodeVisitor.java
b/java/org/apache/el/parser/NodeVisitor.java
index 83d43b42c6..4b3103909f 100644
--- a/java/org/apache/el/parser/NodeVisitor.java
+++ b/java/org/apache/el/parser/NodeVisitor.java
@@ -24,6 +24,7 @@ public interface NodeVisitor {
* Visits the given node.
*
* @param node the node to visit
+ *
* @throws Exception if an error occurs during visitation
*/
void visit(Node node) throws Exception;
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 7b74d2b46f..a30d7270c8 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -317,6 +317,9 @@
(markt)
</add>
<!-- Entries for backport and removal before 12.0.0-M1 below this line
-->
+ <fix>
+ Ensure internal state is reset before re-using ELParser. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Cluster">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]