package fr.inria.diverse.iot2.iot2.aspects; import com.google.common.base.Objects; import fr.inria.diverse.k3.al.annotationprocessor.Aspect; import java.util.ArrayList; import java.util.Map; import java.util.Stack; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Consumer; import org.eclipse.emf.common.util.EList; import fr.inria.diverse.iot2.iot2.iot2.Block; import fr.inria.diverse.iot2.iot2.iot2.Expression; import fr.inria.diverse.iot2.iot2.iot2.Expression_CallFunction; import fr.inria.diverse.iot2.iot2.iot2.Expression_VariableName; import fr.inria.diverse.iot2.iot2.iot2.Function; import fr.inria.diverse.iot2.iot2.iot2.Functioncall_Arguments; import fr.inria.diverse.iot2.iot2.aspects.BlockAspect; import fr.inria.diverse.iot2.iot2.aspects.Environment; import fr.inria.diverse.iot2.iot2.aspects.Expression_CallFunctionAspectExpression_CallFunctionAspectProperties; import fr.inria.diverse.iot2.iot2.aspects.LuaExpressionAspect; @Aspect(className = Expression_CallFunction.class) @SuppressWarnings("all") public class Expression_CallFunctionAspect extends LuaExpressionAspect { public static void execute(final Expression_CallFunction _self, final Environment c) { fr.inria.diverse.iot2.iot2.aspects.Expression_CallFunctionAspectExpression_CallFunctionAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.Expression_CallFunctionAspectExpression_CallFunctionAspectContext.getSelf(_self); if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Expression_CallFunction){ fr.inria.diverse.iot2.iot2.aspects.Expression_CallFunctionAspect._privk3_execute(_self_, (fr.inria.diverse.iot2.iot2.iot2.Expression_CallFunction)_self,c); } else if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Expression){ fr.inria.diverse.iot2.iot2.aspects.LuaExpressionAspect.execute((fr.inria.diverse.iot2.iot2.iot2.Expression)_self,c); } else if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Statement_FunctioncallOrAssignment){ fr.inria.diverse.iot2.iot2.aspects.Statement_FunctioncallOrAssignmentAspect.execute((fr.inria.diverse.iot2.iot2.iot2.Statement_FunctioncallOrAssignment)_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 Expression_CallFunctionAspectExpression_CallFunctionAspectProperties _self_, final Expression_CallFunction _self, final Environment c) { final Expression x = _self.getObject(); boolean _matched = false; if (!_matched) { if (x instanceof Expression_VariableName) { String _variable = ((Expression_VariableName)x).getVariable(); boolean _equals = _variable.equals("rand"); if (_equals) { _matched=true; Functioncall_Arguments _arguments = _self.getArguments(); EList<Expression> _arguments_1 = _arguments.getArguments(); Expression _get = _arguments_1.get(0); LuaExpressionAspect.execute(_get, c); Object _popValue = c.popValue(); String _string = _popValue.toString(); double _parseDouble = Double.parseDouble(_string); final int min = Double.valueOf(_parseDouble).intValue(); Functioncall_Arguments _arguments_2 = _self.getArguments(); EList<Expression> _arguments_3 = _arguments_2.getArguments(); Expression _get_1 = _arguments_3.get(1); LuaExpressionAspect.execute(_get_1, c); Object _popValue_1 = c.popValue(); String _string_1 = _popValue_1.toString(); double _parseDouble_1 = Double.parseDouble(_string_1); final int max = Double.valueOf(_parseDouble_1).intValue(); ThreadLocalRandom _current = ThreadLocalRandom.current(); final int rand = _current.nextInt(min, max); c.pushValue(Double.valueOf(((double) rand))); return; } } } Expression _object = _self.getObject(); LuaExpressionAspect.execute(_object, c); Functioncall_Arguments _arguments = _self.getArguments(); EList<Expression> _arguments_1 = _arguments.getArguments(); int _size = _arguments_1.size(); boolean _greaterThan = (_size > 0); if (_greaterThan) { Functioncall_Arguments _arguments_2 = _self.getArguments(); EList<Expression> _arguments_3 = _arguments_2.getArguments(); Expression _get = _arguments_3.get(0); LuaExpressionAspect.execute(_get, c); Object res = c.popValue(); boolean _equals = "\"*number\"".equals(res); if (_equals) { Object res1 = c.popValue(); double _parseDouble = Double.parseDouble(("" + res1)); c.pushValue(Double.valueOf(_parseDouble)); return; } } Expression _object_1 = _self.getObject(); if ((_object_1 instanceof Expression_VariableName)) { Map<String, Function> _functions = c.getFunctions(); Expression _object_2 = _self.getObject(); String _variable = ((Expression_VariableName) _object_2).getVariable(); Function function = _functions.get(_variable); boolean _notEquals = (!Objects.equal(function, null)); if (_notEquals) { final ArrayList<Object> params = new ArrayList<Object>(); Functioncall_Arguments _arguments_4 = _self.getArguments(); EList<Expression> _arguments_5 = _arguments_4.getArguments(); final Consumer<Expression> _function = (Expression args) -> { LuaExpressionAspect.execute(args, c); Object _popValue = c.popValue(); params.add(_popValue); }; _arguments_5.forEach(_function); Environment newC = new Environment(); newC.setParent(c); Map<String, Object> _variables = newC.getVariables(); Map<String, Object> _variables_1 = c.getVariables(); _variables.putAll(_variables_1); Map<String, Function> _functions_1 = newC.getFunctions(); Map<String, Function> _functions_2 = c.getFunctions(); _functions_1.putAll(_functions_2); Stack<Object> _values = newC.getValues(); Stack<Object> _values_1 = c.getValues(); _values.addAll(_values_1); for (int i = 0; (i < function.getParameters().size()); i++) { EList<String> _parameters = function.getParameters(); String _get_1 = _parameters.get(i); Object _get_2 = params.get(i); newC.putVariable(_get_1, _get_2); } Block _body = function.getBody(); BlockAspect.execute(_body, newC); Object _popValue = newC.popValue(); c.pushValue(_popValue); } } } }