Example #1
0
        /// <summary>
        /// Creates the parameter value associationg according to actual parameters
        /// </summary>
        /// <param name="context">The interpretation context</param>
        /// <param name="callable">The callable</param>
        /// <param name="log">Indicates whether errors should be logged</param>
        /// <returns></returns>
        public Dictionary <Variables.Actual, Values.IValue> AssignParameterValues(InterpretationContext context, ICallable callable, bool log)
        {
            // Compute the unnamed actual parameter values
            Dictionary <Variables.Actual, Values.IValue> retVal = new Dictionary <Variables.Actual, Values.IValue>();

            if (callable.FormalParameters.Count == NamedActualParameters.Count + ActualParameters.Count)
            {
                int i = 0;
                foreach (Expression expression in ActualParameters)
                {
                    Parameter     parameter = callable.FormalParameters[i] as Parameter;
                    Values.IValue val       = expression.GetValue(context);
                    if (val != null)
                    {
                        Variables.Actual actual = parameter.createActual();
                        val = val.RightSide(actual, false);
                        retVal.Add(actual, val);
                    }
                    else
                    {
                        AddError("Cannot evaluate value for parameter " + i + " (" + expression.ToString() + ") of function " + callable.Name);
                        return(new Dictionary <Variables.Actual, Values.IValue>());
                    }
                    i = i + 1;
                }

                foreach (KeyValuePair <string, Expression> pair in NamedActualParameters)
                {
                    Parameter     parameter = callable.getFormalParameter(pair.Key);
                    Values.IValue val       = pair.Value.GetValue(context);
                    if (val != null)
                    {
                        Variables.Actual actual = parameter.createActual();
                        val          = val.RightSide(actual, false);
                        actual.Value = val;
                        retVal.Add(actual, val);
                    }
                    else
                    {
                        AddError("Cannot evaluate value for parameter " + pair.Key + " of function " + callable.Name);
                        return(new Dictionary <Variables.Actual, Values.IValue>());
                    }
                }
            }

            return(retVal);
        }
Example #2
0
 /// <summary>
 /// Provides the changes performed by this statement
 /// </summary>
 /// <param name="context">The context on which the changes should be computed</param>
 /// <param name="changes">The list to fill with the changes</param>
 /// <param name="explanation">The explanatino to fill, if any</param>
 /// <param name="apply">Indicates that the changes should be applied immediately</param>
 public override void GetChanges(InterpretationContext context, ChangeList changes, ExplanationPart explanation, bool apply)
 {
     Variables.IVariable var = VariableIdentification.GetVariable(context);
     if (var != null)
     {
         string        tmp   = var.FullName;
         Values.IValue value = Expression.GetValue(context);
         if (value != null)
         {
             value = value.RightSide(var, true);
         }
         Rules.Change change = new Rules.Change(var, var.Value, value);
         changes.Add(change, apply);
         explanation.SubExplanations.Add(new ExplanationPart(Root, change));
     }
     else
     {
         AddError("Cannot find variable " + VariableIdentification.ToString());
     }
 }