private ILanguageValue EvaluateBasicPolyadicMacroCall(GMacMacro macro, OperandsByValueAccess operands) { PushRecord(macro.ChildScope, false); //Initialize parameters to their default values foreach (var param in macro.Parameters) { var paramValue = GMacRootAst.CreateDefaultValue(param.SymbolType); ActiveAr.AddSymbolData(param, paramValue); } //Modify assigned parameters values from macro call operands foreach (var command in operands.AssignmentsList) { Visit(command); } //Execute macro body macro.SymbolBody.AcceptVisitor(this); //macro.OptimizedCompiledBody.AcceptVisitor(this); //Read output parameter value var value = ActiveAr.GetSymbolData(macro.FirstOutputParameter); PopRecord(); return(value); }
/// <summary> /// Evaluate a composite expression /// </summary> /// <param name="expr"></param> /// <returns></returns> public override ILanguageValue Visit(CompositeExpression expr) { PushRecord(expr.ChildScope, true); foreach (var subCommand in expr.Commands) { subCommand.AcceptVisitor(this); } var value = ActiveAr.GetSymbolData(expr.OutputVariable); PopRecord(); return(value); }