// Лучше запретить 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); }
private void CreateCapturedFormalParamsNamesMap(ISet <string> formalParamsNames, IDictionary <string, string> captueedFormalParamsNamesMap) { foreach (var formalParamName in formalParamsNames) { captueedFormalParamsNamesMap.Add(formalParamName, CapturedNamesHelper.MakeCapturedFormalParameterName(formalParamName)); } }