Need help with jsc?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

eatonphil
132 Stars 3 Forks 63 Commits 6 Opened issues

Description

A JavaScript compiler written in TypeScript targeting C++/V8

Services available

!
?

Need anything else?

Contributors list

# 143,403
SQLite
microso...
oracle
linode
60 commits

Javascript compiler targeting C++/V8

Building

Requires Node.

$ yarn

Example

$ yarn tsc
$ node build/jsc.js tests/tco.js
$ node bin/index.js
12586269025

Features

  • Functions and function calls
    • Basic tail-call optimization
  • Var, const, let declarations
  • For, do, while statements
  • Basic primitive operations
  • Basic import support
  • Number, string, boolean and null literals
  • Basic value unboxing

Not (yet) supported

  • Prototype functions
  • Nested functions
  • Closures
  • And much, much more!

Code produced

The following:

function fib(n: number, a: number, b: number) {
    if (n == 0) {
        return a;
    }

if (n == 1) {
    return b;
}

return fib(n - 1, b, a + b);

}

Gets compiled to:

void tco_fib(const FunctionCallbackInfo &args) {
  Isolate *isolate = args.GetIsolate();
  double tco_n = toNumber(args[0]);
  double tco_a = toNumber(args[1]);
  double tco_b = toNumber(args[2]);

tail_recurse_1:

;

bool sym_if_test_58 = (tco_n == 0); if (sym_if_test_58) { args.GetReturnValue().Set(Number::New(isolate, tco_a)); return; }

bool sym_if_test_70 = (tco_n == 1); if (sym_if_test_70) { args.GetReturnValue().Set(Number::New(isolate, tco_b)); return; }

Local sym_arg_83 = Number::New(isolate, (tco_n - 1)); Local sym_arg_92 = Number::New(isolate, (tco_a + tco_b)); tco_n = toNumber(sym_arg_83); tco_a = tco_b; tco_b = toNumber(sym_arg_92); goto tail_recurse_1; }

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.