Module: Jade::Frontend::TypeChecking::PortResolution

Extended by:
PortResolution
Included in:
PortResolution
Defined in:
lib/jade/frontend/type_checking/port_resolution.rb

Overview

Resolves the Decode.Decodable instances each port needs for its ok/err arms. Runs at the end of type-checking, when registry.implementations is fully populated. The resolved Symbol::Implementation (or the :pass sentinel for Decode.Value / Never) is stamped onto each InteropFunction’s ‘decoders` field so codegen can emit straight away.

Instance Method Summary collapse

Instance Method Details

#resolve(entry, registry) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/jade/frontend/type_checking/port_resolution.rb', line 17

def resolve(entry, registry)
  entry
    .defined_values
    .reduce([{}, []]) do |(values, errors), (name, sym)|
      new_sym, new_errors = resolve_value(sym, entry, registry)
      [
        values.merge(name => new_sym),
        errors + new_errors,
      ]
    end
    .then { |values, errors|
      errors.empty? \
        ? Ok[entry.with(defined_values: values)]
        : Err[errors]
    }
end