[
https://issues.apache.org/jira/browse/METRON-980?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16040875#comment-16040875
]
ASF GitHub Bot commented on METRON-980:
---------------------------------------
Github user cestella commented on a diff in the pull request:
https://github.com/apache/metron/pull/606#discussion_r120623833
--- Diff:
metron-platform/metron-common/src/main/java/org/apache/metron/common/stellar/StellarCompiler.java
---
@@ -76,14 +92,80 @@ public Expression(Deque<Token<?>> tokenDeque) {
public Object apply(ExpressionState state) {
Deque<Token<?>> instanceDeque = new ArrayDeque<>();
- for(Iterator<Token<?>> it =
getTokenDeque().descendingIterator();it.hasNext();) {
- Token<?> token = it.next();
- if(token.getUnderlyingType() == DeferredFunction.class) {
- DeferredFunction func = (DeferredFunction) token.getValue();
- func.apply(instanceDeque, state);
- }
- else {
- instanceDeque.push(token);
+ {
+ boolean skipElse = 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()) {
+ token = it.next();
+ if(token.getUnderlyingType() == EndConditional.class) {
+ break;
+ }
--- End diff --
Yep, I just added this case to the `StellarTest`
> Short circuit operations for Stellar
> ------------------------------------
>
> Key: METRON-980
> URL: https://issues.apache.org/jira/browse/METRON-980
> Project: Metron
> Issue Type: Improvement
> Reporter: Casey Stella
> Assignee: Casey Stella
>
> Stellar does not currently contain short circuit operations. In most
> languages, this is an important optimization, but for Stellar on Metron, this
> is a requirement due to the fact that some variables may be null legitimately
> and we cannot create multi-line conditionals or temporary variables at the
> moment.
> The short circuit operations supported:
> * short circuited `or` (e.g. true or FUNC(...) would never execute FUNC)
> * short circuited `and` (e.g. false and FUNC(...) would never execute FUNC)
> * short circuited if/then/else (e.g. if true then FUNC(...) else FUNC2(...)
> will never call FUNC2)
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)