0.1.0 • Published 4 years ago

infinite-recursion.macro v0.1.0

Weekly downloads
1
License
MIT
Repository
-
Last release
4 years ago

A Babel Macro that allows your functions to recurse infinitely.

Babel Macro

Problem

In typical environments like V8, number of recursion is limited to tens of thousands.

function sum(upTo) {
  return upTo <= 0 ? 0 : upTo + sum(upTo - 1);
}

// RangeError: Maximum call stack size exceeded
console.log(sum(1e6));

Solution

With the infinite macro, your function supports infinite number of recursion.

import { infinite } from "infinite-recursion.macro";

const sum = infinite(function sum(upTo) {
  return upTo <= 0 ? 0 : upTo + sum(upTo - 1);
});

// 500000500000
console.log(sum(1e6));

Usage

Configure Babel to use babel-pugin-macros. That's all!

infinite

The infinite macro supports the form of infinite(function func(...args) { ... }). Any other form of expressions will result in a compile-time or runtime error.

If you are a fan of default exports, the infinite macro can also be obtained as a default export:

import infinite from "infinite-recursion.macro";

run

The rec macro is an inline version of the infinite macro. It receives a recursive function as the first argument and the arguments to it as the rest of the arguments. Usage:

import { run } from "infinite-recursion.macro";

const sumTo1e6 = run(function sum(upTo) {
  return upTo <= 0 ? 0 : upTo + sum(upTo - 1);
}, 1e6);

Contribution

Welcome

License

MIT