Ejemplo n.º 1
0
        // Лучше запретить yield в вложенных функциях и в функциях со вложенными!
        // Запретить-запретить-запретить

        public override void visit(procedure_definition pd)
        {
            // var u = UpperNode(3);
            // В случае отсутствия формальных параметров
            if ((object)pd.proc_header.parameters == null)
            {
                base.visit(pd.proc_body);
                return;
            }

            formalParametersStack.Add(new Dictionary <string, string>());
            int currentLevel = formalParametersStack.Count - 1;

            foreach (var plist in pd.proc_header.parameters.params_list)
            {
                foreach (var id in plist.idents.idents)
                {
                    var paramName        = id.name;
                    var hoistedParamName = CapturedNamesHelper.MakeCapturedFormalParameterName(id.name);

                    formalParametersStack[currentLevel].Add(paramName, hoistedParamName);

                    // Захват
                    CollectedFormalParameters.Add(hoistedParamName, plist.vars_type);
                }
            }

            base.visit(pd.proc_body);

            formalParametersStack.RemoveAt(currentLevel);
        }
Ejemplo n.º 2
0
 private void CreateCapturedFormalParamsNamesMap(ISet <string> formalParamsNames, IDictionary <string, string> captueedFormalParamsNamesMap)
 {
     foreach (var formalParamName in formalParamsNames)
     {
         captueedFormalParamsNamesMap.Add(formalParamName, CapturedNamesHelper.MakeCapturedFormalParameterName(formalParamName));
     }
 }