esprit 0.0.5

An ECMAScript parser library.
Documentation
{
  "": true,
  "var q = null;": true,
  "var a = null;\nvar b = null;": true,
  "var a = null\nvar b = null;": true,
  "var a = null\n  , b = null;": true,
  ";": true,
  "if (null);": true,
  "if (null) if (null); else;": true,
  "do {} while (null);": true,
  "do {} while (null)\n{}": true,
  "do {} while (null) {}": true,

  "function foo() { return null; }": true,
  "function foo() { return null }": true,
  "function foo() { return null\n}": true,
  "function foo() { return }": true,
  "function foo() { return\n}": true,

  "null;": true,
  "null\n": true,
  "null": true,

  "while (null);": true,
  "while (null) { }": true,

  "return null;": false,

  "foo:;": true,

  "break;": false,
  "foo: break foo;": true,
  "foo: break bar;": false,
  "break bar;": false,

  "do { break; } while (null);": true,
  "foo: bar: do { break foo; } while (null);": true,
  "foo: bar: do { break bar; } while (null);": true,
  "do { continue; } while (null);": true,
  "foo: do { continue foo; } while (null);": true,
  "foo: bar: do { continue foo; } while (null);": true,
  "foo: bar: do { continue bar; } while (null);": true,

  "while (null) { break; }": true,
  "foo: while (null) { break foo; }": true,
  "while (null) { continue; }": true,
  "foo: while (null) { continue foo; }": true,

  "continue;": false,
  "foo: continue foo;": false,
  "foo: continue bar;": false,

  "for(;;);": true,
  "for ( ; ; ) ;": true,

  "for (null;;);": true,
  "for (;null;);": true,
  "for (;;null);": true,
  "for (null;null;);": true,
  "for (null;;null);": true,
  "for (;null;null);": true,
  "for (null;null;null);": true,

  "for (foo;;);": true,
  "for (;foo;);": true,
  "for (;;foo);": true,
  "for (foo;foo;);": true,
  "for (foo;;foo);": true,
  "for (;foo;foo);": true,
  "for (foo;foo;foo);": true,

  "for (var foo;;);": true,
  "for (var foo=null;;);": true,
  "for (var foo=null, bar=null;;);": true,
  "for (let foo;;);": true,
  "for (let foo=null;;);": true,
  "for (let foo=null, bar=null;;);": true,

  "for (var foo in bar);": true,
  "for (var foo=null in bar);": true,
  "for (var foo=null, bar=null in quux);": false,
  "for (var foo, bar in quux);": false,

  "for (let foo in bar);": true,
  "for (let foo=null in bar);": false,
  "for (let foo=null, bar=null in quux);": false,
  "for (let foo, bar in quux);": false,

  "for (var foo in x in y);": true,
  "for (let foo in x in y);": true,

  "foo: for(;;) { continue foo; }": true,
  "foo: for(;;) { continue bar; }": false,
  "for(;;) { continue; }": true,
  "foo: for(;;) { continue; }": true,
  "for(;;) { continue foo; }": false,

  "foo: for(var x in y) { continue foo; }": true,
  "foo: for(var x in y) { continue bar; }": false,
  "for(var x in y) { continue; }": true,
  "foo: for(var x in y) { continue; }": true,
  "for(var x in y) { continue foo; }": false,

  "switch (null) { }": true,
  "switch (null) { default: }": true,
  "switch (null) { default: break; }": true,
  "switch (null) { case null: }": true,
  "switch (null) { case null: break; }": true,
  "switch (null) { case null: continue; }": false,
  "for (;;) { switch (null) { case null: continue; } }": true,
  "foo: for (;;) { bar: switch (null) { case null: continue foo; } }": true,
  "foo: for (;;) { bar: switch (null) { case null: continue bar; } }": false,
  "switch (null) { default: {} default: {} }": false,
  "switch (null) { default: {} case: {} default: {} }": false,
  "switch (null) { case: {} default: {} case: {} default: {} }": false,

  "with (null);": true,
  "with (null) { }": true,

  "throw null;": true,
  "throw null": true,
  "throw": false,
  "throw\nnull": false,

  "debugger;": true,
  "debugger": true,

  "try { } catch (x) { }": true,
  "try { } finally { }": true,
  "try { } catch (x) { } finally { }": true,
  "try { }": false,

  "a+b;": true,
  "var x = a+b;": true,
  "a+b*c;": true,
  "var x = a+b*c;": true,
  "a*b+c;": true,
  "var x = a*b+c;": true,
  "a * b + c + d * e * f + g;": true,
  "var x = a * b + c + d * e * f + g;": true,
  "a * b + c + d < e * f * g + h;": true,
  "var x = a * b + c + d < e * f * g + h;": true,
  "a * b + c * d - e * f + g * h - i * j;": true,
  "var x = a * b + c * d - e * f + g * h - i * j;": true,

  "var x = +y;": true,
  "var x = -y;": true,
  "var x = !y;": true,
  "var x = ~y;": true,
  "var x = typeof y;": true,
  "var x = delete y;": true,
  "var x = void y;": true,

  "var x = typeof delete y;": true,
  "var x = + - ! ~ typeof void delete y;": true,
  "var x = ++y;": true,
  "var x = --y;": true,
  "var x = y++;": true,
  "var x = y--;": true,
  "var x = typeof y++;": true,
  "var x = void y--;": true,

  "var x = a.b;": true,
  "var x = a.b.c;": true,
  "var x = a.b.c.d;": true,
  "var x = a[b];": true,
  "var x = a[b][c];": true,
  "var x = a[b][c][d];": true,
  "var x = a[b].c.d;": true,
  "var x = a[b][c].d;": true,
  "var x = a[b].c[d];": true,
  "var x = a.b[c][d];": true,
  "var x = a.b[c].d;": true,

  "var x = f();": true,
  "var x = f(a);": true,
  "var x = f(a,b);": true,
  "var x = f(a,b,c);": true,

  "var x = new Object;": true,
  "var x = new Object();": true,
  "var x = new Thing(a, b, c);": true,
  "var x = new new Function(a);": true,
  "var x = new new Function(a)(b);": true,

  "var x = new Function(a)(b);": true,
  "var x = new Function(a).length;": true,

  "var x = true;": true,
  "var x = false;": true,

  "var x = this;": true,

  "var x = 0;": true,
  "var x = 1;": true,
  "var x = 1.0;": true,
  "var x = 1.1;": true,
  "var x = -1.1;": true,
  "var x = 9007199254740992;": true,

  "var x = '';": true,
  "var x = 'hello';": true,
  "var x = \"\";": true,
  "var x = \"hello\";": true,

  "var x = /foo/g;": true,
  "var x = /foo/i;": true,
  "var x = /foo/gi;": true,
  "var x = /foo/ig;": true,

  "var x = [];": true,
  "var x = [1];": true,
  "var x = [1,2];": true,
  "var x = [1,2,3];": true,
  "var x = [,];": true,
  "var x = [,,];": true,
  "var x = [,,,];": true,
  "var x = [,1];": true,
  "var x = [1,];": true,
  "var x = [,,1];": true,
  "var x = [1,,];": true,
  "var x = [,1,];": true,
  "var x = [,,1,2];": true,
  "var x = [,1,,2];": true,
  "var x = [,1,2,];": true,
  "var x = [1,2,,];": true,
  "var x = [,1,2,3];": true,
  "var x = [1,,2,3];": true,
  "var x = [1,2,,3];": true,
  "var x = [1,2,3,,];": true,

  "var x = function() { };": true,

  "var x = (1);": true,
  "var x = (1,2);": true,
  "var x = (1,2,3);": true,

  "var x = {};": true,
  "var x = {a:1};": true,
  "var x = {1:2};": true,
  "var x = {\"a\":1};": true,
  "var x = {'a':1};": true,
  "var x = {'a':1,'b':2};": true,
  "var x = {'a':1,'b':2,'c':3};": true,
  "var x = {1:2};": true,
  "var x = {1:2,3:4};": true,
  "var x = {1:2,3:4,5:6};": true,
  "var x = {a:1};": true,
  "var x = {a:1,b:2};": true,
  "var x = {a:1,b:2,c:3};": true,
  "var x = {a:1,'b':2,3:4};": true,
  "var x = {null:1};": true,
  "var x = {function:1};": true,
  "var x = {delete:1};": true,
  "var x = {return:1};": true,
  "var x = {throw:1};": true,

  "var x = a ? b : c;": true,

  "{}": true,
  "({})": true,
  "{a:1}": true,
  "({a:1})": true,

  "x;": true,
  "x.y;": true,
  "x.y.z;": true,
  "x();": true,
  "x.y();": true,
  "x.y.z();": true,
  "x[a];": true,
  "x[a][b];": true,
  "x[a]();": true,
  "x[a][b]();": true,
  "x.y.z[a][b]();": true,
  "x().y;": true,
  "x().y.z;": true,
  "x()[a];": true,
  "x()[a][b];": true,
  "x()[a].y;": true,
  "x()[a].y.z;": true,
  "x()[a][b].y;": true,
  "x()[a][b].y.z;": true,
  "x++;": true,
  "x.y++;": true,
  "x.y.z++;": true,
  "x[a]++;": true,
  "x[a][b]++;": true,
  "x().y++;": true,
  "x().y.z++;": true,
  "x()[a]++;": true,
  "x()[a][b]++;": true,
  "x()[a].y++;": true,
  "x()[a].y.z++;": true,
  "x()[a][b].y++;": true,
  "x()[a][b].y.z++;": true,

  "x in y;": true,
  "switch (1) { case x in y: }": true,
  "function f() { return x in y; }": true,
  "throw x in y;": true,
  "[x in y];": true,
  "({ x: a in b })": true,
  "f(a in b);": true,
  "new C(a in b);": true,
  "x[a in b];": true,
  "x ? a in b : c;": true,

  "x = 1;": true,
  "x += 1;": true,
  "x -= 1;": true,
  "x *= 1;": true,
  "x /= 1;": true,
  "x %= 1;": true,
  "x <<= 1;": true,
  "x >>= 1;": true,
  "x >>>= 1;": true,
  "x |= 1;": true,
  "x ^= 1;": true,
  "x &= 1;": true,

  "x().y = 1;": true,
  "x().y += 1;": true,
  "x().y -= 1;": true,
  "x().y *= 1;": true,
  "x().y /= 1;": true,
  "x().y %= 1;": true,
  "x().y <<= 1;": true,
  "x().y >>= 1;": true,
  "x().y >>>= 1;": true,
  "x().y |= 1;": true,
  "x().y ^= 1;": true,
  "x().y &= 1;": true,

  "x.y = 1;": true,
  "x = y = 1;": true,
  "x.y = w.q = 1;": true,

  "x.null;": true,

  "\"it's\"": true,
  "\"it\\'s\"": true,
  "'it\\'s'": true,

  "a ? b : c ? d : e": true,
  "a ? b : c = d": true,
  "a = b ? c : d": true,

  "\"\\\\x20\"": true,
  "\"\\\\t\"": true,

  "({ get foo() { } })": true,
  "({ get foo() { }, bar: 1 })": true,
  "({ foo: 1, get bar() { } })": true,
  "({ foo: 1, get bar() { }, baz: 2 })": true,

  "({ set foo(x) { } })": true,
  "({ set foo(x) { }, bar: 1 })": true,
  "({ foo: 1, set bar(x) { } })": true,
  "({ foo: 1, set bar(x) { }, baz: 2 })": true,

  "\"foo\\\u2028bar\"": true,
  "\"\u2028\"": false,
  "\"\\u2028\"": true

}