Module Sarek_ppx_lib.Sarek_tailrec_elim

Tail Recursion Elimination

val transform_var_counter : int Stdlib.Atomic.t

Fresh variable ID generator for transformation (thread-safe)

val fresh_transform_id : unit -> int
val eliminate_tail_recursion : string -> Sarek_typed_ast.tparam list -> Sarek_typed_ast.texpr -> Sarek_ast.loc -> Sarek_typed_ast.texpr

Transform a tail-recursive function into a loop.

Uses a simple continue-flag approach suitable for GPU code:

  • _continue: bool mutable, starts true
  • _result: mutable of result type, stores the return value
  • Loop while _continue
  • Base case: _result := value; _continue := false
  • Recursive call: update loop vars (continue stays true)