package fr.inria.diverse.iot2.iot2.aspects;
import fr.inria.diverse.k3.al.annotationprocessor.Aspect;
import fr.inria.diverse.iot2.iot2.iot2.Block;
import fr.inria.diverse.iot2.iot2.iot2.Expression;
import fr.inria.diverse.iot2.iot2.iot2.Statement_If_Then_Else;
import fr.inria.diverse.iot2.iot2.aspects.BlockAspect;
import fr.inria.diverse.iot2.iot2.aspects.Environment;
import fr.inria.diverse.iot2.iot2.aspects.LuaExpressionAspect;
import fr.inria.diverse.iot2.iot2.aspects.StatementAspect;
import fr.inria.diverse.iot2.iot2.aspects.Statement_If_Then_ElseAspectStatement_If_Then_ElseAspectProperties;
@Aspect(className = Statement_If_Then_Else.class)
@SuppressWarnings("all")
public class Statement_If_Then_ElseAspect extends StatementAspect {
public static void execute(final Statement_If_Then_Else _self, final Environment c) {
fr.inria.diverse.iot2.iot2.aspects.Statement_If_Then_ElseAspectStatement_If_Then_ElseAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.Statement_If_Then_ElseAspectStatement_If_Then_ElseAspectContext.getSelf(_self);
if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Statement_If_Then_Else){
fr.inria.diverse.iot2.iot2.aspects.Statement_If_Then_ElseAspect._privk3_execute(_self_, (fr.inria.diverse.iot2.iot2.iot2.Statement_If_Then_Else)_self,c);
} else if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Statement){
fr.inria.diverse.iot2.iot2.aspects.StatementAspect.execute((fr.inria.diverse.iot2.iot2.iot2.Statement)_self,c);
} else { throw new IllegalArgumentException("Unhandled parameter types: " + java.util.Arrays.<Object>asList(_self).toString()); };
}
protected static void _privk3_execute(final Statement_If_Then_ElseAspectStatement_If_Then_ElseAspectProperties _self_, final Statement_If_Then_Else _self, final Environment c) {
Expression _ifExpression = _self.getIfExpression();
LuaExpressionAspect.execute(_ifExpression, c);
Object _popValue = c.popValue();
if ((((Boolean) _popValue)).booleanValue()) {
Block _ifBlock = _self.getIfBlock();
BlockAspect.execute(_ifBlock, c);
} else {
Block _elseBlock = _self.getElseBlock();
boolean _tripleNotEquals = (_elseBlock != null);
if (_tripleNotEquals) {
Block _elseBlock_1 = _self.getElseBlock();
BlockAspect.execute(_elseBlock_1, c);
}
}
}
}