UNPKG

tco

Version:

Tail call optimization in Node

42 lines (35 loc) 575 B
macro tail { rule { $f($x (,) ...) } => { return [$f, [$x (,) ...]] } } macro tail2 { rule { $f $xexpr } => { return [$f, [$x]] } } macro tail3 { rule { $f($x:expr (,) ...) } => { return [$f, [$x (,) ...]] } } macro ret { rule { $x:expr } => { return [null, $x] } } tail3 a(1, 2, 3, 4+2); ret 1; ret a(1, 2, 3, 4); // Another option with single macro: macro ret2 { rule { $f($x:expr (,) ...) } => { return [$f, [$x (,) ...]] } rule { $x:expr } => { return [null, $x] } } ret2 a(1, 2, 3, 4+2); ret2 1; ret2 a(1, 2, 3, 4);