Skip to content

Instantly share code, notes, and snippets.

@samwgoldman
Created November 3, 2012 03:29
Show Gist options
  • Save samwgoldman/4005706 to your computer and use it in GitHub Desktop.
Save samwgoldman/4005706 to your computer and use it in GitHub Desktop.
Browser-compatible single-file CoffeeScriptRedux
This file has been truncated, but you can view the full file.
(function(){var require = function (file, cwd) {
var resolved = require.resolve(file, cwd || '/');
var mod = require.modules[resolved];
if (!mod) throw new Error(
'Failed to resolve module ' + file + ', tried ' + resolved
);
var cached = require.cache[resolved];
var res = cached? cached.exports : mod();
return res;
};
require.paths = [];
require.modules = {};
require.cache = {};
require.extensions = [".js",".coffee",".json"];
require._core = {
'assert': true,
'events': true,
'fs': true,
'path': true,
'vm': true
};
require.resolve = (function () {
return function (x, cwd) {
if (!cwd) cwd = '/';
if (require._core[x]) return x;
var path = require.modules.path();
cwd = path.resolve('/', cwd);
var y = cwd || '/';
if (x.match(/^(?:\.\.?\/|\/)/)) {
var m = loadAsFileSync(path.resolve(y, x))
|| loadAsDirectorySync(path.resolve(y, x));
if (m) return m;
}
var n = loadNodeModulesSync(x, y);
if (n) return n;
throw new Error("Cannot find module '" + x + "'");
function loadAsFileSync (x) {
x = path.normalize(x);
if (require.modules[x]) {
return x;
}
for (var i = 0; i < require.extensions.length; i++) {
var ext = require.extensions[i];
if (require.modules[x + ext]) return x + ext;
}
}
function loadAsDirectorySync (x) {
x = x.replace(/\/+$/, '');
var pkgfile = path.normalize(x + '/package.json');
if (require.modules[pkgfile]) {
var pkg = require.modules[pkgfile]();
var b = pkg.browserify;
if (typeof b === 'object' && b.main) {
var m = loadAsFileSync(path.resolve(x, b.main));
if (m) return m;
}
else if (typeof b === 'string') {
var m = loadAsFileSync(path.resolve(x, b));
if (m) return m;
}
else if (pkg.main) {
var m = loadAsFileSync(path.resolve(x, pkg.main));
if (m) return m;
}
}
return loadAsFileSync(x + '/index');
}
function loadNodeModulesSync (x, start) {
var dirs = nodeModulesPathsSync(start);
for (var i = 0; i < dirs.length; i++) {
var dir = dirs[i];
var m = loadAsFileSync(dir + '/' + x);
if (m) return m;
var n = loadAsDirectorySync(dir + '/' + x);
if (n) return n;
}
var m = loadAsFileSync(x);
if (m) return m;
}
function nodeModulesPathsSync (start) {
var parts;
if (start === '/') parts = [ '' ];
else parts = path.normalize(start).split('/');
var dirs = [];
for (var i = parts.length - 1; i >= 0; i--) {
if (parts[i] === 'node_modules') continue;
var dir = parts.slice(0, i + 1).join('/') + '/node_modules';
dirs.push(dir);
}
return dirs;
}
};
})();
require.alias = function (from, to) {
var path = require.modules.path();
var res = null;
try {
res = require.resolve(from + '/package.json', '/');
}
catch (err) {
res = require.resolve(from, '/');
}
var basedir = path.dirname(res);
var keys = (Object.keys || function (obj) {
var res = [];
for (var key in obj) res.push(key);
return res;
})(require.modules);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (key.slice(0, basedir.length + 1) === basedir + '/') {
var f = key.slice(basedir.length);
require.modules[to + f] = require.modules[basedir + f];
}
else if (key === basedir) {
require.modules[to] = require.modules[basedir];
}
}
};
(function () {
var process = {};
var global = typeof window !== 'undefined' ? window : {};
var definedProcess = false;
require.define = function (filename, fn) {
if (!definedProcess && require.modules.__browserify_process) {
process = require.modules.__browserify_process();
definedProcess = true;
}
var dirname = require._core[filename]
? ''
: require.modules.path().dirname(filename)
;
var require_ = function (file) {
var requiredModule = require(file, dirname);
var cached = require.cache[require.resolve(file, dirname)];
if (cached && cached.parent === null) {
cached.parent = module_;
}
return requiredModule;
};
require_.resolve = function (name) {
return require.resolve(name, dirname);
};
require_.modules = require.modules;
require_.define = require.define;
require_.cache = require.cache;
var module_ = {
id : filename,
filename: filename,
exports : {},
loaded : false,
parent: null
};
require.modules[filename] = function () {
require.cache[filename] = module_;
fn.call(
module_.exports,
require_,
module_,
module_.exports,
dirname,
filename,
process,
global
);
module_.loaded = true;
return module_.exports;
};
};
})();
require.define("path",function(require,module,exports,__dirname,__filename,process,global){function filter (xs, fn) {
var res = [];
for (var i = 0; i < xs.length; i++) {
if (fn(xs[i], i, xs)) res.push(xs[i]);
}
return res;
}
// resolves . and .. elements in a path array with directory names there
// must be no slashes, empty elements, or device names (c:\) in the array
// (so also no leading and trailing slashes - it does not distinguish
// relative and absolute paths)
function normalizeArray(parts, allowAboveRoot) {
// if the path tries to go above the root, `up` ends up > 0
var up = 0;
for (var i = parts.length; i >= 0; i--) {
var last = parts[i];
if (last == '.') {
parts.splice(i, 1);
} else if (last === '..') {
parts.splice(i, 1);
up++;
} else if (up) {
parts.splice(i, 1);
up--;
}
}
// if the path is allowed to go above the root, restore leading ..s
if (allowAboveRoot) {
for (; up--; up) {
parts.unshift('..');
}
}
return parts;
}
// Regex to split a filename into [*, dir, basename, ext]
// posix version
var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
// path.resolve([from ...], to)
// posix version
exports.resolve = function() {
var resolvedPath = '',
resolvedAbsolute = false;
for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
var path = (i >= 0)
? arguments[i]
: process.cwd();
// Skip empty and invalid entries
if (typeof path !== 'string' || !path) {
continue;
}
resolvedPath = path + '/' + resolvedPath;
resolvedAbsolute = path.charAt(0) === '/';
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
// Normalize the path
resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
return !!p;
}), !resolvedAbsolute).join('/');
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
};
// path.normalize(path)
// posix version
exports.normalize = function(path) {
var isAbsolute = path.charAt(0) === '/',
trailingSlash = path.slice(-1) === '/';
// Normalize the path
path = normalizeArray(filter(path.split('/'), function(p) {
return !!p;
}), !isAbsolute).join('/');
if (!path && !isAbsolute) {
path = '.';
}
if (path && trailingSlash) {
path += '/';
}
return (isAbsolute ? '/' : '') + path;
};
// posix version
exports.join = function() {
var paths = Array.prototype.slice.call(arguments, 0);
return exports.normalize(filter(paths, function(p, index) {
return p && typeof p === 'string';
}).join('/'));
};
exports.dirname = function(path) {
var dir = splitPathRe.exec(path)[1] || '';
var isWindows = false;
if (!dir) {
// No dirname
return '.';
} else if (dir.length === 1 ||
(isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {
// It is just a slash or a drive letter with a slash
return dir;
} else {
// It is a full dirname, strip trailing slash
return dir.substring(0, dir.length - 1);
}
};
exports.basename = function(path, ext) {
var f = splitPathRe.exec(path)[2] || '';
// TODO: make this comparison case-insensitive on windows?
if (ext && f.substr(-1 * ext.length) === ext) {
f = f.substr(0, f.length - ext.length);
}
return f;
};
exports.extname = function(path) {
return splitPathRe.exec(path)[3] || '';
};
});
require.define("__browserify_process",function(require,module,exports,__dirname,__filename,process,global){var process = module.exports = {};
process.nextTick = (function () {
var canSetImmediate = typeof window !== 'undefined'
&& window.setImmediate;
var canPost = typeof window !== 'undefined'
&& window.postMessage && window.addEventListener
;
if (canSetImmediate) {
return window.setImmediate;
}
if (canPost) {
var queue = [];
window.addEventListener('message', function (ev) {
if (ev.source === window && ev.data === 'browserify-tick') {
ev.stopPropagation();
if (queue.length > 0) {
var fn = queue.shift();
fn();
}
}
}, true);
return function nextTick(fn) {
queue.push(fn);
window.postMessage('browserify-tick', '*');
};
}
return function nextTick(fn) {
setTimeout(fn, 0);
};
})();
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.binding = function (name) {
if (name === 'evals') return (require)('vm')
else throw new Error('No such module. (Possibly not yet loaded)')
};
(function () {
var cwd = '/';
var path;
process.cwd = function () { return cwd };
process.chdir = function (dir) {
if (!path) path = require('path');
cwd = path.resolve(dir, cwd);
};
})();
});
require.define("/lib/coffee-script/helpers.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var beingDeclared, cleanMarkers, concat, concatMap, CS, difference, envEnrichments, envEnrichments_, foldl, humanReadable, map, nub, numberLines, pointToErrorLocation, usedAsExpression, usedAsExpression_;
cache$ = require('./functional-helpers');
concat = cache$.concat;
concatMap = cache$.concatMap;
difference = cache$.difference;
foldl = cache$.foldl;
map = cache$.map;
nub = cache$.nub;
CS = require('./nodes');
this.numberLines = numberLines = function (input, startLine) {
var lines, numbered, padSize;
if (null == startLine)
startLine = 1;
lines = input.split('\n');
padSize = ('' + (lines.length + startLine - 1)).length;
numbered = function (accum$) {
var currLine, i, line, pad;
for (var i$ = 0, length$ = lines.length; i$ < length$; ++i$) {
line = lines[i$];
i = i$;
currLine = '' + (i + startLine);
pad = Array(padSize + 1).join('0').slice(currLine.length);
accum$.push('' + pad + currLine + ' : ' + lines[i]);
}
return accum$;
}.call(this, []);
return numbered.join('\n');
};
cleanMarkers = function (str) {
return str.replace(/[\uEFEF\uEFFE\uEFFF]/g, '');
};
this.humanReadable = humanReadable = function (str) {
return str.replace(/\uEFEF/g, '(INDENT)').replace(/\uEFFE/g, '(DEDENT)').replace(/\uEFFF/g, '(TERM)');
};
this.formatParserError = function (input, e) {
var found, message, realColumn, unicode;
realColumn = cleanMarkers(('' + input.split('\n')[e.line - 1] + '\n').slice(0, e.column)).length;
if (!(null != e.found))
return 'Syntax error on line ' + e.line + ', column ' + realColumn + ': unexpected end of input';
found = JSON.stringify(humanReadable(e.found));
found = found.replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"');
unicode = e.found.charCodeAt(0).toString(16).toUpperCase();
unicode = '\\u' + '0000'.slice(unicode.length) + unicode;
message = 'Syntax error on line ' + e.line + ', column ' + realColumn + ": unexpected '" + found + "' (" + unicode + ')';
return '' + message + '\n' + pointToErrorLocation(input, e.line, realColumn);
};
this.pointToErrorLocation = pointToErrorLocation = function (source, line, column, numLinesOfContext) {
var currentLineOffset, lines, numberedLines, padSize, postLines, preLines, startLine;
if (null == numLinesOfContext)
numLinesOfContext = 3;
lines = source.split('\n');
currentLineOffset = line - 1;
startLine = currentLineOffset - numLinesOfContext;
if (startLine < 0)
startLine = 0;
preLines = lines.slice(startLine, +currentLineOffset + 1);
postLines = lines.slice(currentLineOffset + 1, +(currentLineOffset + numLinesOfContext) + 1);
numberedLines = numberLines(cleanMarkers([].slice.call(preLines).concat([].slice.call(postLines)).join('\n')), startLine + 1).split('\n');
preLines = numberedLines.slice(0, preLines.length);
postLines = numberedLines.slice(preLines.length);
column = cleanMarkers(('' + lines[currentLineOffset] + '\n').slice(0, column)).length;
padSize = (currentLineOffset + 1 + postLines.length).toString(10).length;
return [].slice.call(preLines).concat(['' + Array(padSize + 1).join('^') + ' :~' + Array(column).join('~') + '^'], [].slice.call(postLines)).join('\n');
};
this.beingDeclared = beingDeclared = function (assignment) {
switch (false) {
case !!(null != assignment):
return [];
case !assignment['instanceof'](CS.Identifiers):
return [assignment.data];
case !assignment['instanceof'](CS.Rest):
return beingDeclared(assignment.expression);
case !assignment['instanceof'](CS.MemberAccessOps):
return [];
case !assignment['instanceof'](CS.DefaultParam):
return beingDeclared(assignment.param);
case !assignment['instanceof'](CS.ArrayInitialiser):
return concatMap(assignment.members, beingDeclared);
case !assignment['instanceof'](CS.ObjectInitialiser):
return concatMap(assignment.vals(), beingDeclared);
default:
throw new Error('beingDeclared: Non-exhaustive patterns in case: ' + assignment.className);
}
};
this.declarationsFor = function (node, inScope) {
var vars;
vars = envEnrichments(node, inScope);
return foldl(new CS.Undefined().g(), vars, function (expr, v) {
return new CS.AssignOp(new CS.Identifier(v).g(), expr).g();
});
};
usedAsExpression_ = function (ancestors) {
var grandparent, parent;
parent = ancestors[0];
grandparent = ancestors[1];
switch (false) {
case !!(null != parent):
return true;
case !parent['instanceof'](CS.Program, CS.Class):
return false;
case !parent['instanceof'](CS.SeqOp):
return this === parent.right && usedAsExpression(parent, ancestors.slice(1));
case !(parent['instanceof'](CS.Block) && parent.statements.indexOf(this) !== parent.statements.length - 1):
return false;
case !(parent['instanceof'](CS.Functions) && parent.body === this && null != grandparent && grandparent['instanceof'](CS.Constructor)):
return false;
default:
return true;
}
};
this.usedAsExpression = usedAsExpression = function (node, ancestors) {
return usedAsExpression_.call(node, ancestors);
};
envEnrichments_ = function (inScope) {
var possibilities;
if (null == inScope)
inScope = [];
possibilities = function () {
var this$, this$1;
switch (false) {
case !this['instanceof'](CS.AssignOp):
return nub(beingDeclared(this.assignee));
case !this['instanceof'](CS.Class):
return nub(concat([
beingDeclared(this.nameAssignee),
envEnrichments(this.parent),
'undefined' !== typeof name && null != name ? [name] : []
]));
case !this['instanceof'](CS.ForIn, CS.ForOf):
return nub(concat([
concatMap(this.childNodes, (this$ = this, function (child) {
if (in$(child, this$.listMembers)) {
return concatMap(this$[child], function (m) {
return envEnrichments(m, inScope);
});
} else {
return envEnrichments(this$[child], inScope);
}
})),
beingDeclared(this.keyAssignee),
beingDeclared(this.valAssignee)
]));
case !this['instanceof'](CS.Functions):
return [];
default:
return nub(concatMap(this.childNodes, (this$1 = this, function (child) {
if (in$(child, this$1.listMembers)) {
return concatMap(this$1[child], function (m) {
return envEnrichments(m, inScope);
});
} else {
return envEnrichments(this$1[child], inScope);
}
})));
}
}.call(this);
return difference(possibilities, inScope);
};
this.envEnrichments = envEnrichments = function (node, args) {
args = 2 <= arguments.length ? [].slice.call(arguments, 1) : [];
if (null != node) {
return envEnrichments_.apply(node, args);
} else {
return [];
}
};
function in$(member, list) {
for (var i = 0, length = list.length; i < length; ++i)
if (i in list && list[i] === member)
return true;
return false;
}
});
require.define("/lib/coffee-script/functional-helpers.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var concat, foldl, map, nub, span;
this.any = function (list, fn) {
var e;
for (var i$ = 0, length$ = list.length; i$ < length$; ++i$) {
e = list[i$];
if (fn(e))
return true;
}
return false;
};
this.all = function (list, fn) {
var e;
for (var i$ = 0, length$ = list.length; i$ < length$; ++i$) {
e = list[i$];
if (!fn(e))
return false;
}
return true;
};
this.foldl = foldl = function (memo, list, fn) {
var i;
for (var i$ = 0, length$ = list.length; i$ < length$; ++i$) {
i = list[i$];
memo = fn(memo, i);
}
return memo;
};
this.foldl1 = function (list, fn) {
return foldl(list[0], list.slice(1), fn);
};
this.map = map = function (list, fn) {
return function (accum$) {
var e;
for (var i$ = 0, length$ = list.length; i$ < length$; ++i$) {
e = list[i$];
accum$.push(fn(e));
}
return accum$;
}.call(this, []);
};
this.concat = concat = function (list) {
var cache$;
return (cache$ = []).concat.apply(cache$, [].slice.call(list).concat());
};
this.concatMap = function (list, fn) {
return concat(map(list, fn));
};
this.intersect = function (listA, listB) {
return function (accum$) {
var a;
for (var i$ = 0, length$ = listA.length; i$ < length$; ++i$) {
a = listA[i$];
if (!in$(a, listB))
continue;
accum$.push(a);
}
return accum$;
}.call(this, []);
};
this.difference = function (listA, listB) {
return function (accum$) {
var a;
for (var i$ = 0, length$ = listA.length; i$ < length$; ++i$) {
a = listA[i$];
if (!!in$(a, listB))
continue;
accum$.push(a);
}
return accum$;
}.call(this, []);
};
this.nub = nub = function (list) {
var i, result;
result = [];
for (var i$ = 0, length$ = list.length; i$ < length$; ++i$) {
i = list[i$];
if (!!in$(i, result))
continue;
result.push(i);
}
return result;
};
this.union = function (listA, listB) {
return listA.concat(function (accum$) {
var b;
for (var cache$ = nub(listB), i$ = 0, length$ = cache$.length; i$ < length$; ++i$) {
b = cache$[i$];
if (!!in$(b, listA))
continue;
accum$.push(b);
}
return accum$;
}.call(this, []));
};
this.flip = function (fn) {
return function (b, a) {
return fn.call(this, a, b);
};
};
this.owns = function (hop) {
return function (a, b) {
return hop.call(a, b);
};
}({}.hasOwnProperty);
this.span = span = function (list, f) {
var cache$, ys, zs;
if (list.length === 0) {
return [
[],
[]
];
} else if (f(list[0])) {
cache$ = span(list.slice(1), f);
ys = cache$[0];
zs = cache$[1];
return [
[list[0]].concat([].slice.call(ys)),
zs
];
} else {
return [
[],
list
];
}
};
this.divMod = function (a, b) {
var c, div, mod;
c = a % b;
mod = c < 0 ? c + b : c;
div = Math.floor(a / b);
return [
div,
mod
];
};
function in$(member, list) {
for (var i = 0, length = list.length; i < length; ++i)
if (i in list && list[i] === member)
return true;
return false;
}
});
require.define("/lib/coffee-script/nodes.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var ArrayInitialiser, Block, Bool, Class, CompoundAssignOp, concat, concatMap, Conditional, createNodes, difference, exports, ForOf, FunctionApplications, Functions, GenSym, handleLists, handlePrimitives, HeregExp, Identifier, Identifiers, map, NegatedConditional, NewOp, Nodes, nub, ObjectInitialiser, Primitives, Range, RegExp, RegExps, Slice, StaticMemberAccessOps, Super, Switch, SwitchCase, union, While;
cache$ = require('./functional-helpers');
map = cache$.map;
concat = cache$.concat;
concatMap = cache$.concatMap;
difference = cache$.difference;
nub = cache$.nub;
union = cache$.union;
exports = null != ('undefined' !== typeof module && null != module ? module.exports : void 0) ? 'undefined' !== typeof module && null != module ? module.exports : void 0 : this;
createNodes = function (subclasses, superclasses) {
var className, specs;
if (null == superclasses)
superclasses = [];
for (className in subclasses) {
if (!isOwn$(subclasses, className))
continue;
specs = subclasses[className];
(function (className) {
var isCategory, klass, params, superclass;
superclass = null != superclasses[0] ? superclasses[0] : function () {
};
isCategory = 'undefined' !== typeof specs && null != specs && specs.length === 2;
params = 'undefined' !== typeof specs && null != specs ? function () {
switch (specs.length) {
case 0:
return [];
case 1:
case 2:
return specs[0];
}
}.call(this) : null;
if (null != params)
params;
else
params = null != superclass.prototype.childNodes ? superclass.prototype.childNodes : [];
klass = function (super$) {
var externalCtor$;
extends$(class$, super$);
externalCtor$ = isCategory ? function () {
} : function () {
var i, param;
for (var i$ = 0, length$ = params.length; i$ < length$; ++i$) {
param = params[i$];
i = i$;
this[param] = arguments[i];
}
if (null != this.initialise)
this.initialise.apply(this, arguments);
return this;
};
function class$() {
return externalCtor$.apply(this, arguments);
}
class$.prototype.className = className;
class$.superclasses = superclasses;
return class$;
}(superclass);
if (null != ('undefined' !== typeof specs && null != specs ? specs[0] : void 0))
klass.prototype.childNodes = specs[0];
if (isCategory)
createNodes(specs[1], [klass].concat([].slice.call(superclasses)));
return exports[className] = klass;
}(className));
}
};
createNodes({Nodes: [
[],
{
BinOps: [
[
'left',
'right'
],
{
AssignOps: [
[
'assignee',
'expression'
],
{
AssignOp: null,
ClassProtoAssignOp: null,
CompoundAssignOp: [[
'op',
'assignee',
'expression'
]],
ExistsAssignOp: null
}
],
BitOps: [
null,
{
BitAndOp: null,
BitOrOp: null,
BitXorOp: null,
LeftShiftOp: null,
SignedRightShiftOp: null,
UnsignedRightShiftOp: null
}
],
ComparisonOps: [
null,
{
EQOp: null,
GTEOp: null,
GTOp: null,
LTEOp: null,
LTOp: null,
NEQOp: null
}
],
ConcatOp: null,
ExistsOp: null,
ExtendsOp: null,
InOp: null,
InstanceofOp: null,
LogicalOps: [
null,
{
LogicalAndOp: null,
LogicalOrOp: null
}
],
MathsOps: [
null,
{
ExpOp: null,
DivideOp: null,
MultiplyOp: null,
RemOp: null,
SubtractOp: null
}
],
OfOp: null,
PlusOp: null,
Range: [[
'isInclusive',
'left',
'right'
]],
SeqOp: null
}
],
Statements: [
[],
{
Break: null,
Continue: null,
Return: [['expression']],
Throw: [['expression']]
}
],
UnaryOps: [
['expression'],
{
BitNotOp: null,
DeleteOp: null,
DoOp: null,
LogicalNotOp: null,
NewOp: [[
'ctor',
'arguments'
]],
PreDecrementOp: null,
PreIncrementOp: null,
PostDecrementOp: null,
PostIncrementOp: null,
TypeofOp: null,
UnaryExistsOp: null,
UnaryNegateOp: null,
UnaryPlusOp: null
}
],
MemberAccessOps: [
null,
{
StaticMemberAccessOps: [
[
'expression',
'memberName'
],
{
MemberAccessOp: null,
ProtoMemberAccessOp: null,
SoakedMemberAccessOp: null,
SoakedProtoMemberAccessOp: null
}
],
DynamicMemberAccessOps: [
[
'expression',
'indexingExpr'
],
{
DynamicMemberAccessOp: null,
DynamicProtoMemberAccessOp: null,
SoakedDynamicMemberAccessOp: null,
SoakedDynamicProtoMemberAccessOp: null
}
]
}
],
ChainedComparisonOp: [['expression']],
FunctionApplications: [
[
'function',
'arguments'
],
{
FunctionApplication: null,
SoakedFunctionApplication: null
}
],
Super: [['arguments']],
Program: [['body']],
Block: [['statements']],
Conditional: [[
'condition',
'consequent',
'alternate'
]],
ForIn: [[
'valAssignee',
'keyAssignee',
'target',
'step',
'filter',
'body'
]],
ForOf: [[
'isOwn',
'keyAssignee',
'valAssignee',
'target',
'filter',
'body'
]],
Switch: [[
'expression',
'cases',
'alternate'
]],
SwitchCase: [[
'conditions',
'consequent'
]],
Try: [[
'body',
'catchAssignee',
'catchBody',
'finallyBody'
]],
While: [[
'condition',
'body'
]],
ArrayInitialiser: [['members']],
ObjectInitialiser: [['members']],
ObjectInitialiserMember: [[
'key',
'expression'
]],
Class: [[
'nameAssignee',
'parent',
'ctor',
'body',
'boundMembers'
]],
Constructor: [['expression']],
Functions: [
[
'parameters',
'body'
],
{
Function: null,
BoundFunction: null
}
],
DefaultParam: [[
'param',
'default'
]],
Identifiers: [
['data'],
{
Identifier: null,
GenSym: null
}
],
Null: null,
Primitives: [
['data'],
{
Bool: null,
JavaScript: null,
Numbers: [
null,
{
Int: null,
Float: null
}
],
String: null
}
],
RegExps: [
null,
{
RegExp: [[
'data',
'flags'
]],
HeregExp: [[
'expression',
'flags'
]]
}
],
This: null,
Undefined: null,
Slice: [[
'expression',
'isInclusive',
'left',
'right'
]],
Rest: [['expression']],
Spread: [['expression']]
}
]});
cache$1 = exports;
Nodes = cache$1.Nodes;
Primitives = cache$1.Primitives;
CompoundAssignOp = cache$1.CompoundAssignOp;
StaticMemberAccessOps = cache$1.StaticMemberAccessOps;
Range = cache$1.Range;
ArrayInitialiser = cache$1.ArrayInitialiser;
ObjectInitialiser = cache$1.ObjectInitialiser;
NegatedConditional = cache$1.NegatedConditional;
Conditional = cache$1.Conditional;
Identifier = cache$1.Identifier;
ForOf = cache$1.ForOf;
Functions = cache$1.Functions;
While = cache$1.While;
Class = cache$1.Class;
Block = cache$1.Block;
NewOp = cache$1.NewOp;
Bool = cache$1.Bool;
FunctionApplications = cache$1.FunctionApplications;
RegExps = cache$1.RegExps;
RegExp = cache$1.RegExp;
HeregExp = cache$1.HeregExp;
Super = cache$1.Super;
Slice = cache$1.Slice;
Switch = cache$1.Switch;
Identifiers = cache$1.Identifiers;
SwitchCase = cache$1.SwitchCase;
GenSym = cache$1.GenSym;
Nodes.fromJSON = function (json) {
return exports[json.type].fromJSON(json);
};
Nodes.prototype.listMembers = [];
Nodes.prototype.toJSON = function () {
var child, json;
json = {
type: this.className,
'line': this.line,
'column': this.column,
range: [
this.offset,
null != this.raw ? this.offset + this.raw.length : void 0
],
'raw': this.raw
};
for (var i$ = 0, length$ = this.childNodes.length; i$ < length$; ++i$) {
child = this.childNodes[i$];
if (in$(child, this.listMembers)) {
json[child] = function (accum$) {
var p;
for (var i$1 = 0, length$1 = this[child].length; i$1 < length$1; ++i$1) {
p = this[child][i$1];
accum$.push(p.toJSON());
}
return accum$;
}.call(this, []);
} else {
json[child] = null != this[child] ? this[child].toJSON() : void 0;
}
}
return json;
};
Nodes.prototype.fold = function (memo, fn) {
var child;
for (var i$ = 0, length$ = this.childNodes.length; i$ < length$; ++i$) {
child = this.childNodes[i$];
if (in$(child, this.listMembers)) {
memo = function (accum$) {
var p;
for (var i$1 = 0, length$1 = this[child].length; i$1 < length$1; ++i$1) {
p = this[child][i$1];
accum$.push(p.fold(memo, fn));
}
return accum$;
}.call(this, []);
} else {
memo = this[child].fold(memo, fn);
}
}
return fn(memo, this);
};
Nodes.prototype.clone = function () {
var ctor, k, n, v;
ctor = function () {
};
ctor.prototype = this.constructor.prototype;
n = new ctor;
for (k in this) {
if (!isOwn$(this, k))
continue;
v = this[k];
n[k] = v;
}
return n;
};
Nodes.prototype['instanceof'] = function (ctors) {
var ctor, superclasses;
ctors = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];
superclasses = map(this.constructor.superclasses, function (c) {
return c.prototype.className;
});
for (var i$ = 0, length$ = ctors.length; i$ < length$; ++i$) {
ctor = ctors[i$];
if (!in$(ctor.prototype.className, [this.className].concat([].slice.call(superclasses))))
continue;
return true;
}
return false;
};
Nodes.prototype.r = function (param$) {
this.raw = param$;
return this;
};
Nodes.prototype.p = function (param$, param$1, param$2) {
this.line = param$;
this.column = param$1;
this.offset = param$2;
return this;
};
Nodes.prototype.generated = false;
Nodes.prototype.g = function () {
this.generated = true;
return this;
};
handlePrimitives = function (ctor, primitives) {
ctor.prototype.childNodes = difference(ctor.prototype.childNodes, primitives);
return ctor.prototype.toJSON = function () {
var json, primitive;
json = Nodes.prototype.toJSON.call(this);
for (var i$ = 0, length$ = primitives.length; i$ < length$; ++i$) {
primitive = primitives[i$];
json[primitive] = this[primitive];
}
return json;
};
};
handlePrimitives(Class, ['boundMembers']);
handlePrimitives(CompoundAssignOp, ['op']);
handlePrimitives(ForOf, ['isOwn']);
handlePrimitives(HeregExp, ['flags']);
handlePrimitives(Identifiers, ['data']);
handlePrimitives(Primitives, ['data']);
handlePrimitives(Range, ['isInclusive']);
handlePrimitives(RegExp, [
'data',
'flags'
]);
handlePrimitives(Slice, ['isInclusive']);
handlePrimitives(StaticMemberAccessOps, ['memberName']);
handleLists = function (ctor, listProps) {
return ctor.prototype.listMembers = listProps;
};
handleLists(ArrayInitialiser, ['members']);
handleLists(Block, ['statements']);
handleLists(Functions, ['parameters']);
handleLists(FunctionApplications, ['arguments']);
handleLists(NewOp, ['arguments']);
handleLists(ObjectInitialiser, ['members']);
handleLists(Super, ['arguments']);
handleLists(Switch, ['cases']);
handleLists(SwitchCase, ['conditions']);
Block.wrap = function (s) {
return new Block(null != s ? [s] : []).r(s.raw).p(s.line, s.column);
};
Class.prototype.initialise = function () {
if (null != this.boundMembers)
this.boundMembers;
else
this.boundMembers = [];
this.name = new GenSym('class');
if (null != this.nameAssignee)
return this.name = function () {
switch (false) {
case !this.nameAssignee['instanceof'](Identifier):
return new Identifier(this.nameAssignee.data);
case !this.nameAssignee['instanceof'](StaticMemberAccessOps):
return new Identifier(this.nameAssignee.memberName);
default:
return this.name;
}
}.call(this);
};
Class.prototype.childNodes.push('name');
ObjectInitialiser.prototype.keys = function () {
return map(this.members, function (m) {
return m.key;
});
};
ObjectInitialiser.prototype.vals = function () {
return map(this.members, function (m) {
return m.expression;
});
};
RegExps.prototype.initialise = function (_, flags) {
var flag;
this.flags = {};
for (var cache$2 = [
'g',
'i',
'm',
'y'
], i$ = 0, length$ = cache$2.length; i$ < length$; ++i$) {
flag = cache$2[i$];
this.flags[flag] = in$(flag, flags);
}
};
exports.NegatedConditional = function (super$) {
extends$(NegatedConditional, super$);
function NegatedConditional() {
Conditional.apply(this, arguments);
}
return NegatedConditional;
}(Conditional);
exports.NegatedWhile = function (super$) {
extends$(NegatedWhile, super$);
function NegatedWhile() {
While.apply(this, arguments);
}
return NegatedWhile;
}(While);
exports.Loop = function (super$) {
extends$(Loop, super$);
function Loop(body) {
While.call(this, new Bool(true).g(), body);
}
return Loop;
}(While);
function isOwn$(o, p) {
return {}.hasOwnProperty.call(o, p);
}
function extends$(child, parent) {
var key;
for (key in parent)
if (isOwn$(parent, key))
child[key] = parent[key];
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
}
function in$(member, list) {
for (var i = 0, length = list.length; i < length; ++i)
if (i in list && list[i] === member)
return true;
return false;
}
});
require.define("/lib/coffee-script/preprocessor.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var EventEmitter, fs, inspect, pointToErrorLocation, Preprocessor, StringScanner;
fs = require('fs');
EventEmitter = require('events').EventEmitter;
pointToErrorLocation = require('./helpers').pointToErrorLocation;
StringScanner = require('StringScanner');
inspect = function (o) {
return require('util').inspect(o, false, 9e9, true);
};
this.Preprocessor = Preprocessor = function (super$) {
var DEDENT, INDENT, processInput, TERM, ws;
extends$(Preprocessor, super$);
ws = '\\t\\x0B\\f \\xA0\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000\\uFEFF';
INDENT = '\uefef';
DEDENT = '\ueffe';
TERM = '\uefff';
function Preprocessor() {
this.base = this.indent = null;
this.context = [];
this.context.peek = function () {
if (this.length) {
return this[this.length - 1];
} else {
return null;
}
};
this.context.err = function (c) {
throw new Error('Unexpected ' + inspect(c));
};
this.context.observe = function (c) {
var top;
top = this.peek();
switch (c) {
case '"""':
case "'''":
case '"':
case "'":
case '###':
case '`':
case '///':
case '/':
if (top === c) {
this.pop();
} else {
this.push(c);
}
break;
case INDENT:
case '#':
case '#{':
case '[':
case '(':
case '{':
case '\\':
case 'regexp-[':
case 'regexp-(':
case 'regexp-{':
case 'heregexp-#':
case 'heregexp-[':
case 'heregexp-(':
case 'heregexp-{':
this.push(c);
break;
case DEDENT:
if (!(top === INDENT))
this.err(c);
this.pop();
break;
case '\n':
if (!(top === '#' || top === 'heregexp-#'))
this.err(c);
this.pop();
break;
case ']':
if (!(top === '[' || top === 'regexp-[' || top === 'heregexp-['))
this.err(c);
this.pop();
break;
case ')':
if (!(top === '(' || top === 'regexp-(' || top === 'heregexp-('))
this.err(c);
this.pop();
break;
case '}':
if (!(top === '#{' || top === '{' || top === 'regexp-{' || top === 'heregexp-{'))
this.err(c);
this.pop();
break;
case 'end-\\':
if (!(top === '\\'))
this.err(c);
this.pop();
break;
default:
throw new Error('undefined token observed: ' + c);
}
return this;
};
this.ss = new StringScanner('');
}
Preprocessor.prototype.p = function (s) {
if (null != s)
this.emit('data', s);
return s;
};
Preprocessor.prototype.scan = function (r) {
return this.p(this.ss.scan(r));
};
processInput = function (isEnd) {
return function (data) {
var context, delta, lastChar, level, lines, message, newLevel, nonIdentifierBefore, pos, spaceBefore, tok;
if (!isEnd)
this.ss.concat(data);
while (!this.ss.eos()) {
switch (this.context.peek()) {
case null:
case INDENT:
case '#{':
case '[':
case '(':
case '{':
if (this.ss.bol() || this.scan(new RegExp('(?:[' + ws + ']*\\n)+'))) {
this.scan(new RegExp('(?:[' + ws + ']*(\\#\\#?(?!\\#)[^\\n]*)?\\n)+'));
if (!isEnd && null != this.ss.check(new RegExp('[' + ws + '\\n]*$')))
return;
if (null != this.base) {
if (!(null != this.scan(this.base))) {
throw new Error('inconsistent base indentation');
}
} else {
this.base = new RegExp('' + this.scan(new RegExp('[' + ws + ']*')) + '');
}
if (null != this.indent) {
level = function (accum$) {
var c;
for (var i$ = 0, length$ = this.context.length; i$ < length$; ++i$) {
c = this.context[i$];
if (!(c === INDENT))
continue;
accum$.push(0);
}
return accum$;
}.call(this, []).length;
if (this.ss.check(new RegExp('(?:' + this.indent + '){' + (level + 1) + '}[^' + ws + '#]'))) {
this.scan(new RegExp('(?:' + this.indent + '){' + (level + 1) + '}'));
this.context.observe(INDENT);
this.p(INDENT);
} else if (level > 0 && this.ss.check(new RegExp('(?:' + this.indent + '){0,' + (level - 1) + '}[^' + ws + ']'))) {
newLevel = 0;
while (this.scan(new RegExp('' + this.indent + ''))) {
++newLevel;
}
delta = level - newLevel;
while (delta--) {
this.context.observe(DEDENT);
this.p('' + DEDENT + TERM);
}
} else if (this.ss.check(new RegExp('(?:' + this.indent + '){' + level + '}[^' + ws + ']'))) {
this.scan(new RegExp('(?:' + this.indent + '){' + level + '}'));
} else {
lines = this.ss.str.substr(0, this.ss.pos).split(/\n/) || [''];
message = 'Syntax error on line ' + lines.length + ': invalid indentation';
context = pointToErrorLocation(this.ss.str, lines.length, 1 + (level + 1) * this.indent.length);
throw new Error('' + message + '\n' + context);
}
} else if (this.ss.check(new RegExp('[' + ws + ']+[^' + ws + '#]'))) {
this.indent = this.scan(new RegExp('[' + ws + ']+'));
this.context.observe(INDENT);
this.p(INDENT);
}
}
tok = function () {
switch (this.context.peek()) {
case '[':
this.scan(/[^\n'"\\\/#`[({\]]+/);
return this.scan(/\]/);
case '(':
this.scan(/[^\n'"\\\/#`[({)]+/);
return this.scan(/\)/);
case '#{':
case '{':
this.scan(/[^\n'"\\\/#`[({}]+/);
return this.scan(/\}/);
default: {
this.scan(/[^\n'"\\\/#`[({]+/);
return null;
}
}
}.call(this);
if (tok) {
this.context.observe(tok);
continue;
}
if (tok = this.scan(/"""|'''|\/\/\/|###|["'`#[({\\]/)) {
this.context.observe(tok);
} else if (tok = this.scan(/\//)) {
pos = this.ss.position();
if (pos > 1) {
lastChar = this.ss.string()[pos - 2];
spaceBefore = new RegExp('[' + ws + ']').test(lastChar);
nonIdentifierBefore = /[\W_$]/.test(lastChar);
}
if (pos === 1 || (spaceBefore ? !this.ss.check(new RegExp('[' + ws + '=]')) : nonIdentifierBefore))
this.context.observe('/');
}
break;
case '\\':
if (this.scan(/[\s\S]/))
this.context.observe('end-\\');
break;
case '"""':
this.scan(/(?:[^"#\\]+|""?(?!")|#(?!{)|\\.)+/);
this.ss.scan(/\\\n/);
if (tok = this.scan(/#{|"""/)) {
this.context.observe(tok);
} else if (tok = this.scan(/#{|"""/)) {
this.context.observe(tok);
}
break;
case '"':
this.scan(/(?:[^"#\\]+|#(?!{)|\\.)+/);
this.ss.scan(/\\\n/);
if (tok = this.scan(/#{|"/))
this.context.observe(tok);
break;
case "'''":
this.scan(/(?:[^'\\]+|''?(?!')|\\.)+/);
this.ss.scan(/\\\n/);
if (tok = this.scan(/'''/))
this.context.observe(tok);
break;
case "'":
this.scan(/(?:[^'\\]+|\\.)+/);
this.ss.scan(/\\\n/);
if (tok = this.scan(/'/))
this.context.observe(tok);
break;
case '###':
this.scan(/(?:[^#]+|##?(?!#))+/);
if (tok = this.scan(/###/))
this.context.observe(tok);
break;
case '#':
this.scan(/[^\n]+/);
if (tok = this.scan(/\n/))
this.context.observe(tok);
break;
case '`':
this.scan(/[^`]+/);
if (tok = this.scan(/`/))
this.context.observe(tok);
break;
case '///':
this.scan(/(?:[^[/#\\]+|\/\/?(?!\/)|\\.)+/);
if (tok = this.scan(/#{|\/\/\/|\\/)) {
this.context.observe(tok);
} else if (this.ss.scan(/#/)) {
this.context.observe('heregexp-#');
} else if (tok = this.scan(/[\[]/)) {
this.context.observe('heregexp-' + tok);
}
break;
case 'heregexp-[':
this.scan(/(?:[^\]\/\\]+|\/\/?(?!\/))+/);
if (tok = this.scan(/[\]\\]|#{|\/\/\//))
this.context.observe(tok);
break;
case 'heregexp-#':
this.ss.scan(/(?:[^\n/]+|\/\/?(?!\/))+/);
if (tok = this.scan(/\n|\/\/\//))
this.context.observe(tok);
break;
case '/':
this.scan(/[^[/\\]+/);
if (tok = this.scan(/[\/\\]/)) {
this.context.observe(tok);
} else if (tok = this.scan(/\[/)) {
this.context.observe('regexp-' + tok);
}
break;
case 'regexp-[':
this.scan(/[^\]\\]+/);
if (tok = this.scan(/[\]\\]/))
this.context.observe(tok);
}
}
if (isEnd) {
this.scan(new RegExp('[' + ws + '\\n]*$'));
while (this.context.length && INDENT === this.context.peek()) {
this.context.observe(DEDENT);
this.p('' + DEDENT + TERM);
}
if (this.context.length)
throw new Error('Unclosed ' + inspect(this.context.peek()) + ' at EOF');
this.emit('end');
return;
}
};
};
Preprocessor.prototype.processData = processInput(false);
Preprocessor.prototype.processEnd = processInput(true);
Preprocessor.processSync = function (input) {
var output, pre;
pre = new Preprocessor;
output = '';
pre.emit = function (type, data) {
if (type === 'data')
return output += data;
};
pre.processData(input);
pre.processEnd();
return output;
};
return Preprocessor;
}(EventEmitter);
function isOwn$(o, p) {
return {}.hasOwnProperty.call(o, p);
}
function extends$(child, parent) {
var key;
for (key in parent)
if (isOwn$(parent, key))
child[key] = parent[key];
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
}
});
require.define("fs",function(require,module,exports,__dirname,__filename,process,global){// nothing to see here... no file methods for the browser
});
require.define("events",function(require,module,exports,__dirname,__filename,process,global){if (!process.EventEmitter) process.EventEmitter = function () {};
var EventEmitter = exports.EventEmitter = process.EventEmitter;
var isArray = typeof Array.isArray === 'function'
? Array.isArray
: function (xs) {
return Object.prototype.toString.call(xs) === '[object Array]'
}
;
// By default EventEmitters will print a warning if more than
// 10 listeners are added to it. This is a useful default which
// helps finding memory leaks.
//
// Obviously not all Emitters should be limited to 10. This function allows
// that to be increased. Set to zero for unlimited.
var defaultMaxListeners = 10;
EventEmitter.prototype.setMaxListeners = function(n) {
if (!this._events) this._events = {};
this._events.maxListeners = n;
};
EventEmitter.prototype.emit = function(type) {
// If there is no 'error' event listener then throw.
if (type === 'error') {
if (!this._events || !this._events.error ||
(isArray(this._events.error) && !this._events.error.length))
{
if (arguments[1] instanceof Error) {
throw arguments[1]; // Unhandled 'error' event
} else {
throw new Error("Uncaught, unspecified 'error' event.");
}
return false;
}
}
if (!this._events) return false;
var handler = this._events[type];
if (!handler) return false;
if (typeof handler == 'function') {
switch (arguments.length) {
// fast cases
case 1:
handler.call(this);
break;
case 2:
handler.call(this, arguments[1]);
break;
case 3:
handler.call(this, arguments[1], arguments[2]);
break;
// slower
default:
var args = Array.prototype.slice.call(arguments, 1);
handler.apply(this, args);
}
return true;
} else if (isArray(handler)) {
var args = Array.prototype.slice.call(arguments, 1);
var listeners = handler.slice();
for (var i = 0, l = listeners.length; i < l; i++) {
listeners[i].apply(this, args);
}
return true;
} else {
return false;
}
};
// EventEmitter is defined in src/node_events.cc
// EventEmitter.prototype.emit() is also defined there.
EventEmitter.prototype.addListener = function(type, listener) {
if ('function' !== typeof listener) {
throw new Error('addListener only takes instances of Function');
}
if (!this._events) this._events = {};
// To avoid recursion in the case that type == "newListeners"! Before
// adding it to the listeners, first emit "newListeners".
this.emit('newListener', type, listener);
if (!this._events[type]) {
// Optimize the case of one listener. Don't need the extra array object.
this._events[type] = listener;
} else if (isArray(this._events[type])) {
// Check for listener leak
if (!this._events[type].warned) {
var m;
if (this._events.maxListeners !== undefined) {
m = this._events.maxListeners;
} else {
m = defaultMaxListeners;
}
if (m && m > 0 && this._events[type].length > m) {
this._events[type].warned = true;
console.error('(node) warning: possible EventEmitter memory ' +
'leak detected. %d listeners added. ' +
'Use emitter.setMaxListeners() to increase limit.',
this._events[type].length);
console.trace();
}
}
// If we've already got an array, just append.
this._events[type].push(listener);
} else {
// Adding the second element, need to change to array.
this._events[type] = [this._events[type], listener];
}
return this;
};
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
EventEmitter.prototype.once = function(type, listener) {
var self = this;
self.on(type, function g() {
self.removeListener(type, g);
listener.apply(this, arguments);
});
return this;
};
EventEmitter.prototype.removeListener = function(type, listener) {
if ('function' !== typeof listener) {
throw new Error('removeListener only takes instances of Function');
}
// does not use listeners(), so no side effect of creating _events[type]
if (!this._events || !this._events[type]) return this;
var list = this._events[type];
if (isArray(list)) {
var i = list.indexOf(listener);
if (i < 0) return this;
list.splice(i, 1);
if (list.length == 0)
delete this._events[type];
} else if (this._events[type] === listener) {
delete this._events[type];
}
return this;
};
EventEmitter.prototype.removeAllListeners = function(type) {
// does not use listeners(), so no side effect of creating _events[type]
if (type && this._events && this._events[type]) this._events[type] = null;
return this;
};
EventEmitter.prototype.listeners = function(type) {
if (!this._events) this._events = {};
if (!this._events[type]) this._events[type] = [];
if (!isArray(this._events[type])) {
this._events[type] = [this._events[type]];
}
return this._events[type];
};
});
require.define("/node_modules/StringScanner/package.json",function(require,module,exports,__dirname,__filename,process,global){module.exports = {"main":"./lib/StringScanner"}
});
require.define("/node_modules/StringScanner/lib/StringScanner.js",function(require,module,exports,__dirname,__filename,process,global){(function() {
var StringScanner;
StringScanner = (function() {
function StringScanner(str) {
this.str = str != null ? str : '';
this.str = '' + this.str;
this.pos = 0;
this.lastMatch = {
reset: function() {
this.str = null;
this.captures = [];
return this;
}
}.reset();
this;
}
StringScanner.prototype.bol = function() {
return this.pos <= 0 || (this.str[this.pos - 1] === "\n");
};
StringScanner.prototype.captures = function() {
return this.lastMatch.captures;
};
StringScanner.prototype.check = function(pattern) {
var matches;
if (this.str.substr(this.pos).search(pattern) !== 0) {
this.lastMatch.reset();
return null;
}
matches = this.str.substr(this.pos).match(pattern);
this.lastMatch.str = matches[0];
this.lastMatch.captures = matches.slice(1);
return this.lastMatch.str;
};
StringScanner.prototype.checkUntil = function(pattern) {
var matches, patternPos;
patternPos = this.str.substr(this.pos).search(pattern);
if (patternPos < 0) {
this.lastMatch.reset();
return null;
}
matches = this.str.substr(this.pos + patternPos).match(pattern);
this.lastMatch.captures = matches.slice(1);
return this.lastMatch.str = this.str.substr(this.pos, patternPos) + matches[0];
};
StringScanner.prototype.clone = function() {
var clone, prop, value, _ref;
clone = new this.constructor(this.str);
clone.pos = this.pos;
clone.lastMatch = {};
_ref = this.lastMatch;
for (prop in _ref) {
value = _ref[prop];
clone.lastMatch[prop] = value;
}
return clone;
};
StringScanner.prototype.concat = function(str) {
this.str += str;
return this;
};
StringScanner.prototype.eos = function() {
return this.pos === this.str.length;
};
StringScanner.prototype.exists = function(pattern) {
var matches, patternPos;
patternPos = this.str.substr(this.pos).search(pattern);
if (patternPos < 0) {
this.lastMatch.reset();
return null;
}
matches = this.str.substr(this.pos + patternPos).match(pattern);
this.lastMatch.str = matches[0];
this.lastMatch.captures = matches.slice(1);
return patternPos;
};
StringScanner.prototype.getch = function() {
return this.scan(/./);
};
StringScanner.prototype.match = function() {
return this.lastMatch.str;
};
StringScanner.prototype.matches = function(pattern) {
this.check(pattern);
return this.matchSize();
};
StringScanner.prototype.matched = function() {
return this.lastMatch.str != null;
};
StringScanner.prototype.matchSize = function() {
if (this.matched()) {
return this.match().length;
} else {
return null;
}
};
StringScanner.prototype.peek = function(len) {
return this.str.substr(this.pos, len);
};
StringScanner.prototype.pointer = function() {
return this.pos;
};
StringScanner.prototype.setPointer = function(pos) {
pos = +pos;
if (pos < 0) {
pos = 0;
}
if (pos > this.str.length) {
pos = this.str.length;
}
return this.pos = pos;
};
StringScanner.prototype.reset = function() {
this.lastMatch.reset();
this.pos = 0;
return this;
};
StringScanner.prototype.rest = function() {
return this.str.substr(this.pos);
};
StringScanner.prototype.scan = function(pattern) {
var chk;
chk = this.check(pattern);
if (chk != null) {
this.pos += chk.length;
}
return chk;
};
StringScanner.prototype.scanUntil = function(pattern) {
var chk;
chk = this.checkUntil(pattern);
if (chk != null) {
this.pos += chk.length;
}
return chk;
};
StringScanner.prototype.skip = function(pattern) {
this.scan(pattern);
return this.matchSize();
};
StringScanner.prototype.skipUntil = function(pattern) {
this.scanUntil(pattern);
return this.matchSize();
};
StringScanner.prototype.string = function() {
return this.str;
};
StringScanner.prototype.terminate = function() {
this.pos = this.str.length;
this.lastMatch.reset();
return this;
};
StringScanner.prototype.toString = function() {
return "#<StringScanner " + (this.eos() ? 'fin' : "" + this.pos + "/" + this.str.length + " @ " + (this.str.length > 8 ? "" + (this.str.substr(0, 5)) + "..." : this.str)) + ">";
};
return StringScanner;
})();
StringScanner.prototype.beginningOfLine = StringScanner.prototype.bol;
StringScanner.prototype.clear = StringScanner.prototype.terminate;
StringScanner.prototype.dup = StringScanner.prototype.clone;
StringScanner.prototype.endOfString = StringScanner.prototype.eos;
StringScanner.prototype.exist = StringScanner.prototype.exists;
StringScanner.prototype.getChar = StringScanner.prototype.getch;
StringScanner.prototype.position = StringScanner.prototype.pointer;
StringScanner.StringScanner = StringScanner;
module.exports = StringScanner;
}).call(this);
});
require.define("util",function(require,module,exports,__dirname,__filename,process,global){var events = require('events');
exports.print = function () {};
exports.puts = function () {};
exports.debug = function() {};
exports.inspect = function(obj, showHidden, depth, colors) {
var seen = [];
var stylize = function(str, styleType) {
// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
var styles =
{ 'bold' : [1, 22],
'italic' : [3, 23],
'underline' : [4, 24],
'inverse' : [7, 27],
'white' : [37, 39],
'grey' : [90, 39],
'black' : [30, 39],
'blue' : [34, 39],
'cyan' : [36, 39],
'green' : [32, 39],
'magenta' : [35, 39],
'red' : [31, 39],
'yellow' : [33, 39] };
var style =
{ 'special': 'cyan',
'number': 'blue',
'boolean': 'yellow',
'undefined': 'grey',
'null': 'bold',
'string': 'green',
'date': 'magenta',
// "name": intentionally not styling
'regexp': 'red' }[styleType];
if (style) {
return '\033[' + styles[style][0] + 'm' + str +
'\033[' + styles[style][1] + 'm';
} else {
return str;
}
};
if (! colors) {
stylize = function(str, styleType) { return str; };
}
function format(value, recurseTimes) {
// Provide a hook for user-specified inspect functions.
// Check that value is an object with an inspect function on it
if (value && typeof value.inspect === 'function' &&
// Filter out the util module, it's inspect function is special
value !== exports &&
// Also filter out any prototype objects using the circular check.
!(value.constructor && value.constructor.prototype === value)) {
return value.inspect(recurseTimes);
}
// Primitive types cannot have properties
switch (typeof value) {
case 'undefined':
return stylize('undefined', 'undefined');
case 'string':
var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
.replace(/'/g, "\\'")
.replace(/\\"/g, '"') + '\'';
return stylize(simple, 'string');
case 'number':
return stylize('' + value, 'number');
case 'boolean':
return stylize('' + value, 'boolean');
}
// For some reason typeof null is "object", so special case here.
if (value === null) {
return stylize('null', 'null');
}
// Look up the keys of the object.
var visible_keys = Object_keys(value);
var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys;
// Functions without properties can be shortcutted.
if (typeof value === 'function' && keys.length === 0) {
if (isRegExp(value)) {
return stylize('' + value, 'regexp');
} else {
var name = value.name ? ': ' + value.name : '';
return stylize('[Function' + name + ']', 'special');
}
}
// Dates without properties can be shortcutted
if (isDate(value) && keys.length === 0) {
return stylize(value.toUTCString(), 'date');
}
var base, type, braces;
// Determine the object type
if (isArray(value)) {
type = 'Array';
braces = ['[', ']'];
} else {
type = 'Object';
braces = ['{', '}'];
}
// Make functions say that they are functions
if (typeof value === 'function') {
var n = value.name ? ': ' + value.name : '';
base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
} else {
base = '';
}
// Make dates with properties first say the date
if (isDate(value)) {
base = ' ' + value.toUTCString();
}
if (keys.length === 0) {
return braces[0] + base + braces[1];
}
if (recurseTimes < 0) {
if (isRegExp(value)) {
return stylize('' + value, 'regexp');
} else {
return stylize('[Object]', 'special');
}
}
seen.push(value);
var output = keys.map(function(key) {
var name, str;
if (value.__lookupGetter__) {
if (value.__lookupGetter__(key)) {
if (value.__lookupSetter__(key)) {
str = stylize('[Getter/Setter]', 'special');
} else {
str = stylize('[Getter]', 'special');
}
} else {
if (value.__lookupSetter__(key)) {
str = stylize('[Setter]', 'special');
}
}
}
if (visible_keys.indexOf(key) < 0) {
name = '[' + key + ']';
}
if (!str) {
if (seen.indexOf(value[key]) < 0) {
if (recurseTimes === null) {
str = format(value[key]);
} else {
str = format(value[key], recurseTimes - 1);
}
if (str.indexOf('\n') > -1) {
if (isArray(value)) {
str = str.split('\n').map(function(line) {
return ' ' + line;
}).join('\n').substr(2);
} else {
str = '\n' + str.split('\n').map(function(line) {
return ' ' + line;
}).join('\n');
}
}
} else {
str = stylize('[Circular]', 'special');
}
}
if (typeof name === 'undefined') {
if (type === 'Array' && key.match(/^\d+$/)) {
return str;
}
name = JSON.stringify('' + key);
if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
name = name.substr(1, name.length - 2);
name = stylize(name, 'name');
} else {
name = name.replace(/'/g, "\\'")
.replace(/\\"/g, '"')
.replace(/(^"|"$)/g, "'");
name = stylize(name, 'string');
}
}
return name + ': ' + str;
});
seen.pop();
var numLinesEst = 0;
var length = output.reduce(function(prev, cur) {
numLinesEst++;
if (cur.indexOf('\n') >= 0) numLinesEst++;
return prev + cur.length + 1;
}, 0);
if (length > 50) {
output = braces[0] +
(base === '' ? '' : base + '\n ') +
' ' +
output.join(',\n ') +
' ' +
braces[1];
} else {
output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
}
return output;
}
return format(obj, (typeof depth === 'undefined' ? 2 : depth));
};
function isArray(ar) {
return ar instanceof Array ||
Array.isArray(ar) ||
(ar && ar !== Object.prototype && isArray(ar.__proto__));
}
function isRegExp(re) {
return re instanceof RegExp ||
(typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]');
}
function isDate(d) {
if (d instanceof Date) return true;
if (typeof d !== 'object') return false;
var properties = Date.prototype && Object_getOwnPropertyNames(Date.prototype);
var proto = d.__proto__ && Object_getOwnPropertyNames(d.__proto__);
return JSON.stringify(proto) === JSON.stringify(properties);
}
function pad(n) {
return n < 10 ? '0' + n.toString(10) : n.toString(10);
}
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec'];
// 26 Feb 16:19:34
function timestamp() {
var d = new Date();
var time = [pad(d.getHours()),
pad(d.getMinutes()),
pad(d.getSeconds())].join(':');
return [d.getDate(), months[d.getMonth()], time].join(' ');
}
exports.log = function (msg) {};
exports.pump = null;
var Object_keys = Object.keys || function (obj) {
var res = [];
for (var key in obj) res.push(key);
return res;
};
var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) {
var res = [];
for (var key in obj) {
if (Object.hasOwnProperty.call(obj, key)) res.push(key);
}
return res;
};
var Object_create = Object.create || function (prototype, properties) {
// from es5-shim
var object;
if (prototype === null) {
object = { '__proto__' : null };
}
else {
if (typeof prototype !== 'object') {
throw new TypeError(
'typeof prototype[' + (typeof prototype) + '] != \'object\''
);
}
var Type = function () {};
Type.prototype = prototype;
object = new Type();
object.__proto__ = prototype;
}
if (typeof properties !== 'undefined' && Object.defineProperties) {
Object.defineProperties(object, properties);
}
return object;
};
exports.inherits = function(ctor, superCtor) {
ctor.super_ = superCtor;
ctor.prototype = Object_create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
};
var formatRegExp = /%[sdj%]/g;
exports.format = function(f) {
if (typeof f !== 'string') {
var objects = [];
for (var i = 0; i < arguments.length; i++) {
objects.push(exports.inspect(arguments[i]));
}
return objects.join(' ');
}
var i = 1;
var args = arguments;
var len = args.length;
var str = String(f).replace(formatRegExp, function(x) {
if (x === '%') return '%';
if (i >= len) return x;
switch (x) {
case '%s': return String(args[i++]);
case '%d': return Number(args[i++]);
case '%j': return JSON.stringify(args[i++]);
default:
return x;
}
});
for(var x = args[i]; i < len; x = args[++i]){
if (x === null || typeof x !== 'object') {
str += ' ' + x;
} else {
str += ' ' + exports.inspect(x);
}
}
return str;
};
});
require.define("/lib/coffee-script/parser.js",function(require,module,exports,__dirname,__filename,process,global){module.exports = module.exports = (function(){
/*
* Generated by PEG.js 0.7.0.
*
* http://pegjs.majda.cz/
*/
function quote(s) {
/*
* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
* string literal except for the closing quote character, backslash,
* carriage return, line separator, paragraph separator, and line feed.
* Any character may appear in the form of an escape sequence.
*
* For portability, we also escape escape all control and non-ASCII
* characters. Note that "\0" and "\v" escape sequences are not used
* because JSHint does not like the first and IE the second.
*/
return '"' + s
.replace(/\\/g, '\\\\') // backslash
.replace(/"/g, '\\"') // closing quote character
.replace(/\x08/g, '\\b') // backspace
.replace(/\t/g, '\\t') // horizontal tab
.replace(/\n/g, '\\n') // line feed
.replace(/\f/g, '\\f') // form feed
.replace(/\r/g, '\\r') // carriage return
.replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape)
+ '"';
}
var result = {
/*
* Parses the input with a generated parser. If the parsing is successfull,
* returns a value explicitly or implicitly specified by the grammar from
* which the parser was generated (see |PEG.buildParser|). If the parsing is
* unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
*/
parse: function(input, startRule) {
var parseFunctions = {
"program": parse_program,
"toplevelBlock": parse_toplevelBlock,
"toplevelStatement": parse_toplevelStatement,
"block": parse_block,
"statement": parse_statement,
"expression": parse_expression,
"secondaryStatement": parse_secondaryStatement,
"secondaryExpression": parse_secondaryExpression,
"expressionworthy": parse_expressionworthy,
"seqExpression": parse_seqExpression,
"postfixControlFlowOp": parse_postfixControlFlowOp,
"postfixControlFlowExpression": parse_postfixControlFlowExpression,
"assignmentExpression": parse_assignmentExpression,
"assignmentOp": parse_assignmentOp,
"CompoundAssignmentOperators": parse_CompoundAssignmentOperators,
"compoundAssignmentOp": parse_compoundAssignmentOp,
"existsAssignmentOp": parse_existsAssignmentOp,
"logicalOrExpression": parse_logicalOrExpression,
"logicalAndExpression": parse_logicalAndExpression,
"bitwiseOrExpression": parse_bitwiseOrExpression,
"bitwiseXorExpression": parse_bitwiseXorExpression,
"bitwiseAndExpression": parse_bitwiseAndExpression,
"existentialExpression": parse_existentialExpression,
"comparisonExpression": parse_comparisonExpression,
"relationalExpression": parse_relationalExpression,
"relationalExpressionOperator": parse_relationalExpressionOperator,
"bitwiseShiftExpression": parse_bitwiseShiftExpression,
"additiveExpression": parse_additiveExpression,
"multiplicativeExpression": parse_multiplicativeExpression,
"exponentiationExpression": parse_exponentiationExpression,
"prefixExpression": parse_prefixExpression,
"postfixExpression": parse_postfixExpression,
"leftHandSideExpression": parse_leftHandSideExpression,
"argumentList": parse_argumentList,
"argumentListContents": parse_argumentListContents,
"argument": parse_argument,
"secondaryArgumentList": parse_secondaryArgumentList,
"secondaryArgument": parse_secondaryArgument,
"callExpression": parse_callExpression,
"newExpression": parse_newExpression,
"memberExpression": parse_memberExpression,
"memberAccess": parse_memberAccess,
"MemberAccessOps": parse_MemberAccessOps,
"primaryExpression": parse_primaryExpression,
"contextVar": parse_contextVar,
"JSLiteral": parse_JSLiteral,
"spread": parse_spread,
"conditional": parse_conditional,
"conditionalBody": parse_conditionalBody,
"elseClause": parse_elseClause,
"while": parse_while,
"loop": parse_loop,
"try": parse_try,
"tryBody": parse_tryBody,
"catchClause": parse_catchClause,
"finallyClause": parse_finallyClause,
"class": parse_class,
"extendee": parse_extendee,
"classBody": parse_classBody,
"classBlock": parse_classBlock,
"classStatement": parse_classStatement,
"constructor": parse_constructor,
"staticAssignment": parse_staticAssignment,
"classProtoAssignment": parse_classProtoAssignment,
"forOf": parse_forOf,
"forIn": parse_forIn,
"switch": parse_switch,
"switchBody": parse_switchBody,
"switchBlock": parse_switchBlock,
"case": parse_case,
"caseConditions": parse_caseConditions,
"functionLiteral": parse_functionLiteral,
"functionBody": parse_functionBody,
"parameter": parse_parameter,
"rest": parse_rest,
"parameterList": parse_parameterList,
"range": parse_range,
"arrayLiteral": parse_arrayLiteral,
"arrayLiteralBody": parse_arrayLiteralBody,
"arrayLiteralMemberList": parse_arrayLiteralMemberList,
"arrayLiteralMember": parse_arrayLiteralMember,
"arrayLiteralMemberSeparator": parse_arrayLiteralMemberSeparator,
"objectLiteral": parse_objectLiteral,
"objectLiteralBody": parse_objectLiteralBody,
"objectLiteralMemberList": parse_objectLiteralMemberList,
"objectLiteralMember": parse_objectLiteralMember,
"ObjectInitialiserKeys": parse_ObjectInitialiserKeys,
"implicitObjectLiteral": parse_implicitObjectLiteral,
"implicitObjectLiteralMemberList": parse_implicitObjectLiteralMemberList,
"implicitObjectLiteralMemberSeparator": parse_implicitObjectLiteralMemberSeparator,
"implicitObjectLiteralMember": parse_implicitObjectLiteralMember,
"implicitObjectLiteralMemberValue": parse_implicitObjectLiteralMemberValue,
"bool": parse_bool,
"Numbers": parse_Numbers,
"decimal": parse_decimal,
"integer": parse_integer,
"decimalDigit": parse_decimalDigit,
"hexDigit": parse_hexDigit,
"octalDigit": parse_octalDigit,
"bit": parse_bit,
"string": parse_string,
"stringData": parse_stringData,
"interpolation": parse_interpolation,
"regexp": parse_regexp,
"regexpData": parse_regexpData,
"hereregexpData": parse_hereregexpData,
"throw": parse_throw,
"return": parse_return,
"continue": parse_continue,
"break": parse_break,
"undefined": parse_undefined,
"null": parse_null,
"unassignable": parse_unassignable,
"CompoundAssignable": parse_CompoundAssignable,
"Assignable": parse_Assignable,
"positionalDestructuring": parse_positionalDestructuring,
"positionalDestructuringBody": parse_positionalDestructuringBody,
"positionalDestructuringMemberList": parse_positionalDestructuringMemberList,
"positionalDestructuringMember": parse_positionalDestructuringMember,
"namedDestructuring": parse_namedDestructuring,
"namedDestructuringBody": parse_namedDestructuringBody,
"namedDestructuringMemberList": parse_namedDestructuringMemberList,
"namedDestructuringMember": parse_namedDestructuringMember,
"identifier": parse_identifier,
"identifierName": parse_identifierName,
"identifierStart": parse_identifierStart,
"identifierPart": parse_identifierPart,
"__": parse___,
"_": parse__,
"comment": parse_comment,
"singleLineComment": parse_singleLineComment,
"blockComment": parse_blockComment,
"whitespace": parse_whitespace,
"INDENT": parse_INDENT,
"DEDENT": parse_DEDENT,
"TERM": parse_TERM,
"TERMINATOR": parse_TERMINATOR,
"TERMINDENT": parse_TERMINDENT,
"AND": parse_AND,
"BREAK": parse_BREAK,
"BY": parse_BY,
"CATCH": parse_CATCH,
"CONTINUE": parse_CONTINUE,
"CLASS": parse_CLASS,
"DELETE": parse_DELETE,
"DO": parse_DO,
"ELSE": parse_ELSE,
"EXTENDS": parse_EXTENDS,
"FALSE": parse_FALSE,
"FINALLY": parse_FINALLY,
"FOR": parse_FOR,
"IF": parse_IF,
"IN": parse_IN,
"INSTANCEOF": parse_INSTANCEOF,
"IS": parse_IS,
"ISNT": parse_ISNT,
"LOOP": parse_LOOP,
"NEW": parse_NEW,
"NO": parse_NO,
"NOT": parse_NOT,
"NULL": parse_NULL,
"OF": parse_OF,
"OFF": parse_OFF,
"ON": parse_ON,
"OR": parse_OR,
"OWN": parse_OWN,
"RETURN": parse_RETURN,
"SWITCH": parse_SWITCH,
"THEN": parse_THEN,
"THIS": parse_THIS,
"THROW": parse_THROW,
"TRUE": parse_TRUE,
"TRY": parse_TRY,
"TYPEOF": parse_TYPEOF,
"UNDEFINED": parse_UNDEFINED,
"UNLESS": parse_UNLESS,
"UNTIL": parse_UNTIL,
"WHEN": parse_WHEN,
"WHILE": parse_WHILE,
"YES": parse_YES,
"SharedKeywords": parse_SharedKeywords,
"JSKeywords": parse_JSKeywords,
"CSKeywords": parse_CSKeywords,
"reserved": parse_reserved,
"UnicodeEscapeSequence": parse_UnicodeEscapeSequence,
"UnicodeLetter": parse_UnicodeLetter,
"UnicodeCombiningMark": parse_UnicodeCombiningMark,
"UnicodeDigit": parse_UnicodeDigit,
"UnicodeConnectorPunctuation": parse_UnicodeConnectorPunctuation,
"ZWNJ": parse_ZWNJ,
"ZWJ": parse_ZWJ
};
if (startRule !== undefined) {
if (parseFunctions[startRule] === undefined) {
throw new Error("Invalid rule name: " + quote(startRule) + ".");
}
} else {
startRule = "program";
}
var pos = { offset: 0, line: 1, column: 1, seenCR: false };
var reportFailures = 0;
var rightmostFailuresPos = { offset: 0, line: 1, column: 1, seenCR: false };
var rightmostFailuresExpected = [];
var cache = {};
function padLeft(input, padding, length) {
var result = input;
var padLength = length - input.length;
for (var i = 0; i < padLength; i++) {
result = padding + result;
}
return result;
}
function escape(ch) {
var charCode = ch.charCodeAt(0);
var escapeChar;
var length;
if (charCode <= 0xFF) {
escapeChar = 'x';
length = 2;
} else {
escapeChar = 'u';
length = 4;
}
return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
}
function clone(object) {
var result = {};
for (var key in object) {
result[key] = object[key];
}
return result;
}
function advance(pos, n) {
var endOffset = pos.offset + n;
for (var offset = pos.offset; offset < endOffset; offset++) {
var ch = input.charAt(offset);
if (ch === "\n") {
if (!pos.seenCR) { pos.line++; }
pos.column = 1;
pos.seenCR = false;
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
pos.line++;
pos.column = 1;
pos.seenCR = true;
} else {
pos.column++;
pos.seenCR = false;
}
}
pos.offset += n;
}
function matchFailed(failure) {
if (pos.offset < rightmostFailuresPos.offset) {
return;
}
if (pos.offset > rightmostFailuresPos.offset) {
rightmostFailuresPos = clone(pos);
rightmostFailuresExpected = [];
}
rightmostFailuresExpected.push(failure);
}
function parse_program() {
var cacheKey = "program@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r5 = clone(pos);
r6 = parse__();
if (r6 !== null) {
r7 = parse_toplevelBlock();
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, leader, b) {
var block;
if(b) {
block = b[1];
return new CS.Program(block).r(leader + b[0] + block.raw).p(line, column, offset);
} else {
return new CS.Program().r(leader).p(line, column, offset);
}
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_toplevelBlock() {
var cacheKey = "toplevelBlock@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_toplevelStatement();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_toplevelStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_toplevelStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, s, ss, term) {
var raw = s.raw + ss.map(function(s){ return s[0] + s[1] + s[2] + s[3].raw; }).join('') + term;
return new CS.Block([s].concat(ss.map(function(s){ return s[3]; }))).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_toplevelStatement() {
var cacheKey = "toplevelStatement@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
reportFailures++;
r3 = parse_return();
if (r3 === null) {
r3 = parse_continue();
if (r3 === null) {
r3 = parse_break();
}
}
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r4 = parse_statement();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, s) { return s; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_block() {
var cacheKey = "block@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_statement();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_statement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_statement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, s, ss, term) {
var raw = s.raw + ss.map(function(s){ return s[0] + s[1] + s[2] + s[3].raw; }).join('') + term;
return new CS.Block([s].concat(ss.map(function(s){ return s[3]; }))).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_statement() {
var cacheKey = "statement@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_expression();
if (r0 === null) {
r0 = parse_return();
if (r0 === null) {
r0 = parse_continue();
if (r0 === null) {
r0 = parse_break();
if (r0 === null) {
r0 = parse_throw();
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_expression() {
var cacheKey = "expression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_expressionworthy();
if (r0 === null) {
r0 = parse_seqExpression();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_secondaryStatement() {
var cacheKey = "secondaryStatement@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_secondaryExpression();
if (r0 === null) {
r0 = parse_return();
if (r0 === null) {
r0 = parse_continue();
if (r0 === null) {
r0 = parse_break();
if (r0 === null) {
r0 = parse_throw();
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_secondaryExpression() {
var cacheKey = "secondaryExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_expressionworthy();
if (r0 === null) {
r0 = parse_assignmentExpression();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_expressionworthy() {
var cacheKey = "expressionworthy@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_functionLiteral();
if (r0 === null) {
r0 = parse_conditional();
if (r0 === null) {
r0 = parse_while();
if (r0 === null) {
r0 = parse_loop();
if (r0 === null) {
r0 = parse_try();
if (r0 === null) {
r0 = parse_forOf();
if (r0 === null) {
r0 = parse_forIn();
if (r0 === null) {
r0 = parse_class();
if (r0 === null) {
r0 = parse_switch();
if (r0 === null) {
r0 = parse_implicitObjectLiteral();
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_seqExpression() {
var cacheKey = "seqExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_postfixControlFlowExpression();
if (r3 !== null) {
r5 = clone(pos);
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 59) {
r7 = ";";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\";\"");
}
}
if (r7 !== null) {
r8 = parse_TERMINATOR();
r8 = r8 !== null ? r8 : "";
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expression();
if (r10 !== null) {
r4 = [r6, r7, r8, r9, r10];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, right) {
if(!right) return left;
var raw = left.raw + right[0] + right[1] + right[2] + right[3] + right[4].raw;
return new CS.SeqOp(left, right[4]).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_postfixControlFlowOp() {
var cacheKey = "postfixControlFlowOp@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_IF();
if (r3 === null) {
r3 = parse_UNLESS();
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_assignmentExpression();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, kw, ws, e) { return {type: kw, cond: e, raw: kw + ws + e.raw}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_WHILE();
if (r3 === null) {
r3 = parse_UNTIL();
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_assignmentExpression();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, kw, ws, e) { return {type: kw, cond: e, raw: kw + ws + e.raw}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_FOR();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Assignable();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r8 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r9 = ",";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_Assignable();
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
r7 = [r9, r10, r11, r12];
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse_IN();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_assignmentExpression();
if (r10 !== null) {
r12 = clone(pos);
r13 = parse__();
if (r13 !== null) {
r14 = parse_BY();
if (r14 !== null) {
r15 = parse__();
if (r15 !== null) {
r16 = parse_assignmentExpression();
if (r16 !== null) {
r11 = [r13, r14, r15, r16];
} else {
r11 = null;
pos = clone(r12);
}
} else {
r11 = null;
pos = clone(r12);
}
} else {
r11 = null;
pos = clone(r12);
}
} else {
r11 = null;
pos = clone(r12);
}
r11 = r11 !== null ? r11 : "";
if (r11 !== null) {
r13 = clone(pos);
r14 = parse__();
if (r14 !== null) {
r15 = parse_WHEN();
if (r15 !== null) {
r16 = parse__();
if (r16 !== null) {
r17 = parse_assignmentExpression();
if (r17 !== null) {
r12 = [r14, r15, r16, r17];
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, val, ws1, maybeKey, ws2, list, maybeStep, maybeFilter) {
var key = maybeKey ? maybeKey[2] : null,
step = maybeStep ? maybeStep[3] : new CS.Int(1).r('1').g(),
filter = maybeFilter ? maybeFilter[3] : null;
return 0,
{ type: 'for-in'
, val: val, key: key, list: list, step: step, filter: filter
, raw: 'for' + ws0 + val.raw + ws1 + (key ? maybeKey[0] + maybeKey[1] + key.raw + maybeKey[3] : '') +
'in' + ws2 + list.raw + (step ? maybeStep[0] + 'by' + maybeStep[2] + step.raw : '') +
(filter ? maybeFilter[0] + 'when' + maybeFilter[2] + filter.raw : '')
};
})(r1.offset, r1.line, r1.column, r4, r5, r6, r7, r9, r10, r11, r12);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_FOR();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r6 = clone(pos);
r7 = parse_OWN();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_Assignable();
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r10 = ",";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_Assignable();
if (r12 !== null) {
r13 = parse__();
if (r13 !== null) {
r8 = [r10, r11, r12, r13];
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
r8 = r8 !== null ? r8 : "";
if (r8 !== null) {
r9 = parse_OF();
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_assignmentExpression();
if (r11 !== null) {
r13 = clone(pos);
r14 = parse__();
if (r14 !== null) {
r15 = parse_WHEN();
if (r15 !== null) {
r16 = parse__();
if (r16 !== null) {
r17 = parse_assignmentExpression();
if (r17 !== null) {
r12 = [r14, r15, r16, r17];
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, maybeOwn, key, ws1, maybeVal, ws2, obj, maybeFilter) {
var own = !!maybeOwn,
val = maybeVal ? maybeVal[2] : null,
filter = maybeFilter ? maybeFilter[3] : null;
return 0,
{ type: 'for-of'
, own: own, key: key, val: val, obj: obj, filter: filter
, raw: 'for' + ws0 + (own ? 'own' + maybeOwn[1] : '') + key.raw + ws1 +
(val ? maybeVal[0] + maybeVal[1] + val.raw + maybeVal[3] : '') + 'of' + ws2 + obj.raw +
(filter ? maybeFilter[0] + 'when' + maybeFilter[2] + filter.raw : '')
};
})(r1.offset, r1.line, r1.column, r4, r5, r6, r7, r8, r10, r11, r12);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_postfixControlFlowExpression() {
var cacheKey = "postfixControlFlowExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_secondaryStatement();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_postfixControlFlowOp();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_postfixControlFlowOp();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, expr, postfixes) {
return foldl(function(expr, postfixContainer){
var raw, constructor, cond,
ws = postfixContainer[0],
postfix = postfixContainer[1],
indicator = postfix.type;
switch(indicator){
case 'if':
case 'unless':
raw = expr.raw + ws + postfix.raw;
constructor = (indicator == 'unless') ? CS.NegatedConditional : CS.Conditional;
cond = (indicator == 'unless') ? new CS.LogicalNotOp(postfix.cond).g() : postfix.cond;
return new constructor(cond, expr, null).r(raw).p(line, column, offset)
case 'while':
case 'until':
raw = expr.raw + ws + postfix.raw;
constructor = (indicator == 'until') ? CS.NegatedWhile : CS.While;
cond = (indicator == 'until') ? new CS.LogicalNotOp(postfix.cond).g() : postfix.cond;
return new constructor(cond, expr).r(raw).p(line, column, offset)
case 'for-in':
raw = expr.raw + ws + postfix.raw;
return new CS.ForIn(postfix.val, postfix.key, postfix.list, postfix.step, postfix.filter, expr).r(raw).p(line, column, offset);
case 'for-of':
raw = expr.raw + ws + postfix.raw;
return new CS.ForOf(postfix.own, postfix.key, postfix.val, postfix.obj, postfix.filter, expr).r(raw).p(line, column, offset);
}
}, expr, postfixes)
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_assignmentExpression() {
var cacheKey = "assignmentExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_assignmentOp();
if (r0 === null) {
r0 = parse_compoundAssignmentOp();
if (r0 === null) {
r0 = parse_existsAssignmentOp();
if (r0 === null) {
r0 = parse_logicalOrExpression();
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_assignmentOp() {
var cacheKey = "assignmentOp@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_Assignable();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 61) {
r5 = "=";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
if (r5 !== null) {
r7 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r6 = "=";
advance(pos, 1);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r6 === null) {
r6 = "";
} else {
r6 = null;
pos = clone(r7);
}
if (r6 !== null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_secondaryExpression();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, e, d) { return {raw: t + e.raw + d, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_secondaryExpression();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, ws1, e) { return {raw: t + ws1 + e.raw, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, ws0, right) {
var raw = left.raw + ws0 + '=' + right.raw;
return new CS.AssignOp(left, right.expr).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_CompoundAssignmentOperators() {
var cacheKey = "CompoundAssignmentOperators@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (input.substr(pos.offset, 2) === "**") {
r0 = "**";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"**\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 42) {
r0 = "*";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"*\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 47) {
r0 = "/";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"/\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 37) {
r0 = "%";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"%\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 43) {
r0 = "+";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"+\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 45) {
r0 = "-";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"-\"");
}
}
if (r0 === null) {
if (input.substr(pos.offset, 2) === "<<") {
r0 = "<<";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"<<\"");
}
}
if (r0 === null) {
if (input.substr(pos.offset, 3) === ">>>") {
r0 = ">>>";
advance(pos, 3);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\">>>\"");
}
}
if (r0 === null) {
if (input.substr(pos.offset, 2) === ">>") {
r0 = ">>";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\">>\"");
}
}
if (r0 === null) {
r0 = parse_AND();
if (r0 === null) {
r0 = parse_OR();
if (r0 === null) {
if (input.substr(pos.offset, 2) === "&&") {
r0 = "&&";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"&&\"");
}
}
if (r0 === null) {
if (input.substr(pos.offset, 2) === "||") {
r0 = "||";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"||\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 38) {
r0 = "&";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"&\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 94) {
r0 = "^";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"^\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 124) {
r0 = "|";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"|\"");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_compoundAssignmentOp() {
var cacheKey = "compoundAssignmentOp@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_CompoundAssignable();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_CompoundAssignmentOperators();
if (r5 !== null) {
if (input.charCodeAt(pos.offset) === 61) {
r6 = "=";
advance(pos, 1);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
if (r6 !== null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_secondaryExpression();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, e, d) { return {raw: t + e.raw + d, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_secondaryExpression();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, ws1, e) { return {raw: t + ws1 + e.raw, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, ws0, op, right) {
var raw = left.raw + ws0 + op + '=' + right.raw;
return new CS.CompoundAssignOp(constructorLookup[op].prototype.className, left, right.expr).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_existsAssignmentOp() {
var cacheKey = "existsAssignmentOp@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_CompoundAssignable();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.substr(pos.offset, 2) === "?=") {
r5 = "?=";
advance(pos, 2);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"?=\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_secondaryExpression();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, e, d) { return {raw: t + e.raw + d, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_secondaryExpression();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, ws1, e) { return {raw: t + ws1 + e.raw, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, ws0, ws1, right) {
var raw = left.raw + ws0 + '?=' + right.raw;
return new CS.ExistsAssignOp(left, right.expr).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_logicalOrExpression() {
var cacheKey = "logicalOrExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_logicalAndExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "||") {
r8 = "||";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"||\"");
}
}
if (r8 === null) {
r8 = parse_OR();
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_logicalAndExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "||") {
r8 = "||";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"||\"");
}
}
if (r8 === null) {
r8 = parse_OR();
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_logicalAndExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.LogicalOrOp(expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_logicalAndExpression() {
var cacheKey = "logicalAndExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_bitwiseOrExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "&&") {
r8 = "&&";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"&&\"");
}
}
if (r8 === null) {
r8 = parse_AND();
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_bitwiseOrExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "&&") {
r8 = "&&";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"&&\"");
}
}
if (r8 === null) {
r8 = parse_AND();
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_bitwiseOrExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.LogicalAndOp(expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_bitwiseOrExpression() {
var cacheKey = "bitwiseOrExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_bitwiseXorExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 124) {
r8 = "|";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"|\"");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_bitwiseXorExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 124) {
r8 = "|";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"|\"");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_bitwiseXorExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.BitOrOp(expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_bitwiseXorExpression() {
var cacheKey = "bitwiseXorExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_bitwiseAndExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 94) {
r8 = "^";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"^\"");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_bitwiseAndExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 94) {
r8 = "^";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"^\"");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_bitwiseAndExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.BitXorOp(expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_bitwiseAndExpression() {
var cacheKey = "bitwiseAndExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_existentialExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 38) {
r8 = "&";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"&\"");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_existentialExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 38) {
r8 = "&";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"&\"");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_existentialExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.BitAndOp(expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_existentialExpression() {
var cacheKey = "existentialExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_comparisonExpression();
if (r3 !== null) {
r5 = clone(pos);
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 63) {
r7 = "?";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"?\"");
}
}
if (r7 !== null) {
r9 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r8 = "=";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r8 === null) {
r8 = "";
} else {
r8 = null;
pos = clone(r9);
}
if (r8 !== null) {
r9 = parse_TERMINATOR();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_expressionworthy();
if (r11 === null) {
r11 = parse_existentialExpression();
}
if (r11 !== null) {
r4 = [r6, r7, r8, r9, r10, r11];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, right) {
if(!right) return left;
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.ExistsOp(left, right[5]).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_comparisonExpression() {
var cacheKey = "comparisonExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_relationalExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "<=") {
r8 = "<=";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"<=\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 2) === ">=") {
r8 = ">=";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">=\"");
}
}
if (r8 === null) {
if (input.charCodeAt(pos.offset) === 60) {
r8 = "<";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"<\"");
}
}
if (r8 === null) {
if (input.charCodeAt(pos.offset) === 62) {
r8 = ">";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 2) === "==") {
r8 = "==";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"==\"");
}
}
if (r8 === null) {
r8 = parse_IS();
if (r8 === null) {
if (input.substr(pos.offset, 2) === "!=") {
r8 = "!=";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"!=\"");
}
}
if (r8 === null) {
r8 = parse_ISNT();
}
}
}
}
}
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expressionworthy();
if (r10 === null) {
r10 = parse_relationalExpression();
}
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "<=") {
r8 = "<=";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"<=\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 2) === ">=") {
r8 = ">=";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">=\"");
}
}
if (r8 === null) {
if (input.charCodeAt(pos.offset) === 60) {
r8 = "<";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"<\"");
}
}
if (r8 === null) {
if (input.charCodeAt(pos.offset) === 62) {
r8 = ">";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 2) === "==") {
r8 = "==";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"==\"");
}
}
if (r8 === null) {
r8 = parse_IS();
if (r8 === null) {
if (input.substr(pos.offset, 2) === "!=") {
r8 = "!=";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"!=\"");
}
}
if (r8 === null) {
r8 = parse_ISNT();
}
}
}
}
}
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expressionworthy();
if (r10 === null) {
r10 = parse_relationalExpression();
}
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
var tree = foldl(function(expr, right){
var raw = expr.raw + right[0] + right[1] + right[2] + right[3].raw;
return new constructorLookup[right[1]](expr, right[3]).r(raw).p(line, column, offset);
}, left, rights);
return rights.length < 2 ? tree : new CS.ChainedComparisonOp(tree).r(tree.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_relationalExpression() {
var cacheKey = "relationalExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_bitwiseShiftExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_relationalExpressionOperator();
if (r8 !== null) {
r9 = parse_TERMINATOR();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_expressionworthy();
if (r11 === null) {
r11 = parse_bitwiseShiftExpression();
}
if (r11 !== null) {
r5 = [r7, r8, r9, r10, r11];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_relationalExpressionOperator();
if (r8 !== null) {
r9 = parse_TERMINATOR();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_expressionworthy();
if (r11 === null) {
r11 = parse_bitwiseShiftExpression();
}
if (r11 !== null) {
r5 = [r7, r8, r9, r10, r11];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = expr.raw + right[0] + right[1].raw + right[2] + right[3] + right[4].raw;
return right[1](expr, right[4], raw, line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_relationalExpressionOperator() {
var cacheKey = "relationalExpressionOperator@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r0 = parse_EXTENDS();
if (r0 === null) {
r0 = parse_INSTANCEOF();
if (r0 === null) {
r0 = parse_IN();
if (r0 === null) {
r0 = parse_OF();
}
}
}
if (r0 !== null) {
r0 = (function(offset, line, column, op) {
var fn = function(left, right, raw, line, column, offset){
return new constructorLookup[op](left, right).r(raw).p(line, column, offset);
};
fn.raw = op;
return fn;
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_NOT();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_INSTANCEOF();
if (r5 === null) {
r5 = parse_IN();
if (r5 === null) {
r5 = parse_OF();
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, op) {
var fn = function(left, right, raw, line, column, offset){
return new CS.LogicalNotOp(new constructorLookup[op](left, right).r(raw).p(line, column, offset)).r(raw).g();
};
fn.raw = 'not' + ws + op;
return fn;
})(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_bitwiseShiftExpression() {
var cacheKey = "bitwiseShiftExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_additiveExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "<<") {
r8 = "<<";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"<<\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 3) === ">>>") {
r8 = ">>>";
advance(pos, 3);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">>>\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 2) === ">>") {
r8 = ">>";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">>\"");
}
}
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_additiveExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos.offset, 2) === "<<") {
r8 = "<<";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"<<\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 3) === ">>>") {
r8 = ">>>";
advance(pos, 3);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">>>\"");
}
}
if (r8 === null) {
if (input.substr(pos.offset, 2) === ">>") {
r8 = ">>";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\">>\"");
}
}
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_additiveExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new constructorLookup[right[1]](expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_additiveExpression() {
var cacheKey = "additiveExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_multiplicativeExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 43) {
r10 = "+";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"+\"");
}
}
if (r10 !== null) {
r12 = clone(pos);
reportFailures++;
if (/^[+=]/.test(input.charAt(pos.offset))) {
r11 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("[+=]");
}
}
reportFailures--;
if (r11 === null) {
r11 = "";
} else {
r11 = null;
pos = clone(r12);
}
if (r11 !== null) {
r8 = [r10, r11];
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
if (r8 === null) {
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 45) {
r10 = "-";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"-\"");
}
}
if (r10 !== null) {
r12 = clone(pos);
reportFailures++;
if (/^[\-=]/.test(input.charAt(pos.offset))) {
r11 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("[\\-=]");
}
}
reportFailures--;
if (r11 === null) {
r11 = "";
} else {
r11 = null;
pos = clone(r12);
}
if (r11 !== null) {
r8 = [r10, r11];
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
}
if (r8 !== null) {
r9 = parse_TERMINATOR();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_expressionworthy();
if (r11 === null) {
r11 = parse_multiplicativeExpression();
}
if (r11 !== null) {
r5 = [r7, r8, r9, r10, r11];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 43) {
r10 = "+";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"+\"");
}
}
if (r10 !== null) {
r12 = clone(pos);
reportFailures++;
if (/^[+=]/.test(input.charAt(pos.offset))) {
r11 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("[+=]");
}
}
reportFailures--;
if (r11 === null) {
r11 = "";
} else {
r11 = null;
pos = clone(r12);
}
if (r11 !== null) {
r8 = [r10, r11];
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
if (r8 === null) {
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 45) {
r10 = "-";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"-\"");
}
}
if (r10 !== null) {
r12 = clone(pos);
reportFailures++;
if (/^[\-=]/.test(input.charAt(pos.offset))) {
r11 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("[\\-=]");
}
}
reportFailures--;
if (r11 === null) {
r11 = "";
} else {
r11 = null;
pos = clone(r12);
}
if (r11 !== null) {
r8 = [r10, r11];
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
}
if (r8 !== null) {
r9 = parse_TERMINATOR();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_expressionworthy();
if (r11 === null) {
r11 = parse_multiplicativeExpression();
}
if (r11 !== null) {
r5 = [r7, r8, r9, r10, r11];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = expr.raw + right[0] + right[1][0] + right[2] + right[3] + right[4].raw;
return new constructorLookup[right[1][0]](expr, right[4]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_multiplicativeExpression() {
var cacheKey = "multiplicativeExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_exponentiationExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (/^[*\/%]/.test(input.charAt(pos.offset))) {
r8 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("[*\\/%]");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_exponentiationExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (/^[*\/%]/.test(input.charAt(pos.offset))) {
r8 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("[*\\/%]");
}
}
if (r8 !== null) {
r10 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r9 = "=";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r9 === null) {
r9 = "";
} else {
r9 = null;
pos = clone(r10);
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expressionworthy();
if (r12 === null) {
r12 = parse_exponentiationExpression();
}
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, rights) {
if(!rights) return left;
return foldl(function(expr, right){
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new constructorLookup[right[1]](expr, right[5]).r(raw).p(line, column, offset);
}, left, rights);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_exponentiationExpression() {
var cacheKey = "exponentiationExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_prefixExpression();
if (r3 !== null) {
r5 = clone(pos);
r6 = parse__();
if (r6 !== null) {
if (input.substr(pos.offset, 2) === "**") {
r7 = "**";
advance(pos, 2);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"**\"");
}
}
if (r7 !== null) {
r9 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 61) {
r8 = "=";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
reportFailures--;
if (r8 === null) {
r8 = "";
} else {
r8 = null;
pos = clone(r9);
}
if (r8 !== null) {
r9 = parse_TERMINATOR();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_expressionworthy();
if (r11 === null) {
r11 = parse_exponentiationExpression();
}
if (r11 !== null) {
r4 = [r6, r7, r8, r9, r10, r11];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, left, right) {
if(!right) return left;
var raw = left.raw + right[0] + right[1] + right[3] + right[4] + right[5].raw;
return new CS.ExpOp(left, right[5]).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_prefixExpression() {
var cacheKey = "prefixExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r0 = parse_postfixExpression();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "++") {
r3 = "++";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"++\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.PreIncrementOp(e).r('++' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "--") {
r3 = "--";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"--\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.PreDecrementOp(e).r('--' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 43) {
r3 = "+";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"+\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.UnaryPlusOp(e).r('+' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 45) {
r3 = "-";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"-\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.UnaryNegateOp(e).r('-' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 33) {
r3 = "!";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"!\"");
}
}
if (r3 === null) {
r3 = parse_NOT();
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, o, ws, e) { return new CS.LogicalNotOp(e).r(o + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 126) {
r3 = "~";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"~\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.BitNotOp(e).r('~' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_DO();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.DoOp(e).r('do' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TYPEOF();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.TypeofOp(e).r('typeof' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_DELETE();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_prefixExpression();
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return new CS.DeleteOp(e).r('delete' + ws + e.raw).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_postfixExpression() {
var cacheKey = "postfixExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_leftHandSideExpression();
if (r3 !== null) {
r4 = [];
if (input.charCodeAt(pos.offset) === 63) {
r5 = "?";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"?\"");
}
}
if (r5 === null) {
if (input.substr(pos.offset, 4) === "[..]") {
r5 = "[..]";
advance(pos, 4);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"[..]\"");
}
}
if (r5 === null) {
if (input.substr(pos.offset, 2) === "++") {
r5 = "++";
advance(pos, 2);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"++\"");
}
}
if (r5 === null) {
if (input.substr(pos.offset, 2) === "--") {
r5 = "--";
advance(pos, 2);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"--\"");
}
}
}
}
}
while (r5 !== null) {
r4.push(r5);
if (input.charCodeAt(pos.offset) === 63) {
r5 = "?";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"?\"");
}
}
if (r5 === null) {
if (input.substr(pos.offset, 4) === "[..]") {
r5 = "[..]";
advance(pos, 4);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"[..]\"");
}
}
if (r5 === null) {
if (input.substr(pos.offset, 2) === "++") {
r5 = "++";
advance(pos, 2);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"++\"");
}
}
if (r5 === null) {
if (input.substr(pos.offset, 2) === "--") {
r5 = "--";
advance(pos, 2);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"--\"");
}
}
}
}
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, expr, ops) {
return foldl(function(expr, op){
var raw;
switch(op){
case '?': return new CS.UnaryExistsOp(expr).r(expr.raw + op).p(line, column, offset)
case '[..]': return new CS.ShallowCopyArray(expr).r(expr.raw + op).p(line, column, offset)
case '++': return new CS.PostIncrementOp(expr).r(expr.raw + op).p(line, column, offset)
case '--': return new CS.PostDecrementOp(expr).r(expr.raw + op).p(line, column, offset)
}
}, expr, ops);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_leftHandSideExpression() {
var cacheKey = "leftHandSideExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_callExpression();
if (r0 === null) {
r0 = parse_newExpression();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_argumentList() {
var cacheKey = "argumentList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 63) {
r3 = "?";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"?\"");
}
}
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
if (input.charCodeAt(pos.offset) === 40) {
r4 = "(";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"(\"");
}
}
if (r4 !== null) {
r5 = parse__();
if (r5 !== null) {
r6 = parse_argumentListContents();
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 41) {
r8 = ")";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r8 !== null) {
r0 = [r3, r4, r5, r6, r7, r8];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, soaked, ws0, a, ws1) {
return 0,
{ op: soaked ? CS.SoakedFunctionApplication : CS.FunctionApplication
, operands: [a ? a.list : []]
, raw: '(' + ws0 + (a ? a.raw : '') + ws1 + ')'
, line: line
, column: column
, offset: offset
};
})(r1.offset, r1.line, r1.column, r3, r5, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_argumentListContents() {
var cacheKey = "argumentListContents@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_argument();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r8 = ",";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r8 === null) {
r8 = parse_TERMINATOR();
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_argument();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r8 = ",";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r8 === null) {
r8 = parse_TERMINATOR();
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_argument();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r5 = ",";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r5 === null) {
r5 = parse_TERMINATOR();
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, es, t) {
var raw = e.raw + es.map(function(e){ return e[0] + e[1] + e[2] + e[3].raw; }).join('') + t;
return {list: [e].concat(es.map(function(e){ return e[3]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_argumentListContents();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r6 = parse_TERMINATOR();
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t0, a, d, t1) {
return {list: a.list, raw: t0 + a.raw + d + t1};
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_argument() {
var cacheKey = "argument@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_spread();
if (r0 === null) {
r0 = parse_expression();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_secondaryArgumentList() {
var cacheKey = "secondaryArgumentList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse___();
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r6 = clone(pos);
if (/^[+-\/]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[+-\\/]");
}
}
if (r7 !== null) {
r8 = parse___();
if (r8 !== null) {
r4 = [r7, r8];
} else {
r4 = null;
pos = clone(r6);
}
} else {
r4 = null;
pos = clone(r6);
}
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r5 = parse_secondaryArgument();
if (r5 !== null) {
r6 = [];
r8 = clone(pos);
r9 = parse__();
if (r9 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r10 = ",";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_TERMINATOR();
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r13 = parse__();
if (r13 !== null) {
r14 = parse_secondaryArgument();
if (r14 !== null) {
r7 = [r9, r10, r11, r12, r13, r14];
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
while (r7 !== null) {
r6.push(r7);
r8 = clone(pos);
r9 = parse__();
if (r9 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r10 = ",";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_TERMINATOR();
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r13 = parse__();
if (r13 !== null) {
r14 = parse_secondaryArgument();
if (r14 !== null) {
r7 = [r9, r10, r11, r12, r13, r14];
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
}
if (r6 !== null) {
r8 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r9 = ",";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_implicitObjectLiteral();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r7 = [r9, r10, r11, r12];
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, es, obj) {
var raw = ws0 + e.raw + es.map(function(e){ return e[0] + ',' + e[2] + e[3] + e[4] + e[5].raw; }).join('') + (obj ? obj[0] + obj[1] + obj[2].raw + obj[3] : '');
es = [e].concat(es.map(function(e){ return e[5]; }));
if(obj) es.push(obj[2]);
return {list: es, raw: raw};
})(r1.offset, r1.line, r1.column, r3, r5, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_implicitObjectLiteral();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, o, d) {
return {list: [o], raw: t + o.raw + d};
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_secondaryArgument() {
var cacheKey = "secondaryArgument@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_spread();
if (r0 === null) {
r0 = parse_secondaryExpression();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_callExpression() {
var cacheKey = "callExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_memberExpression();
if (r3 !== null) {
r4 = [];
r5 = parse_argumentList();
if (r5 === null) {
r5 = parse_MemberAccessOps();
}
while (r5 !== null) {
r4.push(r5);
r5 = parse_argumentList();
if (r5 === null) {
r5 = parse_MemberAccessOps();
}
}
if (r4 !== null) {
r6 = clone(pos);
if (input.charCodeAt(pos.offset) === 63) {
r7 = "?";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"?\"");
}
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse_secondaryArgumentList();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, fn, accesses, secondaryArgs) {
if(accesses) fn = createMemberExpression(fn, accesses);
var soaked, secondaryCtor;
if(secondaryArgs) {
soaked = secondaryArgs[0];
secondaryCtor = soaked ? CS.SoakedFunctionApplication : CS.FunctionApplication;
fn = new secondaryCtor(fn, secondaryArgs[1].list).r(fn.raw + secondaryArgs[1].raw).p(line, column, offset);
}
return fn;
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_newExpression() {
var cacheKey = "newExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r0 = parse_memberExpression();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_NEW();
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_newExpression();
if (r5 === null) {
r5 = parse_prefixExpression();
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) {
return new CS.NewOp(e, []).r('new' + ws + e.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_memberExpression() {
var cacheKey = "memberExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_primaryExpression();
if (r3 === null) {
r4 = clone(pos);
r5 = clone(pos);
r6 = parse_NEW();
if (r6 !== null) {
r7 = parse___();
if (r7 !== null) {
r8 = parse_memberExpression();
if (r8 !== null) {
r9 = parse_argumentList();
if (r9 !== null) {
r3 = [r6, r7, r8, r9];
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
if (r3 !== null) {
r3 = (function(offset, line, column, ws0, e, args) { return new CS.NewOp(e, args.operands[0]).r('new' + ws0 + e + args.raw).p(line, column, offset); })(r4.offset, r4.line, r4.column, r7, r8, r9);
}
if (r3 === null) {
pos = clone(r4);
}
}
if (r3 !== null) {
r4 = [];
r5 = parse_MemberAccessOps();
while (r5 !== null) {
r4.push(r5);
r5 = parse_MemberAccessOps();
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, accesses) {
return createMemberExpression(e, accesses || []);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_NEW();
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_memberExpression();
if (r5 !== null) {
r6 = parse_secondaryArgumentList();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, args) {
var raw = 'new' + ws0 + e.raw + args.raw;
return new CS.NewOp(e, args.list).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_memberAccess() {
var cacheKey = "memberAccess@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_primaryExpression();
if (r3 === null) {
r4 = clone(pos);
r5 = clone(pos);
r6 = parse_NEW();
if (r6 !== null) {
r7 = parse___();
if (r7 !== null) {
r8 = parse_memberExpression();
if (r8 !== null) {
r9 = parse_argumentList();
if (r9 !== null) {
r3 = [r6, r7, r8, r9];
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
if (r3 !== null) {
r3 = (function(offset, line, column, ws0, e, args) { return new CS.NewOp(e, args.operands[0]).r('new' + ws0 + e + args.raw).p(line, column, offset); })(r4.offset, r4.line, r4.column, r7, r8, r9);
}
if (r3 === null) {
pos = clone(r4);
}
}
if (r3 !== null) {
r6 = clone(pos);
r7 = parse_argumentList();
if (r7 !== null) {
r8 = parse_MemberAccessOps();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
if (r5 === null) {
r5 = parse_MemberAccessOps();
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse_argumentList();
if (r7 !== null) {
r8 = parse_MemberAccessOps();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
if (r5 === null) {
r5 = parse_MemberAccessOps();
}
}
} else {
r4 = null;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, accesses) {
var acc = foldl(function(memo, a){ return memo.concat(a); }, [], accesses);
return createMemberExpression(e, acc);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_MemberAccessOps() {
var cacheKey = "MemberAccessOps@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 46) {
r5 = ".";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\".\"");
}
}
if (r5 !== null) {
r6 = parse_TERMINATOR();
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
r8 = parse_identifierName();
if (r8 !== null) {
r0 = [r3, r4, r5, r6, r7, r8];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, ws1, ws2, ws3, e) { return {op: CS.MemberAccessOp, operands: [e], raw: ws0 + ws1 + '.' + ws2 + ws3 + e, line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r3, r4, r6, r7, r8);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "?.") {
r3 = "?.";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"?.\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_identifierName();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return {op: CS.SoakedMemberAccessOp, operands: [e], raw: '?.' + ws + e, line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r7 = "]";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, ws1) { return {op: CS.DynamicMemberAccessOp, operands: [e], raw: '[' + ws0 + e + ws1 + ']', line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "?[") {
r3 = "?[";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"?[\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r7 = "]";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, ws1) { return {op: CS.SoakedDynamicMemberAccessOp, operands: [e], raw: '?[' + ws0 + e + ws1 + ']', line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "::") {
r3 = "::";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"::\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_identifierName();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return {op: CS.ProtoMemberAccessOp, operands: [e], raw: '::' + ws + e, line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "::[") {
r3 = "::[";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"::[\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r7 = "]";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, ws1) { return {op: CS.DynamicProtoMemberAccessOp, operands: [e], raw: '::[' + ws0 + e + ws1 + ']', line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "?::") {
r3 = "?::";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"?::\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_identifierName();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) { return {op: CS.SoakedProtoMemberAccessOp, operands: [e], raw: '?::' + ws + e, line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "?::[") {
r3 = "?::[";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"?::[\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r7 = "]";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, ws1) { return {op: CS.SoakedDynamicProtoMemberAccessOp, operands: [e], raw: '?::[' + ws0 + e + ws1 + ']', line: line, column: column, offset: offset}; })(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r6 = clone(pos);
r7 = parse_assignmentExpression();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
if (input.substr(pos.offset, 2) === "..") {
r6 = "..";
advance(pos, 2);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("\"..\"");
}
}
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 46) {
r7 = ".";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\".\"");
}
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r10 = clone(pos);
r11 = parse_assignmentExpression();
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
r9 = [r11, r12];
} else {
r9 = null;
pos = clone(r10);
}
} else {
r9 = null;
pos = clone(r10);
}
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r10 = "]";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r10 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, maybeLeft, exclusive, ws1, maybeRight) {
var left = maybeLeft ? maybeLeft[0] : null,
right = maybeRight ? maybeRight[0] : null;
var raw = '[' + ws0 + (left ? left.raw + maybeLeft[1] : '') + '..' + exclusive +
ws1 + (right ? right.raw + maybeRight[1] : '') + ']';
return {op: CS.Slice, operands: [!exclusive, left, right], raw: raw, line: line, column: column, offset: offset};
})(r1.offset, r1.line, r1.column, r4, r5, r7, r8, r9);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_primaryExpression() {
var cacheKey = "primaryExpression@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r0 = parse_Numbers();
if (r0 === null) {
r0 = parse_bool();
if (r0 === null) {
r0 = parse_null();
if (r0 === null) {
r0 = parse_undefined();
if (r0 === null) {
r0 = parse_contextVar();
if (r0 === null) {
r1 = clone(pos);
r0 = parse_THIS();
if (r0 === null) {
if (input.charCodeAt(pos.offset) === 64) {
r0 = "@";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"@\"");
}
}
}
if (r0 !== null) {
r0 = (function(offset, line, column, r) { return (new CS.This).r(r).p(line, column, offset); })(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r0 = parse_identifier();
if (r0 === null) {
r0 = parse_range();
if (r0 === null) {
r0 = parse_arrayLiteral();
if (r0 === null) {
r0 = parse_objectLiteral();
if (r0 === null) {
r0 = parse_interpolation();
if (r0 === null) {
r0 = parse_JSLiteral();
if (r0 === null) {
r0 = parse_string();
if (r0 === null) {
r0 = parse_regexp();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 40) {
r3 = "(";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"(\"");
}
}
if (r3 !== null) {
r4 = parse_TERMINDENT();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse_DEDENT();
if (r6 !== null) {
r7 = parse_TERMINATOR();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 41) {
r8 = ")";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r8 !== null) {
r0 = [r3, r4, r5, r6, r7, r8];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t0, e, d, t1) {
e = e.clone();
e.raw = '(' + t0 + e.raw + d + t1 + ')';
return e;
})(r1.offset, r1.line, r1.column, r4, r5, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 40) {
r3 = "(";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"(\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_TERMINATOR();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 41) {
r8 = ")";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r8 !== null) {
r0 = [r3, r4, r5, r6, r7, r8];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, e, ws1, t) {
e = e.clone();
e.raw = '(' + ws0 + e.raw + ws1 + t + ')';
return e;
})(r1.offset, r1.line, r1.column, r4, r5, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_contextVar() {
var cacheKey = "contextVar@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 64) {
r3 = "@";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"@\"");
}
}
if (r3 !== null) {
r4 = parse_identifierName();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, m) {
return new CS.MemberAccessOp((new CS.This).r("@").p(line, column, offset), m).r("@" + m).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_JSLiteral() {
var cacheKey = "JSLiteral@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 96) {
r3 = "`";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"`\"");
}
}
if (r3 !== null) {
r4 = [];
if (/^[^`]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[^`]");
}
}
while (r5 !== null) {
r4.push(r5);
if (/^[^`]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[^`]");
}
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 96) {
r5 = "`";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"`\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, data) {
data = data.join('');
return new CS.JavaScript(data).r('`' + data + '`').p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_spread() {
var cacheKey = "spread@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_postfixExpression();
if (r3 !== null) {
if (input.substr(pos.offset, 3) === "...") {
r4 = "...";
advance(pos, 3);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"...\"");
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e) {
return new CS.Spread(e).r(e.raw + "...").p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_conditional() {
var cacheKey = "conditional@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_IF();
if (r3 === null) {
r3 = parse_UNLESS();
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_assignmentExpression();
if (r5 !== null) {
r6 = parse_conditionalBody();
if (r6 !== null) {
r7 = parse_elseClause();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, kw, ws0, cond, body, elseClause) {
var raw = kw + ws0 + cond.raw + body.raw + (elseClause ? elseClause.raw : '');
var constructor = kw == 'unless' ? CS.NegatedConditional : CS.Conditional;
if(kw == 'unless') cond = new CS.LogicalNotOp(cond).g();
var elseBlock = elseClause ? elseClause.block : null;
return new constructor(cond, body.block, elseBlock).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_conditionalBody() {
var cacheKey = "conditionalBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_TERMINDENT();
if (r4 !== null) {
r5 = parse_block();
if (r5 !== null) {
r6 = parse_DEDENT();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, t, b, d) { return {block: b, raw: t + b.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_THEN();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_statement();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, ws0, ws1, s) {
return {block: s, raw: ws0 + t + 'then' + ws1 + s.raw};
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_THEN();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws) {
return {block: null, raw: ws + 'then'};
})(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_elseClause() {
var cacheKey = "elseClause@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_TERMINATOR();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r5 = parse__();
if (r5 !== null) {
r6 = parse_ELSE();
if (r6 !== null) {
r7 = parse_functionBody();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, term, ws1, b) { return {block: b.block, raw: ws0 + term + ws1 + 'else' + b.raw}; })(r1.offset, r1.line, r1.column, r3, r4, r5, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_while() {
var cacheKey = "while@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_WHILE();
if (r3 === null) {
r3 = parse_UNTIL();
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_assignmentExpression();
if (r5 !== null) {
r6 = parse_conditionalBody();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, kw, ws, cond, body) {
var raw = kw + ws + cond.raw + body.raw;
var constructor = kw == 'until' ? CS.NegatedWhile : CS.While;
if(kw == 'until') cond = new CS.LogicalNotOp(cond).g();
return new constructor(cond, body.block).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_loop() {
var cacheKey = "loop@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_LOOP();
if (r3 !== null) {
r4 = parse_conditionalBody();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, body) {
return new CS.Loop(body.block).r('loop' + body.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_try() {
var cacheKey = "try@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TRY();
if (r3 !== null) {
r4 = parse_tryBody();
if (r4 !== null) {
r5 = parse_catchClause();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_finallyClause();
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, body, c, f) {
var raw = 'try' + body.block + (c ? c.raw : '') + (f ? f.raw : '');
return new CS.Try(body.block, c ? c.assignee : null, c ? c.block : null, f ? f.block : null).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_tryBody() {
var cacheKey = "tryBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_functionBody();
if (r0 === null) {
r0 = parse_conditionalBody();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_catchClause() {
var cacheKey = "catchClause@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_CATCH();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_Assignable();
if (r7 !== null) {
r8 = parse_conditionalBody();
if (r8 !== null) {
r0 = [r3, r4, r5, r6, r7, r8];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, ws0, ws1, e, body) {
return {block: body.block, assignee: e, raw: t + ws0 + 'catch' + ws1 + e.raw + body.raw};
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7, r8);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_finallyClause() {
var cacheKey = "finallyClause@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_FINALLY();
if (r5 !== null) {
r6 = parse_tryBody();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, ws, body) {
return {block: body.block, raw: t + ws + 'finally' + body.raw};
})(r1.offset, r1.line, r1.column, r3, r4, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_class() {
var cacheKey = "class@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_CLASS();
if (r3 !== null) {
r5 = clone(pos);
r6 = parse__();
if (r6 !== null) {
r7 = parse_Assignable();
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_EXTENDS();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_extendee();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_classBody();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, name, parent, body) {
var ctor = null;
var raw = 'class' + (name ? name[0] + name[1].raw : '') +
(parent ? parent[0] + 'parent' + parent[2] + parent[3].raw : '') +
body.raw;
name = name ? name[1] : null;
parent = parent ? parent[3] : null;
var boundMembers = [];
var stmts = body.block != null ? body.block.statements || [body.block] : [];
for(var i = 0, l = stmts.length; i < l; ++i) {
var m = stmts[i];
if(m.instanceof(CS.Constructor)) {
ctor = m;
} else if(m.instanceof(CS.ClassProtoAssignOp) && m.expression.instanceof(CS.BoundFunction)) {
boundMembers.push(m);
}
}
return new CS.Class(name, parent, ctor, body.block, boundMembers).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_extendee() {
var cacheKey = "extendee@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
r0 = parse_expressionworthy();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
reportFailures++;
r5 = clone(pos);
r6 = parse_memberExpression();
if (r6 !== null) {
r7 = [];
r8 = parse_MemberAccessOps();
if (r8 === null) {
r8 = parse_argumentList();
}
while (r8 !== null) {
r7.push(r8);
r8 = parse_MemberAccessOps();
if (r8 === null) {
r8 = parse_argumentList();
}
}
if (r7 !== null) {
r8 = parse_TERMINDENT();
if (r8 !== null) {
r9 = parse_implicitObjectLiteralMember();
if (r9 !== null) {
r3 = [r6, r7, r8, r9];
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
} else {
r3 = null;
pos = clone(r5);
}
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r4 = parse_assignmentExpression();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, a) { return a; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_memberExpression();
if (r3 !== null) {
r5 = clone(pos);
r6 = parse_argumentList();
if (r6 !== null) {
r7 = [];
r8 = parse_MemberAccessOps();
if (r8 === null) {
r8 = parse_argumentList();
}
while (r8 !== null) {
r7.push(r8);
r8 = parse_MemberAccessOps();
if (r8 === null) {
r8 = parse_argumentList();
}
}
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, fn, accesses) {
if(accesses)
fn = createMemberExpression(fn, [accesses[0]].concat(accesses[1] || []));
return fn;
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_classBody() {
var cacheKey = "classBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_TERMINDENT();
if (r4 !== null) {
r5 = parse_classBlock();
if (r5 !== null) {
r6 = parse_DEDENT();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, t, b, d) { return {block: b, raw: ws + t + b.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_THEN();
if (r4 !== null) {
r5 = parse__();
if (r5 !== null) {
r6 = parse_classStatement();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, t, ws1, s) {
return {block: s, raw: ws0 + t + ws1 + s.raw};
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_THEN();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
r0 = r0 !== null ? r0 : "";
if (r0 !== null) {
r0 = (function(offset, line, column, all) {
return {block: null, raw: all ? all[0] + all[1] : ''};
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_classBlock() {
var cacheKey = "classBlock@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_classStatement();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_classStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_classStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, s, ss, term) {
var raw = s.raw + ss.map(function(s){ return s[0] + s[1] + s[2] + s[3].raw; }).join('') + term;
return new CS.Block([s].concat(ss.map(function(s){ return s[3]; }))).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_classStatement() {
var cacheKey = "classStatement@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_classProtoAssignment();
if (r0 === null) {
r0 = parse_staticAssignment();
if (r0 === null) {
r0 = parse_constructor();
if (r0 === null) {
r0 = parse_expression();
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_constructor() {
var cacheKey = "constructor@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_ObjectInitialiserKeys();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
r5 = ":";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_expression();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, e, d) { return {raw: t + e.raw + d, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expression();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, ws1, e) { return {raw: t + ws1 + e.raw, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, key, ws0, ws1, e) {
if(!key.instanceof(CS.String, CS.Identifier) || key.data !== 'constructor') return null;
var raw = key.raw + ws0 + ":" + ws1 + e.raw;
e = e.expr;
if(e.instanceof(CS.BoundFunction))
e = new CS.Function(e.parameters, e.block).r(e.raw).p(e.line, e.column);
return new CS.Constructor(e).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_staticAssignment() {
var cacheKey = "staticAssignment@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_contextVar();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
r5 = ":";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_expression();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, key, ws0, ws1, e) {
var raw = key.raw + ws0 + ":" + ws1 + e.raw;
return new CS.AssignOp(key, e).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_classProtoAssignment() {
var cacheKey = "classProtoAssignment@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_ObjectInitialiserKeys();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
r5 = ":";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_expression();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, e, d) { return {raw: t + e.raw + d, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_expression();
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, t, ws1, e) { return {raw: t + ws1 + e.raw, expr: e}; })(r8.offset, r8.line, r8.column, r10, r11, r12);
}
if (r7 === null) {
pos = clone(r8);
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, key, ws0, ws1, e) {
if(key.data === 'constructor') return null;
var raw = key.raw + ws0 + ":" + ws1 + e.raw;
return new CS.ClassProtoAssignOp(key, e.expr).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_forOf() {
var cacheKey = "forOf@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_FOR();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r6 = clone(pos);
r7 = parse_OWN();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_Assignable();
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r10 = ",";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_Assignable();
if (r12 !== null) {
r13 = parse__();
if (r13 !== null) {
r8 = [r10, r11, r12, r13];
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
} else {
r8 = null;
pos = clone(r9);
}
r8 = r8 !== null ? r8 : "";
if (r8 !== null) {
r9 = parse_OF();
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_assignmentExpression();
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
r14 = clone(pos);
r15 = parse_WHEN();
if (r15 !== null) {
r16 = parse__();
if (r16 !== null) {
r17 = parse_assignmentExpression();
if (r17 !== null) {
r18 = parse__();
if (r18 !== null) {
r13 = [r15, r16, r17, r18];
} else {
r13 = null;
pos = clone(r14);
}
} else {
r13 = null;
pos = clone(r14);
}
} else {
r13 = null;
pos = clone(r14);
}
} else {
r13 = null;
pos = clone(r14);
}
r13 = r13 !== null ? r13 : "";
if (r13 !== null) {
r14 = parse_conditionalBody();
if (r14 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, own, key, ws1, maybeVal, ws2, obj, ws3, maybeFilter, body) {
var raw = 'for' + ws0 + (own ? 'own' + own[1] : '') + key.raw + ws1 +
(maybeVal ? ',' + maybeVal[1] + maybeVal[2].raw + maybeVal[3] : '') +
'of' + ws2 + obj.raw + ws3 +
(maybeFilter ? 'when' + maybeFilter[1] + maybeFilter[2].raw + maybeFilter[3] : '') +
body.raw;
var val = maybeVal ? maybeVal[2] : null;
var filter = maybeFilter ? maybeFilter[2] : null;
return new CS.ForOf(!!own, key, val, obj, filter, body.block).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6, r7, r8, r10, r11, r12, r13, r14);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_forIn() {
var cacheKey = "forIn@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_FOR();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Assignable();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r8 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r9 = ",";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r11 = parse_Assignable();
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
r7 = [r9, r10, r11, r12];
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
} else {
r7 = null;
pos = clone(r8);
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse_IN();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_assignmentExpression();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r13 = clone(pos);
r14 = parse_BY();
if (r14 !== null) {
r15 = parse__();
if (r15 !== null) {
r16 = parse_assignmentExpression();
if (r16 !== null) {
r17 = parse__();
if (r17 !== null) {
r12 = [r14, r15, r16, r17];
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
} else {
r12 = null;
pos = clone(r13);
}
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r14 = clone(pos);
r15 = parse_WHEN();
if (r15 !== null) {
r16 = parse__();
if (r16 !== null) {
r17 = parse_assignmentExpression();
if (r17 !== null) {
r18 = parse__();
if (r18 !== null) {
r13 = [r15, r16, r17, r18];
} else {
r13 = null;
pos = clone(r14);
}
} else {
r13 = null;
pos = clone(r14);
}
} else {
r13 = null;
pos = clone(r14);
}
} else {
r13 = null;
pos = clone(r14);
}
r13 = r13 !== null ? r13 : "";
if (r13 !== null) {
r14 = parse_conditionalBody();
if (r14 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, val, ws1, maybeKey, ws2, list, ws3, maybeStep, maybeFilter, body) {
var raw = 'for' + ws0 + val.raw + ws1 +
(maybeKey ? ',' + maybeKey[1] + maybeKey[2].raw + maybeKey[3] : '') +
'in' + ws2 + list.raw + ws3 +
(maybeStep ? 'by' + maybeStep[1] + maybeStep[2].raw + maybeStep[3] : '') +
(maybeFilter ? 'when' + maybeFilter[1] + maybeFilter[2].raw + maybeFilter[3] : '') +
body.raw;
var key = maybeKey ? maybeKey[2] : null;
var step = maybeStep ? maybeStep[2] : new CS.Int(1).r('1').g();
var filter = maybeFilter ? maybeFilter[2] : null;
return new CS.ForIn(val, key, list, step, filter, body.block).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6, r7, r9, r10, r11, r12, r13, r14);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_switch() {
var cacheKey = "switch@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_SWITCH();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expressionworthy();
if (r5 === null) {
r5 = parse_assignmentExpression();
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_switchBody();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e, body) {
var raw = 'switch' + ws + (e ? e.raw : '') + body.raw;
return new CS.Switch(e || null, body.cases, body['else'] || null).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_switchBody() {
var cacheKey = "switchBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_TERMINDENT();
if (r4 !== null) {
r5 = parse_switchBlock();
if (r5 !== null) {
r6 = parse_DEDENT();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, t, b, d) { return {cases: b.cases, 'else': b['else'], raw: ws + t + b.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_THEN();
if (r4 !== null) {
r5 = parse__();
if (r5 !== null) {
r6 = parse_case();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, t, ws1, c) { return {cases: [c], raw: ws0 + t + ws1 + c.raw}; })(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_THEN();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws) { return {cases: [], raw: ws + 'then'}; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_switchBlock() {
var cacheKey = "switchBlock@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_case();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_case();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_case();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r8 = parse_TERMINATOR();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_elseClause();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_TERMINATOR();
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w, ws, elseClause, term) {
var raw = w.raw + ws.map(function(w){ return w[0] + w[1] + w[2] + w[3].raw; }).join('') +
(elseClause ? elseClause[0] + elseClause[1] + elseClause[2] + elseClause[3].raw : '') + term;
var cases = [w].concat(ws.map(function(w){ return w[3]; }));
return {cases: cases, 'else': elseClause ? elseClause[3].block : null, raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_case() {
var cacheKey = "case@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_WHEN();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_caseConditions();
if (r5 !== null) {
r6 = parse_conditionalBody();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, conditions, body) {
var raw = 'when' + ws + conditions.raw + body.raw
return new CS.SwitchCase(conditions.list, body.block).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_caseConditions() {
var cacheKey = "caseConditions@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_assignmentExpression();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r8 = ",";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_assignmentExpression();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r8 = ",";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_assignmentExpression();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c, cs) {
var raw = c.raw + cs.map(function(c){ return c[0] + c[1] + c[2] + c[3].raw; }).join('');
return {list: [c].concat(cs.map(function(c){ return c[3]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_functionLiteral() {
var cacheKey = "functionLiteral@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13;
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
if (input.charCodeAt(pos.offset) === 40) {
r5 = "(";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"(\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r8 = clone(pos);
r9 = clone(pos);
r10 = parse_TERMINDENT();
if (r10 !== null) {
r11 = parse_parameterList();
if (r11 !== null) {
r12 = parse_DEDENT();
if (r12 !== null) {
r13 = parse_TERMINATOR();
if (r13 !== null) {
r7 = [r10, r11, r12, r13];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, td, p, d, t) { return {e: p, raw: td + p.raw + d + t}; })(r8.offset, r8.line, r8.column, r10, r11, r12, r13);
}
if (r7 === null) {
pos = clone(r8);
}
if (r7 === null) {
r8 = clone(pos);
r7 = parse_parameterList();
if (r7 !== null) {
r7 = (function(offset, line, column, p) { return {e: p, raw: p.raw}; })(r8.offset, r8.line, r8.column, r7);
}
if (r7 === null) {
pos = clone(r8);
}
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 41) {
r9 = ")";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r3 = [r5, r6, r7, r8, r9, r10];
} else {
r3 = null;
pos = clone(r4);
}
} else {
r3 = null;
pos = clone(r4);
}
} else {
r3 = null;
pos = clone(r4);
}
} else {
r3 = null;
pos = clone(r4);
}
} else {
r3 = null;
pos = clone(r4);
}
} else {
r3 = null;
pos = clone(r4);
}
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
if (input.substr(pos.offset, 2) === "->") {
r4 = "->";
advance(pos, 2);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"->\"");
}
}
if (r4 === null) {
if (input.substr(pos.offset, 2) === "=>") {
r4 = "=>";
advance(pos, 2);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"=>\"");
}
}
}
if (r4 !== null) {
r5 = parse_functionBody();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, params, arrow, body) {
if(!body) body = {block: null, raw: ''};
var raw =
(params ? params[0] + params[1] + (params[2] && params[2].raw) + params[3] + params[4] + params[5] : '') +
arrow + body.raw;
var constructor;
switch(arrow) {
case '->': constructor = CS.Function; break;
case '=>': constructor = CS.BoundFunction; break;
default: throw new Error('parsed function arrow ("' + arrow + '") not associated with a constructor');
}
params = params && params[2] && params[2].e ? params[2].e.list : [];
return new constructor(params, body.block).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_functionBody() {
var cacheKey = "functionBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_TERMINDENT();
if (r4 !== null) {
r5 = parse_block();
if (r5 !== null) {
r6 = parse_DEDENT();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, t, b, d) { return {block: b, raw: ws + t + b.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_statement();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, s) {
return {block: s, raw: ws + s.raw};
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_parameter() {
var cacheKey = "parameter@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_Assignable();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 61) {
r5 = "=";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_secondaryExpression();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, param, ws0, ws1, default_) {
var raw = param.raw + ws0 + '=' + ws1 + default_.raw;
return new CS.DefaultParam(param, default_).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r0 = parse_rest();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_rest() {
var cacheKey = "rest@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_Assignable();
if (r3 !== null) {
if (input.substr(pos.offset, 3) === "...") {
r4 = "...";
advance(pos, 3);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"...\"");
}
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, a, rest) {
return (rest ? new CS.Rest(a) : a).r(a.raw + rest).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_parameterList() {
var cacheKey = "parameterList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_parameter();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r9 = clone(pos);
r10 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r11 = ",";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r11 !== null) {
r12 = parse_TERMINATOR();
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r8 = [r11, r12];
} else {
r8 = null;
pos = clone(r10);
}
} else {
r8 = null;
pos = clone(r10);
}
if (r8 !== null) {
r8 = (function(offset, line, column, c, t) { return c + t; })(r9.offset, r9.line, r9.column, r11, r12);
}
if (r8 === null) {
pos = clone(r9);
}
if (r8 === null) {
r8 = parse_TERMINATOR();
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_parameter();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
r9 = clone(pos);
r10 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r11 = ",";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r11 !== null) {
r12 = parse_TERMINATOR();
r12 = r12 !== null ? r12 : "";
if (r12 !== null) {
r8 = [r11, r12];
} else {
r8 = null;
pos = clone(r10);
}
} else {
r8 = null;
pos = clone(r10);
}
if (r8 !== null) {
r8 = (function(offset, line, column, c, t) { return c + t; })(r9.offset, r9.line, r9.column, r11, r12);
}
if (r8 === null) {
pos = clone(r9);
}
if (r8 === null) {
r8 = parse_TERMINATOR();
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_parameter();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, es) {
var raw = e.raw + es.map(function(e){ return e[0] + e[1] + e[2] + e[3].raw; }).join('');
return {list: [e].concat(es.map(function(e){ return e[3]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_range() {
var cacheKey = "range@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_secondaryExpression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.substr(pos.offset, 2) === "..") {
r7 = "..";
advance(pos, 2);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"..\"");
}
}
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 46) {
r8 = ".";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\".\"");
}
}
r8 = r8 !== null ? r8 : "";
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_secondaryExpression();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r12 = "]";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r12 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws0, left, ws1, exclusiveDot, ws2, right, ws3) {
var raw = '[' + ws0 + left.raw + ws1 + '..' + exclusiveDot + ws2 + right.raw + ws3 + ']';
var inclusive = !exclusiveDot;
return new CS.Range(inclusive, left, right).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6, r8, r9, r10, r11);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_arrayLiteral() {
var cacheKey = "arrayLiteral@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = parse_arrayLiteralBody();
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r7 = "]";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, members, t, ws) {
var raw = "[" + members.raw + t + ws + "]";
return new CS.ArrayInitialiser(members.list).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_arrayLiteralBody() {
var cacheKey = "arrayLiteralBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_arrayLiteralMemberList();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, members, d) { return {list: members.list, raw: t + members.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_arrayLiteralMemberList();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, members) { return {list: members ? members.list : [], raw: ws + members ? members.raw : ''}; })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_arrayLiteralMemberList() {
var cacheKey = "arrayLiteralMemberList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_arrayLiteralMember();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = [];
r7 = clone(pos);
r8 = parse_arrayLiteralMemberSeparator();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_arrayLiteralMember();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r6 = [r8, r9, r10, r11];
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
while (r6 !== null) {
r5.push(r6);
r7 = clone(pos);
r8 = parse_arrayLiteralMemberSeparator();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_arrayLiteralMember();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r6 = [r8, r9, r10, r11];
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
}
if (r5 !== null) {
r6 = parse_arrayLiteralMemberSeparator();
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, ws, es, trail) {
var raw = e.raw + ws + es.map(function(e){ return e[0] + e[1] + e[2].raw + e[3]; }).join('') + trail;
return {list: [e].concat(es.map(function(e){ return e[2]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_arrayLiteralMember() {
var cacheKey = "arrayLiteralMember@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r0 = parse_spread();
if (r0 === null) {
r0 = parse_expression();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_implicitObjectLiteral();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, o) { return o; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_arrayLiteralMemberSeparator() {
var cacheKey = "arrayLiteralMemberSeparator@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r5 = ",";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, ws, c) { return t + ws + c; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r3 = ",";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r3 !== null) {
r4 = parse_TERMINATOR();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r5 = parse__();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t) { return ',' + t; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_objectLiteral() {
var cacheKey = "objectLiteral@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 123) {
r3 = "{";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"{\"");
}
}
if (r3 !== null) {
r4 = parse_objectLiteralBody();
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r7 = "}";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, members, t, ws) {
var raw = '{' + members.raw + t + ws + '}'
return new CS.ObjectInitialiser(members.list).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_objectLiteralBody() {
var cacheKey = "objectLiteralBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_objectLiteralMemberList();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, members, d) { return {list: members.list, raw: t + members.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_objectLiteralMemberList();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, members) { return {list: members ? members.list : [], raw: ws + members ? members.raw : ''}; })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_objectLiteralMemberList() {
var cacheKey = "objectLiteralMemberList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_objectLiteralMember();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = [];
r7 = clone(pos);
r8 = parse_arrayLiteralMemberSeparator();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_objectLiteralMember();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r6 = [r8, r9, r10, r11];
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
while (r6 !== null) {
r5.push(r6);
r7 = clone(pos);
r8 = parse_arrayLiteralMemberSeparator();
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_objectLiteralMember();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r6 = [r8, r9, r10, r11];
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
} else {
r6 = null;
pos = clone(r7);
}
}
if (r5 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r6 = ",";
advance(pos, 1);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
r6 = r6 !== null ? r6 : "";
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, ws, es, trail) {
var raw = e.raw + ws + es.map(function(e){ return e[0] + e[1] + e[2].raw + e[3]; }).join('') + trail;
return {list: [e].concat(es.map(function(e){ return e[2]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_objectLiteralMember() {
var cacheKey = "objectLiteralMember@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_ObjectInitialiserKeys();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
r5 = ":";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_expression();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, key, ws0, ws1, val) {
var raw = key.raw + ws0 + ':' + ws1 + val.raw;
return new CS.ObjectInitialiserMember(key, val).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r0 = parse_contextVar();
if (r0 !== null) {
r0 = (function(offset, line, column, v) {
var key = new CS.String(v.memberName).r(v.memberName).p(line, column + 1)
return new CS.ObjectInitialiserMember(key, v).r(v.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r0 = parse_ObjectInitialiserKeys();
if (r0 !== null) {
r0 = (function(offset, line, column, v) {
return new CS.ObjectInitialiserMember(v, v).r(v.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_ObjectInitialiserKeys() {
var cacheKey = "ObjectInitialiserKeys@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_identifierName();
if (r0 !== null) {
r0 = (function(offset, line, column, i) { return new CS.Identifier(i).r(i).p(line, column, offset); })(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r0 = parse_string();
if (r0 === null) {
r0 = parse_Numbers();
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_implicitObjectLiteral() {
var cacheKey = "implicitObjectLiteral@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_implicitObjectLiteralMemberList();
if (r0 !== null) {
r0 = (function(offset, line, column, members) {
return new CS.ObjectInitialiser(members.list).r(members.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_implicitObjectLiteralMemberList() {
var cacheKey = "implicitObjectLiteralMemberList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_implicitObjectLiteralMember();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse_implicitObjectLiteralMemberSeparator();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r9 = parse_implicitObjectLiteralMember();
if (r9 !== null) {
r5 = [r7, r8, r9];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse_implicitObjectLiteralMemberSeparator();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r9 = parse_implicitObjectLiteralMember();
if (r9 !== null) {
r5 = [r7, r8, r9];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, es) {
var raw = e.raw + es.map(function(e){ return e[0] + e[1] + e[2].raw; }).join('');
return {list: [e].concat(es.map(function(e){ return e[2]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_implicitObjectLiteralMemberSeparator() {
var cacheKey = "implicitObjectLiteralMemberSeparator@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = parse_TERMINATOR();
if (r2 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r3 = ",";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r0 = [r2, r3, r4];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 44) {
r2 = ",";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r2 !== null) {
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_implicitObjectLiteralMember() {
var cacheKey = "implicitObjectLiteralMember@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_ObjectInitialiserKeys();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
r5 = ":";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_implicitObjectLiteralMemberValue();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, key, ws0, ws1, val) {
return new CS.ObjectInitialiserMember(key, val.value).r(key.raw + ws0 + ':' + ws1 + val.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_implicitObjectLiteralMemberValue() {
var cacheKey = "implicitObjectLiteralMemberValue@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r0 = parse_expression();
if (r0 !== null) {
r0 = (function(offset, line, column, e) { return {value: e, raw: e.raw}; })(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_implicitObjectLiteral();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, i, o, d) { return {value: o, raw: i + o.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_bool() {
var cacheKey = "bool@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_TRUE();
if (r0 === null) {
r0 = parse_YES();
if (r0 === null) {
r0 = parse_ON();
}
}
if (r0 !== null) {
r0 = (function(offset, line, column, match) { return new CS.Bool(true).r(match).p(line, column, offset); })(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r0 = parse_FALSE();
if (r0 === null) {
r0 = parse_NO();
if (r0 === null) {
r0 = parse_OFF();
}
}
if (r0 !== null) {
r0 = (function(offset, line, column, match) { return new CS.Bool(false).r(match).p(line, column, offset); })(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_Numbers() {
var cacheKey = "Numbers@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "0b") {
r3 = "0b";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"0b\"");
}
}
if (r3 !== null) {
r5 = parse_bit();
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r5 = parse_bit();
}
} else {
r4 = null;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, bs) { return new CS.Int(parseInt(bs.join(''), 2)).r("0b" + bs).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "0o") {
r3 = "0o";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"0o\"");
}
}
if (r3 !== null) {
r5 = parse_octalDigit();
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r5 = parse_octalDigit();
}
} else {
r4 = null;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, os) { return new CS.Int(parseInt(os.join(''), 8)).r("0o" + os).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "0x") {
r3 = "0x";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"0x\"");
}
}
if (r3 !== null) {
r5 = parse_hexDigit();
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r5 = parse_hexDigit();
}
} else {
r4 = null;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, hs) { return new CS.Int(parseInt(hs.join(''), 16)).r("0x" + hs).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_decimal();
if (r3 !== null) {
if (/^[eE]/.test(input.charAt(pos.offset))) {
r4 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("[eE]");
}
}
if (r4 !== null) {
if (/^[+\-]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[+\\-]");
}
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_decimal();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, base, e, sign, exponent) {
var raw = base.raw + e + sign + exponent.raw;
return new CS.Float(parseFloat('' + base.data + e + sign + exponent.data, 10)).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r0 = parse_decimal();
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_decimal() {
var cacheKey = "decimal@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_integer();
if (r3 !== null) {
r5 = clone(pos);
if (input.charCodeAt(pos.offset) === 46) {
r6 = ".";
advance(pos, 1);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("\".\"");
}
}
if (r6 !== null) {
r8 = parse_decimalDigit();
if (r8 !== null) {
r7 = [];
while (r8 !== null) {
r7.push(r8);
r8 = parse_decimalDigit();
}
} else {
r7 = null;
}
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, integral, fractional) {
if(fractional) fractional = "." + fractional[1].join('');
return fractional
? new CS.Float(parseFloat(integral + fractional, 10)).r(integral + fractional).p(line, column, offset)
: new CS.Int(+integral).r(integral).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_integer() {
var cacheKey = "integer@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
if (input.charCodeAt(pos.offset) === 48) {
r0 = "0";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"0\"");
}
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (/^[1-9]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[1-9]");
}
}
if (r3 !== null) {
r4 = [];
r5 = parse_decimalDigit();
while (r5 !== null) {
r4.push(r5);
r5 = parse_decimalDigit();
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, a, bs) { return a + (bs ? bs.join('') : ''); })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_decimalDigit() {
var cacheKey = "decimalDigit@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (/^[0-9]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[0-9]");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_hexDigit() {
var cacheKey = "hexDigit@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (/^[0-9a-fA-F]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[0-9a-fA-F]");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_octalDigit() {
var cacheKey = "octalDigit@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (/^[0-7]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[0-7]");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_bit() {
var cacheKey = "bit@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (/^[01]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[01]");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_string() {
var cacheKey = "string@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "\"\"\"") {
r3 = "\"\"\"";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\\\"\\\"\"");
}
}
if (r3 !== null) {
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r5 = "'";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r8 = "\"";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r9 = "\"";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r11 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 34) {
r10 = "\"";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
reportFailures--;
if (r10 === null) {
r10 = "";
} else {
r10 = null;
pos = clone(r11);
}
if (r10 !== null) {
r5 = [r8, r9, r10];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return s.join(''); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r5 = "'";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r8 = "\"";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r9 = "\"";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r11 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 34) {
r10 = "\"";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
reportFailures--;
if (r10 === null) {
r10 = "";
} else {
r10 = null;
pos = clone(r11);
}
if (r10 !== null) {
r5 = [r8, r9, r10];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return s.join(''); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
}
} else {
r4 = null;
}
if (r4 !== null) {
if (input.substr(pos.offset, 3) === "\"\"\"") {
r5 = "\"\"\"";
advance(pos, 3);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\\\"\\\"\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d) {
var data = stripLeadingWhitespace(d.join(''));
return new CS.String(data).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "'''") {
r3 = "'''";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"'''\"");
}
}
if (r3 !== null) {
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 34) {
r5 = "\"";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 35) {
r5 = "#";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.charCodeAt(pos.offset) === 39) {
r8 = "'";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 39) {
r9 = "'";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r11 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 39) {
r10 = "'";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
reportFailures--;
if (r10 === null) {
r10 = "";
} else {
r10 = null;
pos = clone(r11);
}
if (r10 !== null) {
r5 = [r8, r9, r10];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return s.join(''); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 34) {
r5 = "\"";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 35) {
r5 = "#";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.charCodeAt(pos.offset) === 39) {
r8 = "'";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 39) {
r9 = "'";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r11 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 39) {
r10 = "'";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
reportFailures--;
if (r10 === null) {
r10 = "";
} else {
r10 = null;
pos = clone(r11);
}
if (r10 !== null) {
r5 = [r8, r9, r10];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return s.join(''); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
}
}
} else {
r4 = null;
}
if (r4 !== null) {
if (input.substr(pos.offset, 3) === "'''") {
r5 = "'''";
advance(pos, 3);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'''\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d) {
var data = stripLeadingWhitespace(d.join(''));
return new CS.String(data).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r3 = "\"";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r3 !== null) {
r4 = [];
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r5 = "'";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
while (r5 !== null) {
r4.push(r5);
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r5 = "'";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r5 = "\"";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d) { return new CS.String(d ? d.join('') : '').p(line, column, offset); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 39) {
r3 = "'";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r3 !== null) {
r4 = [];
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 34) {
r5 = "\"";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 35) {
r5 = "#";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
}
}
while (r5 !== null) {
r4.push(r5);
r5 = parse_stringData();
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 34) {
r5 = "\"";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 === null) {
if (input.charCodeAt(pos.offset) === 35) {
r5 = "#";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
}
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 39) {
r5 = "'";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d) { return new CS.String(d ? d.join('') : '').p(line, column, offset); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_stringData() {
var cacheKey = "stringData@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
if (/^[^"'\\#]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[^\"'\\\\#]");
}
}
if (r0 === null) {
r0 = parse_UnicodeEscapeSequence();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "\\x") {
r3 = "\\x";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\x\"");
}
}
if (r3 !== null) {
r4 = parse_hexDigit();
if (r4 !== null) {
r5 = parse_hexDigit();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, h0, h1) { return String.fromCharCode(parseInt(h0 + h1, 16)); })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "\\0") {
r3 = "\\0";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\0\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_decimalDigit();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\0'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "\\0") {
r3 = "\\0";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\0\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_decimalDigit();
reportFailures--;
if (r4 !== null) {
r4 = "";
pos = clone(r5);
} else {
r4 = null;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column) { throw new SyntaxError(['string data'], 'octal escape sequence', offset, line, column); })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.substr(pos.offset, 2) === "\\b") {
r0 = "\\b";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\b\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\b'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.substr(pos.offset, 2) === "\\t") {
r0 = "\\t";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\t\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\t'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.substr(pos.offset, 2) === "\\n") {
r0 = "\\n";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\n\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\n'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.substr(pos.offset, 2) === "\\v") {
r0 = "\\v";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\v\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\v'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.substr(pos.offset, 2) === "\\f") {
r0 = "\\f";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\f\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\f'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.substr(pos.offset, 2) === "\\r") {
r0 = "\\r";
advance(pos, 2);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\r\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\r'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 92) {
r3 = "\\";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
if (input.length > pos.offset) {
r4 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c) { return c; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 35) {
r3 = "#";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 123) {
r4 = "{";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"{\"");
}
}
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c) { return c; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_interpolation() {
var cacheKey = "interpolation@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "\"\"\"") {
r3 = "\"\"\"";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\\\"\\\"\"");
}
}
if (r3 !== null) {
r6 = clone(pos);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r10 = "\"";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r10 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r11 = "\"";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
r11 = r11 !== null ? r11 : "";
if (r11 !== null) {
r13 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 34) {
r12 = "\"";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
reportFailures--;
if (r12 === null) {
r12 = "";
} else {
r12 = null;
pos = clone(r13);
}
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, s) { return s.join(''); })(r8.offset, r8.line, r8.column, r7);
}
if (r7 === null) {
pos = clone(r8);
}
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r10 = "\"";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r10 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r11 = "\"";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
r11 = r11 !== null ? r11 : "";
if (r11 !== null) {
r13 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 34) {
r12 = "\"";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
reportFailures--;
if (r12 === null) {
r12 = "";
} else {
r12 = null;
pos = clone(r13);
}
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, s) { return s.join(''); })(r8.offset, r8.line, r8.column, r7);
}
if (r7 === null) {
pos = clone(r8);
}
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, d) { return new CS.String(d.join('')).p(line, column, offset); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.substr(pos.offset, 2) === "#{") {
r8 = "#{";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"#{\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expression();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r12 = "}";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r12 !== null) {
r5 = [r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, e) { return e; })(r6.offset, r6.line, r6.column, r10);
}
if (r5 === null) {
pos = clone(r6);
}
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r10 = "\"";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r10 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r11 = "\"";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
r11 = r11 !== null ? r11 : "";
if (r11 !== null) {
r13 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 34) {
r12 = "\"";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
reportFailures--;
if (r12 === null) {
r12 = "";
} else {
r12 = null;
pos = clone(r13);
}
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, s) { return s.join(''); })(r8.offset, r8.line, r8.column, r7);
}
if (r7 === null) {
pos = clone(r8);
}
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r7 === null) {
r8 = clone(pos);
r9 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r10 = "\"";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r10 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r11 = "\"";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
r11 = r11 !== null ? r11 : "";
if (r11 !== null) {
r13 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 34) {
r12 = "\"";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
reportFailures--;
if (r12 === null) {
r12 = "";
} else {
r12 = null;
pos = clone(r13);
}
if (r12 !== null) {
r7 = [r10, r11, r12];
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
} else {
r7 = null;
pos = clone(r9);
}
if (r7 !== null) {
r7 = (function(offset, line, column, s) { return s.join(''); })(r8.offset, r8.line, r8.column, r7);
}
if (r7 === null) {
pos = clone(r8);
}
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, d) { return new CS.String(d.join('')).p(line, column, offset); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.substr(pos.offset, 2) === "#{") {
r8 = "#{";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"#{\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expression();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r12 = "}";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r12 !== null) {
r5 = [r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, e) { return e; })(r6.offset, r6.line, r6.column, r10);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
} else {
r4 = null;
}
if (r4 !== null) {
if (input.substr(pos.offset, 3) === "\"\"\"") {
r5 = "\"\"\"";
advance(pos, 3);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\\\"\\\"\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, es) {
return createInterpolation(es).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 34) {
r3 = "\"";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r3 !== null) {
r6 = clone(pos);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, d) { return new CS.String(d.join('')).p(line, column, offset); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.substr(pos.offset, 2) === "#{") {
r8 = "#{";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"#{\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expression();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r12 = "}";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r12 !== null) {
r5 = [r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, e) { return e; })(r6.offset, r6.line, r6.column, r10);
}
if (r5 === null) {
pos = clone(r6);
}
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
r7 = parse_stringData();
if (r7 === null) {
if (input.charCodeAt(pos.offset) === 39) {
r7 = "'";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, d) { return new CS.String(d.join('')).p(line, column, offset); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
r7 = clone(pos);
if (input.substr(pos.offset, 2) === "#{") {
r8 = "#{";
advance(pos, 2);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"#{\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_expression();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r12 = "}";
advance(pos, 1);
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r12 !== null) {
r5 = [r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, e) { return e; })(r6.offset, r6.line, r6.column, r10);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
} else {
r4 = null;
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 34) {
r5 = "\"";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, es) {
return createInterpolation(es).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_regexp() {
var cacheKey = "regexp@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "///") {
r3 = "///";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"///\"");
}
}
if (r3 !== null) {
r6 = clone(pos);
if (/^[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[ \\r\\n]");
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
if (/^[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[ \\r\\n]");
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column) { return [new CS.String('').g().p(line, column, offset)]; })(r6.offset, r6.line, r6.column);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
if (/^[^\\\/#[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\/#[ \\r\\n]");
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
if (/^[^\\\/#[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\/#[ \\r\\n]");
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return [new CS.String(s.join('')).g().p(line, column, offset)]; })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r5 = parse_hereregexpData();
}
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
if (/^[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[ \\r\\n]");
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
if (/^[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[ \\r\\n]");
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column) { return [new CS.String('').g().p(line, column, offset)]; })(r6.offset, r6.line, r6.column);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
if (/^[^\\\/#[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\/#[ \\r\\n]");
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
if (/^[^\\\/#[ \r\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\/#[ \\r\\n]");
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return [new CS.String(s.join('')).g().p(line, column, offset)]; })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r5 = parse_hereregexpData();
}
}
}
} else {
r4 = null;
}
if (r4 !== null) {
if (input.substr(pos.offset, 3) === "///") {
r5 = "///";
advance(pos, 3);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"///\"");
}
}
if (r5 !== null) {
r6 = [];
if (/^[gimy]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[gimy]");
}
}
while (r7 !== null) {
r6.push(r7);
if (/^[gimy]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[gimy]");
}
}
}
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, es, flags) {
if(!isValidRegExpFlags(flags))
throw new SyntaxError(['regular expression flags'], 'regular expression flags', offset, line, column);
if(!flags) flags = [];
var interp = createInterpolation(foldl(function(memo, e){ return memo.concat(e); }, [], es));
if(interp instanceof CS.String) return new CS.RegExp(interp.data, flags).p(line, column, offset);
return new CS.HeregExp(interp, flags).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r6);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 47) {
r3 = "/";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"/\"");
}
}
if (r3 !== null) {
r4 = [];
r5 = parse_regexpData();
if (r5 === null) {
r6 = clone(pos);
if (/^[^\/\\[\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\/\\\\[\\n]");
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
if (/^[^\/\\[\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\/\\\\[\\n]");
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, d) { return d.join(''); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
while (r5 !== null) {
r4.push(r5);
r5 = parse_regexpData();
if (r5 === null) {
r6 = clone(pos);
if (/^[^\/\\[\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\/\\\\[\\n]");
}
}
if (r7 !== null) {
r5 = [];
while (r7 !== null) {
r5.push(r7);
if (/^[^\/\\[\n]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[^\\/\\\\[\\n]");
}
}
}
} else {
r5 = null;
}
if (r5 !== null) {
r5 = (function(offset, line, column, d) { return d.join(''); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 47) {
r5 = "/";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"/\"");
}
}
if (r5 !== null) {
r6 = [];
if (/^[gimy]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[gimy]");
}
}
while (r7 !== null) {
r6.push(r7);
if (/^[gimy]/.test(input.charAt(pos.offset))) {
r7 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("[gimy]");
}
}
}
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d, flags) {
if(!isValidRegExpFlags(flags))
throw new SyntaxError(['regular expression flags'], 'regular expression flags', offset, line, column);
return new CS.RegExp(d ? d.join('') : '', flags || []).p(line, column, offset);;
})(r1.offset, r1.line, r1.column, r4, r6);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_regexpData() {
var cacheKey = "regexpData@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = [];
if (/^[^\\\]\n]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\]\\n]");
}
}
if (r5 === null) {
r5 = parse_regexpData();
}
while (r5 !== null) {
r4.push(r5);
if (/^[^\\\]\n]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\]\\n]");
}
}
if (r5 === null) {
r5 = parse_regexpData();
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r5 = "]";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d) { return "[" + d.join('') + "]"; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 92) {
r3 = "\\";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
if (input.length > pos.offset) {
r4 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c) { return '\\' + c; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_hereregexpData() {
var cacheKey = "hereregexpData@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r5 = parse_hereregexpData();
if (r5 !== null) {
r5 = (function(offset, line, column, h) { return h[0]; })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
if (/^[^\\\/\]]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\/\\]]");
}
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return new CS.String(s).p(line, column, offset); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r5 = parse_hereregexpData();
if (r5 !== null) {
r5 = (function(offset, line, column, h) { return h[0]; })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
if (r5 === null) {
r6 = clone(pos);
if (/^[^\\\/\]]/.test(input.charAt(pos.offset))) {
r5 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[^\\\\\\/\\]]");
}
}
if (r5 !== null) {
r5 = (function(offset, line, column, s) { return new CS.String(s).p(line, column, offset); })(r6.offset, r6.line, r6.column, r5);
}
if (r5 === null) {
pos = clone(r6);
}
}
}
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r5 = "]";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, d) {
return [new CS.String("[").p(line, column, offset)].concat(d || []).concat([new CS.String("]").p(line, column, offset)]);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 92) {
r3 = "\\";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
if (input.length > pos.offset) {
r4 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c) { return [new CS.String('\\' + c).p(line, column, offset)]; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 47) {
r3 = "/";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"/\"");
}
}
if (r3 !== null) {
if (input.charCodeAt(pos.offset) === 47) {
r4 = "/";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"/\"");
}
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r6 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 47) {
r5 = "/";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"/\"");
}
}
reportFailures--;
if (r5 === null) {
r5 = "";
} else {
r5 = null;
pos = clone(r6);
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, s) { return [new CS.String(s.join('')).p(line, column, offset)]; })(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 35) {
r3 = "#";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 123) {
r4 = "{";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"{\"");
}
}
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c) { return [new CS.String(c).p(line, column, offset)]; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "#{") {
r3 = "#{";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"#{\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_expression();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r7 = "}";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e) { return [e]; })(r1.offset, r1.line, r1.column, r5);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_throw() {
var cacheKey = "throw@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_THROW();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_secondaryExpression();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, e) {
return new CS.Throw(e).r('throw' + ws + e.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_return() {
var cacheKey = "return@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_RETURN();
if (r3 !== null) {
r5 = clone(pos);
r6 = parse___();
if (r6 !== null) {
r7 = parse_secondaryExpression();
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, maybeExpression) {
var ws = maybeExpression ? maybeExpression[0] : '',
e = maybeExpression ? maybeExpression[1] : null;
return new CS.Return(e).r('return' + ws + (e ? e.raw : '')).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_continue() {
var cacheKey = "continue@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_CONTINUE();
if (r0 !== null) {
r0 = (function(offset, line, column) { return (new CS.Continue).r('continue').p(line, column, offset); })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_break() {
var cacheKey = "break@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_BREAK();
if (r0 !== null) {
r0 = (function(offset, line, column) { return (new CS.Break).r('break').p(line, column, offset); })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_undefined() {
var cacheKey = "undefined@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_UNDEFINED();
if (r0 !== null) {
r0 = (function(offset, line, column) { return (new CS.Undefined).r('undefined').p(line, column, offset); })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_null() {
var cacheKey = "null@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1;
r1 = clone(pos);
r0 = parse_NULL();
if (r0 !== null) {
r0 = (function(offset, line, column) { return (new CS.Null).r('null').p(line, column, offset); })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_unassignable() {
var cacheKey = "unassignable@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
if (input.substr(pos.offset, 9) === "arguments") {
r2 = "arguments";
advance(pos, 9);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"arguments\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "eval") {
r2 = "eval";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"eval\"");
}
}
}
if (r2 !== null) {
r4 = clone(pos);
reportFailures++;
r3 = parse_identifierPart();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_CompoundAssignable() {
var cacheKey = "CompoundAssignable@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r0 = parse_memberAccess();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
reportFailures++;
r3 = parse_unassignable();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r4 = parse_identifier();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, i) { return i; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r0 = parse_contextVar();
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_Assignable() {
var cacheKey = "Assignable@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r0 = parse_memberAccess();
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
reportFailures++;
r3 = parse_unassignable();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r4 = parse_identifier();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, i) { return i; })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r0 = parse_contextVar();
if (r0 === null) {
r0 = parse_positionalDestructuring();
if (r0 === null) {
r0 = parse_namedDestructuring();
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_positionalDestructuring() {
var cacheKey = "positionalDestructuring@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 91) {
r3 = "[";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"[\"");
}
}
if (r3 !== null) {
r4 = parse_positionalDestructuringBody();
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 93) {
r7 = "]";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"]\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, members, t, ws) {
var raw = '{' + members.raw + t + ws + '}'
return new CS.ArrayInitialiser(members.list).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_positionalDestructuringBody() {
var cacheKey = "positionalDestructuringBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_positionalDestructuringMemberList();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, members, d) { return {list: members.list, raw: t + members.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_positionalDestructuringMemberList();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, members) { return {list: members ? members.list : [], raw: ws + members ? members.raw : ''}; })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_positionalDestructuringMemberList() {
var cacheKey = "positionalDestructuringMemberList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_positionalDestructuringMember();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r8 = ",";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_positionalDestructuringMember();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r8 = ",";
advance(pos, 1);
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_positionalDestructuringMember();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, es) {
var raw = e.raw + es.map(function(e){ return e[0] + e[1] + e[2] + e[3].raw; }).join('');
return {list: [e].concat(es.map(function(e){ return e[3]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_positionalDestructuringMember() {
var cacheKey = "positionalDestructuringMember@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_rest();
if (r0 === null) {
r0 = parse_Assignable();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_namedDestructuring() {
var cacheKey = "namedDestructuring@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 123) {
r3 = "{";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"{\"");
}
}
if (r3 !== null) {
r4 = parse_namedDestructuringBody();
if (r4 !== null) {
r5 = parse_TERMINATOR();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos.offset) === 125) {
r7 = "}";
advance(pos, 1);
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, members, t, ws) {
var raw = '{' + members.raw + t + ws + '}'
return new CS.ObjectInitialiser(members.list).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4, r5, r6);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_namedDestructuringBody() {
var cacheKey = "namedDestructuringBody@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINDENT();
if (r3 !== null) {
r4 = parse_namedDestructuringMemberList();
if (r4 !== null) {
r5 = parse_DEDENT();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, members, d) { return {list: members.list, raw: t + members.raw + d}; })(r1.offset, r1.line, r1.column, r3, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r3 = parse__();
if (r3 !== null) {
r4 = parse_namedDestructuringMemberList();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, members) { return {list: members ? members.list : [], raw: ws + members ? members.raw : ''}; })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_namedDestructuringMemberList() {
var cacheKey = "namedDestructuringMemberList@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_namedDestructuringMember();
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = parse_TERMINATOR();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r9 = ",";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r9 === null) {
r9 = parse_TERMINATOR();
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_namedDestructuringMember();
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = parse_TERMINATOR();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
if (input.charCodeAt(pos.offset) === 44) {
r9 = ",";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\",\"");
}
}
if (r9 === null) {
r9 = parse_TERMINATOR();
}
if (r9 !== null) {
r10 = parse_TERMINATOR();
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
r12 = parse_namedDestructuringMember();
if (r12 !== null) {
r5 = [r7, r8, r9, r10, r11, r12];
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
} else {
r5 = null;
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, e, es) {
var raw = e.raw + es.map(function(e){ return e[0] + e[1] + e[2] + e[3] + e[4] + e[5].raw; }).join('');
return {list: [e].concat(es.map(function(e){ return e[5]; })), raw: raw};
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_namedDestructuringMember() {
var cacheKey = "namedDestructuringMember@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_ObjectInitialiserKeys();
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 58) {
r5 = ":";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\":\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_Assignable();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, key, ws0, ws1, val) {
var raw = key.raw + ws0 + ':' + ws1 + val.raw;
return new CS.ObjectInitialiserMember(key, val).r(raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r3, r4, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r0 = parse_contextVar();
if (r0 !== null) {
r0 = (function(offset, line, column, v) {
var key = new CS.String(v.memberName).r(v.memberName).p(line, column + 1)
return new CS.ObjectInitialiserMember(key, v).r(v.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
reportFailures++;
r3 = parse_unassignable();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r4 = parse_identifier();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, i) {
return new CS.ObjectInitialiserMember(i, i).r(i.raw).p(line, column, offset);
})(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_identifier() {
var cacheKey = "identifier@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r4 = clone(pos);
reportFailures++;
r3 = parse_reserved();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r4 = parse_identifierName();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, i) { return new CS.Identifier(i).r(i).p(line, column, offset); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_identifierName() {
var cacheKey = "identifierName@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_identifierStart();
if (r3 !== null) {
r4 = [];
r5 = parse_identifierPart();
while (r5 !== null) {
r4.push(r5);
r5 = parse_identifierPart();
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c, cs) { return c + cs.join(''); })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_identifierStart() {
var cacheKey = "identifierStart@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_UnicodeLetter();
if (r0 === null) {
if (/^[$_]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[$_]");
}
}
if (r0 === null) {
r0 = parse_UnicodeEscapeSequence();
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_identifierPart() {
var cacheKey = "identifierPart@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_identifierStart();
if (r0 === null) {
r0 = parse_UnicodeCombiningMark();
if (r0 === null) {
r0 = parse_UnicodeDigit();
if (r0 === null) {
r0 = parse_UnicodeConnectorPunctuation();
if (r0 === null) {
r0 = parse_ZWNJ();
if (r0 === null) {
r0 = parse_ZWJ();
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse___() {
var cacheKey = "__@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = clone(pos);
r2 = clone(pos);
r4 = parse_whitespace();
if (r4 !== null) {
r3 = [];
while (r4 !== null) {
r3.push(r4);
r4 = parse_whitespace();
}
} else {
r3 = null;
}
if (r3 !== null) {
r5 = clone(pos);
r6 = parse_blockComment();
if (r6 !== null) {
r8 = parse_whitespace();
if (r8 !== null) {
r7 = [];
while (r8 !== null) {
r7.push(r8);
r8 = parse_whitespace();
}
} else {
r7 = null;
}
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = clone(r5);
}
} else {
r4 = null;
pos = clone(r5);
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws, c) { return ws.join('') + (c && c[0] + c[1].join('')); })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse__() {
var cacheKey = "_@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse___();
r0 = r0 !== null ? r0 : "";
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_comment() {
var cacheKey = "comment@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_blockComment();
if (r0 === null) {
r0 = parse_singleLineComment();
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_singleLineComment() {
var cacheKey = "singleLineComment@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 35) {
r3 = "#";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r3 !== null) {
r4 = [];
r6 = clone(pos);
r7 = clone(pos);
r9 = clone(pos);
reportFailures++;
r8 = parse_TERM();
reportFailures--;
if (r8 === null) {
r8 = "";
} else {
r8 = null;
pos = clone(r9);
}
if (r8 !== null) {
if (input.length > pos.offset) {
r9 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r9 !== null) {
r5 = [r8, r9];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, c) { return c})(r6.offset, r6.line, r6.column, r9);
}
if (r5 === null) {
pos = clone(r6);
}
while (r5 !== null) {
r4.push(r5);
r6 = clone(pos);
r7 = clone(pos);
r9 = clone(pos);
reportFailures++;
r8 = parse_TERM();
reportFailures--;
if (r8 === null) {
r8 = "";
} else {
r8 = null;
pos = clone(r9);
}
if (r8 !== null) {
if (input.length > pos.offset) {
r9 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r9 !== null) {
r5 = [r8, r9];
} else {
r5 = null;
pos = clone(r7);
}
} else {
r5 = null;
pos = clone(r7);
}
if (r5 !== null) {
r5 = (function(offset, line, column, c) { return c})(r6.offset, r6.line, r6.column, r9);
}
if (r5 === null) {
pos = clone(r6);
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, cs) { return '#' + (cs && cs.join('')); })(r1.offset, r1.line, r1.column, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_blockComment() {
var cacheKey = "blockComment@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "###") {
r3 = "###";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"###\"");
}
}
if (r3 !== null) {
if (/^[^#]/.test(input.charAt(pos.offset))) {
r4 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("[^#]");
}
}
if (r4 !== null) {
r5 = [];
if (/^[^#]/.test(input.charAt(pos.offset))) {
r6 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("[^#]");
}
}
if (r6 === null) {
r7 = clone(pos);
r8 = clone(pos);
if (input.charCodeAt(pos.offset) === 35) {
r9 = "#";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r9 !== null) {
if (input.charCodeAt(pos.offset) === 35) {
r10 = "#";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r12 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 35) {
r11 = "#";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
reportFailures--;
if (r11 === null) {
r11 = "";
} else {
r11 = null;
pos = clone(r12);
}
if (r11 !== null) {
r6 = [r9, r10, r11];
} else {
r6 = null;
pos = clone(r8);
}
} else {
r6 = null;
pos = clone(r8);
}
} else {
r6 = null;
pos = clone(r8);
}
if (r6 !== null) {
r6 = (function(offset, line, column, a, b) {return a + b;})(r7.offset, r7.line, r7.column, r9, r10);
}
if (r6 === null) {
pos = clone(r7);
}
}
while (r6 !== null) {
r5.push(r6);
if (/^[^#]/.test(input.charAt(pos.offset))) {
r6 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("[^#]");
}
}
if (r6 === null) {
r7 = clone(pos);
r8 = clone(pos);
if (input.charCodeAt(pos.offset) === 35) {
r9 = "#";
advance(pos, 1);
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r9 !== null) {
if (input.charCodeAt(pos.offset) === 35) {
r10 = "#";
advance(pos, 1);
} else {
r10 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
r10 = r10 !== null ? r10 : "";
if (r10 !== null) {
r12 = clone(pos);
reportFailures++;
if (input.charCodeAt(pos.offset) === 35) {
r11 = "#";
advance(pos, 1);
} else {
r11 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
reportFailures--;
if (r11 === null) {
r11 = "";
} else {
r11 = null;
pos = clone(r12);
}
if (r11 !== null) {
r6 = [r9, r10, r11];
} else {
r6 = null;
pos = clone(r8);
}
} else {
r6 = null;
pos = clone(r8);
}
} else {
r6 = null;
pos = clone(r8);
}
if (r6 !== null) {
r6 = (function(offset, line, column, a, b) {return a + b;})(r7.offset, r7.line, r7.column, r9, r10);
}
if (r6 === null) {
pos = clone(r7);
}
}
}
if (r5 !== null) {
if (input.substr(pos.offset, 3) === "###") {
r6 = "###";
advance(pos, 3);
} else {
r6 = null;
if (reportFailures === 0) {
matchFailed("\"###\"");
}
}
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, c, cs) { return '###' + c + cs.join('') + '###'; })(r1.offset, r1.line, r1.column, r4, r5);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_whitespace() {
var cacheKey = "whitespace@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
if (/^[\t\x0B\f \xA0\uFEFF\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[\\t\\x0B\\f \\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]");
}
}
if (r0 === null) {
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 92) {
r3 = "\\";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
if (input.charCodeAt(pos.offset) === 13) {
r4 = "\r";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"\\r\"");
}
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 10) {
r5 = "\n";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\n\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return ''; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_INDENT() {
var cacheKey = "INDENT@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse___();
if (r3 !== null) {
if (input.charCodeAt(pos.offset) === 61423) {
r4 = "\uEFEF";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"\\uEFEF\"");
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws) { return ws; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_DEDENT() {
var cacheKey = "DEDENT@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
if (input.charCodeAt(pos.offset) === 61438) {
r5 = "\uEFFE";
advance(pos, 1);
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\uEFFE\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, ws) { return t + ws; })(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_TERM() {
var cacheKey = "TERM@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
if (input.charCodeAt(pos.offset) === 13) {
r3 = "\r";
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\r\"");
}
}
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
if (input.charCodeAt(pos.offset) === 10) {
r4 = "\n";
advance(pos, 1);
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"\\n\"");
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return '\n'; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 61439) {
r0 = "\uEFFF";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\uEFFF\"");
}
}
if (r0 !== null) {
r0 = (function(offset, line, column) { return ''; })(r1.offset, r1.line, r1.column);
}
if (r0 === null) {
pos = clone(r1);
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_TERMINATOR() {
var cacheKey = "TERMINATOR@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r3 = clone(pos);
r4 = parse__();
if (r4 !== null) {
r5 = parse_comment();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_TERM();
if (r6 !== null) {
r7 = parse_blockComment();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r2 = [r4, r5, r6, r7];
} else {
r2 = null;
pos = clone(r3);
}
} else {
r2 = null;
pos = clone(r3);
}
} else {
r2 = null;
pos = clone(r3);
}
} else {
r2 = null;
pos = clone(r3);
}
if (r2 !== null) {
r0 = [];
while (r2 !== null) {
r0.push(r2);
r3 = clone(pos);
r4 = parse__();
if (r4 !== null) {
r5 = parse_comment();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_TERM();
if (r6 !== null) {
r7 = parse_blockComment();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r2 = [r4, r5, r6, r7];
} else {
r2 = null;
pos = clone(r3);
}
} else {
r2 = null;
pos = clone(r3);
}
} else {
r2 = null;
pos = clone(r3);
}
} else {
r2 = null;
pos = clone(r3);
}
}
} else {
r0 = null;
}
if (r0 !== null) {
r0 = (function(offset, line, column, ws) {
return ws.map(function(s){ return s.join(''); }).join('');
})(r1.offset, r1.line, r1.column, r0);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_TERMINDENT() {
var cacheKey = "TERMINDENT@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
r2 = clone(pos);
r3 = parse_TERMINATOR();
if (r3 !== null) {
r4 = parse_INDENT();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, t, i) {
return t + i;
})(r1.offset, r1.line, r1.column, r3, r4);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_AND() {
var cacheKey = "AND@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "and") {
r3 = "and";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"and\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_BREAK() {
var cacheKey = "BREAK@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "break") {
r3 = "break";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"break\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_BY() {
var cacheKey = "BY@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "by") {
r3 = "by";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"by\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_CATCH() {
var cacheKey = "CATCH@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "catch") {
r3 = "catch";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"catch\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_CONTINUE() {
var cacheKey = "CONTINUE@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 8) === "continue") {
r3 = "continue";
advance(pos, 8);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"continue\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_CLASS() {
var cacheKey = "CLASS@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "class") {
r3 = "class";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"class\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_DELETE() {
var cacheKey = "DELETE@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 6) === "delete") {
r3 = "delete";
advance(pos, 6);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"delete\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_DO() {
var cacheKey = "DO@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "do") {
r3 = "do";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"do\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_ELSE() {
var cacheKey = "ELSE@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "else") {
r3 = "else";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"else\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_EXTENDS() {
var cacheKey = "EXTENDS@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 7) === "extends") {
r3 = "extends";
advance(pos, 7);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"extends\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_FALSE() {
var cacheKey = "FALSE@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "false") {
r3 = "false";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"false\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_FINALLY() {
var cacheKey = "FINALLY@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 7) === "finally") {
r3 = "finally";
advance(pos, 7);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"finally\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_FOR() {
var cacheKey = "FOR@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "for") {
r3 = "for";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"for\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_IF() {
var cacheKey = "IF@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "if") {
r3 = "if";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"if\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_IN() {
var cacheKey = "IN@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "in") {
r3 = "in";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"in\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_INSTANCEOF() {
var cacheKey = "INSTANCEOF@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 10) === "instanceof") {
r3 = "instanceof";
advance(pos, 10);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"instanceof\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_IS() {
var cacheKey = "IS@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "is") {
r3 = "is";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"is\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_ISNT() {
var cacheKey = "ISNT@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "isnt") {
r3 = "isnt";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"isnt\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_LOOP() {
var cacheKey = "LOOP@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "loop") {
r3 = "loop";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"loop\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_NEW() {
var cacheKey = "NEW@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "new") {
r3 = "new";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"new\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_NO() {
var cacheKey = "NO@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "no") {
r3 = "no";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"no\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_NOT() {
var cacheKey = "NOT@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "not") {
r3 = "not";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"not\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_NULL() {
var cacheKey = "NULL@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "null") {
r3 = "null";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"null\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_OF() {
var cacheKey = "OF@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "of") {
r3 = "of";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"of\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_OFF() {
var cacheKey = "OFF@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "off") {
r3 = "off";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"off\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_ON() {
var cacheKey = "ON@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "on") {
r3 = "on";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"on\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_OR() {
var cacheKey = "OR@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "or") {
r3 = "or";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"or\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_OWN() {
var cacheKey = "OWN@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "own") {
r3 = "own";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"own\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_RETURN() {
var cacheKey = "RETURN@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 6) === "return") {
r3 = "return";
advance(pos, 6);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"return\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_SWITCH() {
var cacheKey = "SWITCH@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 6) === "switch") {
r3 = "switch";
advance(pos, 6);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"switch\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_THEN() {
var cacheKey = "THEN@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "then") {
r3 = "then";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"then\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_THIS() {
var cacheKey = "THIS@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "this") {
r3 = "this";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"this\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_THROW() {
var cacheKey = "THROW@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "throw") {
r3 = "throw";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"throw\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_TRUE() {
var cacheKey = "TRUE@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "true") {
r3 = "true";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"true\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_TRY() {
var cacheKey = "TRY@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "try") {
r3 = "try";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"try\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_TYPEOF() {
var cacheKey = "TYPEOF@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 6) === "typeof") {
r3 = "typeof";
advance(pos, 6);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"typeof\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UNDEFINED() {
var cacheKey = "UNDEFINED@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 9) === "undefined") {
r3 = "undefined";
advance(pos, 9);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"undefined\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UNLESS() {
var cacheKey = "UNLESS@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 6) === "unless") {
r3 = "unless";
advance(pos, 6);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"unless\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UNTIL() {
var cacheKey = "UNTIL@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "until") {
r3 = "until";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"until\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_WHEN() {
var cacheKey = "WHEN@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 4) === "when") {
r3 = "when";
advance(pos, 4);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"when\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_WHILE() {
var cacheKey = "WHILE@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 5) === "while") {
r3 = "while";
advance(pos, 5);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"while\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_YES() {
var cacheKey = "YES@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 3) === "yes") {
r3 = "yes";
advance(pos, 3);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"yes\"");
}
}
if (r3 !== null) {
r5 = clone(pos);
reportFailures++;
r4 = parse_identifierPart();
reportFailures--;
if (r4 === null) {
r4 = "";
} else {
r4 = null;
pos = clone(r5);
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, w) { return w; })(r1.offset, r1.line, r1.column, r3);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_SharedKeywords() {
var cacheKey = "SharedKeywords@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
if (input.substr(pos.offset, 4) === "true") {
r2 = "true";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"true\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "false") {
r2 = "false";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"false\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "null") {
r2 = "null";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"null\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "this") {
r2 = "this";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"this\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "new") {
r2 = "new";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"new\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "delete") {
r2 = "delete";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"delete\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "typeof") {
r2 = "typeof";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"typeof\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 10) === "instanceof") {
r2 = "instanceof";
advance(pos, 10);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"instanceof\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "in") {
r2 = "in";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"in\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "return") {
r2 = "return";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"return\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "throw") {
r2 = "throw";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"throw\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "break") {
r2 = "break";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"break\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 8) === "continue") {
r2 = "continue";
advance(pos, 8);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"continue\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 8) === "debugger") {
r2 = "debugger";
advance(pos, 8);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"debugger\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "if") {
r2 = "if";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"if\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "else") {
r2 = "else";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"else\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "switch") {
r2 = "switch";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"switch\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "for") {
r2 = "for";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"for\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "while") {
r2 = "while";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"while\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "do") {
r2 = "do";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"do\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "try") {
r2 = "try";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"try\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "catch") {
r2 = "catch";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"catch\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 7) === "finally") {
r2 = "finally";
advance(pos, 7);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"finally\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "class") {
r2 = "class";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"class\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 7) === "extends") {
r2 = "extends";
advance(pos, 7);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"extends\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "super") {
r2 = "super";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"super\"");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
if (r2 !== null) {
r4 = clone(pos);
reportFailures++;
r3 = parse_identifierPart();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_JSKeywords() {
var cacheKey = "JSKeywords@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
if (input.substr(pos.offset, 4) === "case") {
r2 = "case";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"case\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 7) === "default") {
r2 = "default";
advance(pos, 7);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"default\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 8) === "function") {
r2 = "function";
advance(pos, 8);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"function\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "var") {
r2 = "var";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"var\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "void") {
r2 = "void";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"void\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "with") {
r2 = "with";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"with\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "const") {
r2 = "const";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"const\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "let") {
r2 = "let";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"let\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "enum") {
r2 = "enum";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"enum\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "export") {
r2 = "export";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"export\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "import") {
r2 = "import";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"import\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "native") {
r2 = "native";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"native\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 10) === "implements") {
r2 = "implements";
advance(pos, 10);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"implements\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 9) === "interface") {
r2 = "interface";
advance(pos, 9);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"interface\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 7) === "package") {
r2 = "package";
advance(pos, 7);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"package\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 7) === "private") {
r2 = "private";
advance(pos, 7);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"private\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 9) === "protected") {
r2 = "protected";
advance(pos, 9);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"protected\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "public") {
r2 = "public";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"public\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "static") {
r2 = "static";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"static\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "yield") {
r2 = "yield";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"yield\"");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
if (r2 !== null) {
r4 = clone(pos);
reportFailures++;
r3 = parse_identifierPart();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_CSKeywords() {
var cacheKey = "CSKeywords@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4;
r1 = clone(pos);
if (input.substr(pos.offset, 9) === "undefined") {
r2 = "undefined";
advance(pos, 9);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"undefined\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "then") {
r2 = "then";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"then\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 6) === "unless") {
r2 = "unless";
advance(pos, 6);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"unless\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 5) === "until") {
r2 = "until";
advance(pos, 5);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"until\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "loop") {
r2 = "loop";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"loop\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "off") {
r2 = "off";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"off\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "by") {
r2 = "by";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"by\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "when") {
r2 = "when";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"when\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "and") {
r2 = "and";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"and\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "or") {
r2 = "or";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"or\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 4) === "isnt") {
r2 = "isnt";
advance(pos, 4);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"isnt\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "is") {
r2 = "is";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"is\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "not") {
r2 = "not";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"not\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 3) === "yes") {
r2 = "yes";
advance(pos, 3);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"yes\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "no") {
r2 = "no";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"no\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "on") {
r2 = "on";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"on\"");
}
}
if (r2 === null) {
if (input.substr(pos.offset, 2) === "of") {
r2 = "of";
advance(pos, 2);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"of\"");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
if (r2 !== null) {
r4 = clone(pos);
reportFailures++;
r3 = parse_identifierPart();
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = clone(r4);
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_reserved() {
var cacheKey = "reserved@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
r0 = parse_SharedKeywords();
if (r0 === null) {
r0 = parse_CSKeywords();
if (r0 === null) {
r0 = parse_JSKeywords();
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UnicodeEscapeSequence() {
var cacheKey = "UnicodeEscapeSequence@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = clone(pos);
r2 = clone(pos);
if (input.substr(pos.offset, 2) === "\\u") {
r3 = "\\u";
advance(pos, 2);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\u\"");
}
}
if (r3 !== null) {
r4 = parse_hexDigit();
if (r4 !== null) {
r5 = parse_hexDigit();
if (r5 !== null) {
r6 = parse_hexDigit();
if (r6 !== null) {
r7 = parse_hexDigit();
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
} else {
r0 = null;
pos = clone(r2);
}
if (r0 !== null) {
r0 = (function(offset, line, column, h0, h1, h2, h3) { return String.fromCharCode(parseInt(h0 + h1 + h2 + h3, 16)); })(r1.offset, r1.line, r1.column, r4, r5, r6, r7);
}
if (r0 === null) {
pos = clone(r1);
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UnicodeLetter() {
var cacheKey = "UnicodeLetter@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3;
if (/^[A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0531-\u0556\u10A0-\u10C5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uFF21-\uFF3Aa-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0561-\u0587\u1D00-\u1D2B\u1D62-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7C\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2D00-\u2D25\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7FA\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D61\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA717-\uA71F\uA770\uA788\uA9CF\uAA70\uAADD\uFF70\uFF9E\uFF9F\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC\u0EDD\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BC0-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u2135-\u2138\u2D30-\u2D65\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400\u4DB5\u4E00\u9FCB\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA2D\uFA30-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0531-\\u0556\\u10A0-\\u10C5\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uFF21-\\uFF3Aa-z\\xAA\\xB5\\xBA\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0561-\\u0587\\u1D00-\\u1D2B\\u1D62-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7C\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2D00-\\u2D25\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7FA\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5\\u06E6\\u07F4\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D61\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA717-\\uA71F\\uA770\\uA788\\uA9CF\\uAA70\\uAADD\\uFF70\\uFF9E\\uFF9F\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10D0-\\u10FA\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BC0-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u2135-\\u2138\\u2D30-\\u2D65\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FCB\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB\\uAADC\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA2D\\uFA30-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF]");
}
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55340) {
r2 = "\uD82C";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD82C\"");
}
}
if (r2 !== null) {
if (/^[\uDC00\uDC01]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00\\uDC01]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55304) {
r2 = "\uD808";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD808\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDF6E]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDF6E]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55401) {
r2 = "\uD869";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD869\"");
}
}
if (r2 !== null) {
if (/^[\uDED6\uDF00]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDED6\\uDF00]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55305) {
r2 = "\uD809";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD809\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC62]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC62]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55349) {
r2 = "\uD835";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD835\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55300) {
r2 = "\uD804";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD804\"");
}
}
if (r2 !== null) {
if (/^[\uDC03-\uDC37\uDC83-\uDCAF]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC03-\\uDC37\\uDC83-\\uDCAF]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55296) {
r2 = "\uD800";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD800\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1E\uDF30-\uDF40\uDF42-\uDF49\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1E\\uDF30-\\uDF40\\uDF42-\\uDF49\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDD40-\\uDD74\\uDF41\\uDF4A\\uDFD1-\\uDFD5]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55308) {
r2 = "\uD80C";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD80C\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDFFF]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDFFF]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55297) {
r2 = "\uD801";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD801\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC9D]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC9D]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55406) {
r2 = "\uD86E";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD86E\"");
}
}
if (r2 !== null) {
if (/^[\uDC1D]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC1D]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55299) {
r2 = "\uD803";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD803\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC48]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC48]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55360) {
r2 = "\uD840";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD840\"");
}
}
if (r2 !== null) {
if (/^[\uDC00]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55422) {
r2 = "\uD87E";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD87E\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDE1D]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDE1D]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55405) {
r2 = "\uD86D";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD86D\"");
}
}
if (r2 !== null) {
if (/^[\uDF34\uDF40]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDF34\\uDF40]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55322) {
r2 = "\uD81A";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD81A\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDE38]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDE38]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55298) {
r2 = "\uD802";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD802\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDD00-\uDD15\uDD20-\uDD39\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55309) {
r2 = "\uD80D";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD80D\"");
}
}
if (r2 !== null) {
if (/^[\uDC00-\uDC2E]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC00-\\uDC2E]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UnicodeCombiningMark() {
var cacheKey = "UnicodeCombiningMark@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3;
if (/^[\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0900-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1DC0-\u1DE6\u1DFC-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F\uA67C\uA67D\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE26\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u19B0-\u19C0\u19C8\u19C9\u1A19-\u1A1B\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF2\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0900-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFC-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u094F\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2\\u1BF3\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]");
}
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 56128) {
r2 = "\uDB40";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uDB40\"");
}
}
if (r2 !== null) {
if (/^[\uDD00-\uDDEF]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDD00-\\uDDEF]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55348) {
r2 = "\uD834";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD834\"");
}
}
if (r2 !== null) {
if (/^[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44\uDD65\uDD66\uDD6D-\uDD72]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44\\uDD65\\uDD66\\uDD6D-\\uDD72]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55300) {
r2 = "\uD804";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD804\"");
}
}
if (r2 !== null) {
if (/^[\uDC01\uDC38-\uDC46\uDC80\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC01\\uDC38-\\uDC46\\uDC80\\uDC81\\uDCB3-\\uDCB6\\uDCB9\\uDCBA\\uDC00\\uDC02\\uDC82\\uDCB0-\\uDCB2\\uDCB7\\uDCB8]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55296) {
r2 = "\uD800";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD800\"");
}
}
if (r2 !== null) {
if (/^[\uDDFD]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDDFD]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55298) {
r2 = "\uD802";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD802\"");
}
}
if (r2 !== null) {
if (/^[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
}
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UnicodeDigit() {
var cacheKey = "UnicodeDigit@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0, r1, r2, r3;
if (/^[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]");
}
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55349) {
r2 = "\uD835";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD835\"");
}
}
if (r2 !== null) {
if (/^[\uDFCE-\uDFFF]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDFCE-\\uDFFF]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55300) {
r2 = "\uD804";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD804\"");
}
}
if (r2 !== null) {
if (/^[\uDC66-\uDC6F]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDC66-\\uDC6F]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
if (r0 === null) {
r1 = clone(pos);
if (input.charCodeAt(pos.offset) === 55297) {
r2 = "\uD801";
advance(pos, 1);
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"\\uD801\"");
}
}
if (r2 !== null) {
if (/^[\uDCA0-\uDCA9]/.test(input.charAt(pos.offset))) {
r3 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[\\uDCA0-\\uDCA9]");
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = clone(r1);
}
} else {
r0 = null;
pos = clone(r1);
}
}
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_UnicodeConnectorPunctuation() {
var cacheKey = "UnicodeConnectorPunctuation@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (/^[_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F]/.test(input.charAt(pos.offset))) {
r0 = input.charAt(pos.offset);
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[_\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_ZWNJ() {
var cacheKey = "ZWNJ@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (input.charCodeAt(pos.offset) === 8204) {
r0 = "\u200C";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\u200C\"");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function parse_ZWJ() {
var cacheKey = "ZWJ@" + pos.offset;
var cachedResult = cache[cacheKey];
if (cachedResult) {
pos = clone(cachedResult.nextPos);
return cachedResult.result;
}
var r0;
if (input.charCodeAt(pos.offset) === 8205) {
r0 = "\u200D";
advance(pos, 1);
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\u200D\"");
}
}
cache[cacheKey] = {
nextPos: clone(pos),
result: r0
};
return r0;
}
function cleanupExpected(expected) {
expected.sort();
var lastExpected = null;
var cleanExpected = [];
for (var i = 0; i < expected.length; i++) {
if (expected[i] !== lastExpected) {
cleanExpected.push(expected[i]);
lastExpected = expected[i];
}
}
return cleanExpected;
}
var CS = require("./nodes"),
inspect = function(o){ console.log(require('util').inspect(o, false, 9e9, true)); },
constructorLookup =
{ ';': CS.SeqOp
, '=': CS.AssignOp
, '&&': CS.LogicalAndOp
, and: CS.LogicalAndOp
, '||': CS.LogicalOrOp
, or: CS.LogicalOrOp
, '|': CS.BitOrOp
, '^': CS.BitXorOp
, '&': CS.BitAndOp
, '?': CS.ExistsOp
, '==': CS.EQOp
, is: CS.EQOp
, '!=': CS.NEQOp
, isnt: CS.NEQOp
, '<=': CS.LTEOp
, '>=': CS.GTEOp
, '<': CS.LTOp
, '>': CS.GTOp
, extends: CS.ExtendsOp
, instanceof: CS.InstanceofOp
, in: CS.InOp
, of: CS.OfOp
, '<<': CS.LeftShiftOp
, '>>': CS.SignedRightShiftOp
, '>>>': CS.UnsignedRightShiftOp
, '+': CS.PlusOp
, '-': CS.SubtractOp
, '*': CS.MultiplyOp
, '/': CS.DivideOp
, '%': CS.RemOp
, '**': CS.ExpOp
},
foldl = function(fn, memo, list){
for(var i = 0, l = list.length; i < l; ++i)
memo = fn(memo, list[i]);
return memo;
},
foldr = function(fn, memo, list){
for(var i = list.length; i--;)
memo = fn(memo, list[i]);
return memo;
},
createInterpolation = function(es){
var init = new CS.String('').g();
return foldl(function(memo, s){
if(s instanceof CS.String) {
var left = memo;
while(left)
if(left instanceof CS.String) {
if(left === init) delete left.p(s.line, s.column, s.offset).generated;
left.data = left.data + s.data;
return memo;
} else if(left instanceof CS.ConcatOp) {
left = left.right
} else {
break;
}
}
return new CS.ConcatOp(memo, s);
}, init, es);
},
createMemberExpression = function(e, accesses){
return foldl(function(left, access){
var F = function(){};
F.prototype = access.op.prototype;
var o = new F;
// rather safely assumes access.op is returning non-Object
access.op.apply(o, [left].concat(access.operands));
return o.r(left.raw + access.raw).p(access.line, access.column, access.offset);
}, e, accesses);
},
isValidRegExpFlags = function(flags) {
if(!flags) return true;
if(flags.length > 4) return false;
flags.sort();
var flag = null;
for(var i = 0, l = flags.length; i < l; ++i)
if(flag == flags[i]) return false;
else flag = flags[i];
return true;
},
stripLeadingWhitespace = function(str){
str = str.replace(/\s+$/, '');
var attempt, match, matchStr = str, indent = null;
while(match = /\n+([^\n\S]*)/.exec(matchStr)) {
attempt = match[1];
matchStr = matchStr.slice(match.index + match[0].length);
if (indent == null || 0 < attempt.length && attempt.length < indent.length)
indent = attempt;
}
if(indent) str = str.replace(new RegExp('\\n' + indent, 'g'), '\n');
str = str.replace(/^\n/, '');
return str;
};
var result = parseFunctions[startRule]();
/*
* The parser is now in one of the following three states:
*
* 1. The parser successfully parsed the whole input.
*
* - |result !== null|
* - |pos.offset === input.length|
* - |rightmostFailuresExpected| may or may not contain something
*
* 2. The parser successfully parsed only a part of the input.
*
* - |result !== null|
* - |pos.offset < input.length|
* - |rightmostFailuresExpected| may or may not contain something
*
* 3. The parser did not successfully parse any part of the input.
*
* - |result === null|
* - |pos.offset === 0|
* - |rightmostFailuresExpected| contains at least one failure
*
* All code following this comment (including called functions) must
* handle these states.
*/
if (result === null || pos.offset !== input.length) {
var offset = Math.max(pos.offset, rightmostFailuresPos.offset);
var found = offset < input.length ? input.charAt(offset) : null;
var errorPosition = pos.offset > rightmostFailuresPos.offset ? pos : rightmostFailuresPos;
throw new this.SyntaxError(
cleanupExpected(rightmostFailuresExpected),
found,
offset,
errorPosition.line,
errorPosition.column
);
}
return result;
},
/* Returns the parser source code. */
toSource: function() { return this._source; }
};
/* Thrown when a parser encounters a syntax error. */
result.SyntaxError = function(expected, found, offset, line, column) {
function buildMessage(expected, found) {
var expectedHumanized, foundHumanized;
switch (expected.length) {
case 0:
expectedHumanized = "end of input";
break;
case 1:
expectedHumanized = expected[0];
break;
default:
expectedHumanized = expected.slice(0, expected.length - 1).join(", ")
+ " or "
+ expected[expected.length - 1];
}
foundHumanized = found ? quote(found) : "end of input";
return "Expected " + expectedHumanized + " but " + foundHumanized + " found.";
}
this.expected = expected;
this.found = found;
this.message = buildMessage(expected, found);
this.offset = offset;
this.line = line;
this.column = column;
};
result.SyntaxError.prototype = (function(){
var SyntaxError = result.SyntaxError;
var F = function(){
this.constructor = SyntaxError;
this.name = "SyntaxError";
};
F.prototype = Error.prototype;
return new F;
})();
return result;
})();
});
require.define("/lib/coffee-script/optimiser.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var all, any, beingDeclared, concat, concatMap, CS, declarationsFor, difference, envEnrichments, exports, foldl, foldl1, isFalsey, isTruthy, makeDispatcher, mayHaveSideEffects, union, usedAsExpression;
cache$ = require('./functional-helpers');
all = cache$.all;
any = cache$.any;
concat = cache$.concat;
concatMap = cache$.concatMap;
difference = cache$.difference;
foldl = cache$.foldl;
foldl1 = cache$.foldl1;
union = cache$.union;
cache$1 = require('./helpers');
beingDeclared = cache$1.beingDeclared;
declarationsFor = cache$1.declarationsFor;
usedAsExpression = cache$1.usedAsExpression;
envEnrichments = cache$1.envEnrichments;
CS = require('./nodes');
exports = null != ('undefined' !== typeof module && null != module ? module.exports : void 0) ? 'undefined' !== typeof module && null != module ? module.exports : void 0 : this;
makeDispatcher = function (defaultValue, handlers, defaultHandler) {
var cache$2, ctor, ctors, handler, handlers_, size$;
if (null == defaultHandler)
defaultHandler = function () {
};
handlers_ = {};
for (var i$ = 0, length$ = handlers.length; i$ < length$; ++i$) {
{
cache$2 = handlers[i$];
size$ = cache$2.length;
ctors = size$ > 1 ? [].slice.call(cache$2, 0, size$ - 1) : [];
handler = cache$2[size$ - 1];
}
for (var i$1 = 0, length$1 = ctors.length; i$1 < length$1; ++i$1) {
ctor = ctors[i$1];
handlers_[ctor.prototype.className] = handler;
}
}
return function (node, args) {
args = 2 <= arguments.length ? [].slice.call(arguments, 1) : [];
if (!(null != node))
return defaultValue;
handler = Object.prototype.hasOwnProperty.call(handlers_, node.className) ? handlers_[node.className] : defaultHandler;
return handler.apply(node, args);
};
};
isTruthy = makeDispatcher(false, [
[
CS.ArrayInitialiser,
CS.Class,
CS.DeleteOp,
CS.ForIn,
CS.ForOf,
CS.Function,
CS.BoundFunction,
CS.HeregExp,
CS.ObjectInitialiser,
CS.Range,
CS.RegExp,
CS.Slice,
CS.TypeofOp,
CS.While,
function () {
return true;
}
],
[
CS.AssignOp,
function () {
return isTruthy(this.expression);
}
],
[
CS.Block,
function () {
if (this.statements.length === 0) {
return false;
} else {
return isTruthy(this.statements[this.statements.length - 1]);
}
}
],
[
CS.Bool,
CS.Float,
CS.Int,
CS.String,
function () {
return !!this.data;
}
],
[
CS.Conditional,
function () {
return isTruthy(this.condition) && isTruthy(this.consequent) || isFalsey(this.condition) && isTruthy(this.alternate);
}
],
[
CS.LogicalAndOp,
function () {
return isTruthy(this.left) && isTruthy(this.right);
}
],
[
CS.LogicalNotOp,
function () {
return isFalsey(this.expression);
}
],
[
CS.LogicalOrOp,
function () {
return isTruthy(this.left) || isTruthy(this.right);
}
],
[
CS.Program,
function () {
return isTruthy(this.body);
}
],
[
CS.SeqOp,
function () {
return isTruthy(this.right);
}
],
[
CS.Switch,
function () {
return all(this.cases, isTruthy) && (null != this.alternate ? isTruthy(this.alternate) : true);
}
],
[
CS.SwitchCase,
function () {
return isTruthy(this.consequent);
}
],
[
CS.UnaryExistsOp,
function () {
return isTruthy(this.expression) || this.expression['instanceof'](CS.Int, CS.Float, CS.String, CS.UnaryPlusOp, CS.UnaryNegateOp, CS.LogicalNotOp);
}
]
], function () {
return false;
});
isFalsey = makeDispatcher(false, [
[
CS.Null,
CS.Undefined,
function () {
return true;
}
],
[
CS.AssignOp,
function () {
return isFalsey(this.expression);
}
],
[
CS.Block,
function () {
if (this.statements.length === 0) {
return true;
} else {
return isFalsey(this.statements[this.statements.length - 1]);
}
}
],
[
CS.Bool,
CS.Float,
CS.Int,
CS.String,
function () {
return !this.data;
}
],
[
CS.Conditional,
function () {
return isTruthy(this.condition) && isFalsey(this.consequent) || isFalsey(this.condition) && isFalsey(this.alternate);
}
],
[
CS.LogicalAndOp,
function () {
return isFalsey(this.left) || isFalsey(this.right);
}
],
[
CS.LogicalNotOp,
function () {
return isTruthy(this.expression);
}
],
[
CS.LogicalOrOp,
function () {
return isFalsey(this.left) && isFalsey(this.right);
}
],
[
CS.Program,
function () {
return isFalsey(this.body);
}
],
[
CS.SeqOp,
function () {
return isFalsey(this.right);
}
],
[
CS.Switch,
function () {
return all(this.cases, isFalsey) && (null != this.alternate ? isFalsey(this.alternate) : true);
}
],
[
CS.SwitchCase,
function () {
return isFalsey(this.block);
}
],
[
CS.UnaryExistsOp,
function () {
return this.expression['instanceof'](CS.Null, CS.Undefined);
}
]
], function () {
return false;
});
mayHaveSideEffects = makeDispatcher(false, [
[
CS.Function,
CS.BoundFunction,
CS.Null,
CS.RegExp,
CS.This,
CS.Undefined,
function () {
return false;
}
],
[
CS.Break,
CS.Continue,
CS.DeleteOp,
CS.NewOp,
CS.Return,
CS.Super,
CS.PreDecrementOp,
CS.PreIncrementOp,
CS.PostDecrementOp,
CS.PostIncrementOp,
CS.ClassProtoAssignOp,
CS.Constructor,
CS.Throw,
CS.JavaScript,
CS.ExtendsOp,
function () {
return true;
}
],
[
CS.Class,
function (inScope) {
return mayHaveSideEffects(this.parent, inScope) || null != this.nameAssignee && (this.name || beingDeclared(this.nameAssignee).length > 0);
}
],
[
CS.Conditional,
function (inScope) {
return mayHaveSideEffects(this.condition, inScope) || !isFalsey(this.condition) && mayHaveSideEffects(this.consequent, inScope) || !isTruthy(this.condition) && mayHaveSideEffects(this.alternate, inScope);
}
],
[
CS.DoOp,
function (inScope) {
var args, newScope;
if (!this.expression['instanceof'](CS.Functions))
return true;
newScope = difference(inScope, concatMap(this.expression.parameters, beingDeclared));
args = function (accum$) {
var p;
for (var i$ = 0, length$ = this.expression.parameters.length; i$ < length$; ++i$) {
p = this.expression.parameters[i$];
accum$.push(p['instanceof'](CS.AssignOp) ? p.expression : p);
}
return accum$;
}.call(this, []);
if (any(args, function (a) {
return mayHaveSideEffects(a, newScope);
}))
return true;
return mayHaveSideEffects(this.expression.body, newScope);
}
],
[
CS.ExistsOp,
function (inScope) {
if (mayHaveSideEffects(this.left, inScope))
return true;
if (this.left['instanceof'](CS.Undefined, CS.Null))
return false;
return mayHaveSideEffects(this.right, inScope);
}
],
[
CS.FunctionApplication,
CS.SoakedFunctionApplication,
function (inScope) {
var newScope;
if (!this['function']['instanceof'](CS.Function, CS.BoundFunction))
return true;
newScope = difference(inScope, concatMap(this['function'].parameters, beingDeclared));
if (any(this['arguments'], function (a) {
return mayHaveSideEffects(a, newScope);
}))
return true;
return mayHaveSideEffects(this['function'].body, newScope);
}
],
[
CS.LogicalAndOp,
function (inScope) {
if (mayHaveSideEffects(this.left, inScope))
return true;
if (isFalsey(this.left))
return false;
return mayHaveSideEffects(this.right, inScope);
}
],
[
CS.LogicalOrOp,
function (inScope) {
if (mayHaveSideEffects(this.left, inScope))
return true;
if (isTruthy(this.left))
return false;
return mayHaveSideEffects(this.right, inScope);
}
],
[
CS.While,
function (inScope) {
return mayHaveSideEffects(this.condition, inScope) || !isFalsey(this.condition) && mayHaveSideEffects(this.body, inScope);
}
],
[
CS.AssignOp,
CS.ClassProtoAssignOp,
CS.CompoundAssignOp,
CS.ExistsAssignOp,
function (inScope) {
return true;
}
],
[
CS.Bool,
CS.Float,
CS.Identifier,
CS.Int,
CS.String,
function () {
return false;
}
]
], function (inScope) {
var this$;
return any(this.childNodes, (this$ = this, function (child) {
if (in$(child, this$.listMembers)) {
return any(this$[child], function (m) {
return mayHaveSideEffects(m, inScope);
});
} else {
return mayHaveSideEffects(this$[child], inScope);
}
}));
});
exports.Optimiser = function () {
var defaultRules, this$;
Optimiser.optimise = (this$ = Optimiser, function () {
var cache$2;
return (cache$2 = new this$).optimise.apply(cache$2, [].slice.call(arguments).concat());
});
Optimiser.isTruthy = isTruthy;
Optimiser.isFalsey = isFalsey;
Optimiser.mayHaveSideEffects = mayHaveSideEffects;
defaultRules = [
[
CS.Program,
function () {
if (null != this.body && mayHaveSideEffects(this.body, [])) {
return this;
} else {
return new CS.Program(null);
}
}
],
[
CS.Block,
function (param$) {
var inScope;
inScope = param$.inScope;
switch (this.statements.length) {
case 0:
return new CS.Undefined().g();
case 1:
return this.statements[0];
default:
return foldl(this.statements[0], this.statements.slice(1), function (expr, s) {
return new CS.SeqOp(expr, s);
});
}
}
],
[
CS.SeqOp,
function (param$) {
var ancestry, cache$2, canDropLast, decls, inScope;
{
cache$2 = param$;
inScope = cache$2.inScope;
ancestry = cache$2.ancestry;
}
canDropLast = !usedAsExpression(this, ancestry);
if (mayHaveSideEffects(this.left, inScope)) {
if (mayHaveSideEffects(this.right, inScope)) {
return this;
} else if (!canDropLast) {
return this;
} else if (this.right['instanceof'](CS.Undefined)) {
return this.left;
} else {
return new CS.SeqOp(this.left, declarationsFor(this.right, union(inScope, envEnrichments(this.left, inScope))));
}
} else if (this.right['instanceof'](CS.Identifier) && this.right.data === 'eval' && ((null != ancestry[0] ? ancestry[0]['instanceof'](CS.FunctionApplication) : void 0) && ancestry[0]['function'] === this || (null != ancestry[0] ? ancestry[0]['instanceof'](CS.DoOp) : void 0) && ancestry[0].expression === this)) {
if (this.left['instanceof'](CS.Int) && (0 <= this.left.data && this.left.data <= 9)) {
return this;
} else if (mayHaveSideEffects(this.left, inScope)) {
return this;
} else {
return new CS.SeqOp(new CS.Int(0).g(), this.right);
}
} else if (mayHaveSideEffects(this.right, inScope)) {
decls = declarationsFor(this.left, inScope);
if (decls['instanceof'](CS.Undefined)) {
return this.right;
} else {
return this;
}
} else if (canDropLast) {
return declarationsFor(this, inScope);
} else {
return this.right;
}
}
],
[
CS.AssignOp,
function () {
if (!this.expression['instanceof'](CS.SeqOp))
return this;
return new CS.SeqOp(this.expression.left, new CS.AssignOp(this.assignee, this.expression.right));
}
],
[
CS.While,
function (param$) {
var inScope;
inScope = param$.inScope;
if (isFalsey(this.condition)) {
return new CS.Block([
mayHaveSideEffects(this.condition, inScope) ? new CS.SeqOp(this.condition, declarationsFor(this.body)) : null != this.body ? declarationsFor(this.body, inScope) : new CS.Undefined,
new CS.ArrayInitialiser([])
]);
} else if (isTruthy(this.condition)) {
if (mayHaveSideEffects(this.condition, inScope)) {
return this;
} else if (null != this.body) {
if (this instanceof CS.Loop) {
return this;
} else {
return new CS.Loop(this.body).g();
}
} else {
return new CS.ArrayInitialiser([]);
}
} else {
return this;
}
}
],
[
CS.Conditional,
function (param$) {
var block, cache$2, cache$3, decls, inScope, removedBlock;
inScope = param$.inScope;
if (isFalsey(this.condition)) {
cache$2 = [
this.consequent,
this.alternate
];
removedBlock = cache$2[0];
block = cache$2[1];
cache$2;
} else if (isTruthy(this.condition)) {
cache$3 = [
this.consequent,
this.alternate
];
block = cache$3[0];
removedBlock = cache$3[1];
cache$3;
} else {
return this;
}
decls = declarationsFor(removedBlock, inScope);
block = null != block ? new CS.SeqOp(decls, block) : decls;
if (mayHaveSideEffects(this.condition, inScope))
block = new CS.SeqOp(this.condition, block);
return block;
}
],
[
CS.ForIn,
function (param$) {
var inScope;
inScope = param$.inScope;
if (!(this.target['instanceof'](CS.ArrayInitialiser) && this.target.members.length === 0))
return this;
return new CS.SeqOp(declarationsFor(this, inScope), new CS.ArrayInitialiser([]).g());
}
],
[
CS.ForOf,
function (param$) {
var inScope;
inScope = param$.inScope;
if (!(this.isOwn && this.target['instanceof'](CS.ObjectInitialiser) && this.target.members.length === 0))
return this;
return new CS.SeqOp(declarationsFor(this, inScope), new CS.ArrayInitialiser([]).g());
}
],
[
CS.ForIn,
CS.ForOf,
function (param$) {
var inScope;
inScope = param$.inScope;
if (!isFalsey(this.filter))
return this;
return new CS.SeqOp(declarationsFor(this, inScope), new CS.ArrayInitialiser([]).g());
}
],
[
CS.ForIn,
function () {
if (!isTruthy(this.filter))
return this;
return new CS.ForIn(this.valAssignee, this.keyAssignee, this.target, this.step, null, this.body);
}
],
[
CS.ForOf,
function () {
if (!isTruthy(this.filter))
return this;
return new CS.ForOf(this.isOwn, this.keyAssignee, this.valAssignee, this.target, null, this.body);
}
],
[
CS.ArrayInitialiser,
function (param$) {
var ancestry, cache$2, inScope;
{
cache$2 = param$;
inScope = cache$2.inScope;
ancestry = cache$2.ancestry;
}
if (usedAsExpression(this, ancestry)) {
return this;
} else {
return foldl(new CS.Undefined().g(), this.members, function (expr, m) {
return new CS.SeqOp(expr, m);
});
}
}
],
[
CS.ExistsOp,
function () {
if (this.left['instanceof'](CS.Null, CS.Undefined)) {
return this.right;
} else {
return this;
}
}
],
[
CS.UnaryExistsOp,
function () {
if (this.expression['instanceof'](CS.Null, CS.Undefined)) {
return new CS.Bool(false).g();
} else {
return this;
}
}
],
[
CS.LogicalNotOp,
function (param$) {
var inScope;
inScope = param$.inScope;
switch (false) {
case !this.expression['instanceof'](CS.Int, CS.Float, CS.String, CS.Bool):
return new CS.Bool(!this.expression.data).g();
case !this.expression['instanceof'](CS.Functions):
return new CS.Bool(false).g();
case !this.expression['instanceof'](CS.Null, CS.Undefined):
return new CS.Bool(true).g();
case !this.expression['instanceof'](CS.ArrayInitialiser, CS.ObjectInitialiser):
if (mayHaveSideEffects(this.expression, inScope)) {
return this;
} else {
return new CS.SeqOp(declarationsFor(this.expression, inScope), new CS.Bool(false).g());
}
case !this.expression['instanceof'](CS.LogicalNotOp):
if (this.expression.expression['instanceof'](CS.LogicalNotOp)) {
return this.expression.expression;
} else {
return this;
}
default:
return this;
}
}
],
[
CS.TypeofOp,
function () {
switch (false) {
case !this.expression['instanceof'](CS.Int, CS.Float, CS.UnaryNegateOp, CS.UnaryPlusOp):
return new CS.String('number').g();
case !this.expression['instanceof'](CS.String):
return new CS.String('string').g();
case !this.expression['instanceof'](CS.Functions):
return new CS.String('function').g();
case !this.expression['instanceof'](CS.Undefined):
return new CS.String('undefined').g();
default:
return this;
}
}
],
[
CS.SeqOp,
function (param$) {
var ancestry;
ancestry = param$.ancestry;
if (!((null != ancestry[0] ? ancestry[0]['instanceof'](CS.Functions) : void 0) && ancestry[0].body === this))
return this;
if (this.right['instanceof'](CS.Return) && null != this.right.expression) {
return new CS.SeqOp(this.left, this.right.expression);
} else if (this.right['instanceof'](CS.Undefined)) {
return new CS.SeqOp(this.left, new CS.Return);
} else {
return this;
}
}
],
[
CS.Function,
CS.BoundFunction,
function () {
if (!(null != this.block && (this.block['instanceof'](CS.Undefined) || this.block['instanceof'](CS.Return) && !(null != this.block.expression))))
return this;
return new this.constructor(this.parameters, null);
}
],
[
CS.Return,
function () {
if (null != this.expression ? this.expression['instanceof'](CS.Undefined) : void 0) {
return new CS.Return;
} else {
return this;
}
}
],
[
CS.Slice,
function () {
if ((null != this.left ? this.left['instanceof'](CS.Int, CS.String) : void 0) && +this.left.data === 0) {
return new CS.Slice(this.expression, this.isInclusive, null, this.right);
} else if (this.isInclusive && (null != this.right ? this.right['instanceof'](CS.UnaryNegateOp) : void 0) && this.right.expression['instanceof'](CS.Int) && this.right.expression.data === 1) {
return new CS.Slice(this.expression, true, this.left, null);
} else {
return this;
}
}
]
];
function Optimiser() {
var cache$2, ctor, ctors, handler, size$;
this.rules = {};
for (var i$ = 0, length$ = defaultRules.length; i$ < length$; ++i$) {
{
cache$2 = defaultRules[i$];
size$ = cache$2.length;
ctors = size$ > 1 ? [].slice.call(cache$2, 0, size$ - 1) : [];
handler = cache$2[size$ - 1];
}
for (var i$1 = 0, length$1 = ctors.length; i$1 < length$1; ++i$1) {
ctor = ctors[i$1];
this.addRule(ctor.prototype.className, handler);
}
}
}
Optimiser.prototype.addRule = function (ctor, handler) {
(null != this.rules[ctor] ? this.rules[ctor] : this.rules[ctor] = []).push(handler);
return this;
};
Optimiser.prototype.optimise = function () {
var walk;
walk = function (fn, inScope, ancestry) {
var childName, jsNode, member, n, p;
if (null == inScope)
inScope = [];
if (null == ancestry)
ancestry = [];
if (!(null != this) || this === global)
throw new Error('Optimiser rules must produce a node. `null` is not a node.');
if (in$(this, ancestry))
return this;
ancestry.unshift(this);
for (var i$ = 0, length$ = this.childNodes.length; i$ < length$; ++i$) {
childName = this.childNodes[i$];
if (!(null != this[childName]))
continue;
if (in$(childName, this.listMembers)) {
for (var i$1 = 0, length$1 = this[childName].length; i$1 < length$1; ++i$1) {
member = this[childName][i$1];
n = i$1;
while (this[childName][n] !== walk.call(this[childName][n] = fn.call(this[childName][n], {
inScope: inScope,
ancestry: ancestry
}), fn, inScope, ancestry)) {
}
inScope = union(inScope, envEnrichments(this[childName][n], inScope));
}
} else {
while (this[childName] !== walk.call(this[childName] = fn.call(this[childName], {
inScope: inScope,
ancestry: ancestry
}), fn, inScope, ancestry)) {
}
inScope = union(inScope, envEnrichments(this[childName], inScope));
}
}
ancestry.shift();
jsNode = fn.call(this, {
inScope: inScope,
ancestry: ancestry
});
for (var cache$2 = [
'raw',
'line',
'column',
'offset'
], i$2 = 0, length$2 = cache$2.length; i$2 < length$2; ++i$2) {
p = cache$2[i$2];
jsNode[p] = this[p];
}
return jsNode;
};
return function (ast) {
var rules;
rules = this.rules;
return walk.call(ast, function () {
var cache$3, memo, oldClassName, rule;
memo = this;
oldClassName = null;
while (oldClassName !== memo.className) {
for (var cache$2 = (cache$3 = rules[oldClassName = memo.className], null != cache$3 ? cache$3 : []), i$ = 0, length$ = cache$2.length; i$ < length$; ++i$) {
rule = cache$2[i$];
memo = rule.apply(memo, arguments);
if (!(oldClassName === memo.className))
break;
}
}
return memo;
});
};
}();
return Optimiser;
}();
function in$(member, list) {
for (var i = 0, length = list.length; i < length; ++i)
if (i in list && list[i] === member)
return true;
return false;
}
});
require.define("/lib/coffee-script/compiler.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var any, assignment, beingDeclared, collectIdentifiers, concat, concatMap, CS, declarationsNeeded, declarationsNeededRecursive, difference, divMod, dynamicMemberAccess, enabledHelpers, envEnrichments, exports, expr, fn, fn, foldl1, forceBlock, generateMutatingWalker, generateSoak, genSym, h, h, hasSoak, helperNames, helpers, inlineHelpers, JS, jsReserved, makeReturn, makeVarDeclaration, map, memberAccess, needsCaching, nub, owns, span, stmt, union, usedAsExpression;
cache$ = require('./functional-helpers');
any = cache$.any;
concat = cache$.concat;
concatMap = cache$.concatMap;
difference = cache$.difference;
divMod = cache$.divMod;
foldl1 = cache$.foldl1;
map = cache$.map;
nub = cache$.nub;
owns = cache$.owns;
span = cache$.span;
union = cache$.union;
cache$1 = require('./helpers');
beingDeclared = cache$1.beingDeclared;
usedAsExpression = cache$1.usedAsExpression;
envEnrichments = cache$1.envEnrichments;
CS = require('./nodes');
JS = require('./js-nodes');
exports = null != ('undefined' !== typeof module && null != module ? module.exports : void 0) ? 'undefined' !== typeof module && null != module ? module.exports : void 0 : this;
jsReserved = [
'break',
'case',
'catch',
'class',
'const',
'continue',
'debugger',
'default',
'delete',
'do',
'else',
'enum',
'export',
'extends',
'false',
'finally',
'for',
'function',
'if',
'implements',
'import',
'in',
'instanceof',
'interface',
'let',
'native',
'new',
'null',
'package',
'private',
'protected',
'public',
'return',
'static',
'super',
'switch',
'this',
'throw',
'true',
'try',
'typeof',
'var',
'void',
'while',
'with',
'yield',
'arguments',
'eval'
];
genSym = function () {
var genSymCounter;
genSymCounter = 0;
return function (pre) {
return new JS.GenSym(pre, ++genSymCounter);
};
}();
stmt = function (e) {
var walk;
if (!(null != e))
return e;
if (e.isStatement) {
return e;
} else if (e['instanceof'](JS.SequenceExpression)) {
walk = function (seq) {
return concatMap(seq.expressions, function (e) {
if (e['instanceof'](JS.SequenceExpression)) {
return walk(e);
} else {
return [stmt(e)];
}
});
};
return new JS.BlockStatement(walk(e));
} else if (e['instanceof'](JS.ConditionalExpression)) {
return new JS.IfStatement(expr(e.test), stmt(e.consequent), stmt(e.alternate));
} else {
return new JS.ExpressionStatement(e);
}
};
expr = function (s) {
var accum, alternate, block, consequent, iife, lastExpression, push;
if (!(null != s))
return s;
if (s.isExpression) {
return s;
} else if (s['instanceof'](JS.BlockStatement)) {
switch (s.body.length) {
case 0:
return helpers.undef();
case 1:
return expr(s.body[0]);
default:
return new JS.SequenceExpression(map(s.body, expr));
}
} else if (s['instanceof'](JS.ExpressionStatement)) {
return s.expression;
} else if (s['instanceof'](JS.ThrowStatement)) {
return new JS.CallExpression(new JS.FunctionExpression(null, [], forceBlock(s)), []);
} else if (s['instanceof'](JS.IfStatement)) {
consequent = expr(null != s.consequent ? s.consequent : helpers.undef());
alternate = expr(null != s.alternate ? s.alternate : helpers.undef());
return new JS.ConditionalExpression(s.test, consequent, alternate);
} else if (s['instanceof'](JS.ForInStatement, JS.ForStatement, JS.WhileStatement)) {
accum = genSym('accum');
push = function (x) {
return stmt(new JS.CallExpression(memberAccess(accum, 'push'), [x]));
};
s.body = forceBlock(s.body);
if (s.body.body.length) {
lastExpression = s.body.body.slice(-1)[0];
if (!lastExpression['instanceof'](JS.ThrowStatement))
s.body.body[s.body.body.length - 1] = push(expr(lastExpression));
} else {
s.body.body.push(push(helpers.undef()));
}
block = new JS.BlockStatement([
s,
new JS.ReturnStatement(accum)
]);
iife = new JS.FunctionExpression(null, [accum], block);
return new JS.CallExpression(memberAccess(iife, 'call'), [
new JS.ThisExpression,
new JS.ArrayExpression([])
]);
} else if (s['instanceof'](JS.SwitchStatement, JS.TryStatement)) {
block = new JS.BlockStatement([makeReturn(s)]);
iife = new JS.FunctionExpression(null, [], block);
return new JS.CallExpression(memberAccess(iife, 'call'), [new JS.ThisExpression]);
} else {
throw new Error('expr: Cannot use a ' + s.type + ' as a value');
}
};
makeReturn = function (node) {
var stmts;
if (!(null != node))
return new JS.ReturnStatement;
if (node['instanceof'](JS.BlockStatement)) {
return new JS.BlockStatement([].slice.call(node.body.slice(0, -1)).concat([makeReturn(node.body.slice(-1)[0])]));
} else if (node['instanceof'](JS.SequenceExpression)) {
return new JS.SequenceExpression([].slice.call(node.expressions.slice(0, -1)).concat([makeReturn(node.expressions.slice(-1)[0])]));
} else if (node['instanceof'](JS.IfStatement)) {
return new JS.IfStatement(node.test, makeReturn(node.consequent), null != node.alternate ? makeReturn(node.alternate) : null);
} else if (node['instanceof'](JS.SwitchStatement)) {
return new JS.SwitchStatement(node.discriminant, map(node.cases, makeReturn));
} else if (node['instanceof'](JS.SwitchCase)) {
if (!node.consequent.length)
return node;
stmts = node.consequent.slice(-1)[0]['instanceof'](JS.BreakStatement) ? node.consequent.slice(0, -1) : node.consequent;
return new JS.SwitchCase(node.test, [].slice.call(stmts.slice(0, -1)).concat([makeReturn(stmts.slice(-1)[0])]));
} else if (node['instanceof'](JS.TryStatement)) {
return new JS.TryStatement(makeReturn(node.block), map(node.handlers, makeReturn), null != node.finalizer ? makeReturn(node.finalizer) : null);
} else if (node['instanceof'](JS.CatchClause)) {
return new JS.CatchClause(node.param, makeReturn(node.body));
} else if (node['instanceof'](JS.ThrowStatement, JS.ReturnStatement, JS.BreakStatement, JS.ContinueStatement)) {
return node;
} else if (node['instanceof'](JS.UnaryExpression) && node.operator === 'void') {
return new JS.ReturnStatement;
} else {
return new JS.ReturnStatement(expr(node));
}
};
generateMutatingWalker = function (fn) {
return function (node, args) {
var childName;
args = 2 <= arguments.length ? [].slice.call(arguments, 1) : [];
for (var i$ = 0, length$ = node.childNodes.length; i$ < length$; ++i$) {
childName = node.childNodes[i$];
if (!(null != node[childName]))
continue;
node[childName] = in$(childName, node.listMembers) ? function (accum$) {
var n;
for (var i$1 = 0, length$1 = node[childName].length; i$1 < length$1; ++i$1) {
n = node[childName][i$1];
accum$.push(fn.apply(n, args));
}
return accum$;
}.call(this, []) : fn.apply(node[childName], args);
}
return node;
};
};
declarationsNeeded = function (node) {
if (!(null != node))
return [];
if (node['instanceof'](JS.AssignmentExpression) && node.operator === '=' && node.left['instanceof'](JS.Identifier)) {
return [node.left];
} else if (node['instanceof'](JS.ForInStatement)) {
return [node.left];
} else {
return [];
}
};
declarationsNeededRecursive = function (node) {
if (!(null != node))
return [];
if (node['instanceof'](JS.FunctionExpression, JS.FunctionDeclaration)) {
return [];
} else {
return union(declarationsNeeded(node), concatMap(node.childNodes, function (childName) {
if (!(null != node[childName]))
return [];
if (in$(childName, node.listMembers)) {
return concatMap(node[childName], declarationsNeededRecursive);
} else {
return declarationsNeededRecursive(node[childName]);
}
}));
}
};
collectIdentifiers = function (node) {
return nub(function () {
switch (false) {
case !!(null != node):
return [];
case !node['instanceof'](JS.Identifier):
return [node.name];
case !(node['instanceof'](JS.MemberExpression) && !node.computed):
return collectIdentifiers(node.object);
default:
return concatMap(node.childNodes, function (childName) {
if (!(null != node[childName]))
return [];
if (in$(childName, node.listMembers)) {
return concatMap(node[childName], collectIdentifiers);
} else {
return collectIdentifiers(node[childName]);
}
});
}
}.call(this));
};
needsCaching = function (node) {
if (!(null != node))
return false;
return envEnrichments(node, []).length > 0 || node['instanceof'](CS.FunctionApplications, CS.DoOp, CS.NewOp, CS.ArrayInitialiser, CS.ObjectInitialiser, CS.RegExp, CS.HeregExp, CS.PreIncrementOp, CS.PostIncrementOp, CS.PreDecrementOp, CS.PostDecrementOp) || any(difference(node.childNodes, node.listMembers), function (n) {
return needsCaching(node[n]);
}) || any(node.listMembers, function (n) {
return any(node[n], needsCaching);
});
};
forceBlock = function (node) {
if (!(null != node))
return new JS.BlockStatement([]);
node = stmt(node);
if (node['instanceof'](JS.BlockStatement)) {
return node;
} else {
return new JS.BlockStatement([node]);
}
};
makeVarDeclaration = function (vars) {
var decls;
vars.sort(function (a, b) {
a = a.name.toLowerCase();
b = b.name.toLowerCase();
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
});
decls = function (accum$) {
var v;
for (var i$ = 0, length$ = vars.length; i$ < length$; ++i$) {
v = vars[i$];
accum$.push(new JS.VariableDeclarator(v));
}
return accum$;
}.call(this, []);
return new JS.VariableDeclaration('var', decls);
};
memberAccess = function (e, member) {
var isIdentifierName;
isIdentifierName = /^[$_a-z][$_a-z0-9]*$/i;
if (in$(member, jsReserved) || !isIdentifierName.test(member)) {
return new JS.MemberExpression(true, expr(e), new JS.Literal(member));
} else {
return new JS.MemberExpression(false, expr(e), new JS.Identifier(member));
}
};
dynamicMemberAccess = function (e, index) {
if (index['instanceof'](JS.Literal) && typeof index.value === 'string') {
return memberAccess(e, index.value);
} else {
return new JS.MemberExpression(true, e, index);
}
};
assignment = function (assignee, expression, valueUsed) {
var alternate, assignments, consequent, e, elements, i, index, m, numElements, p, propName, restName, size, test;
if (null == valueUsed)
valueUsed = false;
assignments = [];
switch (false) {
case !assignee.rest:
case !assignee['instanceof'](JS.ArrayExpression):
e = expression;
if (valueUsed || assignee.elements.length > 1) {
e = genSym('cache');
assignments.push(new JS.AssignmentExpression('=', e, expression));
}
elements = assignee.elements;
for (var i$ = 0, length$ = elements.length; i$ < length$; ++i$) {
m = elements[i$];
i = i$;
if (m.rest)
break;
assignments.push(assignment(m, dynamicMemberAccess(e, new JS.Literal(i)), valueUsed));
}
if (elements.length > 0) {
if (elements.slice(-1)[0].rest) {
numElements = elements.length;
restName = elements[numElements - 1] = elements[numElements - 1].expression;
test = new JS.BinaryExpression('<=', new JS.Literal(numElements), memberAccess(e, 'length'));
consequent = helpers.slice(e, new JS.Literal(numElements - 1));
alternate = new JS.ArrayExpression([]);
assignments.push(stmt(new JS.AssignmentExpression('=', restName, new JS.ConditionalExpression(test, consequent, alternate))));
} else if (any(elements, function (p) {
return p.rest;
})) {
restName = index = null;
for (var i$1 = 0, length$1 = elements.length; i$1 < length$1; ++i$1) {
p = elements[i$1];
i = i$1;
if (!p.rest)
continue;
restName = p.expression;
index = i;
break;
}
elements.splice(index, 1);
numElements = elements.length;
size = genSym('size');
assignments.push(new JS.AssignmentExpression('=', size, memberAccess(e, 'length')));
test = new JS.BinaryExpression('>', size, new JS.Literal(numElements));
consequent = helpers.slice(e, new JS.Literal(index), new JS.BinaryExpression('-', size, new JS.Literal(numElements - index)));
assignments.push(new JS.AssignmentExpression('=', restName, new JS.ConditionalExpression(test, consequent, new JS.ArrayExpression([]))));
for (var i$2 = 0, length$2 = elements.slice(index).length; i$2 < length$2; ++i$2) {
p = elements.slice(index)[i$2];
i = i$2;
assignments.push(stmt(new JS.AssignmentExpression('=', p, new JS.MemberExpression(true, e, new JS.BinaryExpression('-', size, new JS.Literal(numElements - index - i))))));
}
}
if (any(elements, function (p) {
return p.rest;
}))
throw new Error('Positional destructuring assignments may not have more than one rest operator');
}
break;
case !assignee['instanceof'](JS.ObjectExpression):
e = expression;
if (valueUsed || assignee.properties.length > 1) {
e = genSym('cache');
assignments.push(new JS.AssignmentExpression('=', e, expression));
}
for (var i$3 = 0, length$3 = assignee.properties.length; i$3 < length$3; ++i$3) {
m = assignee.properties[i$3];
propName = m.key['instanceof'](JS.Identifier) ? new JS.Literal(m.key.name) : m.key;
assignments.push(assignment(m.value, dynamicMemberAccess(e, propName), valueUsed));
}
break;
case !assignee['instanceof'](JS.Identifier, JS.GenSym, JS.MemberExpression):
assignments.push(new JS.AssignmentExpression('=', assignee, expr(expression)));
break;
default:
throw new Error('compile: assignment: unassignable assignee: ' + assignee.type);
}
switch (assignments.length) {
case 0:
if (e === expression) {
return helpers.undef();
} else {
return expression;
}
case 1:
return assignments[0];
default:
return new JS.SequenceExpression(valueUsed ? [].slice.call(assignments).concat([e]) : assignments);
}
};
hasSoak = function (node) {
switch (false) {
case !node['instanceof'](CS.SoakedFunctionApplication, CS.SoakedMemberAccessOp, CS.SoakedProtoMemberAccessOp, CS.SoakedDynamicMemberAccessOp, CS.SoakedDynamicProtoMemberAccessOp):
return true;
case !node['instanceof'](CS.FunctionApplication):
return hasSoak(node['function']);
case !node['instanceof'](CS.MemberAccessOps):
return hasSoak(node.expression);
default:
return false;
}
};
generateSoak = function () {
var fn;
fn = function (node) {
var cache$2, cache$3, cache$4, cache$5, cache$6, ctor, e, memberName, sym, tests, typeofTest;
switch (false) {
case !node['instanceof'](CS.MemberAccessOp, CS.ProtoMemberAccessOp):
cache$2 = fn(node.expression);
tests = cache$2[0];
e = cache$2[1];
return [
tests,
new node.constructor(e, node.memberName)
];
case !node['instanceof'](CS.DynamicMemberAccessOp, CS.DynamicProtoMemberAccessOp):
cache$3 = fn(node.expression);
tests = cache$3[0];
e = cache$3[1];
return [
tests,
new node.constructor(e, node.indexingExpr)
];
case !node['instanceof'](CS.FunctionApplication):
cache$4 = fn(node['function']);
tests = cache$4[0];
e = cache$4[1];
return [
tests,
new CS.FunctionApplication(e, node['arguments'])
];
case !node['instanceof'](CS.SoakedFunctionApplication):
cache$5 = fn(node['function']);
tests = cache$5[0];
e = cache$5[1];
typeofTest = function (e) {
return new CS.EQOp(new CS.String('function'), new CS.TypeofOp(e));
};
if (needsCaching(e)) {
sym = new CS.GenSym('cache');
return [
[].slice.call(tests).concat([typeofTest(new CS.AssignOp(sym, e))]),
new CS.FunctionApplication(sym, node['arguments'])
];
} else {
return [
[].slice.call(tests).concat([typeofTest(e)]),
new CS.FunctionApplication(e, node['arguments'])
];
}
case !node['instanceof'](CS.SoakedMemberAccessOp, CS.SoakedProtoMemberAccessOp, CS.SoakedDynamicMemberAccessOp, CS.SoakedDynamicProtoMemberAccessOp):
memberName = function () {
switch (false) {
case !node['instanceof'](CS.SoakedMemberAccessOp, CS.SoakedProtoMemberAccessOp):
return 'memberName';
case !node['instanceof'](CS.SoakedDynamicMemberAccessOp, CS.SoakedDynamicProtoMemberAccessOp):
return 'indexingExpr';
}
}.call(this);
ctor = function () {
switch (false) {
case !node['instanceof'](CS.SoakedMemberAccessOp):
return CS.MemberAccessOp;
case !node['instanceof'](CS.SoakedProtoMemberAccessOp):
return CS.ProtoMemberAccessOp;
case !node['instanceof'](CS.SoakedDynamicMemberAccessOp):
return CS.DynamicMemberAccessOp;
case !node['instanceof'](CS.SoakedDynamicProtoMemberAccessOp):
return CS.DynamicProtoMemberAccessOp;
}
}.call(this);
cache$6 = fn(node.expression);
tests = cache$6[0];
e = cache$6[1];
if (needsCaching(e)) {
sym = new CS.GenSym('cache');
return [
[].slice.call(tests).concat([new CS.UnaryExistsOp(new CS.AssignOp(sym, e))]),
new ctor(sym, node[memberName])
];
} else {
return [
[].slice.call(tests).concat([new CS.UnaryExistsOp(e)]),
new ctor(e, node[memberName])
];
}
default:
return [
[],
node
];
}
};
return function (node) {
var cache$2, e, tests;
cache$2 = fn(node);
tests = cache$2[0];
e = cache$2[1];
return new CS.Conditional(foldl1(tests, function (memo, t) {
return new CS.LogicalAndOp(memo, t);
}), e);
};
}();
helperNames = {};
helpers = {
extends: function () {
var block, child, ctor, f, key, parent, protoAccess;
protoAccess = function (e) {
return memberAccess(e, 'prototype');
};
child = new JS.Identifier('child');
parent = new JS.Identifier('parent');
ctor = new JS.Identifier('ctor');
key = new JS.Identifier('key');
block = [
new JS.ForInStatement(key, parent, new JS.IfStatement(helpers.isOwn(parent, key), f = stmt(new JS.AssignmentExpression('=', new JS.MemberExpression(true, child, key), new JS.MemberExpression(true, parent, key))))),
new JS.FunctionDeclaration(ctor, [], new JS.BlockStatement([stmt(new JS.AssignmentExpression('=', memberAccess(new JS.ThisExpression, 'constructor'), child))])),
new JS.AssignmentExpression('=', protoAccess(ctor), protoAccess(parent)),
new JS.AssignmentExpression('=', protoAccess(child), new JS.NewExpression(ctor, [])),
new JS.AssignmentExpression('=', memberAccess(child, '__super__'), protoAccess(parent)),
new JS.ReturnStatement(child)
];
return new JS.FunctionDeclaration(helperNames['extends'], [
child,
parent
], new JS.BlockStatement(map(block, stmt)));
},
construct: function () {
var args, block, child, ctor, fn, result;
child = new JS.Identifier('child');
ctor = new JS.Identifier('ctor');
fn = new JS.Identifier('fn');
args = new JS.Identifier('args');
result = new JS.Identifier('result');
block = [
new JS.VariableDeclaration('var', [new JS.VariableDeclarator(fn, new JS.FunctionExpression(null, [], new JS.BlockStatement([])))]),
new JS.AssignmentExpression('=', memberAccess(fn, 'prototype'), memberAccess(ctor, 'prototype')),
new JS.VariableDeclaration('var', [
new JS.VariableDeclarator(child, new JS.NewExpression(fn, [])),
new JS.VariableDeclarator(result, new JS.CallExpression(memberAccess(ctor, 'apply'), [
child,
args
]))
]),
new JS.ReturnStatement(new JS.ConditionalExpression(new JS.BinaryExpression('===', result, new JS.CallExpression(new JS.Identifier('Object'), [result])), result, child))
];
return new JS.FunctionDeclaration(helperNames.construct, [
ctor,
args
], new JS.BlockStatement(map(block, stmt)));
},
isOwn: function () {
var args, functionBody, hop, params;
hop = memberAccess(new JS.ObjectExpression([]), 'hasOwnProperty');
params = args = [
new JS.Identifier('o'),
new JS.Identifier('p')
];
functionBody = [new JS.CallExpression(memberAccess(hop, 'call'), args)];
return new JS.FunctionDeclaration(helperNames.isOwn, params, makeReturn(new JS.BlockStatement(map(functionBody, stmt))));
},
in: function () {
var functionBody, i, length, list, loopBody, member, varDeclaration;
member = new JS.Identifier('member');
list = new JS.Identifier('list');
i = new JS.Identifier('i');
length = new JS.Identifier('length');
varDeclaration = new JS.VariableDeclaration('var', [
new JS.VariableDeclarator(i, new JS.Literal(0)),
new JS.VariableDeclarator(length, memberAccess(list, 'length'))
]);
loopBody = new JS.IfStatement(new JS.BinaryExpression('&&', new JS.BinaryExpression('in', i, list), new JS.BinaryExpression('===', new JS.MemberExpression(true, list, i), member)), new JS.ReturnStatement(new JS.Literal(true)));
functionBody = [
new JS.ForStatement(varDeclaration, new JS.BinaryExpression('<', i, length), new JS.UpdateExpression('++', true, i), loopBody),
new JS.Literal(false)
];
return new JS.FunctionDeclaration(helperNames['in'], [
member,
list
], makeReturn(new JS.BlockStatement(map(functionBody, stmt))));
}
};
enabledHelpers = [];
for (h in helpers) {
if (!isOwn$(helpers, h))
continue;
fn = helpers[h];
helperNames[h] = genSym(h);
helpers[h] = function (h, fn) {
return function () {
enabledHelpers.push(fn());
return (helpers[h] = function () {
return new JS.CallExpression(helperNames[h], arguments);
}).apply(this, arguments);
};
}(h, fn);
}
inlineHelpers = {
exp: function () {
return new JS.CallExpression(memberAccess(new JS.Identifier('Math'), 'pow'), arguments);
},
undef: function () {
return new JS.UnaryExpression('void', new JS.Literal(0));
},
slice: function () {
return new JS.CallExpression(memberAccess(memberAccess(new JS.ArrayExpression([]), 'slice'), 'call'), arguments);
}
};
for (h in inlineHelpers) {
if (!isOwn$(inlineHelpers, h))
continue;
fn = inlineHelpers[h];
helpers[h] = fn;
}
exports.Compiler = function () {
var defaultRules, this$;
Compiler.compile = (this$ = Compiler, function () {
var cache$2;
return (cache$2 = new this$).compile.apply(cache$2, [].slice.call(arguments).concat());
});
defaultRules = [
[
CS.Program,
function (param$) {
var block, body, cache$2, decls, inScope, options, program;
{
cache$2 = param$;
body = cache$2.body;
inScope = cache$2.inScope;
options = cache$2.options;
}
if (!(null != body))
return new JS.Program([]);
block = stmt(body);
block = block['instanceof'](JS.BlockStatement) ? block.body : [block];
[].push.apply(block, enabledHelpers);
decls = nub(concatMap(block, declarationsNeededRecursive));
if (decls.length > 0)
if (options.bare) {
block.unshift(makeVarDeclaration(decls));
} else {
block = [stmt(new JS.UnaryExpression('void', new JS.CallExpression(memberAccess(new JS.FunctionExpression(null, [], new JS.BlockStatement(block)), 'call'), [new JS.ThisExpression])))];
}
program = new JS.Program(block);
program.leadingComments = [{
type: 'Line',
value: ' Generated by CoffeeScript 2.0.0-dev'
}];
return program;
}
],
[
CS.Block,
function (param$) {
var statements;
statements = param$.statements;
switch (statements.length) {
case 0:
return new JS.EmptyStatement;
case 1:
return new stmt(statements[0]);
default:
return new JS.BlockStatement(map(statements, stmt));
}
}
],
[
CS.SeqOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.SequenceExpression([
left,
right
]);
}
],
[
CS.Conditional,
function (param$) {
var alternate, ancestry, cache$2, condition, consequent, inspect;
{
cache$2 = param$;
condition = cache$2.condition;
consequent = cache$2.consequent;
alternate = cache$2.alternate;
ancestry = cache$2.ancestry;
}
if (null != alternate) {
if (!(null != consequent))
throw new Error('Conditional with non-null alternate requires non-null consequent');
if (!alternate['instanceof'](JS.IfStatement))
alternate = forceBlock(alternate);
}
if (null != alternate || (null != ancestry[0] ? ancestry[0]['instanceof'](CS.Conditional) : void 0))
consequent = forceBlock(consequent);
inspect = function (o) {
return require('util').inspect(o, false, 2, true);
};
return new JS.IfStatement(expr(condition), stmt(consequent), alternate);
}
],
[
CS.ForIn,
function (param$) {
var block, body, cache$2, e, filter, i, keyAssignee, length, step, target, valAssignee, varDeclaration;
{
cache$2 = param$;
valAssignee = cache$2.valAssignee;
keyAssignee = cache$2.keyAssignee;
target = cache$2.target;
step = cache$2.step;
filter = cache$2.filter;
body = cache$2.body;
}
i = genSym('i');
length = genSym('length');
block = forceBlock(body);
if (!block.body.length)
block.body.push(stmt(helpers.undef()));
e = needsCaching(this.target) ? genSym('cache') : target;
varDeclaration = new JS.VariableDeclaration('var', [
new JS.VariableDeclarator(i, new JS.Literal(0)),
new JS.VariableDeclarator(length, memberAccess(e, 'length'))
]);
if (!(e === target))
varDeclaration.declarations.unshift(new JS.VariableDeclarator(e, target));
if (null != this.filter)
block.body.unshift(stmt(new JS.IfStatement(new JS.UnaryExpression('!', filter), new JS.ContinueStatement)));
if (null != keyAssignee)
block.body.unshift(stmt(assignment(keyAssignee, i)));
block.body.unshift(stmt(assignment(valAssignee, new JS.MemberExpression(true, e, i))));
return new JS.ForStatement(varDeclaration, new JS.BinaryExpression('<', i, length), new JS.UpdateExpression('++', true, i), block);
}
],
[
CS.ForOf,
function (param$) {
var block, body, cache$2, e, filter, keyAssignee, right, target, valAssignee;
{
cache$2 = param$;
keyAssignee = cache$2.keyAssignee;
valAssignee = cache$2.valAssignee;
target = cache$2.target;
filter = cache$2.filter;
body = cache$2.body;
}
block = forceBlock(body);
if (!block.body.length)
block.body.push(stmt(helpers.undef()));
e = this.isOwn && needsCaching(this.target) ? genSym('cache') : expr(target);
if (null != this.filter)
block.body.unshift(stmt(new JS.IfStatement(new JS.UnaryExpression('!', filter), new JS.ContinueStatement)));
if (null != valAssignee)
block.body.unshift(stmt(assignment(valAssignee, new JS.MemberExpression(true, e, keyAssignee))));
if (this.isOwn)
block.body.unshift(stmt(new JS.IfStatement(new JS.UnaryExpression('!', helpers.isOwn(e, keyAssignee)), new JS.ContinueStatement)));
right = e === target ? e : new JS.AssignmentExpression('=', e, target);
return new JS.ForInStatement(keyAssignee, right, block);
}
],
[
CS.While,
function (param$) {
var body, cache$2, condition;
{
cache$2 = param$;
condition = cache$2.condition;
body = cache$2.body;
}
return new JS.WhileStatement(expr(condition), forceBlock(body));
}
],
[
CS.Switch,
function (param$) {
var alternate, c, cache$2, cases, expression;
{
cache$2 = param$;
expression = cache$2.expression;
cases = cache$2.cases;
alternate = cache$2.alternate;
}
cases = concat(cases);
if (!(null != expression)) {
expression = new JS.Literal(false);
for (var i$ = 0, length$ = cases.length; i$ < length$; ++i$) {
c = cases[i$];
c.test = new JS.UnaryExpression('!', c.test);
}
}
if (null != alternate)
cases.push(new JS.SwitchCase(null, [stmt(alternate)]));
for (var i$1 = 0, length$1 = cases.slice(0, -1).length; i$1 < length$1; ++i$1) {
c = cases.slice(0, -1)[i$1];
if (!((null != c.consequent ? c.consequent.length : void 0) > 0))
continue;
c.consequent.push(new JS.BreakStatement);
}
return new JS.SwitchStatement(expression, cases);
}
],
[
CS.SwitchCase,
function (param$) {
var block, cache$2, cases, conditions, consequent;
{
cache$2 = param$;
conditions = cache$2.conditions;
consequent = cache$2.consequent;
}
cases = map(conditions, function (c) {
return new JS.SwitchCase(c, []);
});
block = stmt(consequent);
block = null != block ? block['instanceof'](JS.BlockStatement) ? block.body : [block] : [];
cases[cases.length - 1].consequent = block;
return cases;
}
],
[
CS.Try,
function (param$) {
var body, cache$2, catchAssignee, catchBlock, catchBody, e, finallyBlock, finallyBody, handlers;
{
cache$2 = param$;
body = cache$2.body;
catchAssignee = cache$2.catchAssignee;
catchBody = cache$2.catchBody;
finallyBody = cache$2.finallyBody;
}
finallyBlock = null != finallyBody ? forceBlock(finallyBody) : null;
e = genSym('e');
catchBlock = forceBlock(catchBody);
if (null != catchAssignee)
catchBlock.body.unshift(stmt(assignment(catchAssignee, e)));
handlers = [new JS.CatchClause(e, catchBlock)];
return new JS.TryStatement(forceBlock(body), handlers, finallyBlock);
}
],
[
CS.Throw,
function (param$) {
var expression;
expression = param$.expression;
return new JS.ThrowStatement(expression);
}
],
[
CS.Range,
function (param$) {
var accum, body, cache$2, condition, conditionAlternate, conditionConsequent, conditionTest, i, left, left_, range, rawLeft, rawRight, right, right_, update, vars;
{
cache$2 = param$;
left_ = cache$2.left;
right_ = cache$2.right;
}
if ((this.left['instanceof'](CS.Int) || this.left['instanceof'](CS.UnaryNegateOp) && this.left.expression['instanceof'](CS.Int)) && (this.right['instanceof'](CS.Int) || this.right['instanceof'](CS.UnaryNegateOp) && this.right.expression['instanceof'](CS.Int))) {
rawLeft = this.left['instanceof'](CS.UnaryNegateOp) ? -this.left.expression.data : this.left.data;
rawRight = this.right['instanceof'](CS.UnaryNegateOp) ? -this.right.expression.data : this.right.data;
if (Math.abs(rawLeft - rawRight) <= 20) {
range = this.isInclusive ? function () {
var accum$;
accum$ = [];
for (var i$ = rawLeft; rawLeft <= rawRight ? i$ <= rawRight : i$ >= rawRight; rawLeft <= rawRight ? ++i$ : --i$)
accum$.push(i$);
return accum$;
}.apply(this, arguments) : function () {
var accum$;
accum$ = [];
for (var i$ = rawLeft; rawLeft <= rawRight ? i$ < rawRight : i$ > rawRight; rawLeft <= rawRight ? ++i$ : --i$)
accum$.push(i$);
return accum$;
}.apply(this, arguments);
return new JS.ArrayExpression(map(range, function (n) {
if (n < 0) {
return new JS.UnaryExpression('-', new JS.Literal(-n));
} else {
return new JS.Literal(n);
}
}));
}
}
accum = genSym('accum');
body = [stmt(new JS.AssignmentExpression('=', accum, new JS.ArrayExpression([])))];
if (needsCaching(left_)) {
left = genSym('from');
body.push(stmt(new JS.AssignmentExpression('=', left, left_)));
} else {
left = left_;
}
if (needsCaching(right_)) {
right = genSym('to');
body.push(stmt(new JS.AssignmentExpression('=', right, right_)));
} else {
right = right_;
}
i = genSym('i');
vars = new JS.VariableDeclaration('var', [new JS.VariableDeclarator(i, left)]);
conditionTest = new JS.BinaryExpression('<=', left, right);
conditionConsequent = new JS.BinaryExpression(this.isInclusive ? '<=' : '<', i, right);
conditionAlternate = new JS.BinaryExpression(this.isInclusive ? '>=' : '>', i, right);
condition = new JS.ConditionalExpression(conditionTest, conditionConsequent, conditionAlternate);
update = new JS.ConditionalExpression(conditionTest, new JS.UpdateExpression('++', true, i), new JS.UpdateExpression('--', true, i));
body.push(new JS.ForStatement(vars, condition, update, stmt(new JS.CallExpression(memberAccess(accum, 'push'), [i]))));
body.push(new JS.ReturnStatement(accum));
return new JS.CallExpression(memberAccess(new JS.FunctionExpression(null, [], new JS.BlockStatement(body)), 'apply'), [
new JS.ThisExpression,
new JS.Identifier('arguments')
]);
}
],
[
CS.ArrayInitialiser,
function () {
var groupMembers;
groupMembers = function (members) {
var cache$2, cache$3, sliced, ys, zs;
if (members.length === 0) {
return [];
} else {
cache$2 = span(members, function (x) {
return !x.spread;
});
ys = cache$2[0];
zs = cache$2[1];
if (ys.length === 0) {
sliced = helpers.slice(zs[0].expression);
cache$3 = [
sliced,
zs.slice(1)
];
ys = cache$3[0];
zs = cache$3[1];
cache$3;
} else {
ys = new JS.ArrayExpression(map(ys, expr));
}
return [ys].concat(groupMembers(zs));
}
};
return function (param$) {
var cache$2, compile, grouped, members;
{
cache$2 = param$;
members = cache$2.members;
compile = cache$2.compile;
}
if (any(members, function (m) {
return m.spread;
})) {
grouped = groupMembers(members);
return new JS.CallExpression(memberAccess(grouped[0], 'concat'), grouped.slice(1));
} else {
return new JS.ArrayExpression(map(members, expr));
}
};
}()
],
[
CS.Spread,
function (param$) {
var expression;
expression = param$.expression;
return {
spread: true,
expression: expression
};
}
],
[
CS.ObjectInitialiser,
function (param$) {
var members;
members = param$.members;
return new JS.ObjectExpression(members);
}
],
[
CS.ObjectInitialiserMember,
function (param$) {
var cache$2, expression, key;
{
cache$2 = param$;
key = cache$2.key;
expression = cache$2.expression;
}
return new JS.Property(key, expr(expression));
}
],
[
CS.DefaultParam,
function (param$) {
var cache$2, d, param;
{
cache$2 = param$;
param = cache$2.param;
d = cache$2['default'];
}
return {
param: param,
default: d
};
}
],
[
CS.Function,
CS.BoundFunction,
function () {
var handleParam;
handleParam = function (param, original, block) {
var p;
switch (false) {
case !original['instanceof'](CS.Rest):
return param;
case !original['instanceof'](CS.Identifier):
return param;
case !original['instanceof'](CS.MemberAccessOps, CS.ObjectInitialiser, CS.ArrayInitialiser):
p = genSym('param');
block.body.unshift(stmt(assignment(param, p)));
return p;
case !original['instanceof'](CS.DefaultParam):
block.body.unshift(new JS.IfStatement(new JS.BinaryExpression('==', new JS.Literal(null), param.param), stmt(new JS.AssignmentExpression('=', param.param, param['default']))));
return handleParam.call(this, param.param, original.param, block);
default:
throw new Error('Unsupported parameter type: ' + original.className);
}
};
return function (param$) {
var alternate, ancestry, block, body, cache$2, consequent, i, index, last, newThis, numArgs, numParams, p, parameters, parameters_, paramName, performedRewrite, pIndex, reassignments, rewriteThis, test;
{
cache$2 = param$;
parameters = cache$2.parameters;
body = cache$2.body;
ancestry = cache$2.ancestry;
}
if (!(null != ancestry[0] ? ancestry[0]['instanceof'](CS.Constructor) : void 0))
body = makeReturn(body);
block = forceBlock(body);
last = block.body.slice(-1)[0];
if ((null != last ? last['instanceof'](JS.ReturnStatement) : void 0) && !(null != last.argument))
block.body = block.body.slice(0, -1);
parameters_ = parameters.length === 0 ? [] : (pIndex = parameters.length, function (accum$) {
while (pIndex--) {
accum$.push(handleParam.call(this, parameters[pIndex], this.parameters[pIndex], block));
}
return accum$;
}.call(this, []));
parameters = parameters_.reverse();
if (parameters.length > 0) {
if (parameters.slice(-1)[0].rest) {
numParams = parameters.length;
paramName = parameters[numParams - 1] = parameters[numParams - 1].expression;
test = new JS.BinaryExpression('<=', new JS.Literal(numParams), memberAccess(new JS.Identifier('arguments'), 'length'));
consequent = helpers.slice(new JS.Identifier('arguments'), new JS.Literal(numParams - 1));
alternate = new JS.ArrayExpression([]);
block.body.unshift(stmt(new JS.AssignmentExpression('=', paramName, new JS.ConditionalExpression(test, consequent, alternate))));
} else if (any(parameters, function (p) {
return p.rest;
})) {
paramName = index = null;
for (var i$ = 0, length$ = parameters.length; i$ < length$; ++i$) {
p = parameters[i$];
i = i$;
if (!p.rest)
continue;
paramName = p.expression;
index = i;
break;
}
parameters.splice(index, 1);
numParams = parameters.length;
numArgs = genSym('numArgs');
reassignments = new JS.IfStatement(new JS.BinaryExpression('>', new JS.AssignmentExpression('=', numArgs, memberAccess(new JS.Identifier('arguments'), 'length')), new JS.Literal(numParams)), new JS.BlockStatement([stmt(new JS.AssignmentExpression('=', paramName, helpers.slice(new JS.Identifier('arguments'), new JS.Literal(index), new JS.BinaryExpression('-', numArgs, new JS.Literal(numParams - index)))))]), new JS.BlockStatement([stmt(new JS.AssignmentExpression('=', paramName, new JS.ArrayExpression([])))]));
for (var i$1 = 0, length$1 = parameters.slice(index).length; i$1 < length$1; ++i$1) {
p = parameters.slice(index)[i$1];
i = i$1;
reassignments.consequent.body.push(stmt(new JS.AssignmentExpression('=', p, new JS.MemberExpression(true, new JS.Identifier('arguments'), new JS.BinaryExpression('-', numArgs, new JS.Literal(numParams - index - i))))));
}
block.body.unshift(reassignments);
}
if (any(parameters, function (p) {
return p.rest;
}))
throw new Error('Parameter lists may not have more than one rest operator');
}
performedRewrite = false;
if (this['instanceof'](CS.BoundFunction)) {
newThis = genSym('this');
rewriteThis = generateMutatingWalker(function () {
if (this['instanceof'](JS.ThisExpression)) {
performedRewrite = true;
return newThis;
} else if (this['instanceof'](JS.FunctionExpression, JS.FunctionDeclaration)) {
return this;
} else {
return rewriteThis(this);
}
});
rewriteThis(block);
}
fn = new JS.FunctionExpression(null, parameters, block);
if (performedRewrite) {
return new JS.SequenceExpression([
new JS.AssignmentExpression('=', newThis, new JS.ThisExpression),
fn
]);
} else {
return fn;
}
};
}()
],
[
CS.Rest,
function (param$) {
var expression;
expression = param$.expression;
return {
rest: true,
expression: expression,
isExpression: true,
isStatement: true
};
}
],
[
CS.Class,
function (param$) {
var args, block, body, c, cache$2, compile, ctor, ctorIndex, ctorRef, i, iife, instance, member, memberName, name, nameAssignee, params, parent, parentRef, protoAssignOp, protoMember, ps, rewriteThis;
{
cache$2 = param$;
nameAssignee = cache$2.nameAssignee;
parent = cache$2.parent;
name = cache$2.name;
ctor = cache$2.ctor;
body = cache$2.body;
compile = cache$2.compile;
}
args = [];
params = [];
parentRef = genSym('super');
block = forceBlock(body);
if (name['instanceof'](JS.Identifier) && in$(name.name, jsReserved))
name = genSym(name.name);
if (null != ctor) {
for (var i$ = 0, length$ = block.body.length; i$ < length$; ++i$) {
c = block.body[i$];
i = i$;
if (!c['instanceof'](JS.FunctionDeclaration))
continue;
ctorIndex = i;
break;
}
block.body.splice(ctorIndex, 1, ctor);
} else {
ctor = new JS.FunctionDeclaration(name, [], new JS.BlockStatement([]));
ctorIndex = 0;
block.body.unshift(ctor);
}
ctor.id = name;
if (null != this.ctor && !this.ctor.expression['instanceof'](CS.Functions)) {
ctorRef = genSym('externalCtor');
ctor.body.body.push(makeReturn(new JS.CallExpression(memberAccess(ctorRef, 'apply'), [
new JS.ThisExpression,
new JS.Identifier('arguments')
])));
block.body.splice(ctorIndex, 0, stmt(new JS.AssignmentExpression('=', ctorRef, expr(compile(this.ctor.expression)))));
}
if (this.boundMembers.length > 0) {
instance = genSym('instance');
for (var i$1 = 0, length$1 = this.boundMembers.length; i$1 < length$1; ++i$1) {
protoAssignOp = this.boundMembers[i$1];
memberName = protoAssignOp.assignee.data.toString();
ps = function (accum$) {
var _;
for (var i$2 = 0, length$2 = protoAssignOp.expression.parameters.length; i$2 < length$2; ++i$2) {
_ = protoAssignOp.expression.parameters[i$2];
accum$.push(genSym());
}
return accum$;
}.call(this, []);
member = memberAccess(new JS.ThisExpression, memberName);
protoMember = memberAccess(memberAccess(name, 'prototype'), memberName);
fn = new JS.FunctionExpression(null, ps, new JS.BlockStatement([makeReturn(new JS.CallExpression(memberAccess(protoMember, 'apply'), [
instance,
new JS.Identifier('arguments')
]))]));
ctor.body.body.unshift(stmt(new JS.AssignmentExpression('=', member, fn)));
}
ctor.body.body.unshift(stmt(new JS.AssignmentExpression('=', instance, new JS.ThisExpression)));
}
if (null != parent) {
params.push(parentRef);
args.push(parent);
block.body.unshift(stmt(helpers['extends'](name, parentRef)));
}
block.body.push(new JS.ReturnStatement(new JS.ThisExpression));
rewriteThis = generateMutatingWalker(function () {
if (this['instanceof'](JS.ThisExpression)) {
return name;
} else if (this['instanceof'](JS.FunctionExpression, JS.FunctionDeclaration)) {
return this;
} else {
return rewriteThis(this);
}
});
rewriteThis(block);
iife = new JS.CallExpression(new JS.FunctionExpression(null, params, block), args);
if (null != nameAssignee) {
return assignment(nameAssignee, iife);
} else {
return iife;
}
}
],
[
CS.Constructor,
function (param$) {
var expression, tmpName;
expression = param$.expression;
tmpName = genSym('class');
if (this.expression['instanceof'](CS.Functions)) {
return new JS.FunctionDeclaration(tmpName, expression.params, forceBlock(expression.body));
} else {
return new JS.FunctionDeclaration(tmpName, [], new JS.BlockStatement([]));
}
}
],
[
CS.ClassProtoAssignOp,
function (param$) {
var assignee, cache$2, compile, expression, protoMember;
{
cache$2 = param$;
assignee = cache$2.assignee;
expression = cache$2.expression;
compile = cache$2.compile;
}
if (this.expression['instanceof'](CS.BoundFunction)) {
return compile(new CS.ClassProtoAssignOp(this.assignee, new CS.Function(this.expression.parameters, this.expression.body)));
} else {
protoMember = memberAccess(memberAccess(new JS.ThisExpression, 'prototype'), this.assignee.data);
return new JS.AssignmentExpression('=', protoMember, expression);
}
}
],
[
CS.AssignOp,
function (param$) {
var ancestry, assignee, cache$2, expression;
{
cache$2 = param$;
assignee = cache$2.assignee;
expression = cache$2.expression;
ancestry = cache$2.ancestry;
}
return assignment(assignee, expression, usedAsExpression(this, ancestry));
}
],
[
CS.CompoundAssignOp,
function (param$) {
var assignee, cache$2, expression, op;
{
cache$2 = param$;
assignee = cache$2.assignee;
expression = cache$2.expression;
}
op = function () {
switch (this.op) {
case CS.LogicalAndOp.prototype.className:
return '&&';
case CS.LogicalOrOp.prototype.className:
return '||';
case CS.BitOrOp.prototype.className:
return '|';
case CS.BitXorOp.prototype.className:
return '^';
case CS.BitAndOp.prototype.className:
return '&';
case CS.LeftShiftOp.prototype.className:
return '<<';
case CS.SignedRightShiftOp.prototype.className:
return '>>';
case CS.UnsignedRightShiftOp.prototype.className:
return '>>>';
case CS.PlusOp.prototype.className:
return '+';
case CS.SubtractOp.prototype.className:
return '-';
case CS.MultiplyOp.prototype.className:
return '*';
case CS.DivideOp.prototype.className:
return '/';
case CS.RemOp.prototype.className:
return '%';
case CS.ExpOp.prototype.className:
return '**';
default:
throw new Error('Unrecognised compound assignment operator');
}
}.call(this);
if (op === '&&' || op === '||') {
return new JS.BinaryExpression(op, assignee, new JS.AssignmentExpression('=', assignee, expr(expression)));
} else if (op === '**') {
return new JS.AssignmentExpression('=', assignee, helpers.exp(assignee, expr(expression)));
} else {
return new JS.AssignmentExpression('' + op + '=', assignee, expression);
}
}
],
[
CS.ExistsAssignOp,
function (param$) {
var assignee, cache$2, condition, expression, inScope;
{
cache$2 = param$;
assignee = cache$2.assignee;
expression = cache$2.expression;
inScope = cache$2.inScope;
}
if (assignee['instanceof'](JS.Identifier) && !in$(assignee.name, inScope))
throw new Error('the variable "' + assignee.name + '" can\'t be assigned with ?= because it has not been defined.');
condition = new JS.BinaryExpression('!=', new JS.Literal(null), assignee);
return new JS.ConditionalExpression(condition, assignee, new JS.AssignmentExpression('=', assignee, expr(expression)));
}
],
[
CS.ChainedComparisonOp,
function (param$) {
var cache$2, compile, expression, left, lhs;
{
cache$2 = param$;
expression = cache$2.expression;
compile = cache$2.compile;
}
if (!this.expression.left['instanceof'](CS.ComparisonOps))
return expression;
left = expression.left.right;
lhs = compile(new CS.ChainedComparisonOp(this.expression.left));
if (needsCaching(this.expression.left.right)) {
left = genSym('cache');
if (this.expression.left.left['instanceof'](CS.ComparisonOps)) {
lhs.right.right = new JS.AssignmentExpression('=', left, lhs.right.right);
} else {
lhs.right = new JS.AssignmentExpression('=', left, lhs.right);
}
}
return new JS.BinaryExpression('&&', lhs, new JS.BinaryExpression(expression.operator, left, expression.right));
}
],
[
CS.FunctionApplication,
function (param$) {
var args, cache$2, compile, context, lhs;
{
cache$2 = param$;
fn = cache$2['function'];
args = cache$2['arguments'];
compile = cache$2.compile;
}
if (any(args, function (m) {
return m.spread;
})) {
lhs = this['function'];
context = new CS.Null;
if (needsCaching(this['function'])) {
context = new CS.GenSym('cache');
lhs = this['function']['instanceof'](CS.StaticMemberAccessOps) ? new this['function'].constructor(new CS.AssignOp(context, lhs.expression), this['function'].memberName) : this['function']['instanceof'](CS.DynamicMemberAccessOps) ? new this['function'].constructor(new CS.AssignOp(context, lhs.expression), this['function'].indexingExpr) : new CS.AssignOp(context, lhs);
} else if (lhs['instanceof'](CS.MemberAccessOps)) {
context = lhs.expression;
}
if (this['function']['instanceof'](CS.ProtoMemberAccessOp, CS.DynamicProtoMemberAccessOp)) {
context = new CS.MemberAccessOp(context, 'prototype');
} else if (this['function']['instanceof'](CS.SoakedProtoMemberAccessOp, CS.SoakedDynamicProtoMemberAccessOp)) {
context = new CS.SoakedMemberAccessOp(context, 'prototype');
}
return compile(new CS.FunctionApplication(new CS.MemberAccessOp(lhs, 'apply'), [
context,
new CS.ArrayInitialiser(this['arguments'])
]));
} else if (hasSoak(this)) {
return compile(generateSoak(this));
} else {
return new JS.CallExpression(expr(fn), map(args, expr));
}
}
],
[
CS.SoakedFunctionApplication,
function (param$) {
var compile;
compile = param$.compile;
return compile(generateSoak(this));
}
],
[
CS.NewOp,
function (param$) {
var args, cache$2, compile, ctor;
{
cache$2 = param$;
ctor = cache$2.ctor;
args = cache$2['arguments'];
compile = cache$2.compile;
}
if (any(args, function (m) {
return m.spread;
})) {
return helpers.construct(ctor, compile(new CS.ArrayInitialiser(this['arguments'])));
} else {
return new JS.NewExpression(ctor, map(args, expr));
}
}
],
[
CS.HeregExp,
function (param$) {
var args, expression, flags;
expression = param$.expression;
args = [expression];
if (flags = function (accum$) {
var flag;
for (var cache$2 = [
'g',
'i',
'm',
'y'
], i$ = 0, length$ = cache$2.length; i$ < length$; ++i$) {
flag = cache$2[i$];
if (!this.flags[flag])
continue;
accum$.push(flag);
}
return accum$;
}.call(this, []).join(''))
args.push(new JS.Literal(flags));
return new JS.NewExpression(new JS.Identifier('RegExp'), args);
}
],
[
CS.RegExp,
function () {
var flags, re;
flags = function (accum$) {
var flag;
for (var cache$2 = [
'g',
'i',
'm',
'y'
], i$ = 0, length$ = cache$2.length; i$ < length$; ++i$) {
flag = cache$2[i$];
if (!this.flags[flag])
continue;
accum$.push(flag);
}
return accum$;
}.call(this, []).join('');
re = new RegExp(this.data, flags);
return new JS.Literal(re);
}
],
[
CS.ConcatOp,
function (param$) {
var ancestry, cache$2, left, leftmost, plusOp, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
ancestry = cache$2.ancestry;
}
plusOp = new JS.BinaryExpression('+', expr(left), expr(right));
if (!ancestry[0]['instanceof'](CS.ConcatOp)) {
leftmost = plusOp;
while (null != (null != leftmost.left ? leftmost.left.left : void 0)) {
leftmost = leftmost.left;
}
if (!(leftmost.left['instanceof'](JS.Literal) && 'string' === typeof leftmost.left.value))
leftmost.left = new JS.BinaryExpression('+', new JS.Literal(''), leftmost.left);
}
return plusOp;
}
],
[
CS.MemberAccessOp,
CS.SoakedMemberAccessOp,
function (param$) {
var cache$2, compile, expression;
{
cache$2 = param$;
expression = cache$2.expression;
compile = cache$2.compile;
}
if (hasSoak(this)) {
return expr(compile(generateSoak(this)));
} else {
return memberAccess(expression, this.memberName);
}
}
],
[
CS.ProtoMemberAccessOp,
CS.SoakedProtoMemberAccessOp,
function (param$) {
var cache$2, compile, expression;
{
cache$2 = param$;
expression = cache$2.expression;
compile = cache$2.compile;
}
if (hasSoak(this)) {
return expr(compile(generateSoak(this)));
} else {
return memberAccess(memberAccess(expression, 'prototype'), this.memberName);
}
}
],
[
CS.DynamicMemberAccessOp,
CS.SoakedDynamicMemberAccessOp,
function (param$) {
var cache$2, compile, expression, indexingExpr;
{
cache$2 = param$;
expression = cache$2.expression;
indexingExpr = cache$2.indexingExpr;
compile = cache$2.compile;
}
if (hasSoak(this)) {
return expr(compile(generateSoak(this)));
} else {
return dynamicMemberAccess(expression, indexingExpr);
}
}
],
[
CS.DynamicProtoMemberAccessOp,
CS.SoakedDynamicProtoMemberAccessOp,
function (param$) {
var cache$2, compile, expression, indexingExpr;
{
cache$2 = param$;
expression = cache$2.expression;
indexingExpr = cache$2.indexingExpr;
compile = cache$2.compile;
}
if (hasSoak(this)) {
return expr(compile(generateSoak(this)));
} else {
return dynamicMemberAccess(memberAccess(expression, 'prototype'), indexingExpr);
}
}
],
[
CS.Slice,
function (param$) {
var args, cache$2, expression, left, right;
{
cache$2 = param$;
expression = cache$2.expression;
left = cache$2.left;
right = cache$2.right;
}
args = null != left ? [left] : null != right ? [new JS.Literal(0)] : [];
if (null != right)
args.push(this.isInclusive ? right['instanceof'](JS.Literal) && typeof right.data === 'number' ? new JS.Literal(right.data + 1) : new JS.BinaryExpression('+', new JS.UnaryExpression('+', right), new JS.Literal(1)) : right);
return new JS.CallExpression(memberAccess(expression, 'slice'), args);
}
],
[
CS.ExistsOp,
function (param$) {
var cache$2, condition, e, inScope, left, node, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
inScope = cache$2.inScope;
}
e = needsCaching(this.left) ? genSym('cache') : expr(left);
condition = new JS.BinaryExpression('!=', new JS.Literal(null), e);
if (e['instanceof'](JS.Identifier) && !in$(e.name, inScope))
condition = new JS.BinaryExpression('&&', new JS.BinaryExpression('!==', new JS.Literal('undefined'), new JS.UnaryExpression('typeof', e)), condition);
node = new JS.ConditionalExpression(condition, e, expr(right));
if (e === left) {
return node;
} else {
return new JS.SequenceExpression([
new JS.AssignmentExpression('=', e, left),
node
]);
}
}
],
[
CS.UnaryExistsOp,
function (param$) {
var cache$2, expression, inScope, nullTest, typeofTest;
{
cache$2 = param$;
expression = cache$2.expression;
inScope = cache$2.inScope;
}
nullTest = new JS.BinaryExpression('!=', new JS.Literal(null), expression);
if (expression['instanceof'](JS.Identifier) && !in$(expression.name, inScope)) {
typeofTest = new JS.BinaryExpression('!==', new JS.Literal('undefined'), new JS.UnaryExpression('typeof', expression));
return new JS.BinaryExpression('&&', typeofTest, nullTest);
} else {
return nullTest;
}
}
],
[
CS.DoOp,
function (param$) {
var args, cache$2, compile, expression;
{
cache$2 = param$;
expression = cache$2.expression;
compile = cache$2.compile;
}
args = [];
if (this.expression['instanceof'](CS.Function))
args = function (accum$) {
var index, param;
for (var i$ = 0, length$ = this.expression.parameters.length; i$ < length$; ++i$) {
param = this.expression.parameters[i$];
index = i$;
accum$.push(function () {
switch (false) {
case !param['instanceof'](CS.DefaultParam):
this.expression.parameters[index] = param.param;
return param['default'];
case !param['instanceof'](CS.Identifier, CS.MemberAccessOp):
return param;
default:
return helpers.undef();
}
}.call(this));
}
return accum$;
}.call(this, []);
return compile(new CS.FunctionApplication(this.expression, args));
}
],
[
CS.Return,
function (param$) {
var e;
e = param$.expression;
return new JS.ReturnStatement(expr(e));
}
],
[
CS.Break,
function () {
return new JS.BreakStatement;
}
],
[
CS.Continue,
function () {
return new JS.ContinueStatement;
}
],
[
CS.ExpOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return helpers.exp(expr(left), expr(right));
}
],
[
CS.DivideOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('/', expr(left), expr(right));
}
],
[
CS.MultiplyOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('*', expr(left), expr(right));
}
],
[
CS.RemOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('%', expr(left), expr(right));
}
],
[
CS.PlusOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('+', expr(left), expr(right));
}
],
[
CS.SubtractOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('-', expr(left), expr(right));
}
],
[
CS.OfOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('in', expr(left), expr(right));
}
],
[
CS.InOp,
function (param$) {
var cache$2, comparisons, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
if (right['instanceof'](JS.ArrayExpression) && right.elements.length < 5) {
switch (right.elements.length) {
case 0:
if (needsCaching(this.left)) {
return new JS.SequenceExpression([
left,
new JS.Literal(false)
]);
} else {
return new JS.Literal(false);
}
case 1:
return new JS.BinaryExpression('===', left, right.elements[0]);
default:
if (needsCaching(this.left)) {
return helpers['in'](expr(left), expr(right));
} else {
comparisons = map(right.elements, function (e) {
return new JS.BinaryExpression('===', left, e);
});
return foldl1(comparisons, function (l, r) {
return new JS.BinaryExpression('||', l, r);
});
}
}
} else {
return helpers['in'](expr(left), expr(right));
}
}
],
[
CS.ExtendsOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return helpers['extends'](expr(left), expr(right));
}
],
[
CS.InstanceofOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('instanceof', expr(left), expr(right));
}
],
[
CS.LogicalAndOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('&&', expr(left), expr(right));
}
],
[
CS.LogicalOrOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('||', expr(left), expr(right));
}
],
[
CS.EQOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('===', expr(left), expr(right));
}
],
[
CS.NEQOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('!==', expr(left), expr(right));
}
],
[
CS.GTEOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('>=', expr(left), expr(right));
}
],
[
CS.GTOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('>', expr(left), expr(right));
}
],
[
CS.LTEOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('<=', expr(left), expr(right));
}
],
[
CS.LTOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('<', expr(left), expr(right));
}
],
[
CS.BitAndOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('&', expr(left), expr(right));
}
],
[
CS.BitOrOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('|', expr(left), expr(right));
}
],
[
CS.BitXorOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('^', expr(left), expr(right));
}
],
[
CS.LeftShiftOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('<<', expr(left), expr(right));
}
],
[
CS.SignedRightShiftOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('>>', expr(left), expr(right));
}
],
[
CS.UnsignedRightShiftOp,
function (param$) {
var cache$2, left, right;
{
cache$2 = param$;
left = cache$2.left;
right = cache$2.right;
}
return new JS.BinaryExpression('>>>', expr(left), expr(right));
}
],
[
CS.PreDecrementOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UpdateExpression('--', true, expr(e));
}
],
[
CS.PreIncrementOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UpdateExpression('++', true, expr(e));
}
],
[
CS.PostDecrementOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UpdateExpression('--', false, expr(e));
}
],
[
CS.PostIncrementOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UpdateExpression('++', false, expr(e));
}
],
[
CS.UnaryPlusOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UnaryExpression('+', expr(e));
}
],
[
CS.UnaryNegateOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UnaryExpression('-', expr(e));
}
],
[
CS.LogicalNotOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UnaryExpression('!', expr(e));
}
],
[
CS.BitNotOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UnaryExpression('~', expr(e));
}
],
[
CS.TypeofOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UnaryExpression('typeof', expr(e));
}
],
[
CS.DeleteOp,
function (param$) {
var e;
e = param$.expression;
return new JS.UnaryExpression('delete', expr(e));
}
],
[
CS.Identifier,
function () {
return new JS.Identifier(this.data);
}
],
[
CS.GenSym,
function () {
var memos, symbols;
symbols = [];
memos = [];
return function () {
var memo;
if (in$(this, symbols)) {
return memos[symbols.indexOf(this)];
} else {
symbols.push(this);
memos.push(memo = genSym(this.data));
return memo;
}
};
}()
],
[
CS.Bool,
CS.Int,
CS.Float,
CS.String,
function () {
return new JS.Literal(this.data);
}
],
[
CS.Null,
function () {
return new JS.Literal(null);
}
],
[
CS.Undefined,
function () {
return helpers.undef();
}
],
[
CS.This,
function () {
return new JS.ThisExpression;
}
],
[
CS.JavaScript,
function () {
return new JS.CallExpression(new JS.Identifier('eval'), [new JS.Literal(this.data)]);
}
]
];
function Compiler() {
var cache$2, ctor, ctors, handler, size$;
this.rules = {};
for (var i$ = 0, length$ = defaultRules.length; i$ < length$; ++i$) {
{
cache$2 = defaultRules[i$];
size$ = cache$2.length;
ctors = size$ > 1 ? [].slice.call(cache$2, 0, size$ - 1) : [];
handler = cache$2[size$ - 1];
}
for (var i$1 = 0, length$1 = ctors.length; i$1 < length$1; ++i$1) {
ctor = ctors[i$1];
this.addRule(ctor, handler);
}
}
}
Compiler.prototype.addRule = function (ctor, handler) {
this.rules[ctor.prototype.className] = handler;
return this;
};
Compiler.prototype.compile = function () {
var defaultRule, generateSymbols, walk;
walk = function (fn, inScope, ancestry, options) {
var child, childName, children, jsNode, p;
if ((null != ancestry[0] ? ancestry[0]['instanceof'](CS.Function, CS.BoundFunction) : void 0) && this === ancestry[0].body)
inScope = union(inScope, concatMap(ancestry[0].parameters, beingDeclared));
ancestry.unshift(this);
children = {};
for (var i$ = 0, length$ = this.childNodes.length; i$ < length$; ++i$) {
childName = this.childNodes[i$];
if (!(null != this[childName]))
continue;
children[childName] = in$(childName, this.listMembers) ? function (accum$) {
var jsNode, member;
for (var i$1 = 0, length$1 = this[childName].length; i$1 < length$1; ++i$1) {
member = this[childName][i$1];
jsNode = walk.call(member, fn, inScope, ancestry);
inScope = union(inScope, envEnrichments(member, inScope));
accum$.push(jsNode);
}
return accum$;
}.call(this, []) : (child = this[childName], jsNode = walk.call(child, fn, inScope, ancestry), inScope = union(inScope, envEnrichments(child, inScope)), jsNode);
}
children.inScope = inScope;
children.ancestry = ancestry;
children.options = options;
children.compile = function (node) {
return walk.call(node.g(), fn, inScope, ancestry);
};
ancestry.shift();
jsNode = fn.call(this, children);
for (var cache$2 = [
'raw',
'line',
'column',
'offset'
], i$1 = 0, length$1 = cache$2.length; i$1 < length$1; ++i$1) {
p = cache$2[i$1];
jsNode[p] = this[p];
}
return jsNode;
};
generateSymbols = function () {
var format, generatedSymbols, generateName;
generatedSymbols = {};
format = function (pre, counter) {
var cache$2, div, mod;
if (pre) {
return '' + pre + '$' + (counter || '');
} else if (counter < 26) {
return String.fromCharCode(97 + counter);
} else {
cache$2 = divMod(counter, 26);
div = cache$2[0];
mod = cache$2[1];
return format(pre, div - 1) + format(pre, mod);
}
};
generateName = function (node, param$) {
var cache$2, formatted, nsCounters, usedSymbols;
{
cache$2 = param$;
usedSymbols = cache$2.usedSymbols;
nsCounters = cache$2.nsCounters;
}
if (owns(generatedSymbols, node.uniqueId)) {
return generatedSymbols[node.uniqueId];
} else {
nsCounters[node.ns] = owns(nsCounters, node.ns) ? 1 + nsCounters[node.ns] : 0;
while (in$(formatted = format(node.ns, nsCounters[node.ns]), usedSymbols)) {
++nsCounters[node.ns];
}
return generatedSymbols[node.uniqueId] = formatted;
}
};
return generateMutatingWalker(function (state) {
var cache$2, declaredSymbols, declNames, decls, newNode, nsCounters, nsCounters_, params, usedSymbols;
state.declaredSymbols = union(state.declaredSymbols, map(declarationsNeeded(this), function (id) {
return id.name;
}));
cache$2 = state;
declaredSymbols = cache$2.declaredSymbols;
usedSymbols = cache$2.usedSymbols;
nsCounters = cache$2.nsCounters;
newNode = this['instanceof'](JS.GenSym) ? (newNode = new JS.Identifier(generateName(this, state)), usedSymbols.push(newNode.name), newNode) : this['instanceof'](JS.FunctionExpression, JS.FunctionDeclaration) ? (params = concatMap(this.params, collectIdentifiers), nsCounters_ = {}, function (accum$) {
var k, v;
for (k in nsCounters) {
if (!isOwn$(nsCounters, k))
continue;
v = nsCounters[k];
accum$.push(nsCounters_[k] = v);
}
return accum$;
}.call(this, []), newNode = generateSymbols(this, {
declaredSymbols: union(declaredSymbols, params),
usedSymbols: union(usedSymbols, params),
nsCounters: nsCounters_
}), newNode.body = forceBlock(newNode.body), declNames = nub(difference(map(declarationsNeededRecursive(this.body), function (id) {
return id.name;
}), union(declaredSymbols, params))), decls = map(declNames, function (name) {
return new JS.Identifier(name);
}), decls.length > 0 ? newNode.body.body.unshift(makeVarDeclaration(decls)) : void 0, newNode) : generateSymbols(this, state);
state.declaredSymbols = union(declaredSymbols, map(declarationsNeededRecursive(newNode), function (id) {
return id.name;
}));
return newNode;
});
}();
defaultRule = function () {
throw new Error('compile: Non-exhaustive patterns in case: ' + this.className);
};
return function (ast, options) {
var jsAST, rules;
if (null == options)
options = {};
if (null != options.bare)
options.bare;
else
options.bare = false;
rules = this.rules;
jsAST = walk.call(ast, function () {
return (null != rules[this.className] ? rules[this.className] : defaultRule).apply(this, arguments);
}, [], [], options);
return generateSymbols(jsAST, {
declaredSymbols: [],
usedSymbols: union(jsReserved.slice(), collectIdentifiers(jsAST)),
nsCounters: {}
});
};
}();
return Compiler;
}();
function in$(member, list) {
for (var i = 0, length = list.length; i < length; ++i)
if (i in list && list[i] === member)
return true;
return false;
}
function isOwn$(o, p) {
return {}.hasOwnProperty.call(o, p);
}
});
require.define("/lib/coffee-script/js-nodes.js",function(require,module,exports,__dirname,__filename,process,global){// Generated by CoffeeScript 2.0.0-dev
var ArrayExpression, AssignmentExpression, BinaryExpression, BlockStatement, CallExpression, createNode, ctor, difference, exports, FunctionDeclaration, FunctionExpression, GenSym, handleLists, handlePrimitives, Identifier, isStatement, Literal, MemberExpression, NewExpression, node, nodeData, Nodes, ObjectExpression, params, Program, SequenceExpression, SwitchCase, SwitchStatement, TryStatement, UnaryExpression, UpdateExpression, VariableDeclaration, VariableDeclaration;
difference = require('./functional-helpers').difference;
exports = null != ('undefined' !== typeof module && null != module ? module.exports : void 0) ? 'undefined' !== typeof module && null != module ? module.exports : void 0 : this;
createNode = function (type, props) {
return function (super$) {
extends$(class$, super$);
function class$() {
var i, prop;
for (var i$ = 0, length$ = props.length; i$ < length$; ++i$) {
prop = props[i$];
i = i$;
this[prop] = arguments[i];
}
}
class$.prototype.type = type;
class$.prototype.childNodes = props;
return class$;
}(Nodes);
};
this.Nodes = Nodes = function () {
function Nodes() {
}
Nodes.prototype.listMembers = [];
Nodes.prototype['instanceof'] = function (ctors) {
var ctor;
ctors = 1 <= arguments.length ? [].slice.call(arguments, 0) : [];
for (var i$ = 0, length$ = ctors.length; i$ < length$; ++i$) {
ctor = ctors[i$];
if (!(this.type === ctor.prototype.type))
continue;
return true;
}
return false;
};
Nodes.prototype.toJSON = function () {
var child, json;
json = {'type': this.type};
if (null != this.leadingComments)
json.leadingComments = this.leadingComments;
for (var i$ = 0, length$ = this.childNodes.length; i$ < length$; ++i$) {
child = this.childNodes[i$];
if (in$(child, this.listMembers)) {
json[child] = function (accum$) {
var p;
for (var i$1 = 0, length$1 = this[child].length; i$1 < length$1; ++i$1) {
p = this[child][i$1];
accum$.push('undefined' !== typeof p && null != p ? p.toJSON() : void 0);
}
return accum$;
}.call(this, []);
} else {
json[child] = null != this[child] ? this[child].toJSON() : void 0;
}
}
if (null != this.line && null != this.column)
json.loc = {start: {
'line': this.line,
'column': this.column
}};
if (null != this.offset)
json.range = [
this.offset,
null != this.raw ? this.offset + this.raw.length : void 0
];
if (null != this.raw)
json.raw = this.raw;
return json;
};
return Nodes;
}();
nodeData = [
[
'ArrayExpression',
false,
['elements']
],
[
'AssignmentExpression',
false,
[
'operator',
'left',
'right'
]
],
[
'BinaryExpression',
false,
[
'operator',
'left',
'right'
]
],
[
'BlockStatement',
true,
['body']
],
[
'BreakStatement',
true,
['label']
],
[
'CallExpression',
false,
[
'callee',
'arguments'
]
],
[
'CatchClause',
true,
[
'param',
'body'
]
],
[
'ConditionalExpression',
false,
[
'test',
'consequent',
'alternate'
]
],
[
'ContinueStatement',
true,
['label']
],
[
'DebuggerStatement',
true,
[]
],
[
'DoWhileStatement',
true,
[
'body',
'test'
]
],
[
'EmptyStatement',
true,
[]
],
[
'ExpressionStatement',
true,
['expression']
],
[
'ForInStatement',
true,
[
'left',
'right',
'body'
]
],
[
'ForStatement',
true,
[
'init',
'test',
'update',
'body'
]
],
[
'FunctionDeclaration',
true,
[
'id',
'params',
'body'
]
],
[
'FunctionExpression',
false,
[
'id',
'params',
'body'
]
],
[
'GenSym',
false,
[
'ns',
'uniqueId'
]
],
[
'Identifier',
false,
['name']
],
[
'IfStatement',
true,
[
'test',
'consequent',
'alternate'
]
],
[
'LabeledStatement',
true,
[
'label',
'body'
]
],
[
'Literal',
false,
['value']
],
[
'LogicalExpression',
false,
[
'left',
'right'
]
],
[
'MemberExpression',
false,
[
'computed',
'object',
'property'
]
],
[
'NewExpression',
false,
[
'callee',
'arguments'
]
],
[
'ObjectExpression',
false,
['properties']
],
[
'Program',
true,
['body']
],
[
'Property',
true,
[
'key',
'value'
]
],
[
'ReturnStatement',
true,
['argument']
],
[
'SequenceExpression',
false,
['expressions']
],
[
'SwitchCase',
true,
[
'test',
'consequent'
]
],
[
'SwitchStatement',
true,
[
'discriminant',
'cases'
]
],
[
'ThisExpression',
false,
[]
],
[
'ThrowStatement',
true,
['argument']
],
[
'TryStatement',
true,
[
'block',
'handlers',
'finalizer'
]
],
[
'UnaryExpression',
false,
[
'operator',
'argument'
]
],
[
'UpdateExpression',
false,
[
'operator',
'prefix',
'argument'
]
],
[
'VariableDeclaration',
true,
[
'kind',
'declarations'
]
],
[
'VariableDeclarator',
true,
[
'id',
'init'
]
],
[
'WhileStatement',
true,
[
'test',
'body'
]
],
[
'WithStatement',
true,
[
'object',
'body'
]
]
];
for (var i$ = 0, length$ = nodeData.length; i$ < length$; ++i$) {
{
cache$ = nodeData[i$];
node = cache$[0];
isStatement = cache$[1];
params = cache$[2];
}
exports[node] = ctor = createNode(node, params);
ctor.prototype.isStatement = isStatement;
ctor.prototype.isExpression = !isStatement;
}
cache$1 = exports;
Program = cache$1.Program;
BlockStatement = cache$1.BlockStatement;
Literal = cache$1.Literal;
Identifier = cache$1.Identifier;
FunctionExpression = cache$1.FunctionExpression;
CallExpression = cache$1.CallExpression;
SequenceExpression = cache$1.SequenceExpression;
ArrayExpression = cache$1.ArrayExpression;
BinaryExpression = cache$1.BinaryExpression;
UnaryExpression = cache$1.UnaryExpression;
NewExpression = cache$1.NewExpression;
VariableDeclaration = cache$1.VariableDeclaration;
ObjectExpression = cache$1.ObjectExpression;
MemberExpression = cache$1.MemberExpression;
UpdateExpression = cache$1.UpdateExpression;
AssignmentExpression = cache$1.AssignmentExpression;
GenSym = cache$1.GenSym;
FunctionDeclaration = cache$1.FunctionDeclaration;
VariableDeclaration = cache$1.VariableDeclaration;
SwitchStatement = cache$1.SwitchStatement;
SwitchCase = cache$1.SwitchCase;
TryStatement = cache$1.TryStatement;
handlePrimitives = function (ctor, primitives) {
ctor.prototype.childNodes = difference(ctor.prototype.childNodes, primitives);
return ctor.prototype.toJSON = function () {
var json, primitive;
json = Nodes.prototype.toJSON.call(this);
for (var i$1 = 0, length$1 = primitives.length; i$1 < length$1; ++i$1) {
primitive = primitives[i$1];
json[primitive] = this[primitive];
}
return json;
};
};
handlePrimitives(AssignmentExpression, ['operator']);
handlePrimitives(BinaryExpression, ['operator']);
handlePrimitives(GenSym, [
'ns',
'uniqueId'
]);
handlePrimitives(Identifier, ['name']);
handlePrimitives(Literal, ['value']);
handlePrimitives(MemberExpression, ['computed']);
handlePrimitives(UnaryExpression, ['operator']);
handlePrimitives(UpdateExpression, [
'operator',
'prefix'
]);
handlePrimitives(VariableDeclaration, ['kind']);
handleLists = function (ctor, listProps) {
return ctor.prototype.listMembers = listProps;
};
handleLists(ArrayExpression, ['elements']);
handleLists(BlockStatement, ['body']);
handleLists(CallExpression, ['arguments']);
handleLists(FunctionDeclaration, ['params']);
handleLists(FunctionExpression, ['params']);
handleLists(NewExpression, ['arguments']);
handleLists(ObjectExpression, ['properties']);
handleLists(Program, ['body']);
handleLists(SequenceExpression, ['expressions']);
handleLists(SwitchCase, ['consequent']);
handleLists(SwitchStatement, ['cases']);
handleLists(TryStatement, ['handlers']);
handleLists(VariableDeclaration, ['declarations']);
function isOwn$(o, p) {
return {}.hasOwnProperty.call(o, p);
}
function extends$(child, parent) {
var key;
for (key in parent)
if (isOwn$(parent, key))
child[key] = parent[key];
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
}
function in$(member, list) {
for (var i = 0, length = list.length; i < length; ++i)
if (i in list && list[i] === member)
return true;
return false;
}
});
require.define("/node_modules/escodegen/package.json",function(require,module,exports,__dirname,__filename,process,global){module.exports = {"main":"escodegen.js"}
});
require.define("/node_modules/escodegen/escodegen.js",function(require,module,exports,__dirname,__filename,process,global){/*
Copyright (C) 2012 Michael Ficarra <escodegen.copyright@michael.ficarra.me>
Copyright (C) 2012 Robert Gust-Bardon <donate@robert.gust-bardon.org>
Copyright (C) 2012 John Freeman <jfreeman08@gmail.com>
Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>
Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>
Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>
Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*jslint bitwise:true */
/*global escodegen:true, exports:true, generateStatement:true, process:true, require:true, define:true*/
(function (factory, global) {
'use strict';
// Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
// and plain browser loading,
if (typeof define === 'function' && define.amd) {
define(['exports'], function (exports) {
factory(exports, global);
});
} else if (typeof exports !== 'undefined') {
factory(exports, global);
} else {
factory((global.escodegen = {}), global);
}
}(function (exports, global) {
'use strict';
var Syntax,
Precedence,
BinaryPrecedence,
Regex,
VisitorKeys,
VisitorOption,
SourceNode,
isArray,
base,
indent,
json,
renumber,
hexadecimal,
quotes,
escapeless,
newline,
space,
parentheses,
semicolons,
safeConcatenation,
directive,
extra,
parse,
sourceMap;
Syntax = {
AssignmentExpression: 'AssignmentExpression',
ArrayExpression: 'ArrayExpression',
BlockStatement: 'BlockStatement',
BinaryExpression: 'BinaryExpression',
BreakStatement: 'BreakStatement',
CallExpression: 'CallExpression',
CatchClause: 'CatchClause',
ConditionalExpression: 'ConditionalExpression',
ContinueStatement: 'ContinueStatement',
DirectiveStatement: 'DirectiveStatement',
DoWhileStatement: 'DoWhileStatement',
DebuggerStatement: 'DebuggerStatement',
EmptyStatement: 'EmptyStatement',
ExpressionStatement: 'ExpressionStatement',
ForStatement: 'ForStatement',
ForInStatement: 'ForInStatement',
FunctionDeclaration: 'FunctionDeclaration',
FunctionExpression: 'FunctionExpression',
Identifier: 'Identifier',
IfStatement: 'IfStatement',
Literal: 'Literal',
LabeledStatement: 'LabeledStatement',
LogicalExpression: 'LogicalExpression',
MemberExpression: 'MemberExpression',
NewExpression: 'NewExpression',
ObjectExpression: 'ObjectExpression',
Program: 'Program',
Property: 'Property',
ReturnStatement: 'ReturnStatement',
SequenceExpression: 'SequenceExpression',
SwitchStatement: 'SwitchStatement',
SwitchCase: 'SwitchCase',
ThisExpression: 'ThisExpression',
ThrowStatement: 'ThrowStatement',
TryStatement: 'TryStatement',
UnaryExpression: 'UnaryExpression',
UpdateExpression: 'UpdateExpression',
VariableDeclaration: 'VariableDeclaration',
VariableDeclarator: 'VariableDeclarator',
WhileStatement: 'WhileStatement',
WithStatement: 'WithStatement'
};
Precedence = {
Sequence: 0,
Assignment: 1,
Conditional: 2,
LogicalOR: 3,
LogicalAND: 4,
BitwiseOR: 5,
BitwiseXOR: 6,
BitwiseAND: 7,
Equality: 8,
Relational: 9,
BitwiseSHIFT: 10,
Additive: 11,
Multiplicative: 12,
Unary: 13,
Postfix: 14,
Call: 15,
New: 16,
Member: 17,
Primary: 18
};
BinaryPrecedence = {
'||': Precedence.LogicalOR,
'&&': Precedence.LogicalAND,
'|': Precedence.BitwiseOR,
'^': Precedence.BitwiseXOR,
'&': Precedence.BitwiseAND,
'==': Precedence.Equality,
'!=': Precedence.Equality,
'===': Precedence.Equality,
'!==': Precedence.Equality,
'<': Precedence.Relational,
'>': Precedence.Relational,
'<=': Precedence.Relational,
'>=': Precedence.Relational,
'in': Precedence.Relational,
'instanceof': Precedence.Relational,
'<<': Precedence.BitwiseSHIFT,
'>>': Precedence.BitwiseSHIFT,
'>>>': Precedence.BitwiseSHIFT,
'+': Precedence.Additive,
'-': Precedence.Additive,
'*': Precedence.Multiplicative,
'%': Precedence.Multiplicative,
'/': Precedence.Multiplicative
};
Regex = {
NonAsciiIdentifierPart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0\u08a2-\u08ac\u08e4-\u08fe\u0900-\u0963\u0966-\u096f\u0971-\u0977\u0979-\u097f\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191c\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19d9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1d00-\u1de6\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200c\u200d\u203f\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua697\ua69f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua827\ua840-\ua873\ua880-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua900-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a\uaa7b\uaa80-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabea\uabec\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]')
};
function getDefaultOptions() {
// default options
return {
indent: null,
base: null,
parse: null,
comment: false,
format: {
indent: {
style: ' ',
base: 0,
adjustMultilineComment: false
},
json: false,
renumber: false,
hexadecimal: false,
quotes: 'single',
escapeless: false,
compact: false,
parentheses: true,
semicolons: true,
safeConcatenation: false
},
sourceMap: null,
sourceMapWithCode: false,
directive: false
};
}
function stringToArray(str) {
var length = str.length,
result = [],
i;
for (i = 0; i < length; i += 1) {
result[i] = str.charAt(i);
}
return result;
}
function stringRepeat(str, num) {
var result = '';
for (num |= 0; num > 0; num >>>= 1, str += str) {
if (num & 1) {
result += str;
}
}
return result;
}
isArray = Array.isArray;
if (!isArray) {
isArray = function isArray(array) {
return Object.prototype.toString.call(array) === '[object Array]';
};
}
// Fallback for the non SourceMap environment
function SourceNodeMock(line, column, filename, chunk) {
var result = [];
function flatten(input) {
var i, iz;
if (isArray(input)) {
for (i = 0, iz = input.length; i < iz; ++i) {
flatten(input[i]);
}
} else if (input instanceof SourceNodeMock) {
result.push(input);
} else if (typeof input === 'string' && input) {
result.push(input);
}
}
flatten(chunk);
this.children = result;
}
SourceNodeMock.prototype.toString = function toString() {
var res = '', i, iz, node;
for (i = 0, iz = this.children.length; i < iz; ++i) {
node = this.children[i];
if (node instanceof SourceNodeMock) {
res += node.toString();
} else {
res += node;
}
}
return res;
};
SourceNodeMock.prototype.replaceRight = function replaceRight(pattern, replacement) {
var last = this.children[this.children.length - 1];
if (last instanceof SourceNodeMock) {
last.replaceRight(pattern, replacement);
} else if (typeof last === 'string') {
this.children[this.children.length - 1] = last.replace(pattern, replacement);
} else {
this.children.push(''.replace(pattern, replacement));
}
return this;
};
SourceNodeMock.prototype.join = function join(sep) {
var i, iz, result;
result = [];
iz = this.children.length;
if (iz > 0) {
for (i = 0, iz -= 1; i < iz; ++i) {
result.push(this.children[i], sep);
}
result.push(this.children[iz]);
this.children = result;
}
return this;
};
function endsWithLineTerminator(str) {
var ch = str.charAt(str.length - 1);
return ch === '\r' || ch === '\n';
}
function shallowCopy(obj) {
var ret = {}, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
ret[key] = obj[key];
}
}
return ret;
}
function deepCopy(obj) {
var ret = {}, key, val;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
val = obj[key];
if (typeof val === 'object' && val !== null) {
ret[key] = deepCopy(val);
} else {
ret[key] = val;
}
}
}
return ret;
}
function updateDeeply(target, override) {
var key, val;
function isHashObject(target) {
return typeof target === 'object' && target instanceof Object && !(target instanceof RegExp);
}
for (key in override) {
if (override.hasOwnProperty(key)) {
val = override[key];
if (isHashObject(val)) {
if (isHashObject(target[key])) {
updateDeeply(target[key], val);
} else {
target[key] = updateDeeply({}, val);
}
} else {
target[key] = val;
}
}
}
return target;
}
function generateNumber(value) {
var result, point, temp, exponent, pos;
if (value !== value) {
throw new Error('Numeric literal whose value is NaN');
}
if (value < 0 || (value === 0 && 1 / value < 0)) {
throw new Error('Numeric literal whose value is negative');
}
if (value === 1 / 0) {
return json ? 'null' : renumber ? '1e400' : '1e+400';
}
result = '' + value;
if (!renumber || result.length < 3) {
return result;
}
point = result.indexOf('.');
if (!json && result.charAt(0) === '0' && point === 1) {
point = 0;
result = result.slice(1);
}
temp = result;
result = result.replace('e+', 'e');
exponent = 0;
if ((pos = temp.indexOf('e')) > 0) {
exponent = +temp.slice(pos + 1);
temp = temp.slice(0, pos);
}
if (point >= 0) {
exponent -= temp.length - point - 1;
temp = +(temp.slice(0, point) + temp.slice(point + 1)) + '';
}
pos = 0;
while (temp.charAt(temp.length + pos - 1) === '0') {
pos -= 1;
}
if (pos !== 0) {
exponent -= pos;
temp = temp.slice(0, pos);
}
if (exponent !== 0) {
temp += 'e' + exponent;
}
if ((temp.length < result.length ||
(hexadecimal && value > 1e12 && Math.floor(value) === value && (temp = '0x' + value.toString(16)).length < result.length)) &&
+temp === value) {
result = temp;
}
return result;
}
function escapeAllowedCharacter(ch, next) {
var code = ch.charCodeAt(0), hex = code.toString(16), result = '\\';
switch (ch) {
case '\b':
result += 'b';
break;
case '\f':
result += 'f';
break;
case '\t':
result += 't';
break;
default:
if (json || code > 0xff) {
result += 'u' + '0000'.slice(hex.length) + hex;
} else if (ch === '\u0000' && '0123456789'.indexOf(next) < 0) {
result += '0';
} else if (ch === '\v') {
result += 'v';
} else {
result += 'x' + '00'.slice(hex.length) + hex;
}
break;
}
return result;
}
function escapeDisallowedCharacter(ch) {
var result = '\\';
switch (ch) {
case '\\':
result += '\\';
break;
case '\n':
result += 'n';
break;
case '\r':
result += 'r';
break;
case '\u2028':
result += 'u2028';
break;
case '\u2029':
result += 'u2029';
break;
default:
throw new Error('Incorrectly classified character');
}
return result;
}
function escapeDirective(str) {
var i, iz, ch, single, buf, quote;
buf = str;
if (typeof buf[0] === 'undefined') {
buf = stringToArray(buf);
}
quote = quotes === 'double' ? '"' : '\'';
for (i = 0, iz = buf.length; i < iz; i += 1) {
ch = buf[i];
if (ch === '\'') {
quote = '"';
break;
} else if (ch === '"') {
quote = '\'';
break;
} else if (ch === '\\') {
i += 1;
}
}
return quote + str + quote;
}
function escapeString(str) {
var result = '', i, len, ch, next, singleQuotes = 0, doubleQuotes = 0, single;
if (typeof str[0] === 'undefined') {
str = stringToArray(str);
}
for (i = 0, len = str.length; i < len; i += 1) {
ch = str[i];
if (ch === '\'') {
singleQuotes += 1;
} else if (ch === '"') {
doubleQuotes += 1;
} else if (ch === '/' && json) {
result += '\\';
} else if ('\\\n\r\u2028\u2029'.indexOf(ch) >= 0) {
result += escapeDisallowedCharacter(ch);
continue;
} else if ((json && ch < ' ') || !(json || escapeless || (ch >= ' ' && ch <= '~'))) {
result += escapeAllowedCharacter(ch, str[i + 1]);
continue;
}
result += ch;
}
single = !(quotes === 'double' || (quotes === 'auto' && doubleQuotes < singleQuotes));
str = result;
result = single ? '\'' : '"';
if (typeof str[0] === 'undefined') {
str = stringToArray(str);
}
for (i = 0, len = str.length; i < len; i += 1) {
ch = str[i];
if ((ch === '\'' && single) || (ch === '"' && !single)) {
result += '\\';
}
result += ch;
}
return result + (single ? '\'' : '"');
}
function isWhiteSpace(ch) {
return '\t\v\f \xa0'.indexOf(ch) >= 0 || (ch.charCodeAt(0) >= 0x1680 && '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\ufeff'.indexOf(ch) >= 0);
}
function isLineTerminator(ch) {
return '\n\r\u2028\u2029'.indexOf(ch) >= 0;
}
function isIdentifierPart(ch) {
return (ch === '$') || (ch === '_') || (ch === '\\') ||
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') ||
((ch >= '0') && (ch <= '9')) ||
((ch.charCodeAt(0) >= 0x80) && Regex.NonAsciiIdentifierPart.test(ch));
}
function toSourceNode(generated, node) {
if (node == null) {
if (generated instanceof SourceNode) {
return generated;
} else {
node = {};
}
}
if (node.loc == null) {
return new SourceNode(null, null, sourceMap, generated);
}
return new SourceNode(node.loc.start.line, node.loc.start.column, (sourceMap === true ? node.loc.source || null : sourceMap), generated);
}
function join(left, right) {
var leftSource = toSourceNode(left).toString(),
rightSource = toSourceNode(right).toString(),
leftChar = leftSource.charAt(leftSource.length - 1),
rightChar = rightSource.charAt(0);
if (((leftChar === '+' || leftChar === '-') && leftChar === rightChar) || (isIdentifierPart(leftChar) && isIdentifierPart(rightChar))) {
return [left, ' ', right];
} else if (isWhiteSpace(leftChar) || isLineTerminator(leftChar) || isWhiteSpace(rightChar) || isLineTerminator(rightChar)) {
return [left, right];
}
return [left, space, right];
}
function addIndent(stmt) {
return [base, stmt];
}
function withIndent(fn) {
var previousBase, result;
previousBase = base;
base += indent;
result = fn.call(this, base);
base = previousBase;
return result;
}
function calculateSpaces(str) {
var i;
for (i = str.length - 1; i >= 0; i -= 1) {
if (isLineTerminator(str.charAt(i))) {
break;
}
}
return (str.length - 1) - i;
}
function adjustMultilineComment(value, specialBase) {
var array, i, len, line, j, ch, spaces, previousBase;
array = value.split(/\r\n|[\r\n]/);
spaces = Number.MAX_VALUE;
// first line doesn't have indentation
for (i = 1, len = array.length; i < len; i += 1) {
line = array[i];
j = 0;
while (j < line.length && isWhiteSpace(line[j])) {
j += 1;
}
if (spaces > j) {
spaces = j;
}
}
if (typeof specialBase !== 'undefined') {
// pattern like
// {
// var t = 20; /*
// * this is comment
// */
// }
previousBase = base;
if (array[1][spaces] === '*') {
specialBase += ' ';
}
base = specialBase;
} else {
if (spaces & 1) {
// /*
// *
// */
// If spaces are odd number, above pattern is considered.
// We waste 1 space.
spaces -= 1;
}
previousBase = base;
}
for (i = 1, len = array.length; i < len; i += 1) {
array[i] = toSourceNode(addIndent(array[i].slice(spaces))).join('');
}
base = previousBase;
return array.join('\n');
}
function generateComment(comment, specialBase) {
if (comment.type === 'Line') {
if (endsWithLineTerminator(comment.value)) {
return '//' + comment.value;
} else {
// Always use LineTerminator
return '//' + comment.value + '\n';
}
}
if (extra.format.indent.adjustMultilineComment && /[\n\r]/.test(comment.value)) {
return adjustMultilineComment('/*' + comment.value + '*/', specialBase);
}
return '/*' + comment.value + '*/';
}
function addCommentsToStatement(stmt, result) {
var i, len, comment, save, node, tailingToStatement, specialBase, fragment;
if (stmt.leadingComments && stmt.leadingComments.length > 0) {
save = result;
comment = stmt.leadingComments[0];
result = [];
if (safeConcatenation && stmt.type === Syntax.Program && stmt.body.length === 0) {
result.push('\n');
}
result.push(generateComment(comment));
if (!endsWithLineTerminator(toSourceNode(result).toString())) {
result.push('\n');
}
for (i = 1, len = stmt.leadingComments.length; i < len; i += 1) {
comment = stmt.leadingComments[i];
fragment = [generateComment(comment)];
if (!endsWithLineTerminator(toSourceNode(fragment).toString())) {
fragment.push('\n');
}
result.push(addIndent(fragment));
}
result.push(addIndent(save));
}
if (stmt.trailingComments) {
tailingToStatement = !endsWithLineTerminator(toSourceNode(result).toString());
specialBase = stringRepeat(' ', calculateSpaces(toSourceNode([base, result, indent]).toString()));
for (i = 0, len = stmt.trailingComments.length; i < len; i += 1) {
comment = stmt.trailingComments[i];
if (tailingToStatement) {
// We assume target like following script
//
// var t = 20; /**
// * This is comment of t
// */
if (i === 0) {
// first case
result.push(indent);
} else {
result.push(specialBase);
}
result.push(generateComment(comment, specialBase));
} else {
result.push(addIndent(generateComment(comment)));
}
if (i !== len - 1 && !endsWithLineTerminator(toSourceNode(result).toString())) {
result.push('\n');
}
}
}
return result;
}
function parenthesize(text, current, should) {
if (current < should) {
return ['(', text, ')'];
}
return text;
}
function maybeBlock(stmt, semicolonOptional, functionBody) {
var result, noLeadingComment;
noLeadingComment = !extra.comment || !stmt.leadingComments;
if (stmt.type === Syntax.BlockStatement && noLeadingComment) {
return [space, generateStatement(stmt, { functionBody: functionBody })];
}
if (stmt.type === Syntax.EmptyStatement && noLeadingComment) {
return ';';
}
withIndent(function () {
result = [newline, addIndent(generateStatement(stmt, { semicolonOptional: semicolonOptional, functionBody: functionBody }))];
});
return result;
}
function maybeBlockSuffix(stmt, result) {
var ends = endsWithLineTerminator(toSourceNode(result).toString());
if (stmt.type === Syntax.BlockStatement && (!extra.comment || !stmt.leadingComments) && !ends) {
return [result, space];
}
if (ends) {
return [result, base];
}
return [result, newline, base];
}
function generateFunctionBody(node) {
var result, i, len;
result = ['('];
for (i = 0, len = node.params.length; i < len; i += 1) {
result.push(node.params[i].name);
if (i + 1 < len) {
result.push(',' + space);
}
}
result.push(')', maybeBlock(node.body, false, true));
return result;
}
function generateExpression(expr, option) {
var result, precedence, currentPrecedence, i, len, raw, fragment, multiline, leftChar, leftSource, rightChar, rightSource, allowIn, allowCall, allowUnparenthesizedNew;
precedence = option.precedence;
allowIn = option.allowIn;
allowCall = option.allowCall;
switch (expr.type) {
case Syntax.SequenceExpression:
result = [];
allowIn |= (Precedence.Sequence < precedence);
for (i = 0, len = expr.expressions.length; i < len; i += 1) {
result.push(generateExpression(expr.expressions[i], {
precedence: Precedence.Assignment,
allowIn: allowIn,
allowCall: true
}));
if (i + 1 < len) {
result.push(',' + space);
}
}
result = parenthesize(result, Precedence.Sequence, precedence);
break;
case Syntax.AssignmentExpression:
allowIn |= (Precedence.Assignment < precedence);
result = parenthesize(
[
generateExpression(expr.left, {
precedence: Precedence.Call,
allowIn: allowIn,
allowCall: true
}),
space + expr.operator + space,
generateExpression(expr.right, {
precedence: Precedence.Assignment,
allowIn: allowIn,
allowCall: true
})
],
Precedence.Assignment,
precedence
);
break;
case Syntax.ConditionalExpression:
allowIn |= (Precedence.Conditional < precedence);
result = parenthesize(
[
generateExpression(expr.test, {
precedence: Precedence.LogicalOR,
allowIn: allowIn,
allowCall: true
}),
space + '?' + space,
generateExpression(expr.consequent, {
precedence: Precedence.Assignment,
allowIn: allowIn,
allowCall: true
}),
space + ':' + space,
generateExpression(expr.alternate, {
precedence: Precedence.Assignment,
allowIn: allowIn,
allowCall: true
})
],
Precedence.Conditional,
precedence
);
break;
case Syntax.LogicalExpression:
case Syntax.BinaryExpression:
currentPrecedence = BinaryPrecedence[expr.operator];
allowIn |= (currentPrecedence < precedence);
result = join(
generateExpression(expr.left, {
precedence: currentPrecedence,
allowIn: allowIn,
allowCall: true
}),
expr.operator
);
fragment = generateExpression(expr.right, {
precedence: currentPrecedence + 1,
allowIn: allowIn,
allowCall: true
});
if (expr.operator === '/' && fragment.toString().charAt(0) === '/') {
// If '/' concats with '/', it is interpreted as comment start
result.push(' ', fragment);
} else {
result = join(result, fragment);
}
if (expr.operator === 'in' && !allowIn) {
result = ['(', result, ')'];
} else {
result = parenthesize(result, currentPrecedence, precedence);
}
break;
case Syntax.CallExpression:
result = [generateExpression(expr.callee, {
precedence: Precedence.Call,
allowIn: true,
allowCall: true,
allowUnparenthesizedNew: false
})];
result.push('(');
for (i = 0, len = expr['arguments'].length; i < len; i += 1) {
result.push(generateExpression(expr['arguments'][i], {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
}));
if (i + 1 < len) {
result.push(',' + space);
}
}
result.push(')');
if (!allowCall) {
result = ['(', result, ')'];
} else {
result = parenthesize(result, Precedence.Call, precedence);
}
break;
case Syntax.NewExpression:
len = expr['arguments'].length;
allowUnparenthesizedNew = option.allowUnparenthesizedNew === undefined || option.allowUnparenthesizedNew;
result = join(
'new',
generateExpression(expr.callee, {
precedence: Precedence.New,
allowIn: true,
allowCall: false,
allowUnparenthesizedNew: allowUnparenthesizedNew && !parentheses && len === 0
})
);
if (!allowUnparenthesizedNew || parentheses || len > 0) {
result.push('(');
for (i = 0; i < len; i += 1) {
result.push(generateExpression(expr['arguments'][i], {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
}));
if (i + 1 < len) {
result.push(',' + space);
}
}
result.push(')');
}
result = parenthesize(result, Precedence.New, precedence);
break;
case Syntax.MemberExpression:
result = [generateExpression(expr.object, {
precedence: Precedence.Call,
allowIn: true,
allowCall: allowCall,
allowUnparenthesizedNew: false
})];
if (expr.computed) {
result.push('[', generateExpression(expr.property, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: allowCall
}), ']');
} else {
if (expr.object.type === Syntax.Literal && typeof expr.object.value === 'number') {
if (result.indexOf('.') < 0) {
if (!/[eExX]/.test(result) && !(result.length >= 2 && result[0] === '0')) {
result.push('.');
}
}
}
result.push('.' + expr.property.name);
}
result = parenthesize(result, Precedence.Member, precedence);
break;
case Syntax.UnaryExpression:
fragment = generateExpression(expr.argument, {
precedence: Precedence.Unary,
allowIn: true,
allowCall: true
});
if (space === '') {
result = join(expr.operator, fragment);
} else {
result = [expr.operator];
if (expr.operator.length > 2) {
// delete, void, typeof
// get `typeof []`, not `typeof[]`
result = join(result, fragment);
} else {
// Prevent inserting spaces between operator and argument if it is unnecessary
// like, `!cond`
leftSource = toSourceNode(result).toString();
leftChar = leftSource.charAt(leftSource.length - 1);
rightChar = fragment.toString().charAt(0);
if (((leftChar === '+' || leftChar === '-') && leftChar === rightChar) || (isIdentifierPart(leftChar) && isIdentifierPart(rightChar))) {
result.push(' ', fragment);
} else {
result.push(fragment);
}
}
}
result = parenthesize(result, Precedence.Unary, precedence);
break;
case Syntax.UpdateExpression:
if (expr.prefix) {
result = parenthesize(
[
expr.operator,
generateExpression(expr.argument, {
precedence: Precedence.Unary,
allowIn: true,
allowCall: true
})
],
Precedence.Unary,
precedence
);
} else {
result = parenthesize(
[
generateExpression(expr.argument, {
precedence: Precedence.Postfix,
allowIn: true,
allowCall: true
}),
expr.operator
],
Precedence.Postfix,
precedence
);
}
break;
case Syntax.FunctionExpression:
result = 'function';
if (expr.id) {
result += ' ' + expr.id.name;
} else {
result += space;
}
result = [result, generateFunctionBody(expr)];
break;
case Syntax.ArrayExpression:
if (!expr.elements.length) {
result = '[]';
break;
}
multiline = expr.elements.length > 1;
result = ['[', multiline ? newline : ''];
withIndent(function (indent) {
for (i = 0, len = expr.elements.length; i < len; i += 1) {
if (!expr.elements[i]) {
if (multiline) {
result.push(indent);
}
if (i + 1 === len) {
result.push(',');
}
} else {
result.push(multiline ? indent : '', generateExpression(expr.elements[i], {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
}));
}
if (i + 1 < len) {
result.push(',' + (multiline ? newline : space));
}
}
});
if (multiline && !endsWithLineTerminator(toSourceNode(result).toString())) {
result.push(newline);
}
result.push(multiline ? base : '', ']');
break;
case Syntax.Property:
if (expr.kind === 'get' || expr.kind === 'set') {
result = [
expr.kind + ' ',
generateExpression(expr.key, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
generateFunctionBody(expr.value)
];
} else {
result = [
generateExpression(expr.key, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
':' + space,
generateExpression(expr.value, {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
})
];
}
break;
case Syntax.ObjectExpression:
if (!expr.properties.length) {
result = '{}';
break;
}
multiline = expr.properties.length > 1;
result = ['{', multiline ? newline : ''];
withIndent(function (indent) {
for (i = 0, len = expr.properties.length; i < len; i += 1) {
result.push(multiline ? indent : '', generateExpression(expr.properties[i], {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}));
if (i + 1 < len) {
result.push(',' + (multiline ? newline : space));
}
}
});
if (multiline && !endsWithLineTerminator(toSourceNode(result).toString())) {
result.push(newline);
}
result.push(multiline ? base : '', '}');
break;
case Syntax.ThisExpression:
result = 'this';
break;
case Syntax.Identifier:
result = expr.name;
break;
case Syntax.Literal:
if (expr.hasOwnProperty('raw') && parse) {
try {
raw = parse(expr.raw).body[0].expression;
if (raw.type === Syntax.Literal) {
if (raw.value === expr.value) {
result = expr.raw;
break;
}
}
} catch (e) {
// not use raw property
}
}
if (expr.value === null) {
result = 'null';
break;
}
if (typeof expr.value === 'string') {
result = escapeString(expr.value);
break;
}
if (typeof expr.value === 'number') {
result = generateNumber(expr.value);
break;
}
result = expr.value.toString();
break;
default:
throw new Error('Unknown expression type: ' + expr.type);
}
return toSourceNode(result, expr);
}
function generateStatement(stmt, option) {
var i, len, result, node, allowIn, functionBody, directiveContext, fragment, semicolon;
allowIn = true;
semicolon = ';';
functionBody = false;
directiveContext = false;
if (option) {
allowIn = option.allowIn === undefined || option.allowIn;
if (!semicolons && option.semicolonOptional === true) {
semicolon = '';
}
functionBody = option.functionBody;
directiveContext = option.directiveContext;
}
switch (stmt.type) {
case Syntax.BlockStatement:
result = ['{', newline];
withIndent(function () {
for (i = 0, len = stmt.body.length; i < len; i += 1) {
fragment = addIndent(generateStatement(stmt.body[i], {
semicolonOptional: i === len - 1,
directiveContext: functionBody
}));
result.push(fragment);
if (!endsWithLineTerminator(toSourceNode(fragment).toString())) {
result.push(newline);
}
}
});
result.push(addIndent('}'));
break;
case Syntax.BreakStatement:
if (stmt.label) {
result = 'break ' + stmt.label.name + semicolon;
} else {
result = 'break' + semicolon;
}
break;
case Syntax.ContinueStatement:
if (stmt.label) {
result = 'continue ' + stmt.label.name + semicolon;
} else {
result = 'continue' + semicolon;
}
break;
case Syntax.DirectiveStatement:
if (stmt.raw) {
result = stmt.raw + semicolon;
} else {
result = escapeDirective(stmt.directive) + semicolon;
}
break;
case Syntax.DoWhileStatement:
// Because `do 42 while (cond)` is Syntax Error. We need semicolon.
result = join('do', maybeBlock(stmt.body));
result = maybeBlockSuffix(stmt.body, result);
result = join(result, [
'while' + space + '(',
generateExpression(stmt.test, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
')' + semicolon
]);
break;
case Syntax.CatchClause:
withIndent(function () {
result = [
'catch' + space + '(',
generateExpression(stmt.param, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
')'
];
});
result.push(maybeBlock(stmt.body));
break;
case Syntax.DebuggerStatement:
result = 'debugger' + semicolon;
break;
case Syntax.EmptyStatement:
result = ';';
break;
case Syntax.ExpressionStatement:
result = [generateExpression(stmt.expression, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})];
// 12.4 '{', 'function' is not allowed in this position.
// wrap expression with parentheses
if (result.toString().charAt(0) === '{' || (result.toString().slice(0, 8) === 'function' && " (".indexOf(result.toString().charAt(8)) >= 0) || (directive && directiveContext && stmt.expression.type === Syntax.Literal && typeof stmt.expression.value === 'string')) {
result = ['(', result, ')' + semicolon];
} else {
result.push(semicolon);
}
break;
case Syntax.VariableDeclarator:
if (stmt.init) {
result = [
stmt.id.name + space + '=' + space,
generateExpression(stmt.init, {
precedence: Precedence.Assignment,
allowIn: allowIn,
allowCall: true
})
];
} else {
result = stmt.id.name;
}
break;
case Syntax.VariableDeclaration:
result = [stmt.kind];
// special path for
// var x = function () {
// };
if (stmt.declarations.length === 1 && stmt.declarations[0].init &&
stmt.declarations[0].init.type === Syntax.FunctionExpression) {
result.push(' ', generateStatement(stmt.declarations[0], {
allowIn: allowIn
}));
} else {
// VariableDeclarator is typed as Statement,
// but joined with comma (not LineTerminator).
// So if comment is attached to target node, we should specialize.
withIndent(function () {
node = stmt.declarations[0];
if (extra.comment && node.leadingComments) {
result.push('\n', addIndent(generateStatement(node, {
allowIn: allowIn
})));
} else {
result.push(' ', generateStatement(node, {
allowIn: allowIn
}));
}
for (i = 1, len = stmt.declarations.length; i < len; i += 1) {
node = stmt.declarations[i];
if (extra.comment && node.leadingComments) {
result.push(',' + newline, addIndent(generateStatement(node, {
allowIn: allowIn
})));
} else {
result.push(',' + space, generateStatement(node, {
allowIn: allowIn
}));
}
}
});
}
result.push(semicolon);
break;
case Syntax.ThrowStatement:
result = [join(
'throw',
generateExpression(stmt.argument, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})
), semicolon];
break;
case Syntax.TryStatement:
result = ['try', maybeBlock(stmt.block)];
result = maybeBlockSuffix(stmt.block, result);
for (i = 0, len = stmt.handlers.length; i < len; i += 1) {
result = join(result, generateStatement(stmt.handlers[i]));
if (stmt.finalizer || i + 1 !== len) {
result = maybeBlockSuffix(stmt.handlers[i].body, result);
}
}
if (stmt.finalizer) {
result = join(result, ['finally', maybeBlock(stmt.finalizer)]);
}
break;
case Syntax.SwitchStatement:
withIndent(function () {
result = [
'switch' + space + '(',
generateExpression(stmt.discriminant, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
')' + space + '{' + newline
];
});
if (stmt.cases) {
for (i = 0, len = stmt.cases.length; i < len; i += 1) {
fragment = addIndent(generateStatement(stmt.cases[i], {semicolonOptional: i === len - 1}));
result.push(fragment);
if (!endsWithLineTerminator(toSourceNode(fragment).toString())) {
result.push(newline);
}
}
}
result.push(addIndent('}'));
break;
case Syntax.SwitchCase:
withIndent(function () {
if (stmt.test) {
result = [
join('case', generateExpression(stmt.test, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})),
':'
];
} else {
result = ['default:'];
}
i = 0;
len = stmt.consequent.length;
if (len && stmt.consequent[0].type === Syntax.BlockStatement) {
fragment = maybeBlock(stmt.consequent[0]);
result.push(fragment);
i = 1;
}
if (i !== len && !endsWithLineTerminator(toSourceNode(result).toString())) {
result.push(newline);
}
for (; i < len; i += 1) {
fragment = addIndent(generateStatement(stmt.consequent[i], {semicolonOptional: i === len - 1 && semicolon === ''}));
result.push(fragment);
if (i + 1 !== len && !endsWithLineTerminator(toSourceNode(fragment).toString())) {
result.push(newline);
}
}
});
break;
case Syntax.IfStatement:
withIndent(function () {
result = [
'if' + space + '(',
generateExpression(stmt.test, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
')'
];
});
if (stmt.alternate) {
result.push(maybeBlock(stmt.consequent));
result = maybeBlockSuffix(stmt.consequent, result);
if (stmt.alternate.type === Syntax.IfStatement) {
result = join(result, ['else ', generateStatement(stmt.alternate, {semicolonOptional: semicolon === ''})]);
} else {
result = join(result, join('else', maybeBlock(stmt.alternate, semicolon === '')));
}
} else {
result.push(maybeBlock(stmt.consequent, semicolon === ''));
}
break;
case Syntax.ForStatement:
withIndent(function () {
result = ['for' + space + '('];
if (stmt.init) {
if (stmt.init.type === Syntax.VariableDeclaration) {
result.push(generateStatement(stmt.init, {allowIn: false}));
} else {
result.push(generateExpression(stmt.init, {
precedence: Precedence.Sequence,
allowIn: false,
allowCall: true
}), ';');
}
} else {
result.push(';');
}
if (stmt.test) {
result.push(space, generateExpression(stmt.test, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}), ';');
} else {
result.push(';');
}
if (stmt.update) {
result.push(space, generateExpression(stmt.update, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}), ')');
} else {
result.push(')');
}
});
result.push(maybeBlock(stmt.body, semicolon === ''));
break;
case Syntax.ForInStatement:
result = ['for' + space + '('];
withIndent(function () {
if (stmt.left.type === Syntax.VariableDeclaration) {
withIndent(function () {
result.push(stmt.left.kind + ' ', generateStatement(stmt.left.declarations[0], {
allowIn: false
}));
});
} else {
result.push(generateExpression(stmt.left, {
precedence: Precedence.Call,
allowIn: true,
allowCall: true
}));
}
result = join(result, 'in');
result = [join(
result,
generateExpression(stmt.right, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})
), ')'];
});
result.push(maybeBlock(stmt.body, semicolon === ''));
break;
case Syntax.LabeledStatement:
result = [stmt.label.name + ':', maybeBlock(stmt.body, semicolon === '')];
break;
case Syntax.Program:
len = stmt.body.length;
result = [safeConcatenation && len > 0 ? '\n' : ''];
for (i = 0; i < len; i += 1) {
fragment = addIndent(
generateStatement(stmt.body[i], {
semicolonOptional: !safeConcatenation && i === len - 1,
directiveContext: true
})
);
result.push(fragment);
if (i + 1 < len && !endsWithLineTerminator(toSourceNode(fragment).toString())) {
result.push(newline);
}
}
break;
case Syntax.FunctionDeclaration:
result = ['function ' + stmt.id.name, generateFunctionBody(stmt)];
break;
case Syntax.ReturnStatement:
if (stmt.argument) {
result = [join(
'return',
generateExpression(stmt.argument, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
})
), semicolon];
} else {
result = ['return' + semicolon];
}
break;
case Syntax.WhileStatement:
withIndent(function () {
result = [
'while' + space + '(',
generateExpression(stmt.test, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
')'
];
});
result.push(maybeBlock(stmt.body, semicolon === ''));
break;
case Syntax.WithStatement:
withIndent(function () {
result = [
'with' + space + '(',
generateExpression(stmt.object, {
precedence: Precedence.Sequence,
allowIn: true,
allowCall: true
}),
')'
];
});
result.push(maybeBlock(stmt.body, semicolon === ''));
break;
default:
throw new Error('Unknown statement type: ' + stmt.type);
}
// Attach comments
if (extra.comment) {
result = addCommentsToStatement(stmt, result);
}
fragment = toSourceNode(result).toString();
if (stmt.type === Syntax.Program && !safeConcatenation && newline === '' && fragment.charAt(fragment.length - 1) === '\n') {
result = toSourceNode(result).replaceRight(/\s+$/, '');
}
return toSourceNode(result, stmt);
}
function generate(node, options) {
var defaultOptions = getDefaultOptions(), result, pair;
if (options != null) {
// Obsolete options
//
// `options.indent`
// `options.base`
//
// Instead of them, we can use `option.format.indent`.
if (typeof options.indent === 'string') {
defaultOptions.format.indent.style = options.indent;
}
if (typeof options.base === 'number') {
defaultOptions.format.indent.base = options.base;
}
options = updateDeeply(defaultOptions, options);
indent = options.format.indent.style;
if (typeof options.base === 'string') {
base = options.base;
} else {
base = stringRepeat(indent, options.format.indent.base);
}
} else {
options = defaultOptions;
indent = options.format.indent.style;
base = stringRepeat(indent, options.format.indent.base);
}
json = options.format.json;
renumber = options.format.renumber;
hexadecimal = json ? false : options.format.hexadecimal;
quotes = json ? 'double' : options.format.quotes;
escapeless = options.format.escapeless;
if (options.format.compact) {
newline = space = indent = base = '';
} else {
newline = '\n';
space = ' ';
}
parentheses = options.format.parentheses;
semicolons = options.format.semicolons;
safeConcatenation = options.format.safeConcatenation;
directive = options.directive;
parse = json ? null : options.parse;
sourceMap = options.sourceMap;
extra = options;
if (sourceMap) {
if (typeof process !== 'undefined') {
// We assume environment is node.js
SourceNode = require('source-map').SourceNode;
} else {
SourceNode = global.sourceMap.SourceNode;
}
} else {
SourceNode = SourceNodeMock;
}
switch (node.type) {
case Syntax.BlockStatement:
case Syntax.BreakStatement:
case Syntax.CatchClause:
case Syntax.ContinueStatement:
case Syntax.DirectiveStatement:
case Syntax.DoWhileStatement:
case Syntax.DebuggerStatement:
case Syntax.EmptyStatement:
case Syntax.ExpressionStatement:
case Syntax.ForStatement:
case Syntax.ForInStatement:
case Syntax.FunctionDeclaration:
case Syntax.IfStatement:
case Syntax.LabeledStatement:
case Syntax.Program:
case Syntax.ReturnStatement:
case Syntax.SwitchStatement:
case Syntax.SwitchCase:
case Syntax.ThrowStatement:
case Syntax.TryStatement:
case Syntax.VariableDeclaration:
case Syntax.VariableDeclarator:
case Syntax.WhileStatement:
case Syntax.WithStatement:
result = generateStatement(node);
break;
case Syntax.AssignmentExpression:
case Synta
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment