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
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 |