Module: Jade::Codegen::Transforms::TailCall

Extended by:
Helpers, TailCall
Included in:
TailCall
Defined in:
lib/jade/codegen/transforms/tail_call.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_body(body, registry, self_sym, param_names) ⇒ Object



12
13
14
15
16
# File 'lib/jade/codegen/transforms/tail_call.rb', line 12

def generate_body(body, registry, self_sym, param_names)
  [self_sym, param_names.size]
    .then { emit_tail(body, registry, it, param_names) }
    .then { Pretty.block("loop do", it) }
end

#tail_recursive?(body, self_sym, arity, registry) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/jade/codegen/transforms/tail_call.rb', line 8

def tail_recursive?(body, self_sym, arity, registry)
  classify(body, [self_sym, arity], registry) == :tail
end