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