public NestedFunctionData GatherNestedFunctions(AstNode node, IDictionary <IVariable, VariableData> allVariables) { var result = new StructureGatherer(_resolver).GatherNestedFunctions(node); var allNestedFunctions = new[] { result }.Concat(result.DirectlyOrIndirectlyNestedFunctions).ToDictionary(f => f.DefinitionNode); foreach (var v in allVariables) { allNestedFunctions[v.Value.DeclaringMethod].DirectlyDeclaredVariables.Add(v.Key); } var analyzer = new CaptureAnalyzer(_resolver); foreach (var f in allNestedFunctions.Values) { analyzer.Analyze(f.BodyNode); f.DirectlyUsesThis = analyzer.UsesThis; foreach (var v in analyzer.UsedVariables) { f.DirectlyUsedVariables.Add(v); } f.Freeze(); } return(result); }
public NestedFunctionData GatherNestedFunctions(AstNode node, IDictionary<IVariable, VariableData> allVariables) { var result = new StructureGatherer(_resolver).GatherNestedFunctions(node); var allNestedFunctions = new[] { result }.Concat(result.DirectlyOrIndirectlyNestedFunctions).ToDictionary(f => f.DefinitionNode); foreach (var v in allVariables) { allNestedFunctions[v.Value.DeclaringMethod].DirectlyDeclaredVariables.Add(v.Key); } var analyzer = new CaptureAnalyzer(_resolver); foreach (var f in allNestedFunctions.Values) { analyzer.Analyze(f.BodyNode); f.DirectlyUsesThis = analyzer.UsesThis; foreach (var v in analyzer.UsedVariables) f.DirectlyUsedVariables.Add(v); f.Freeze(); } return result; }