Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }