rsp/node-tco

View on GitHub
sweet-macros.txt

Summary

Maintainability
Test Coverage
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);