Module: Jade::Frontend::ForwardDeclaration::TypeDeclaration
Instance Method Summary
collapse
Methods included from Helper
deep_declare_node, figure_out_type, shallow_declare_node
Instance Method Details
#deep(node, entry, _) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/jade/frontend/forward_declaration/type_declaration.rb', line 20
def deep(node, entry, _)
node => AST::TypeDeclaration(name:, variants:)
symbol = entry.lookup_type(name)
variants
.map do |var|
var.args.map { figure_out_type(entry, it) }
.then { Results.sequence(it) }
.map { Symbol.constructor(var.name, it, symbol.to_ref, var.range) }
end
.then { Results.sequence(it) }
.map do |variant_symbols|
variant_symbols
.reduce(entry) { |acc_entry, sym| acc_entry.define(sym) }
.then { it.define(symbol.with(variants: variant_symbols.map(&:to_ref))) }
end
.then { to_declaration_result(entry, it) }
end
|
#shallow(node, registry, entry) ⇒ Object
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/jade/frontend/forward_declaration/type_declaration.rb', line 8
def shallow(node, registry, entry)
node => AST::TypeDeclaration(name:, type_params:, variants:)
predeclared_variants = variants
.map { |var| Symbol.predeclared_constructor(var.name, var.range) }
type_params.map { Symbol.var(it.name, it.range) }
.then { Symbol.union(name, it, predeclared_variants, node.range) }
.then { entry.define(it) }
.then { Result[it, []] }
end
|