Github user jjmeyer0 commented on a diff in the pull request:
https://github.com/apache/metron/pull/814#discussion_r147556583
--- Diff:
metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/common/StellarCompiler.java
---
@@ -105,59 +107,77 @@ public Object apply(ExpressionState state) {
Deque<Token<?>> instanceDeque = new ArrayDeque<>();
{
boolean skipElse = false;
+ boolean skipMatchClauses = false;
Token<?> token = null;
for (Iterator<Token<?>> it = getTokenDeque().descendingIterator();
it.hasNext(); ) {
token = it.next();
//if we've skipped an else previously, then we need to skip the
deferred tokens associated with the else.
- if(skipElse && token.getUnderlyingType() == ElseExpr.class) {
- while(it.hasNext()) {
+ if (skipElse && token.getUnderlyingType() == ElseExpr.class) {
+ while (it.hasNext()) {
token = it.next();
- if(token.getUnderlyingType() == EndConditional.class) {
+ if (token.getUnderlyingType() == EndConditional.class) {
break;
}
}
skipElse = false;
}
+ if (skipMatchClauses && (token.getUnderlyingType() ==
MatchClauseEnd.class
+ || token.getUnderlyingType() == MatchClauseCheckExpr.class))
{
+ while (it.hasNext()) {
--- End diff --
This will only skip one match clause after a true one is found. See below
test for a stellar statement that fails with a `ParseException`.
```java
@Test
@SuppressWarnings("unchecked")
public void moreThanTwoConsecutiveTrueCasesWillResultInFailure() {
Assert.assertEquals("ok", run("match{ foo < 100 : THROW('oops'), foo >
200 : 'ok', foo > 300 : 'ok', default : 'works' }",
new HashMap() {{
put("foo", 500);
}}));
}
```
---