Module: Jade::Frontend::SemanticAnalysis::MemberAccess

Extended by:
Helper, MemberAccess
Included in:
MemberAccess
Defined in:
lib/jade/frontend/semantic_analysis/member_access.rb

Overview

Lowers a MemberAccess chain into either a QualifiedAccess (when the prefix resolves to an imported module alias) or a RecordAccess (when it’s field access on a value expression).

Instance Method Summary collapse

Methods included from Helper

analyze_duplicate_fields, analyze_in_parallel, analyze_in_sequence, analyze_node, bind, collect_vars, lookup, validate_type_symbol

Instance Method Details

#analyze(node, registry, scope, entry) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/jade/frontend/semantic_analysis/member_access.rb', line 11

def analyze(node, registry, scope, entry)
  node => AST::MemberAccess(target:)

  qualified_names = collect_qualified_names(node)

  if qualified_names
    *path, access = qualified_names

    case resolve_qualified_access(path, node, registry, entry)
    in Ok(symbol)
      new_node = AST::QualifiedAccess[*node.deconstruct].with(symbol:)
      Result[new_node, [], scope]

    in Err(error)
      Result[node, [error], scope]
    end

  else
    target_r = analyze_node(target, registry, scope, entry)
    new_node = AST::RecordAccess[*node.with(target: target_r.node).deconstruct]
    Result[new_node, target_r.errors, scope]
  end
end