Module: Jade::Codegen::VariantDeclaration

Extended by:
Helpers, VariantDeclaration
Included in:
VariantDeclaration
Defined in:
lib/jade/codegen/variant_declaration.rb

Constant Summary

Constants included from Helpers

Helpers::NATIVE_RUBY_CLASSES

Instance Method Summary collapse

Methods included from Helpers

data_define, dict_constraints, dict_synthetic_name, fn_constraints, fn_impl_synthetic_name, generate_many, generate_node, impl_synthetic_name, param_synthetic_name, resolve_callee_symbol, ruby_classes_for_type, to_qualified

Instance Method Details

#generate(node, sibling_names) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/jade/codegen/variant_declaration.rb', line 7

def generate(node, sibling_names)
  node => AST::VariantDeclaration(name:, args:, symbol:)

  impls = symbol.qualified_name
    .then { "::#{to_qualified(it)}" }
    .then { Codegen.dispatched_methods[it] || [] }

  sibling_names
    .map { |s| "def #{predicate_name(s)}; #{s == name}; end" }
    .then { [it.join(Pretty.newline), *impls] }
    .reject(&:empty?)
    .join(Pretty.newline(2))
    .then { Pretty.block("#{name} = #{data_define(fields_for(args))} do", it) }
end