Просмотр исходного кода

Bugfix: Abort expression evaluation for LogicalAndExpression if first operator evaluates to false

Andreas Mülder 14 лет назад
Родитель
Сommit
dffb7612b1

+ 4 - 3
plugins/org.yakindu.sct.model.sexec.interpreter/src/org/yakindu/sct/model/sexec/interpreter/stext/StextStatementInterpreter.xtend

@@ -91,11 +91,10 @@ class StextStatementInterpreter extends AbstractStatementInterpreter {
 	
 	def dispatch execute(ConditionalExpression expression){
 		if(expression.condition.execute as Boolean ){
-			expression.trueCase.execute
+			return expression.trueCase.execute
 		}else{
-			expression.falseCase.execute
+			return expression.falseCase.execute
 		}
-		null
 	} 
 	
 	def dispatch execute(ElementReferenceExpression expression){
@@ -126,6 +125,8 @@ class StextStatementInterpreter extends AbstractStatementInterpreter {
 	
 	def dispatch execute(LogicalAndExpression expression){
 		var leftResult = execute(expression.leftOperand)
+		if(!leftResult as Boolean)
+			return false
 		var rightResult = execute(expression.rightOperand)
 		return leftResult as Boolean && rightResult as Boolean
 	}

+ 14 - 13
plugins/org.yakindu.sct.model.sexec.interpreter/xtend-gen/org/yakindu/sct/model/sexec/interpreter/stext/StextStatementInterpreter.java

@@ -126,20 +126,17 @@ public class StextStatementInterpreter extends AbstractStatementInterpreter {
   }
   
   protected Object _execute(final ConditionalExpression expression) throws ExecutionException {
-    Object _xblockexpression = null;
-    {
-      Expression _condition = expression.getCondition();
-      Object _execute = this.execute(_condition);
-      if (((Boolean) _execute)) {
-        Expression _trueCase = expression.getTrueCase();
-        this.execute(_trueCase);
-      } else {
-        Expression _falseCase = expression.getFalseCase();
-        this.execute(_falseCase);
-      }
-      _xblockexpression = (null);
+    Expression _condition = expression.getCondition();
+    Object _execute = this.execute(_condition);
+    if (((Boolean) _execute)) {
+      Expression _trueCase = expression.getTrueCase();
+      Object _execute_1 = this.execute(_trueCase);
+      return _execute_1;
+    } else {
+      Expression _falseCase = expression.getFalseCase();
+      Object _execute_2 = this.execute(_falseCase);
+      return _execute_2;
     }
-    return _xblockexpression;
   }
   
   protected Object _execute(final ElementReferenceExpression expression) {
@@ -200,6 +197,10 @@ public class StextStatementInterpreter extends AbstractStatementInterpreter {
       Expression _leftOperand = expression.getLeftOperand();
       Object _execute = this.execute(_leftOperand);
       Object leftResult = _execute;
+      boolean _operator_not = BooleanExtensions.operator_not(((Boolean) leftResult));
+      if (_operator_not) {
+        return false;
+      }
       Expression _rightOperand = expression.getRightOperand();
       Object _execute_1 = this.execute(_rightOperand);
       Object rightResult = _execute_1;