Class: Kumi::Core::Analyzer::Passes::DependencyResolverPass
- Includes:
- Syntax
- Defined in:
- lib/kumi/core/analyzer/passes/dependency_resolver_pass.rb
Defined Under Namespace
Classes: DependencyEdge
Constant Summary
Constants inherited from PassBase
Instance Method Summary collapse
Methods inherited from PassBase
contract_declared?, #debug, #debug_enabled?, declared_optional_reads, declared_reads, declared_writes, #initialize, optional_reads, reads, writes
Methods included from ErrorReporting
#inferred_location, #raise_localized_error, #raise_syntax_error, #raise_type_error, #report_enhanced_error, #report_error, #report_semantic_error, #report_syntax_error, #report_type_error
Constructor Details
This class inherits a constructor from Kumi::Core::Analyzer::Passes::PassBase
Instance Method Details
#run(errors) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/kumi/core/analyzer/passes/dependency_resolver_pass.rb', line 26 def run(errors) definitions = get_state(:declarations) = get_state(:input_metadata) dependency_graph = Hash.new { |h, k| h[k] = [] } reverse_dependencies = Hash.new { |h, k| h[k] = [] } leaf_map = Hash.new { |h, k| h[k] = Set.new } each_decl do |decl| # Traverse the expression for each declaration, passing context down visit_with_context(decl.expression, { decl_name: decl.name }) do |node, context| process_node(node, decl, dependency_graph, reverse_dependencies, leaf_map, definitions, , errors, context) end end # Compute transitive closure of reverse dependencies transitive_dependents = compute_transitive_closure(reverse_dependencies) state.with(:dependencies, dependency_graph.transform_values(&:freeze).freeze) .with(:dependents, transitive_dependents.freeze) .with(:leaves, leaf_map.transform_values(&:freeze).freeze) end |