Exemplo n.º 1
0
        internal override IEnumerable <NameExpression> Walk()
        {
            List <NameExpression> freeVars = new List <NameExpression>();

            freeVars.AddRange(Initializer?.Walk() ?? new NameExpression[0]);
            freeVars.AddRange(Condition?.Walk() ?? new NameExpression[0]);
            freeVars.AddRange(Incrementor?.Walk() ?? new NameExpression[0]);
            freeVars.AddRange(Body.Walk());

            if (Initializer is Definition definition)
            {
                List <Variable> initializerVariable = new List <Variable>
                {
                    definition.DeclaredVariable
                };

                Compiler.MatchVariables(freeVars, initializerVariable);
            }

            return(freeVars);
        }