Module: Jade::Frontend::ForwardDeclaration::InterfaceDeclaration
- Extended by:
- Helper, InterfaceDeclaration
- Included in:
- InterfaceDeclaration
- Defined in:
- lib/jade/frontend/forward_declaration/interface_declaration.rb
Instance Method Summary collapse
Methods included from Helper
deep_declare_node, figure_out_type, shallow_declare_node
Instance Method Details
#deep(node, entry, _registry) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/jade/frontend/forward_declaration/interface_declaration.rb', line 27 def deep(node, entry, _registry) node => AST::InterfaceDeclaration(name:, functions:) symbol = entry.lookup_type(name) interface_ref = symbol.to_ref functions .map { build_interface_function(entry, interface_ref, it) } .then { Results.sequence(it) } .map do |fn_symbols| fn_symbols .reduce(entry) { |acc, fn| acc.define(fn) } .then { it.define(symbol.with(functions: fn_symbols)) } end .then { to_declaration_result(entry, it) } end |
#shallow(node, _registry, entry) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/jade/frontend/forward_declaration/interface_declaration.rb', line 8 def shallow(node, _registry, entry) node => AST::InterfaceDeclaration(name:, type_param:, functions:) interface_ref = Symbol.type_ref(entry.name, name) type_var = Symbol.var(type_param.name, type_param.range) functions .map do |fn| Symbol .interface_function(fn.name, interface_ref, [], nil, fn.range) end .then do |fn_symbols| Symbol.interface(name, type_var, fn_symbols, {}, node.range) .then { entry.define(it) } .then { fn_symbols.reduce(it) { |acc, fn| acc.define(fn) } } end .then { Result[it, []] } end |