mirror of
https://github.com/quinton-ashley/java2js
synced 2024-12-29 10:11:54 +01:00
19409 lines
568 KiB
JavaScript
19409 lines
568 KiB
JavaScript
(function () {
|
|
function r(e, n, t) {
|
|
function o(i, f) {
|
|
if (!n[i]) {
|
|
if (!e[i]) {
|
|
var c = 'function' == typeof require && require;
|
|
if (!f && c) return c(i, !0);
|
|
if (u) return u(i, !0);
|
|
var a = new Error("Cannot find module '" + i + "'");
|
|
throw ((a.code = 'MODULE_NOT_FOUND'), a);
|
|
}
|
|
var p = (n[i] = {
|
|
exports: {}
|
|
});
|
|
e[i][0].call(
|
|
p.exports,
|
|
function (r) {
|
|
var n = e[i][1][r];
|
|
return o(n || r);
|
|
},
|
|
p,
|
|
p.exports,
|
|
r,
|
|
e,
|
|
n,
|
|
t
|
|
);
|
|
}
|
|
return n[i].exports;
|
|
}
|
|
for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) o(t[i]);
|
|
return o;
|
|
}
|
|
return r;
|
|
})()(
|
|
{
|
|
1: [
|
|
function (require, module, exports) {
|
|
const java_to_javascript = require('java-to-javascript');
|
|
self.addEventListener('message', (e) => {
|
|
if (e.data == 'QuintOS') {
|
|
QuintOS = true;
|
|
return;
|
|
}
|
|
self.postMessage(java_to_javascript(e.data));
|
|
});
|
|
},
|
|
{
|
|
'java-to-javascript': 2
|
|
}
|
|
],
|
|
2: [
|
|
function (require, module, exports) {
|
|
/* beautify ignore:start */
|
|
(function (global, factory) {
|
|
typeof exports === 'object' && typeof module !== 'undefined'
|
|
? (module.exports = factory())
|
|
: typeof define === 'function' && define.amd
|
|
? define(factory)
|
|
: ((global = global || self), (global.javaToJavascript = factory()));
|
|
})(this, function () {
|
|
function unwrapExports(x) {
|
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x.default : x;
|
|
}
|
|
|
|
function createCommonjsModule(fn, module) {
|
|
return (module = { exports: {} }), fn(module, module.exports), module.exports;
|
|
}
|
|
|
|
var beautify = createCommonjsModule(function (module, exports) {
|
|
/* AUTO-GENERATED. DO NOT MODIFY. */
|
|
/*
|
|
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
|
|
|
|
Permission is hereby granted, free of charge, to any person
|
|
obtaining a copy of this software and associated documentation files
|
|
(the "Software"), to deal in the Software without restriction,
|
|
including without limitation the rights to use, copy, modify, merge,
|
|
publish, distribute, sublicense, and/or sell copies of the Software,
|
|
and to permit persons to whom the Software is furnished to do so,
|
|
subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
|
|
JS Beautifier
|
|
---------------
|
|
|
|
|
|
Written by Einar Lielmanis, <einar@beautifier.io>
|
|
https://beautifier.io/
|
|
|
|
Originally converted to javascript by Vital, <vital76@gmail.com>
|
|
"End braces on own line" added by Chris J. Shull, <chrisjshull@gmail.com>
|
|
Parsing improvements for brace-less statements by Liam Newman <bitwiseman@beautifier.io>
|
|
|
|
|
|
Usage:
|
|
js_beautify(js_source_text);
|
|
js_beautify(js_source_text, options);
|
|
|
|
The options are:
|
|
indent_size (default 4) - indentation size,
|
|
indent_char (default space) - character to indent with,
|
|
preserve_newlines (default true) - whether existing line breaks should be preserved,
|
|
max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,
|
|
|
|
jslint_happy (default false) - if true, then jslint-stricter mode is enforced.
|
|
|
|
jslint_happy !jslint_happy
|
|
---------------------------------
|
|
function () function()
|
|
|
|
switch () { switch() {
|
|
case 1: case 1:
|
|
break; break;
|
|
} }
|
|
|
|
space_after_anon_function (default false) - should the space before an anonymous function's parens be added, "function()" vs "function ()",
|
|
NOTE: This option is overriden by jslint_happy (i.e. if jslint_happy is true, space_after_anon_function is true by design)
|
|
|
|
brace_style (default "collapse") - "collapse" | "expand" | "end-expand" | "none" | any of the former + ",preserve-inline"
|
|
put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.
|
|
preserve-inline will try to preserve inline blocks of curly braces
|
|
|
|
space_before_conditional (default true) - should the space before conditional statement be added, "if(true)" vs "if (true)",
|
|
|
|
unescape_strings (default false) - should printable characters in strings encoded in \xNN notation be unescaped, "example" vs "\x65\x78\x61\x6d\x70\x6c\x65"
|
|
|
|
wrap_line_length (default unlimited) - lines should wrap at next opportunity after this number of characters.
|
|
NOTE: This is not a hard limit. Lines will continue until a point where a newline would
|
|
be preserved if it were present.
|
|
|
|
end_with_newline (default false) - end output with a newline
|
|
|
|
|
|
e.g
|
|
|
|
js_beautify(js_source_text, {
|
|
'indent_size': 1,
|
|
'indent_char': '\t'
|
|
});
|
|
|
|
*/
|
|
|
|
(function () {
|
|
/* GENERATED_BUILD_OUTPUT */
|
|
var legacy_beautify_js = /******/ (function (modules) {
|
|
// webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if (installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/
|
|
}
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = (installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/
|
|
});
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/
|
|
}
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function (exports, name, getter) {
|
|
/******/ if (!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/
|
|
}
|
|
/******/
|
|
};
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function (exports) {
|
|
/******/ if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/
|
|
}
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/
|
|
};
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function (value, mode) {
|
|
/******/ if (mode & 1) value = __webpack_require__(value);
|
|
/******/ if (mode & 8) return value;
|
|
/******/ if (mode & 4 && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if (mode & 2 && typeof value != 'string')
|
|
for (var key in value)
|
|
__webpack_require__.d(
|
|
ns,
|
|
key,
|
|
function (key) {
|
|
return value[key];
|
|
}.bind(null, key)
|
|
);
|
|
/******/ return ns;
|
|
/******/
|
|
};
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function (module) {
|
|
/******/ var getter =
|
|
module && module.__esModule
|
|
? /******/ function getDefault() {
|
|
return module['default'];
|
|
}
|
|
: /******/ function getModuleExports() {
|
|
return module;
|
|
};
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/
|
|
};
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function (object, property) {
|
|
return Object.prototype.hasOwnProperty.call(object, property);
|
|
};
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = '';
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__((__webpack_require__.s = 0));
|
|
/******/
|
|
})(
|
|
/************************************************************************/
|
|
/******/ [
|
|
/* 0 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
var Beautifier = __webpack_require__(1).Beautifier,
|
|
Options = __webpack_require__(5).Options;
|
|
|
|
function js_beautify(js_source_text, options) {
|
|
var beautifier = new Beautifier(js_source_text, options);
|
|
return beautifier.beautify();
|
|
}
|
|
|
|
module.exports = js_beautify;
|
|
module.exports.defaultOptions = function () {
|
|
return new Options();
|
|
};
|
|
|
|
/***/
|
|
},
|
|
/* 1 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
var Output = __webpack_require__(2).Output;
|
|
var Token = __webpack_require__(3).Token;
|
|
var acorn = __webpack_require__(4);
|
|
var Options = __webpack_require__(5).Options;
|
|
var Tokenizer = __webpack_require__(7).Tokenizer;
|
|
var line_starters = __webpack_require__(7).line_starters;
|
|
var positionable_operators = __webpack_require__(7).positionable_operators;
|
|
var TOKEN = __webpack_require__(7).TOKEN;
|
|
|
|
function remove_redundant_indentation(output, frame) {
|
|
// This implementation is effective but has some issues:
|
|
// - can cause line wrap to happen too soon due to indent removal
|
|
// after wrap points are calculated
|
|
// These issues are minor compared to ugly indentation.
|
|
|
|
if (
|
|
frame.multiline_frame ||
|
|
frame.mode === MODE.ForInitializer ||
|
|
frame.mode === MODE.Conditional
|
|
) {
|
|
return;
|
|
}
|
|
|
|
// remove one indent from each line inside this section
|
|
output.remove_indent(frame.start_line_index);
|
|
}
|
|
|
|
function in_array(what, arr) {
|
|
return arr.indexOf(what) !== -1;
|
|
}
|
|
|
|
function ltrim(s) {
|
|
return s.replace(/^\s+/g, '');
|
|
}
|
|
|
|
function generateMapFromStrings(list) {
|
|
var result = {};
|
|
for (var x = 0; x < list.length; x++) {
|
|
// make the mapped names underscored instead of dash
|
|
result[list[x].replace(/-/g, '_')] = list[x];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function reserved_word(token, word) {
|
|
return token && token.type === TOKEN.RESERVED && token.text === word;
|
|
}
|
|
|
|
function reserved_array(token, words) {
|
|
return token && token.type === TOKEN.RESERVED && in_array(token.text, words);
|
|
}
|
|
// Unsure of what they mean, but they work. Worth cleaning up in future.
|
|
var special_words = [
|
|
'case',
|
|
'return',
|
|
'do',
|
|
'if',
|
|
'throw',
|
|
'else',
|
|
'await',
|
|
'break',
|
|
'continue',
|
|
'async'
|
|
];
|
|
|
|
var validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];
|
|
|
|
// Generate map from array
|
|
var OPERATOR_POSITION = generateMapFromStrings(validPositionValues);
|
|
|
|
var OPERATOR_POSITION_BEFORE_OR_PRESERVE = [
|
|
OPERATOR_POSITION.before_newline,
|
|
OPERATOR_POSITION.preserve_newline
|
|
];
|
|
|
|
var MODE = {
|
|
BlockStatement: 'BlockStatement', // 'BLOCK'
|
|
Statement: 'Statement', // 'STATEMENT'
|
|
ObjectLiteral: 'ObjectLiteral', // 'OBJECT',
|
|
ArrayLiteral: 'ArrayLiteral', //'[EXPRESSION]',
|
|
ForInitializer: 'ForInitializer', //'(FOR-EXPRESSION)',
|
|
Conditional: 'Conditional', //'(COND-EXPRESSION)',
|
|
Expression: 'Expression' //'(EXPRESSION)'
|
|
};
|
|
|
|
// we could use just string.split, but
|
|
// IE doesn't like returning empty strings
|
|
function split_linebreaks(s) {
|
|
//return s.split(/\x0d\x0a|\x0a/);
|
|
|
|
s = s.replace(acorn.allLineBreaks, '\n');
|
|
var out = [],
|
|
idx = s.indexOf('\n');
|
|
while (idx !== -1) {
|
|
out.push(s.substring(0, idx));
|
|
s = s.substring(idx + 1);
|
|
idx = s.indexOf('\n');
|
|
}
|
|
if (s.length) {
|
|
out.push(s);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
function is_array(mode) {
|
|
return mode === MODE.ArrayLiteral;
|
|
}
|
|
|
|
function is_expression(mode) {
|
|
return in_array(mode, [MODE.Expression, MODE.ForInitializer, MODE.Conditional]);
|
|
}
|
|
|
|
function all_lines_start_with(lines, c) {
|
|
for (var i = 0; i < lines.length; i++) {
|
|
var line = lines[i].trim();
|
|
if (line.charAt(0) !== c) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function each_line_matches_indent(lines, indent) {
|
|
var i = 0,
|
|
len = lines.length,
|
|
line;
|
|
for (; i < len; i++) {
|
|
line = lines[i];
|
|
// allow empty lines to pass through
|
|
if (line && line.indexOf(indent) !== 0) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function Beautifier(source_text, options) {
|
|
options = options || {};
|
|
this._source_text = source_text || '';
|
|
|
|
this._output = null;
|
|
this._tokens = null;
|
|
this._last_last_text = null;
|
|
this._flags = null;
|
|
this._previous_flags = null;
|
|
|
|
this._flag_store = null;
|
|
this._options = new Options(options);
|
|
}
|
|
|
|
Beautifier.prototype.create_flags = function (flags_base, mode) {
|
|
var next_indent_level = 0;
|
|
if (flags_base) {
|
|
next_indent_level = flags_base.indentation_level;
|
|
if (!this._output.just_added_newline() && flags_base.line_indent_level > next_indent_level) {
|
|
next_indent_level = flags_base.line_indent_level;
|
|
}
|
|
}
|
|
|
|
var next_flags = {
|
|
mode: mode,
|
|
parent: flags_base,
|
|
last_token: flags_base ? flags_base.last_token : new Token(TOKEN.START_BLOCK, ''), // last token text
|
|
last_word: flags_base ? flags_base.last_word : '', // last TOKEN.WORD passed
|
|
declaration_statement: false,
|
|
declaration_assignment: false,
|
|
multiline_frame: false,
|
|
inline_frame: false,
|
|
if_block: false,
|
|
else_block: false,
|
|
do_block: false,
|
|
do_while: false,
|
|
import_block: false,
|
|
in_case_statement: false, // switch(..){ INSIDE HERE }
|
|
in_case: false, // we're on the exact line with "case 0:"
|
|
case_body: false, // the indented case-action block
|
|
indentation_level: next_indent_level,
|
|
line_indent_level: flags_base ? flags_base.line_indent_level : next_indent_level,
|
|
start_line_index: this._output.get_line_number(),
|
|
ternary_depth: 0
|
|
};
|
|
return next_flags;
|
|
};
|
|
|
|
Beautifier.prototype._reset = function (source_text) {
|
|
var baseIndentString = source_text.match(/^[\t ]*/)[0];
|
|
|
|
this._last_last_text = ''; // pre-last token text
|
|
this._output = new Output(this._options, baseIndentString);
|
|
|
|
// If testing the ignore directive, start with output disable set to true
|
|
this._output.raw = this._options.test_output_raw;
|
|
|
|
// Stack of parsing/formatting states, including MODE.
|
|
// We tokenize, parse, and output in an almost purely a forward-only stream of token input
|
|
// and formatted output. This makes the beautifier less accurate than full parsers
|
|
// but also far more tolerant of syntax errors.
|
|
//
|
|
// For example, the default mode is MODE.BlockStatement. If we see a '{' we push a new frame of type
|
|
// MODE.BlockStatement on the the stack, even though it could be object literal. If we later
|
|
// encounter a ":", we'll switch to to MODE.ObjectLiteral. If we then see a ";",
|
|
// most full parsers would die, but the beautifier gracefully falls back to
|
|
// MODE.BlockStatement and continues on.
|
|
this._flag_store = [];
|
|
this.set_mode(MODE.BlockStatement);
|
|
var tokenizer = new Tokenizer(source_text, this._options);
|
|
this._tokens = tokenizer.tokenize();
|
|
return source_text;
|
|
};
|
|
|
|
Beautifier.prototype.beautify = function () {
|
|
// if disabled, return the input unchanged.
|
|
if (this._options.disabled) {
|
|
return this._source_text;
|
|
}
|
|
|
|
var sweet_code;
|
|
var source_text = this._reset(this._source_text);
|
|
|
|
var eol = this._options.eol;
|
|
if (this._options.eol === 'auto') {
|
|
eol = '\n';
|
|
if (source_text && acorn.lineBreak.test(source_text || '')) {
|
|
eol = source_text.match(acorn.lineBreak)[0];
|
|
}
|
|
}
|
|
|
|
var current_token = this._tokens.next();
|
|
while (current_token) {
|
|
this.handle_token(current_token);
|
|
|
|
this._last_last_text = this._flags.last_token.text;
|
|
this._flags.last_token = current_token;
|
|
|
|
current_token = this._tokens.next();
|
|
}
|
|
|
|
sweet_code = this._output.get_code(eol);
|
|
|
|
return sweet_code;
|
|
};
|
|
|
|
Beautifier.prototype.handle_token = function (current_token, preserve_statement_flags) {
|
|
if (current_token.type === TOKEN.START_EXPR) {
|
|
this.handle_start_expr(current_token);
|
|
} else if (current_token.type === TOKEN.END_EXPR) {
|
|
this.handle_end_expr(current_token);
|
|
} else if (current_token.type === TOKEN.START_BLOCK) {
|
|
this.handle_start_block(current_token);
|
|
} else if (current_token.type === TOKEN.END_BLOCK) {
|
|
this.handle_end_block(current_token);
|
|
} else if (current_token.type === TOKEN.WORD) {
|
|
this.handle_word(current_token);
|
|
} else if (current_token.type === TOKEN.RESERVED) {
|
|
this.handle_word(current_token);
|
|
} else if (current_token.type === TOKEN.SEMICOLON) {
|
|
this.handle_semicolon(current_token);
|
|
} else if (current_token.type === TOKEN.STRING) {
|
|
this.handle_string(current_token);
|
|
} else if (current_token.type === TOKEN.EQUALS) {
|
|
this.handle_equals(current_token);
|
|
} else if (current_token.type === TOKEN.OPERATOR) {
|
|
this.handle_operator(current_token);
|
|
} else if (current_token.type === TOKEN.COMMA) {
|
|
this.handle_comma(current_token);
|
|
} else if (current_token.type === TOKEN.BLOCK_COMMENT) {
|
|
this.handle_block_comment(current_token, preserve_statement_flags);
|
|
} else if (current_token.type === TOKEN.COMMENT) {
|
|
this.handle_comment(current_token, preserve_statement_flags);
|
|
} else if (current_token.type === TOKEN.DOT) {
|
|
this.handle_dot(current_token);
|
|
} else if (current_token.type === TOKEN.EOF) {
|
|
this.handle_eof(current_token);
|
|
} else if (current_token.type === TOKEN.UNKNOWN) {
|
|
this.handle_unknown(current_token, preserve_statement_flags);
|
|
} else {
|
|
this.handle_unknown(current_token, preserve_statement_flags);
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.handle_whitespace_and_comments = function (
|
|
current_token,
|
|
preserve_statement_flags
|
|
) {
|
|
var newlines = current_token.newlines;
|
|
var keep_whitespace = this._options.keep_array_indentation && is_array(this._flags.mode);
|
|
|
|
if (current_token.comments_before) {
|
|
var comment_token = current_token.comments_before.next();
|
|
while (comment_token) {
|
|
// The cleanest handling of inline comments is to treat them as though they aren't there.
|
|
// Just continue formatting and the behavior should be logical.
|
|
// Also ignore unknown tokens. Again, this should result in better behavior.
|
|
this.handle_whitespace_and_comments(comment_token, preserve_statement_flags);
|
|
this.handle_token(comment_token, preserve_statement_flags);
|
|
comment_token = current_token.comments_before.next();
|
|
}
|
|
}
|
|
|
|
if (keep_whitespace) {
|
|
for (var i = 0; i < newlines; i += 1) {
|
|
this.print_newline(i > 0, preserve_statement_flags);
|
|
}
|
|
} else {
|
|
if (this._options.max_preserve_newlines && newlines > this._options.max_preserve_newlines) {
|
|
newlines = this._options.max_preserve_newlines;
|
|
}
|
|
|
|
if (this._options.preserve_newlines) {
|
|
if (newlines > 1) {
|
|
this.print_newline(false, preserve_statement_flags);
|
|
for (var j = 1; j < newlines; j += 1) {
|
|
this.print_newline(true, preserve_statement_flags);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var newline_restricted_tokens = ['async', 'break', 'continue', 'return', 'throw', 'yield'];
|
|
|
|
Beautifier.prototype.allow_wrap_or_preserved_newline = function (current_token, force_linewrap) {
|
|
force_linewrap = force_linewrap === undefined ? false : force_linewrap;
|
|
|
|
// Never wrap the first token on a line
|
|
if (this._output.just_added_newline()) {
|
|
return;
|
|
}
|
|
|
|
var shouldPreserveOrForce =
|
|
(this._options.preserve_newlines && current_token.newlines) || force_linewrap;
|
|
var operatorLogicApplies =
|
|
in_array(this._flags.last_token.text, positionable_operators) ||
|
|
in_array(current_token.text, positionable_operators);
|
|
|
|
if (operatorLogicApplies) {
|
|
var shouldPrintOperatorNewline =
|
|
(in_array(this._flags.last_token.text, positionable_operators) &&
|
|
in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)) ||
|
|
in_array(current_token.text, positionable_operators);
|
|
shouldPreserveOrForce = shouldPreserveOrForce && shouldPrintOperatorNewline;
|
|
}
|
|
|
|
if (shouldPreserveOrForce) {
|
|
this.print_newline(false, true);
|
|
} else if (this._options.wrap_line_length) {
|
|
if (reserved_array(this._flags.last_token, newline_restricted_tokens)) {
|
|
// These tokens should never have a newline inserted
|
|
// between them and the following expression.
|
|
return;
|
|
}
|
|
var proposed_line_length =
|
|
this._output.current_line.get_character_count() +
|
|
current_token.text.length +
|
|
(this._output.space_before_token ? 1 : 0);
|
|
if (proposed_line_length >= this._options.wrap_line_length) {
|
|
this.print_newline(false, true);
|
|
}
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.print_newline = function (force_newline, preserve_statement_flags) {
|
|
if (!preserve_statement_flags) {
|
|
if (
|
|
this._flags.last_token.text !== ';' &&
|
|
this._flags.last_token.text !== ',' &&
|
|
this._flags.last_token.text !== '=' &&
|
|
(this._flags.last_token.type !== TOKEN.OPERATOR ||
|
|
this._flags.last_token.text === '--' ||
|
|
this._flags.last_token.text === '++')
|
|
) {
|
|
var next_token = this._tokens.peek();
|
|
while (
|
|
this._flags.mode === MODE.Statement &&
|
|
!(this._flags.if_block && reserved_word(next_token, 'else')) &&
|
|
!this._flags.do_block
|
|
) {
|
|
this.restore_mode();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this._output.add_new_line(force_newline)) {
|
|
this._flags.multiline_frame = true;
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.print_token_line_indentation = function (current_token) {
|
|
if (this._output.just_added_newline()) {
|
|
if (
|
|
this._options.keep_array_indentation &&
|
|
is_array(this._flags.mode) &&
|
|
current_token.newlines
|
|
) {
|
|
this._output.current_line.push(current_token.whitespace_before);
|
|
this._output.space_before_token = false;
|
|
} else if (this._output.set_indent(this._flags.indentation_level)) {
|
|
this._flags.line_indent_level = this._flags.indentation_level;
|
|
}
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.print_token = function (current_token, printable_token) {
|
|
if (this._output.raw) {
|
|
this._output.add_raw_token(current_token);
|
|
return;
|
|
}
|
|
|
|
if (
|
|
this._options.comma_first &&
|
|
current_token.previous &&
|
|
current_token.previous.type === TOKEN.COMMA &&
|
|
this._output.just_added_newline()
|
|
) {
|
|
if (this._output.previous_line.last() === ',') {
|
|
var popped = this._output.previous_line.pop();
|
|
// if the comma was already at the start of the line,
|
|
// pull back onto that line and reprint the indentation
|
|
if (this._output.previous_line.is_empty()) {
|
|
this._output.previous_line.push(popped);
|
|
this._output.trim(true);
|
|
this._output.current_line.pop();
|
|
this._output.trim();
|
|
}
|
|
|
|
// add the comma in front of the next token
|
|
this.print_token_line_indentation(current_token);
|
|
this._output.add_token(',');
|
|
this._output.space_before_token = true;
|
|
}
|
|
}
|
|
|
|
printable_token = printable_token || current_token.text;
|
|
this.print_token_line_indentation(current_token);
|
|
this._output.add_token(printable_token);
|
|
};
|
|
|
|
Beautifier.prototype.indent = function () {
|
|
this._flags.indentation_level += 1;
|
|
};
|
|
|
|
Beautifier.prototype.deindent = function () {
|
|
if (
|
|
this._flags.indentation_level > 0 &&
|
|
(!this._flags.parent || this._flags.indentation_level > this._flags.parent.indentation_level)
|
|
) {
|
|
this._flags.indentation_level -= 1;
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.set_mode = function (mode) {
|
|
if (this._flags) {
|
|
this._flag_store.push(this._flags);
|
|
this._previous_flags = this._flags;
|
|
} else {
|
|
this._previous_flags = this.create_flags(null, mode);
|
|
}
|
|
|
|
this._flags = this.create_flags(this._previous_flags, mode);
|
|
};
|
|
|
|
Beautifier.prototype.restore_mode = function () {
|
|
if (this._flag_store.length > 0) {
|
|
this._previous_flags = this._flags;
|
|
this._flags = this._flag_store.pop();
|
|
if (this._previous_flags.mode === MODE.Statement) {
|
|
remove_redundant_indentation(this._output, this._previous_flags);
|
|
}
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.start_of_object_property = function () {
|
|
return (
|
|
this._flags.parent.mode === MODE.ObjectLiteral &&
|
|
this._flags.mode === MODE.Statement &&
|
|
((this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) ||
|
|
reserved_array(this._flags.last_token, ['get', 'set']))
|
|
);
|
|
};
|
|
|
|
Beautifier.prototype.start_of_statement = function (current_token) {
|
|
var start = false;
|
|
start =
|
|
start ||
|
|
(reserved_array(this._flags.last_token, ['var', 'let', 'const']) &&
|
|
current_token.type === TOKEN.WORD);
|
|
start = start || reserved_word(this._flags.last_token, 'do');
|
|
start =
|
|
start ||
|
|
(!(this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement) &&
|
|
reserved_array(this._flags.last_token, newline_restricted_tokens) &&
|
|
!current_token.newlines);
|
|
start =
|
|
start ||
|
|
(reserved_word(this._flags.last_token, 'else') &&
|
|
!(reserved_word(current_token, 'if') && !current_token.comments_before));
|
|
start =
|
|
start ||
|
|
(this._flags.last_token.type === TOKEN.END_EXPR &&
|
|
(this._previous_flags.mode === MODE.ForInitializer ||
|
|
this._previous_flags.mode === MODE.Conditional));
|
|
start =
|
|
start ||
|
|
(this._flags.last_token.type === TOKEN.WORD &&
|
|
this._flags.mode === MODE.BlockStatement &&
|
|
!this._flags.in_case &&
|
|
!(current_token.text === '--' || current_token.text === '++') &&
|
|
this._last_last_text !== 'function' &&
|
|
current_token.type !== TOKEN.WORD &&
|
|
current_token.type !== TOKEN.RESERVED);
|
|
start =
|
|
start ||
|
|
(this._flags.mode === MODE.ObjectLiteral &&
|
|
((this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) ||
|
|
reserved_array(this._flags.last_token, ['get', 'set'])));
|
|
|
|
if (start) {
|
|
this.set_mode(MODE.Statement);
|
|
this.indent();
|
|
|
|
this.handle_whitespace_and_comments(current_token, true);
|
|
|
|
// Issue #276:
|
|
// If starting a new statement with [if, for, while, do], push to a new line.
|
|
// if (a) if (b) if(c) d(); else e(); else f();
|
|
if (!this.start_of_object_property()) {
|
|
this.allow_wrap_or_preserved_newline(
|
|
current_token,
|
|
reserved_array(current_token, ['do', 'for', 'if', 'while'])
|
|
);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
Beautifier.prototype.handle_start_expr = function (current_token) {
|
|
// The conditional starts the statement if appropriate.
|
|
if (!this.start_of_statement(current_token)) {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
}
|
|
|
|
var next_mode = MODE.Expression;
|
|
if (current_token.text === '[') {
|
|
if (this._flags.last_token.type === TOKEN.WORD || this._flags.last_token.text === ')') {
|
|
// this is array index specifier, break immediately
|
|
// a[x], fn()[x]
|
|
if (reserved_array(this._flags.last_token, line_starters)) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
this.set_mode(next_mode);
|
|
this.print_token(current_token);
|
|
this.indent();
|
|
if (this._options.space_in_paren) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
return;
|
|
}
|
|
|
|
next_mode = MODE.ArrayLiteral;
|
|
if (is_array(this._flags.mode)) {
|
|
if (
|
|
this._flags.last_token.text === '[' ||
|
|
(this._flags.last_token.text === ',' &&
|
|
(this._last_last_text === ']' || this._last_last_text === '}'))
|
|
) {
|
|
// ], [ goes to new line
|
|
// }, [ goes to new line
|
|
if (!this._options.keep_array_indentation) {
|
|
this.print_newline();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (
|
|
!in_array(this._flags.last_token.type, [
|
|
TOKEN.START_EXPR,
|
|
TOKEN.END_EXPR,
|
|
TOKEN.WORD,
|
|
TOKEN.OPERATOR
|
|
])
|
|
) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
} else {
|
|
if (this._flags.last_token.type === TOKEN.RESERVED) {
|
|
if (this._flags.last_token.text === 'for') {
|
|
this._output.space_before_token = this._options.space_before_conditional;
|
|
next_mode = MODE.ForInitializer;
|
|
} else if (in_array(this._flags.last_token.text, ['if', 'while'])) {
|
|
this._output.space_before_token = this._options.space_before_conditional;
|
|
next_mode = MODE.Conditional;
|
|
} else if (in_array(this._flags.last_word, ['await', 'async'])) {
|
|
// Should be a space between await and an IIFE, or async and an arrow function
|
|
this._output.space_before_token = true;
|
|
} else if (
|
|
this._flags.last_token.text === 'import' &&
|
|
current_token.whitespace_before === ''
|
|
) {
|
|
this._output.space_before_token = false;
|
|
} else if (
|
|
in_array(this._flags.last_token.text, line_starters) ||
|
|
this._flags.last_token.text === 'catch'
|
|
) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.EQUALS ||
|
|
this._flags.last_token.type === TOKEN.OPERATOR
|
|
) {
|
|
// Support of this kind of newline preservation.
|
|
// a = (b &&
|
|
// (c || d));
|
|
if (!this.start_of_object_property()) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
} else if (this._flags.last_token.type === TOKEN.WORD) {
|
|
this._output.space_before_token = false;
|
|
|
|
// function name() vs function name ()
|
|
// function* name() vs function* name ()
|
|
// async name() vs async name ()
|
|
// In ES6, you can also define the method properties of an object
|
|
// var obj = {a: function() {}}
|
|
// It can be abbreviated
|
|
// var obj = {a() {}}
|
|
// var obj = { a() {}} vs var obj = { a () {}}
|
|
// var obj = { * a() {}} vs var obj = { * a () {}}
|
|
var peek_back_two = this._tokens.peek(-3);
|
|
if (this._options.space_after_named_function && peek_back_two) {
|
|
// peek starts at next character so -1 is current token
|
|
var peek_back_three = this._tokens.peek(-4);
|
|
if (
|
|
reserved_array(peek_back_two, ['async', 'function']) ||
|
|
(peek_back_two.text === '*' && reserved_array(peek_back_three, ['async', 'function']))
|
|
) {
|
|
this._output.space_before_token = true;
|
|
} else if (this._flags.mode === MODE.ObjectLiteral) {
|
|
if (
|
|
peek_back_two.text === '{' ||
|
|
peek_back_two.text === ',' ||
|
|
(peek_back_two.text === '*' &&
|
|
(peek_back_three.text === '{' || peek_back_three.text === ','))
|
|
) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
// Support preserving wrapped arrow function expressions
|
|
// a.b('c',
|
|
// () => d.e
|
|
// )
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
|
|
// function() vs function ()
|
|
// yield*() vs yield* ()
|
|
// function*() vs function* ()
|
|
if (
|
|
(this._flags.last_token.type === TOKEN.RESERVED &&
|
|
(this._flags.last_word === 'function' || this._flags.last_word === 'typeof')) ||
|
|
(this._flags.last_token.text === '*' &&
|
|
(in_array(this._last_last_text, ['function', 'yield']) ||
|
|
(this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))
|
|
) {
|
|
this._output.space_before_token = this._options.space_after_anon_function;
|
|
}
|
|
}
|
|
|
|
if (this._flags.last_token.text === ';' || this._flags.last_token.type === TOKEN.START_BLOCK) {
|
|
this.print_newline();
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.END_EXPR ||
|
|
this._flags.last_token.type === TOKEN.START_EXPR ||
|
|
this._flags.last_token.type === TOKEN.END_BLOCK ||
|
|
this._flags.last_token.text === '.' ||
|
|
this._flags.last_token.type === TOKEN.COMMA
|
|
) {
|
|
// do nothing on (( and )( and ][ and ]( and .(
|
|
// TODO: Consider whether forcing this is required. Review failing tests when removed.
|
|
this.allow_wrap_or_preserved_newline(current_token, current_token.newlines);
|
|
}
|
|
|
|
this.set_mode(next_mode);
|
|
this.print_token(current_token);
|
|
if (this._options.space_in_paren) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
|
|
// In all cases, if we newline while inside an expression it should be indented.
|
|
this.indent();
|
|
};
|
|
|
|
Beautifier.prototype.handle_end_expr = function (current_token) {
|
|
// statements inside expressions are not valid syntax, but...
|
|
// statements must all be closed when their container closes
|
|
while (this._flags.mode === MODE.Statement) {
|
|
this.restore_mode();
|
|
}
|
|
|
|
this.handle_whitespace_and_comments(current_token);
|
|
|
|
if (this._flags.multiline_frame) {
|
|
this.allow_wrap_or_preserved_newline(
|
|
current_token,
|
|
current_token.text === ']' &&
|
|
is_array(this._flags.mode) &&
|
|
!this._options.keep_array_indentation
|
|
);
|
|
}
|
|
|
|
if (this._options.space_in_paren) {
|
|
if (this._flags.last_token.type === TOKEN.START_EXPR && !this._options.space_in_empty_paren) {
|
|
// () [] no inner space in empty parens like these, ever, ref #320
|
|
this._output.trim();
|
|
this._output.space_before_token = false;
|
|
} else {
|
|
this._output.space_before_token = true;
|
|
}
|
|
}
|
|
if (current_token.text === ']' && this._options.keep_array_indentation) {
|
|
this.print_token(current_token);
|
|
this.restore_mode();
|
|
} else {
|
|
this.restore_mode();
|
|
this.print_token(current_token);
|
|
}
|
|
remove_redundant_indentation(this._output, this._previous_flags);
|
|
|
|
// do {} while () // no statement required after
|
|
if (this._flags.do_while && this._previous_flags.mode === MODE.Conditional) {
|
|
this._previous_flags.mode = MODE.Expression;
|
|
this._flags.do_block = false;
|
|
this._flags.do_while = false;
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.handle_start_block = function (current_token) {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
|
|
// Check if this is should be treated as a ObjectLiteral
|
|
var next_token = this._tokens.peek();
|
|
var second_token = this._tokens.peek(1);
|
|
if (this._flags.last_word === 'switch' && this._flags.last_token.type === TOKEN.END_EXPR) {
|
|
this.set_mode(MODE.BlockStatement);
|
|
this._flags.in_case_statement = true;
|
|
} else if (
|
|
second_token &&
|
|
((in_array(second_token.text, [':', ',']) &&
|
|
in_array(next_token.type, [TOKEN.STRING, TOKEN.WORD, TOKEN.RESERVED])) ||
|
|
(in_array(next_token.text, ['get', 'set', '...']) &&
|
|
in_array(second_token.type, [TOKEN.WORD, TOKEN.RESERVED])))
|
|
) {
|
|
// We don't support TypeScript,but we didn't break it for a very long time.
|
|
// We'll try to keep not breaking it.
|
|
if (!in_array(this._last_last_text, ['class', 'interface'])) {
|
|
this.set_mode(MODE.ObjectLiteral);
|
|
} else {
|
|
this.set_mode(MODE.BlockStatement);
|
|
}
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.OPERATOR &&
|
|
this._flags.last_token.text === '=>'
|
|
) {
|
|
// arrow function: (param1, paramN) => { statements }
|
|
this.set_mode(MODE.BlockStatement);
|
|
} else if (
|
|
in_array(this._flags.last_token.type, [
|
|
TOKEN.EQUALS,
|
|
TOKEN.START_EXPR,
|
|
TOKEN.COMMA,
|
|
TOKEN.OPERATOR
|
|
]) ||
|
|
reserved_array(this._flags.last_token, ['return', 'throw', 'import', 'default'])
|
|
) {
|
|
// Detecting shorthand function syntax is difficult by scanning forward,
|
|
// so check the surrounding context.
|
|
// If the block is being returned, imported, export default, passed as arg,
|
|
// assigned with = or assigned in a nested object, treat as an ObjectLiteral.
|
|
this.set_mode(MODE.ObjectLiteral);
|
|
} else {
|
|
this.set_mode(MODE.BlockStatement);
|
|
}
|
|
|
|
var empty_braces = !next_token.comments_before && next_token.text === '}';
|
|
var empty_anonymous_function =
|
|
empty_braces &&
|
|
this._flags.last_word === 'function' &&
|
|
this._flags.last_token.type === TOKEN.END_EXPR;
|
|
|
|
if (this._options.brace_preserve_inline) {
|
|
// check for inline, set inline_frame if so
|
|
// search forward for a newline wanted inside this block
|
|
var index = 0;
|
|
var check_token = null;
|
|
this._flags.inline_frame = true;
|
|
do {
|
|
index += 1;
|
|
check_token = this._tokens.peek(index - 1);
|
|
if (check_token.newlines) {
|
|
this._flags.inline_frame = false;
|
|
break;
|
|
}
|
|
} while (
|
|
check_token.type !== TOKEN.EOF &&
|
|
!(check_token.type === TOKEN.END_BLOCK && check_token.opened === current_token)
|
|
);
|
|
}
|
|
|
|
if (
|
|
(this._options.brace_style === 'expand' ||
|
|
(this._options.brace_style === 'none' && current_token.newlines)) &&
|
|
!this._flags.inline_frame
|
|
) {
|
|
if (
|
|
this._flags.last_token.type !== TOKEN.OPERATOR &&
|
|
(empty_anonymous_function ||
|
|
this._flags.last_token.type === TOKEN.EQUALS ||
|
|
(reserved_array(this._flags.last_token, special_words) &&
|
|
this._flags.last_token.text !== 'else'))
|
|
) {
|
|
this._output.space_before_token = true;
|
|
} else {
|
|
this.print_newline(false, true);
|
|
}
|
|
} else {
|
|
// collapse || inline_frame
|
|
if (
|
|
is_array(this._previous_flags.mode) &&
|
|
(this._flags.last_token.type === TOKEN.START_EXPR ||
|
|
this._flags.last_token.type === TOKEN.COMMA)
|
|
) {
|
|
if (this._flags.last_token.type === TOKEN.COMMA || this._options.space_in_paren) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
|
|
if (
|
|
this._flags.last_token.type === TOKEN.COMMA ||
|
|
(this._flags.last_token.type === TOKEN.START_EXPR && this._flags.inline_frame)
|
|
) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
this._previous_flags.multiline_frame =
|
|
this._previous_flags.multiline_frame || this._flags.multiline_frame;
|
|
this._flags.multiline_frame = false;
|
|
}
|
|
}
|
|
if (
|
|
this._flags.last_token.type !== TOKEN.OPERATOR &&
|
|
this._flags.last_token.type !== TOKEN.START_EXPR
|
|
) {
|
|
if (this._flags.last_token.type === TOKEN.START_BLOCK && !this._flags.inline_frame) {
|
|
this.print_newline();
|
|
} else {
|
|
this._output.space_before_token = true;
|
|
}
|
|
}
|
|
}
|
|
this.print_token(current_token);
|
|
this.indent();
|
|
|
|
// Except for specific cases, open braces are followed by a new line.
|
|
if (!empty_braces && !(this._options.brace_preserve_inline && this._flags.inline_frame)) {
|
|
this.print_newline();
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.handle_end_block = function (current_token) {
|
|
// statements must all be closed when their container closes
|
|
this.handle_whitespace_and_comments(current_token);
|
|
|
|
while (this._flags.mode === MODE.Statement) {
|
|
this.restore_mode();
|
|
}
|
|
|
|
var empty_braces = this._flags.last_token.type === TOKEN.START_BLOCK;
|
|
|
|
if (this._flags.inline_frame && !empty_braces) {
|
|
// try inline_frame (only set if this._options.braces-preserve-inline) first
|
|
this._output.space_before_token = true;
|
|
} else if (this._options.brace_style === 'expand') {
|
|
if (!empty_braces) {
|
|
this.print_newline();
|
|
}
|
|
} else {
|
|
// skip {}
|
|
if (!empty_braces) {
|
|
if (is_array(this._flags.mode) && this._options.keep_array_indentation) {
|
|
// we REALLY need a newline here, but newliner would skip that
|
|
this._options.keep_array_indentation = false;
|
|
this.print_newline();
|
|
this._options.keep_array_indentation = true;
|
|
} else {
|
|
this.print_newline();
|
|
}
|
|
}
|
|
}
|
|
this.restore_mode();
|
|
this.print_token(current_token);
|
|
};
|
|
|
|
Beautifier.prototype.handle_word = function (current_token) {
|
|
if (current_token.type === TOKEN.RESERVED) {
|
|
if (in_array(current_token.text, ['set', 'get']) && this._flags.mode !== MODE.ObjectLiteral) {
|
|
current_token.type = TOKEN.WORD;
|
|
} else if (current_token.text === 'import' && this._tokens.peek().text === '(') {
|
|
current_token.type = TOKEN.WORD;
|
|
} else if (in_array(current_token.text, ['as', 'from']) && !this._flags.import_block) {
|
|
current_token.type = TOKEN.WORD;
|
|
} else if (this._flags.mode === MODE.ObjectLiteral) {
|
|
var next_token = this._tokens.peek();
|
|
if (next_token.text === ':') {
|
|
current_token.type = TOKEN.WORD;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this.start_of_statement(current_token)) {
|
|
// The conditional starts the statement if appropriate.
|
|
if (
|
|
reserved_array(this._flags.last_token, ['var', 'let', 'const']) &&
|
|
current_token.type === TOKEN.WORD
|
|
) {
|
|
this._flags.declaration_statement = true;
|
|
}
|
|
} else if (
|
|
current_token.newlines &&
|
|
!is_expression(this._flags.mode) &&
|
|
(this._flags.last_token.type !== TOKEN.OPERATOR ||
|
|
this._flags.last_token.text === '--' ||
|
|
this._flags.last_token.text === '++') &&
|
|
this._flags.last_token.type !== TOKEN.EQUALS &&
|
|
(this._options.preserve_newlines ||
|
|
!reserved_array(this._flags.last_token, ['var', 'let', 'const', 'set', 'get']))
|
|
) {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
this.print_newline();
|
|
} else {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
}
|
|
|
|
if (this._flags.do_block && !this._flags.do_while) {
|
|
if (reserved_word(current_token, 'while')) {
|
|
// do {} ## while ()
|
|
this._output.space_before_token = true;
|
|
this.print_token(current_token);
|
|
this._output.space_before_token = true;
|
|
this._flags.do_while = true;
|
|
return;
|
|
} else {
|
|
// do {} should always have while as the next word.
|
|
// if we don't see the expected while, recover
|
|
this.print_newline();
|
|
this._flags.do_block = false;
|
|
}
|
|
}
|
|
|
|
// if may be followed by else, or not
|
|
// Bare/inline ifs are tricky
|
|
// Need to unwind the modes correctly: if (a) if (b) c(); else d(); else e();
|
|
if (this._flags.if_block) {
|
|
if (!this._flags.else_block && reserved_word(current_token, 'else')) {
|
|
this._flags.else_block = true;
|
|
} else {
|
|
while (this._flags.mode === MODE.Statement) {
|
|
this.restore_mode();
|
|
}
|
|
this._flags.if_block = false;
|
|
this._flags.else_block = false;
|
|
}
|
|
}
|
|
|
|
if (this._flags.in_case_statement && reserved_array(current_token, ['case', 'default'])) {
|
|
this.print_newline();
|
|
if (this._flags.case_body || this._options.jslint_happy) {
|
|
// switch cases following one another
|
|
this.deindent();
|
|
this._flags.case_body = false;
|
|
}
|
|
this.print_token(current_token);
|
|
this._flags.in_case = true;
|
|
return;
|
|
}
|
|
|
|
if (
|
|
this._flags.last_token.type === TOKEN.COMMA ||
|
|
this._flags.last_token.type === TOKEN.START_EXPR ||
|
|
this._flags.last_token.type === TOKEN.EQUALS ||
|
|
this._flags.last_token.type === TOKEN.OPERATOR
|
|
) {
|
|
if (!this.start_of_object_property()) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
}
|
|
|
|
if (reserved_word(current_token, 'function')) {
|
|
if (
|
|
in_array(this._flags.last_token.text, ['}', ';']) ||
|
|
(this._output.just_added_newline() &&
|
|
!(
|
|
in_array(this._flags.last_token.text, ['(', '[', '{', ':', '=', ',']) ||
|
|
this._flags.last_token.type === TOKEN.OPERATOR
|
|
))
|
|
) {
|
|
// make sure there is a nice clean space of at least one blank line
|
|
// before a new function definition
|
|
if (!this._output.just_added_blankline() && !current_token.comments_before) {
|
|
this.print_newline();
|
|
this.print_newline(true);
|
|
}
|
|
}
|
|
if (
|
|
this._flags.last_token.type === TOKEN.RESERVED ||
|
|
this._flags.last_token.type === TOKEN.WORD
|
|
) {
|
|
if (
|
|
reserved_array(this._flags.last_token, ['get', 'set', 'new', 'export']) ||
|
|
reserved_array(this._flags.last_token, newline_restricted_tokens)
|
|
) {
|
|
this._output.space_before_token = true;
|
|
} else if (
|
|
reserved_word(this._flags.last_token, 'default') &&
|
|
this._last_last_text === 'export'
|
|
) {
|
|
this._output.space_before_token = true;
|
|
} else if (this._flags.last_token.text === 'declare') {
|
|
// accomodates Typescript declare function formatting
|
|
this._output.space_before_token = true;
|
|
} else {
|
|
this.print_newline();
|
|
}
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.OPERATOR ||
|
|
this._flags.last_token.text === '='
|
|
) {
|
|
// foo = function
|
|
this._output.space_before_token = true;
|
|
} else if (
|
|
!this._flags.multiline_frame &&
|
|
(is_expression(this._flags.mode) || is_array(this._flags.mode))
|
|
);
|
|
else {
|
|
this.print_newline();
|
|
}
|
|
|
|
this.print_token(current_token);
|
|
this._flags.last_word = current_token.text;
|
|
return;
|
|
}
|
|
|
|
var prefix = 'NONE';
|
|
|
|
if (this._flags.last_token.type === TOKEN.END_BLOCK) {
|
|
if (this._previous_flags.inline_frame) {
|
|
prefix = 'SPACE';
|
|
} else if (!reserved_array(current_token, ['else', 'catch', 'finally', 'from'])) {
|
|
prefix = 'NEWLINE';
|
|
} else {
|
|
if (
|
|
this._options.brace_style === 'expand' ||
|
|
this._options.brace_style === 'end-expand' ||
|
|
(this._options.brace_style === 'none' && current_token.newlines)
|
|
) {
|
|
prefix = 'NEWLINE';
|
|
} else {
|
|
prefix = 'SPACE';
|
|
this._output.space_before_token = true;
|
|
}
|
|
}
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.SEMICOLON &&
|
|
this._flags.mode === MODE.BlockStatement
|
|
) {
|
|
// TODO: Should this be for STATEMENT as well?
|
|
prefix = 'NEWLINE';
|
|
} else if (this._flags.last_token.type === TOKEN.SEMICOLON && is_expression(this._flags.mode)) {
|
|
prefix = 'SPACE';
|
|
} else if (this._flags.last_token.type === TOKEN.STRING) {
|
|
prefix = 'NEWLINE';
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.RESERVED ||
|
|
this._flags.last_token.type === TOKEN.WORD ||
|
|
(this._flags.last_token.text === '*' &&
|
|
(in_array(this._last_last_text, ['function', 'yield']) ||
|
|
(this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))
|
|
) {
|
|
prefix = 'SPACE';
|
|
} else if (this._flags.last_token.type === TOKEN.START_BLOCK) {
|
|
if (this._flags.inline_frame) {
|
|
prefix = 'SPACE';
|
|
} else {
|
|
prefix = 'NEWLINE';
|
|
}
|
|
} else if (this._flags.last_token.type === TOKEN.END_EXPR) {
|
|
this._output.space_before_token = true;
|
|
prefix = 'NEWLINE';
|
|
}
|
|
|
|
if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {
|
|
if (
|
|
this._flags.inline_frame ||
|
|
this._flags.last_token.text === 'else' ||
|
|
this._flags.last_token.text === 'export'
|
|
) {
|
|
prefix = 'SPACE';
|
|
} else {
|
|
prefix = 'NEWLINE';
|
|
}
|
|
}
|
|
|
|
if (reserved_array(current_token, ['else', 'catch', 'finally'])) {
|
|
if (
|
|
(!(
|
|
this._flags.last_token.type === TOKEN.END_BLOCK &&
|
|
this._previous_flags.mode === MODE.BlockStatement
|
|
) ||
|
|
this._options.brace_style === 'expand' ||
|
|
this._options.brace_style === 'end-expand' ||
|
|
(this._options.brace_style === 'none' && current_token.newlines)) &&
|
|
!this._flags.inline_frame
|
|
) {
|
|
this.print_newline();
|
|
} else {
|
|
this._output.trim(true);
|
|
var line = this._output.current_line;
|
|
// If we trimmed and there's something other than a close block before us
|
|
// put a newline back in. Handles '} // comment' scenario.
|
|
if (line.last() !== '}') {
|
|
this.print_newline();
|
|
}
|
|
this._output.space_before_token = true;
|
|
}
|
|
} else if (prefix === 'NEWLINE') {
|
|
if (reserved_array(this._flags.last_token, special_words)) {
|
|
// no newline between 'return nnn'
|
|
this._output.space_before_token = true;
|
|
} else if (
|
|
this._flags.last_token.text === 'declare' &&
|
|
reserved_array(current_token, ['var', 'let', 'const'])
|
|
) {
|
|
// accomodates Typescript declare formatting
|
|
this._output.space_before_token = true;
|
|
} else if (this._flags.last_token.type !== TOKEN.END_EXPR) {
|
|
if (
|
|
(this._flags.last_token.type !== TOKEN.START_EXPR ||
|
|
!reserved_array(current_token, ['var', 'let', 'const'])) &&
|
|
this._flags.last_token.text !== ':'
|
|
) {
|
|
// no need to force newline on 'var': for (var x = 0...)
|
|
if (reserved_word(current_token, 'if') && reserved_word(current_token.previous, 'else')) {
|
|
// no newline for } else if {
|
|
this._output.space_before_token = true;
|
|
} else {
|
|
this.print_newline();
|
|
}
|
|
}
|
|
} else if (
|
|
reserved_array(current_token, line_starters) &&
|
|
this._flags.last_token.text !== ')'
|
|
) {
|
|
this.print_newline();
|
|
}
|
|
} else if (
|
|
this._flags.multiline_frame &&
|
|
is_array(this._flags.mode) &&
|
|
this._flags.last_token.text === ',' &&
|
|
this._last_last_text === '}'
|
|
) {
|
|
this.print_newline(); // }, in lists get a newline treatment
|
|
} else if (prefix === 'SPACE') {
|
|
this._output.space_before_token = true;
|
|
}
|
|
if (
|
|
current_token.previous &&
|
|
(current_token.previous.type === TOKEN.WORD || current_token.previous.type === TOKEN.RESERVED)
|
|
) {
|
|
this._output.space_before_token = true;
|
|
}
|
|
this.print_token(current_token);
|
|
this._flags.last_word = current_token.text;
|
|
|
|
if (current_token.type === TOKEN.RESERVED) {
|
|
if (current_token.text === 'do') {
|
|
this._flags.do_block = true;
|
|
} else if (current_token.text === 'if') {
|
|
this._flags.if_block = true;
|
|
} else if (current_token.text === 'import') {
|
|
this._flags.import_block = true;
|
|
} else if (this._flags.import_block && reserved_word(current_token, 'from')) {
|
|
this._flags.import_block = false;
|
|
}
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.handle_semicolon = function (current_token) {
|
|
if (this.start_of_statement(current_token)) {
|
|
// The conditional starts the statement if appropriate.
|
|
// Semicolon can be the start (and end) of a statement
|
|
this._output.space_before_token = false;
|
|
} else {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
}
|
|
|
|
var next_token = this._tokens.peek();
|
|
while (
|
|
this._flags.mode === MODE.Statement &&
|
|
!(this._flags.if_block && reserved_word(next_token, 'else')) &&
|
|
!this._flags.do_block
|
|
) {
|
|
this.restore_mode();
|
|
}
|
|
|
|
// hacky but effective for the moment
|
|
if (this._flags.import_block) {
|
|
this._flags.import_block = false;
|
|
}
|
|
this.print_token(current_token);
|
|
};
|
|
|
|
Beautifier.prototype.handle_string = function (current_token) {
|
|
if (this.start_of_statement(current_token)) {
|
|
// The conditional starts the statement if appropriate.
|
|
// One difference - strings want at least a space before
|
|
this._output.space_before_token = true;
|
|
} else {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
if (
|
|
this._flags.last_token.type === TOKEN.RESERVED ||
|
|
this._flags.last_token.type === TOKEN.WORD ||
|
|
this._flags.inline_frame
|
|
) {
|
|
this._output.space_before_token = true;
|
|
} else if (
|
|
this._flags.last_token.type === TOKEN.COMMA ||
|
|
this._flags.last_token.type === TOKEN.START_EXPR ||
|
|
this._flags.last_token.type === TOKEN.EQUALS ||
|
|
this._flags.last_token.type === TOKEN.OPERATOR
|
|
) {
|
|
if (!this.start_of_object_property()) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
} else {
|
|
this.print_newline();
|
|
}
|
|
}
|
|
this.print_token(current_token);
|
|
};
|
|
|
|
Beautifier.prototype.handle_equals = function (current_token) {
|
|
if (this.start_of_statement(current_token));
|
|
else {
|
|
this.handle_whitespace_and_comments(current_token);
|
|
}
|
|
|
|
if (this._flags.declaration_statement) {
|
|
// just got an '=' in a var-line, different formatting/line-breaking, etc will now be done
|
|
this._flags.declaration_assignment = true;
|
|
}
|
|
this._output.space_before_token = true;
|
|
this.print_token(current_token);
|
|
this._output.space_before_token = true;
|
|
};
|
|
|
|
Beautifier.prototype.handle_comma = function (current_token) {
|
|
this.handle_whitespace_and_comments(current_token, true);
|
|
|
|
this.print_token(current_token);
|
|
this._output.space_before_token = true;
|
|
if (this._flags.declaration_statement) {
|
|
if (is_expression(this._flags.parent.mode)) {
|
|
// do not break on comma, for(var a = 1, b = 2)
|
|
this._flags.declaration_assignment = false;
|
|
}
|
|
|
|
if (this._flags.declaration_assignment) {
|
|
this._flags.declaration_assignment = false;
|
|
this.print_newline(false, true);
|
|
} else if (this._options.comma_first) {
|
|
// for comma-first, we want to allow a newline before the comma
|
|
// to turn into a newline after the comma, which we will fixup later
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
} else if (
|
|
this._flags.mode === MODE.ObjectLiteral ||
|
|
(this._flags.mode === MODE.Statement && this._flags.parent.mode === MODE.ObjectLiteral)
|
|
) {
|
|
if (this._flags.mode === MODE.Statement) {
|
|
this.restore_mode();
|
|
}
|
|
|
|
if (!this._flags.inline_frame) {
|
|
this.print_newline();
|
|
}
|
|
} else if (this._options.comma_first) {
|
|
// EXPR or DO_BLOCK
|
|
// for comma-first, we want to allow a newline before the comma
|
|
// to turn into a newline after the comma, which we will fixup later
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.handle_operator = function (current_token) {
|
|
var isGeneratorAsterisk =
|
|
current_token.text === '*' &&
|
|
(reserved_array(this._flags.last_token, ['function', 'yield']) ||
|
|
in_array(this._flags.last_token.type, [
|
|
TOKEN.START_BLOCK,
|
|
TOKEN.COMMA,
|
|
TOKEN.END_BLOCK,
|
|
TOKEN.SEMICOLON
|
|
]));
|
|
var isUnary =
|
|
in_array(current_token.text, ['-', '+']) &&
|
|
(in_array(this._flags.last_token.type, [
|
|
TOKEN.START_BLOCK,
|
|
TOKEN.START_EXPR,
|
|
TOKEN.EQUALS,
|
|
TOKEN.OPERATOR
|
|
]) ||
|
|
in_array(this._flags.last_token.text, line_starters) ||
|
|
this._flags.last_token.text === ',');
|
|
|
|
if (this.start_of_statement(current_token));
|
|
else {
|
|
var preserve_statement_flags = !isGeneratorAsterisk;
|
|
this.handle_whitespace_and_comments(current_token, preserve_statement_flags);
|
|
}
|
|
|
|
if (reserved_array(this._flags.last_token, special_words)) {
|
|
// "return" had a special handling in TK_WORD. Now we need to return the favor
|
|
this._output.space_before_token = true;
|
|
this.print_token(current_token);
|
|
return;
|
|
}
|
|
|
|
// hack for actionscript's import .*;
|
|
if (current_token.text === '*' && this._flags.last_token.type === TOKEN.DOT) {
|
|
this.print_token(current_token);
|
|
return;
|
|
}
|
|
|
|
if (current_token.text === '::') {
|
|
// no spaces around exotic namespacing syntax operator
|
|
this.print_token(current_token);
|
|
return;
|
|
}
|
|
|
|
// Allow line wrapping between operators when operator_position is
|
|
// set to before or preserve
|
|
if (
|
|
this._flags.last_token.type === TOKEN.OPERATOR &&
|
|
in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)
|
|
) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
|
|
if (current_token.text === ':' && this._flags.in_case) {
|
|
this._flags.case_body = true;
|
|
this.indent();
|
|
this.print_token(current_token);
|
|
this.print_newline();
|
|
this._flags.in_case = false;
|
|
return;
|
|
}
|
|
|
|
var space_before = true;
|
|
var space_after = true;
|
|
var in_ternary = false;
|
|
if (current_token.text === ':') {
|
|
if (this._flags.ternary_depth === 0) {
|
|
// Colon is invalid javascript outside of ternary and object, but do our best to guess what was meant.
|
|
space_before = false;
|
|
} else {
|
|
this._flags.ternary_depth -= 1;
|
|
in_ternary = true;
|
|
}
|
|
} else if (current_token.text === '?') {
|
|
this._flags.ternary_depth += 1;
|
|
}
|
|
|
|
// let's handle the operator_position option prior to any conflicting logic
|
|
if (
|
|
!isUnary &&
|
|
!isGeneratorAsterisk &&
|
|
this._options.preserve_newlines &&
|
|
in_array(current_token.text, positionable_operators)
|
|
) {
|
|
var isColon = current_token.text === ':';
|
|
var isTernaryColon = isColon && in_ternary;
|
|
var isOtherColon = isColon && !in_ternary;
|
|
|
|
switch (this._options.operator_position) {
|
|
case OPERATOR_POSITION.before_newline:
|
|
// if the current token is : and it's not a ternary statement then we set space_before to false
|
|
this._output.space_before_token = !isOtherColon;
|
|
|
|
this.print_token(current_token);
|
|
|
|
if (!isColon || isTernaryColon) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
|
|
this._output.space_before_token = true;
|
|
return;
|
|
|
|
case OPERATOR_POSITION.after_newline:
|
|
// if the current token is anything but colon, or (via deduction) it's a colon and in a ternary statement,
|
|
// then print a newline.
|
|
|
|
this._output.space_before_token = true;
|
|
|
|
if (!isColon || isTernaryColon) {
|
|
if (this._tokens.peek().newlines) {
|
|
this.print_newline(false, true);
|
|
} else {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
} else {
|
|
this._output.space_before_token = false;
|
|
}
|
|
|
|
this.print_token(current_token);
|
|
|
|
this._output.space_before_token = true;
|
|
return;
|
|
|
|
case OPERATOR_POSITION.preserve_newline:
|
|
if (!isOtherColon) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
|
|
// if we just added a newline, or the current token is : and it's not a ternary statement,
|
|
// then we set space_before to false
|
|
space_before = !(this._output.just_added_newline() || isOtherColon);
|
|
|
|
this._output.space_before_token = space_before;
|
|
this.print_token(current_token);
|
|
this._output.space_before_token = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (isGeneratorAsterisk) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
space_before = false;
|
|
var next_token = this._tokens.peek();
|
|
space_after = next_token && in_array(next_token.type, [TOKEN.WORD, TOKEN.RESERVED]);
|
|
} else if (current_token.text === '...') {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
space_before = this._flags.last_token.type === TOKEN.START_BLOCK;
|
|
space_after = false;
|
|
} else if (in_array(current_token.text, ['--', '++', '!', '~']) || isUnary) {
|
|
// unary operators (and binary +/- pretending to be unary) special cases
|
|
if (
|
|
this._flags.last_token.type === TOKEN.COMMA ||
|
|
this._flags.last_token.type === TOKEN.START_EXPR
|
|
) {
|
|
this.allow_wrap_or_preserved_newline(current_token);
|
|
}
|
|
|
|
space_before = false;
|
|
space_after = false;
|
|
|
|
// http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1
|
|
// if there is a newline between -- or ++ and anything else we should preserve it.
|
|
if (current_token.newlines && (current_token.text === '--' || current_token.text === '++')) {
|
|
this.print_newline(false, true);
|
|
}
|
|
|
|
if (this._flags.last_token.text === ';' && is_expression(this._flags.mode)) {
|
|
// for (;; ++i)
|
|
// ^^^
|
|
space_before = true;
|
|
}
|
|
|
|
if (this._flags.last_token.type === TOKEN.RESERVED) {
|
|
space_before = true;
|
|
} else if (this._flags.last_token.type === TOKEN.END_EXPR) {
|
|
space_before = !(
|
|
this._flags.last_token.text === ']' &&
|
|
(current_token.text === '--' || current_token.text === '++')
|
|
);
|
|
} else if (this._flags.last_token.type === TOKEN.OPERATOR) {
|
|
// a++ + ++b;
|
|
// a - -b
|
|
space_before =
|
|
in_array(current_token.text, ['--', '-', '++', '+']) &&
|
|
in_array(this._flags.last_token.text, ['--', '-', '++', '+']);
|
|
// + and - are not unary when preceeded by -- or ++ operator
|
|
// a-- + b
|
|
// a * +b
|
|
// a - -b
|
|
if (
|
|
in_array(current_token.text, ['+', '-']) &&
|
|
in_array(this._flags.last_token.text, ['--', '++'])
|
|
) {
|
|
space_after = true;
|
|
}
|
|
}
|
|
|
|
if (
|
|
((this._flags.mode === MODE.BlockStatement && !this._flags.inline_frame) ||
|
|
this._flags.mode === MODE.Statement) &&
|
|
(this._flags.last_token.text === '{' || this._flags.last_token.text === ';')
|
|
) {
|
|
// { foo; --i }
|
|
// foo(); --bar;
|
|
this.print_newline();
|
|
}
|
|
}
|
|
|
|
this._output.space_before_token = this._output.space_before_token || space_before;
|
|
this.print_token(current_token);
|
|
this._output.space_before_token = space_after;
|
|
};
|
|
|
|
Beautifier.prototype.handle_block_comment = function (current_token, preserve_statement_flags) {
|
|
if (this._output.raw) {
|
|
this._output.add_raw_token(current_token);
|
|
if (current_token.directives && current_token.directives.preserve === 'end') {
|
|
// If we're testing the raw output behavior, do not allow a directive to turn it off.
|
|
this._output.raw = this._options.test_output_raw;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (current_token.directives) {
|
|
this.print_newline(false, preserve_statement_flags);
|
|
this.print_token(current_token);
|
|
if (current_token.directives.preserve === 'start') {
|
|
this._output.raw = true;
|
|
}
|
|
this.print_newline(false, true);
|
|
return;
|
|
}
|
|
|
|
// inline block
|
|
if (!acorn.newline.test(current_token.text) && !current_token.newlines) {
|
|
this._output.space_before_token = true;
|
|
this.print_token(current_token);
|
|
this._output.space_before_token = true;
|
|
return;
|
|
}
|
|
|
|
var lines = split_linebreaks(current_token.text);
|
|
var j; // iterator for this case
|
|
var javadoc = false;
|
|
var starless = false;
|
|
var lastIndent = current_token.whitespace_before;
|
|
var lastIndentLength = lastIndent.length;
|
|
|
|
// block comment starts with a new line
|
|
this.print_newline(false, preserve_statement_flags);
|
|
if (lines.length > 1) {
|
|
javadoc = all_lines_start_with(lines.slice(1), '*');
|
|
starless = each_line_matches_indent(lines.slice(1), lastIndent);
|
|
}
|
|
|
|
// first line always indented
|
|
this.print_token(current_token, lines[0]);
|
|
for (j = 1; j < lines.length; j++) {
|
|
this.print_newline(false, true);
|
|
if (javadoc) {
|
|
// javadoc: reformat and re-indent
|
|
this.print_token(current_token, ' ' + ltrim(lines[j]));
|
|
} else if (starless && lines[j].length > lastIndentLength) {
|
|
// starless: re-indent non-empty content, avoiding trim
|
|
this.print_token(current_token, lines[j].substring(lastIndentLength));
|
|
} else {
|
|
// normal comments output raw
|
|
this._output.add_token(lines[j]);
|
|
}
|
|
}
|
|
|
|
// for comments of more than one line, make sure there's a new line after
|
|
this.print_newline(false, preserve_statement_flags);
|
|
};
|
|
|
|
Beautifier.prototype.handle_comment = function (current_token, preserve_statement_flags) {
|
|
if (current_token.newlines) {
|
|
this.print_newline(false, preserve_statement_flags);
|
|
} else {
|
|
this._output.trim(true);
|
|
}
|
|
|
|
this._output.space_before_token = true;
|
|
this.print_token(current_token);
|
|
this.print_newline(false, preserve_statement_flags);
|
|
};
|
|
|
|
Beautifier.prototype.handle_dot = function (current_token) {
|
|
if (this.start_of_statement(current_token));
|
|
else {
|
|
this.handle_whitespace_and_comments(current_token, true);
|
|
}
|
|
|
|
if (reserved_array(this._flags.last_token, special_words)) {
|
|
this._output.space_before_token = false;
|
|
} else {
|
|
// allow preserved newlines before dots in general
|
|
// force newlines on dots after close paren when break_chained - for bar().baz()
|
|
this.allow_wrap_or_preserved_newline(
|
|
current_token,
|
|
this._flags.last_token.text === ')' && this._options.break_chained_methods
|
|
);
|
|
}
|
|
|
|
// Only unindent chained method dot if this dot starts a new line.
|
|
// Otherwise the automatic extra indentation removal will handle the over indent
|
|
if (this._options.unindent_chained_methods && this._output.just_added_newline()) {
|
|
this.deindent();
|
|
}
|
|
|
|
this.print_token(current_token);
|
|
};
|
|
|
|
Beautifier.prototype.handle_unknown = function (current_token, preserve_statement_flags) {
|
|
this.print_token(current_token);
|
|
|
|
if (current_token.text[current_token.text.length - 1] === '\n') {
|
|
this.print_newline(false, preserve_statement_flags);
|
|
}
|
|
};
|
|
|
|
Beautifier.prototype.handle_eof = function (current_token) {
|
|
// Unwind any open statements
|
|
while (this._flags.mode === MODE.Statement) {
|
|
this.restore_mode();
|
|
}
|
|
this.handle_whitespace_and_comments(current_token);
|
|
};
|
|
|
|
module.exports.Beautifier = Beautifier;
|
|
|
|
/***/
|
|
},
|
|
/* 2 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
function OutputLine(parent) {
|
|
this.__parent = parent;
|
|
this.__character_count = 0;
|
|
// use indent_count as a marker for this.__lines that have preserved indentation
|
|
this.__indent_count = -1;
|
|
this.__alignment_count = 0;
|
|
|
|
this.__items = [];
|
|
}
|
|
|
|
OutputLine.prototype.item = function (index) {
|
|
if (index < 0) {
|
|
return this.__items[this.__items.length + index];
|
|
} else {
|
|
return this.__items[index];
|
|
}
|
|
};
|
|
|
|
OutputLine.prototype.has_match = function (pattern) {
|
|
for (
|
|
var lastCheckedOutput = this.__items.length - 1;
|
|
lastCheckedOutput >= 0;
|
|
lastCheckedOutput--
|
|
) {
|
|
if (this.__items[lastCheckedOutput].match(pattern)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
OutputLine.prototype.set_indent = function (indent, alignment) {
|
|
this.__indent_count = indent || 0;
|
|
this.__alignment_count = alignment || 0;
|
|
this.__character_count =
|
|
this.__parent.baseIndentLength +
|
|
this.__alignment_count +
|
|
this.__indent_count * this.__parent.indent_length;
|
|
};
|
|
|
|
OutputLine.prototype.get_character_count = function () {
|
|
return this.__character_count;
|
|
};
|
|
|
|
OutputLine.prototype.is_empty = function () {
|
|
return this.__items.length === 0;
|
|
};
|
|
|
|
OutputLine.prototype.last = function () {
|
|
if (!this.is_empty()) {
|
|
return this.__items[this.__items.length - 1];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
OutputLine.prototype.push = function (item) {
|
|
this.__items.push(item);
|
|
this.__character_count += item.length;
|
|
};
|
|
|
|
OutputLine.prototype.push_raw = function (item) {
|
|
this.push(item);
|
|
var last_newline_index = item.lastIndexOf('\n');
|
|
if (last_newline_index !== -1) {
|
|
this.__character_count = item.length - last_newline_index;
|
|
}
|
|
};
|
|
|
|
OutputLine.prototype.pop = function () {
|
|
var item = null;
|
|
if (!this.is_empty()) {
|
|
item = this.__items.pop();
|
|
this.__character_count -= item.length;
|
|
}
|
|
return item;
|
|
};
|
|
|
|
OutputLine.prototype.remove_indent = function () {
|
|
if (this.__indent_count > 0) {
|
|
this.__indent_count -= 1;
|
|
this.__character_count -= this.__parent.indent_length;
|
|
}
|
|
};
|
|
|
|
OutputLine.prototype.trim = function () {
|
|
while (this.last() === ' ') {
|
|
this.__items.pop();
|
|
this.__character_count -= 1;
|
|
}
|
|
};
|
|
|
|
OutputLine.prototype.toString = function () {
|
|
var result = '';
|
|
if (!this.is_empty()) {
|
|
if (this.__indent_count >= 0) {
|
|
result = this.__parent.get_indent_string(this.__indent_count);
|
|
}
|
|
if (this.__alignment_count >= 0) {
|
|
result += this.__parent.get_alignment_string(this.__alignment_count);
|
|
}
|
|
result += this.__items.join('');
|
|
}
|
|
return result;
|
|
};
|
|
|
|
function IndentCache(base_string, level_string) {
|
|
this.__cache = [base_string];
|
|
this.__level_string = level_string;
|
|
}
|
|
|
|
IndentCache.prototype.__ensure_cache = function (level) {
|
|
while (level >= this.__cache.length) {
|
|
this.__cache.push(this.__cache[this.__cache.length - 1] + this.__level_string);
|
|
}
|
|
};
|
|
|
|
IndentCache.prototype.get_level_string = function (level) {
|
|
this.__ensure_cache(level);
|
|
return this.__cache[level];
|
|
};
|
|
|
|
function Output(options, baseIndentString) {
|
|
var indent_string = options.indent_char;
|
|
if (options.indent_size > 1) {
|
|
indent_string = new Array(options.indent_size + 1).join(options.indent_char);
|
|
}
|
|
|
|
// Set to null to continue support for auto detection of base indent level.
|
|
baseIndentString = baseIndentString || '';
|
|
if (options.indent_level > 0) {
|
|
baseIndentString = new Array(options.indent_level + 1).join(indent_string);
|
|
}
|
|
|
|
this.__indent_cache = new IndentCache(baseIndentString, indent_string);
|
|
this.__alignment_cache = new IndentCache('', ' ');
|
|
this.baseIndentLength = baseIndentString.length;
|
|
this.indent_length = indent_string.length;
|
|
this.raw = false;
|
|
this._end_with_newline = options.end_with_newline;
|
|
|
|
this.__lines = [];
|
|
this.previous_line = null;
|
|
this.current_line = null;
|
|
this.space_before_token = false;
|
|
// initialize
|
|
this.__add_outputline();
|
|
}
|
|
|
|
Output.prototype.__add_outputline = function () {
|
|
this.previous_line = this.current_line;
|
|
this.current_line = new OutputLine(this);
|
|
this.__lines.push(this.current_line);
|
|
};
|
|
|
|
Output.prototype.get_line_number = function () {
|
|
return this.__lines.length;
|
|
};
|
|
|
|
Output.prototype.get_indent_string = function (level) {
|
|
return this.__indent_cache.get_level_string(level);
|
|
};
|
|
|
|
Output.prototype.get_alignment_string = function (level) {
|
|
return this.__alignment_cache.get_level_string(level);
|
|
};
|
|
|
|
Output.prototype.is_empty = function () {
|
|
return !this.previous_line && this.current_line.is_empty();
|
|
};
|
|
|
|
Output.prototype.add_new_line = function (force_newline) {
|
|
// never newline at the start of file
|
|
// otherwise, newline only if we didn't just add one or we're forced
|
|
if (this.is_empty() || (!force_newline && this.just_added_newline())) {
|
|
return false;
|
|
}
|
|
|
|
// if raw output is enabled, don't print additional newlines,
|
|
// but still return True as though you had
|
|
if (!this.raw) {
|
|
this.__add_outputline();
|
|
}
|
|
return true;
|
|
};
|
|
|
|
Output.prototype.get_code = function (eol) {
|
|
var sweet_code = this.__lines.join('\n').replace(/[\r\n\t ]+$/, '');
|
|
|
|
if (this._end_with_newline) {
|
|
sweet_code += '\n';
|
|
}
|
|
|
|
if (eol !== '\n') {
|
|
sweet_code = sweet_code.replace(/[\n]/g, eol);
|
|
}
|
|
|
|
return sweet_code;
|
|
};
|
|
|
|
Output.prototype.set_indent = function (indent, alignment) {
|
|
indent = indent || 0;
|
|
alignment = alignment || 0;
|
|
|
|
// Never indent your first output indent at the start of the file
|
|
if (this.__lines.length > 1) {
|
|
this.current_line.set_indent(indent, alignment);
|
|
return true;
|
|
}
|
|
this.current_line.set_indent();
|
|
return false;
|
|
};
|
|
|
|
Output.prototype.add_raw_token = function (token) {
|
|
for (var x = 0; x < token.newlines; x++) {
|
|
this.__add_outputline();
|
|
}
|
|
this.current_line.push(token.whitespace_before);
|
|
this.current_line.push_raw(token.text);
|
|
this.space_before_token = false;
|
|
};
|
|
|
|
Output.prototype.add_token = function (printable_token) {
|
|
this.add_space_before_token();
|
|
this.current_line.push(printable_token);
|
|
};
|
|
|
|
Output.prototype.add_space_before_token = function () {
|
|
if (this.space_before_token && !this.just_added_newline()) {
|
|
this.current_line.push(' ');
|
|
}
|
|
this.space_before_token = false;
|
|
};
|
|
|
|
Output.prototype.remove_indent = function (index) {
|
|
var output_length = this.__lines.length;
|
|
while (index < output_length) {
|
|
this.__lines[index].remove_indent();
|
|
index++;
|
|
}
|
|
};
|
|
|
|
Output.prototype.trim = function (eat_newlines) {
|
|
eat_newlines = eat_newlines === undefined ? false : eat_newlines;
|
|
|
|
this.current_line.trim(this.indent_string, this.baseIndentString);
|
|
|
|
while (eat_newlines && this.__lines.length > 1 && this.current_line.is_empty()) {
|
|
this.__lines.pop();
|
|
this.current_line = this.__lines[this.__lines.length - 1];
|
|
this.current_line.trim();
|
|
}
|
|
|
|
this.previous_line = this.__lines.length > 1 ? this.__lines[this.__lines.length - 2] : null;
|
|
};
|
|
|
|
Output.prototype.just_added_newline = function () {
|
|
return this.current_line.is_empty();
|
|
};
|
|
|
|
Output.prototype.just_added_blankline = function () {
|
|
return this.is_empty() || (this.current_line.is_empty() && this.previous_line.is_empty());
|
|
};
|
|
|
|
Output.prototype.ensure_empty_line_above = function (starts_with, ends_with) {
|
|
var index = this.__lines.length - 2;
|
|
while (index >= 0) {
|
|
var potentialEmptyLine = this.__lines[index];
|
|
if (potentialEmptyLine.is_empty()) {
|
|
break;
|
|
} else if (
|
|
potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&
|
|
potentialEmptyLine.item(-1) !== ends_with
|
|
) {
|
|
this.__lines.splice(index + 1, 0, new OutputLine(this));
|
|
this.previous_line = this.__lines[this.__lines.length - 2];
|
|
break;
|
|
}
|
|
index--;
|
|
}
|
|
};
|
|
|
|
module.exports.Output = Output;
|
|
|
|
/***/
|
|
},
|
|
/* 3 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
function Token(type, text, newlines, whitespace_before) {
|
|
this.type = type;
|
|
this.text = text;
|
|
|
|
// comments_before are
|
|
// comments that have a new line before them
|
|
// and may or may not have a newline after
|
|
// this is a set of comments before
|
|
this.comments_before = null; /* inline comment*/
|
|
|
|
// this.comments_after = new TokenStream(); // no new line before and newline after
|
|
this.newlines = newlines || 0;
|
|
this.whitespace_before = whitespace_before || '';
|
|
this.parent = null;
|
|
this.next = null;
|
|
this.previous = null;
|
|
this.opened = null;
|
|
this.closed = null;
|
|
this.directives = null;
|
|
}
|
|
|
|
module.exports.Token = Token;
|
|
|
|
/***/
|
|
},
|
|
/* 4 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
// Parts of this section of code is taken from acorn.
|
|
//
|
|
// Acorn was written by Marijn Haverbeke and released under an MIT
|
|
// license. The Unicode regexps (for identifiers and whitespace) were
|
|
// taken from [Esprima](http://esprima.org) by Ariya Hidayat.
|
|
//
|
|
// Git repositories for Acorn are available at
|
|
//
|
|
// http://marijnhaverbeke.nl/git/acorn
|
|
// https://github.com/marijnh/acorn.git
|
|
|
|
// ## Character categories
|
|
|
|
// acorn used char codes to squeeze the last bit of performance out
|
|
// Beautifier is okay without that, so we're using regex
|
|
// permit $ (36) and @ (64). @ is used in ES7 decorators.
|
|
// 65 through 91 are uppercase letters.
|
|
// permit _ (95).
|
|
// 97 through 123 are lowercase letters.
|
|
var baseASCIIidentifierStartChars = '\x24\x40\x41-\x5a\x5f\x61-\x7a';
|
|
|
|
// inside an identifier @ is not allowed but 0-9 are.
|
|
var baseASCIIidentifierChars = '\x24\x30-\x39\x41-\x5a\x5f\x61-\x7a';
|
|
|
|
// Big ugly regular expressions that match characters in the
|
|
// whitespace, identifier, and identifier-start categories. These
|
|
// are only applied when a character is found to actually have a
|
|
// code point above 128.
|
|
var nonASCIIidentifierStartChars =
|
|
'\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\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-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\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\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\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\u2071\u207f\u2090-\u209c\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-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\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-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\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\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc';
|
|
var nonASCIIidentifierChars =
|
|
'\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f';
|
|
//var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
|
//var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
|
|
|
var identifierStart = '[' + baseASCIIidentifierStartChars + nonASCIIidentifierStartChars + ']';
|
|
var identifierChars =
|
|
'[' + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + ']*';
|
|
|
|
exports.identifier = new RegExp(identifierStart + identifierChars, 'g');
|
|
|
|
// Whether a single character denotes a newline.
|
|
|
|
exports.newline = /[\n\r\u2028\u2029]/;
|
|
|
|
// Matches a whole line break (where CRLF is considered a single
|
|
// line break). Used to count lines.
|
|
|
|
// in javascript, these two differ
|
|
// in python they are the same, different methods are called on them
|
|
exports.lineBreak = new RegExp('\r\n|' + exports.newline.source);
|
|
exports.allLineBreaks = new RegExp(exports.lineBreak.source, 'g');
|
|
|
|
/***/
|
|
},
|
|
/* 5 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
var BaseOptions = __webpack_require__(6).Options;
|
|
|
|
var validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];
|
|
|
|
function Options(options) {
|
|
BaseOptions.call(this, options, 'js');
|
|
|
|
// compatibility, re
|
|
var raw_brace_style = this.raw_options.brace_style || null;
|
|
if (raw_brace_style === 'expand-strict') {
|
|
//graceful handling of deprecated option
|
|
this.raw_options.brace_style = 'expand';
|
|
} else if (raw_brace_style === 'collapse-preserve-inline') {
|
|
//graceful handling of deprecated option
|
|
this.raw_options.brace_style = 'collapse,preserve-inline';
|
|
} else if (this.raw_options.braces_on_own_line !== undefined) {
|
|
//graceful handling of deprecated option
|
|
this.raw_options.brace_style = this.raw_options.braces_on_own_line ? 'expand' : 'collapse';
|
|
// } else if (!raw_brace_style) { //Nothing exists to set it
|
|
// raw_brace_style = "collapse";
|
|
}
|
|
|
|
//preserve-inline in delimited string will trigger brace_preserve_inline, everything
|
|
//else is considered a brace_style and the last one only will have an effect
|
|
|
|
var brace_style_split = this._get_selection_list('brace_style', [
|
|
'collapse',
|
|
'expand',
|
|
'end-expand',
|
|
'none',
|
|
'preserve-inline'
|
|
]);
|
|
|
|
this.brace_preserve_inline = false; //Defaults in case one or other was not specified in meta-option
|
|
this.brace_style = 'collapse';
|
|
|
|
for (var bs = 0; bs < brace_style_split.length; bs++) {
|
|
if (brace_style_split[bs] === 'preserve-inline') {
|
|
this.brace_preserve_inline = true;
|
|
} else {
|
|
this.brace_style = brace_style_split[bs];
|
|
}
|
|
}
|
|
|
|
this.unindent_chained_methods = this._get_boolean('unindent_chained_methods');
|
|
this.break_chained_methods = this._get_boolean('break_chained_methods');
|
|
this.space_in_paren = this._get_boolean('space_in_paren');
|
|
this.space_in_empty_paren = this._get_boolean('space_in_empty_paren');
|
|
this.jslint_happy = this._get_boolean('jslint_happy');
|
|
this.space_after_anon_function = this._get_boolean('space_after_anon_function');
|
|
this.space_after_named_function = this._get_boolean('space_after_named_function');
|
|
this.keep_array_indentation = this._get_boolean('keep_array_indentation');
|
|
this.space_before_conditional = this._get_boolean('space_before_conditional', true);
|
|
this.unescape_strings = this._get_boolean('unescape_strings');
|
|
this.e4x = this._get_boolean('e4x');
|
|
this.comma_first = this._get_boolean('comma_first');
|
|
this.operator_position = this._get_selection('operator_position', validPositionValues);
|
|
|
|
// For testing of beautify preserve:start directive
|
|
this.test_output_raw = this._get_boolean('test_output_raw');
|
|
|
|
// force this._options.space_after_anon_function to true if this._options.jslint_happy
|
|
if (this.jslint_happy) {
|
|
this.space_after_anon_function = true;
|
|
}
|
|
}
|
|
Options.prototype = new BaseOptions();
|
|
|
|
module.exports.Options = Options;
|
|
|
|
/***/
|
|
},
|
|
/* 6 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
function Options(options, merge_child_field) {
|
|
this.raw_options = _mergeOpts(options, merge_child_field);
|
|
|
|
// Support passing the source text back with no change
|
|
this.disabled = this._get_boolean('disabled');
|
|
|
|
this.eol = this._get_characters('eol', 'auto');
|
|
this.end_with_newline = this._get_boolean('end_with_newline');
|
|
this.indent_size = this._get_number('indent_size', 4);
|
|
this.indent_char = this._get_characters('indent_char', ' ');
|
|
this.indent_level = this._get_number('indent_level');
|
|
|
|
this.preserve_newlines = this._get_boolean('preserve_newlines', true);
|
|
this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);
|
|
if (!this.preserve_newlines) {
|
|
this.max_preserve_newlines = 0;
|
|
}
|
|
|
|
this.indent_with_tabs = this._get_boolean('indent_with_tabs');
|
|
if (this.indent_with_tabs) {
|
|
this.indent_char = '\t';
|
|
this.indent_size = 1;
|
|
}
|
|
|
|
// Backwards compat with 1.3.x
|
|
this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));
|
|
}
|
|
|
|
Options.prototype._get_array = function (name, default_value) {
|
|
var option_value = this.raw_options[name];
|
|
var result = default_value || [];
|
|
if (typeof option_value === 'object') {
|
|
if (option_value !== null && typeof option_value.concat === 'function') {
|
|
result = option_value.concat();
|
|
}
|
|
} else if (typeof option_value === 'string') {
|
|
result = option_value.split(/[^a-zA-Z0-9_\/\-]+/);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
Options.prototype._get_boolean = function (name, default_value) {
|
|
var option_value = this.raw_options[name];
|
|
var result = option_value === undefined ? !!default_value : !!option_value;
|
|
return result;
|
|
};
|
|
|
|
Options.prototype._get_characters = function (name, default_value) {
|
|
var option_value = this.raw_options[name];
|
|
var result = default_value || '';
|
|
if (typeof option_value === 'string') {
|
|
result = option_value.replace(/\\r/, '\r').replace(/\\n/, '\n').replace(/\\t/, '\t');
|
|
}
|
|
return result;
|
|
};
|
|
|
|
Options.prototype._get_number = function (name, default_value) {
|
|
var option_value = this.raw_options[name];
|
|
default_value = parseInt(default_value, 10);
|
|
if (isNaN(default_value)) {
|
|
default_value = 0;
|
|
}
|
|
var result = parseInt(option_value, 10);
|
|
if (isNaN(result)) {
|
|
result = default_value;
|
|
}
|
|
return result;
|
|
};
|
|
|
|
Options.prototype._get_selection = function (name, selection_list, default_value) {
|
|
var result = this._get_selection_list(name, selection_list, default_value);
|
|
if (result.length !== 1) {
|
|
throw new Error(
|
|
"Invalid Option Value: The option '" +
|
|
name +
|
|
"' can only be one of the following values:\n" +
|
|
selection_list +
|
|
"\nYou passed in: '" +
|
|
this.raw_options[name] +
|
|
"'"
|
|
);
|
|
}
|
|
|
|
return result[0];
|
|
};
|
|
|
|
Options.prototype._get_selection_list = function (name, selection_list, default_value) {
|
|
if (!selection_list || selection_list.length === 0) {
|
|
throw new Error('Selection list cannot be empty.');
|
|
}
|
|
|
|
default_value = default_value || [selection_list[0]];
|
|
if (!this._is_valid_selection(default_value, selection_list)) {
|
|
throw new Error('Invalid Default Value!');
|
|
}
|
|
|
|
var result = this._get_array(name, default_value);
|
|
if (!this._is_valid_selection(result, selection_list)) {
|
|
throw new Error(
|
|
"Invalid Option Value: The option '" +
|
|
name +
|
|
"' can contain only the following values:\n" +
|
|
selection_list +
|
|
"\nYou passed in: '" +
|
|
this.raw_options[name] +
|
|
"'"
|
|
);
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
Options.prototype._is_valid_selection = function (result, selection_list) {
|
|
return (
|
|
result.length &&
|
|
selection_list.length &&
|
|
!result.some(function (item) {
|
|
return selection_list.indexOf(item) === -1;
|
|
})
|
|
);
|
|
};
|
|
|
|
// merges child options up with the parent options object
|
|
// Example: obj = {a: 1, b: {a: 2}}
|
|
// mergeOpts(obj, 'b')
|
|
//
|
|
// Returns: {a: 2}
|
|
function _mergeOpts(allOptions, childFieldName) {
|
|
var finalOpts = {};
|
|
allOptions = _normalizeOpts(allOptions);
|
|
var name;
|
|
|
|
for (name in allOptions) {
|
|
if (name !== childFieldName) {
|
|
finalOpts[name] = allOptions[name];
|
|
}
|
|
}
|
|
|
|
//merge in the per type settings for the childFieldName
|
|
if (childFieldName && allOptions[childFieldName]) {
|
|
for (name in allOptions[childFieldName]) {
|
|
finalOpts[name] = allOptions[childFieldName][name];
|
|
}
|
|
}
|
|
return finalOpts;
|
|
}
|
|
|
|
function _normalizeOpts(options) {
|
|
var convertedOpts = {};
|
|
var key;
|
|
|
|
for (key in options) {
|
|
var newKey = key.replace(/-/g, '_');
|
|
convertedOpts[newKey] = options[key];
|
|
}
|
|
return convertedOpts;
|
|
}
|
|
|
|
module.exports.Options = Options;
|
|
module.exports.normalizeOpts = _normalizeOpts;
|
|
module.exports.mergeOpts = _mergeOpts;
|
|
|
|
/***/
|
|
},
|
|
/* 7 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
var InputScanner = __webpack_require__(8).InputScanner;
|
|
var BaseTokenizer = __webpack_require__(9).Tokenizer;
|
|
var BASETOKEN = __webpack_require__(9).TOKEN;
|
|
var Directives = __webpack_require__(11).Directives;
|
|
var acorn = __webpack_require__(4);
|
|
|
|
function in_array(what, arr) {
|
|
return arr.indexOf(what) !== -1;
|
|
}
|
|
|
|
var TOKEN = {
|
|
START_EXPR: 'TK_START_EXPR',
|
|
END_EXPR: 'TK_END_EXPR',
|
|
START_BLOCK: 'TK_START_BLOCK',
|
|
END_BLOCK: 'TK_END_BLOCK',
|
|
WORD: 'TK_WORD',
|
|
RESERVED: 'TK_RESERVED',
|
|
SEMICOLON: 'TK_SEMICOLON',
|
|
STRING: 'TK_STRING',
|
|
EQUALS: 'TK_EQUALS',
|
|
OPERATOR: 'TK_OPERATOR',
|
|
COMMA: 'TK_COMMA',
|
|
BLOCK_COMMENT: 'TK_BLOCK_COMMENT',
|
|
COMMENT: 'TK_COMMENT',
|
|
DOT: 'TK_DOT',
|
|
UNKNOWN: 'TK_UNKNOWN',
|
|
START: BASETOKEN.START,
|
|
RAW: BASETOKEN.RAW,
|
|
EOF: BASETOKEN.EOF
|
|
};
|
|
|
|
var directives_core = new Directives(/\/\*/, /\*\//);
|
|
|
|
var number_pattern =
|
|
/0[xX][0123456789abcdefABCDEF]*|0[oO][01234567]*|0[bB][01]*|\d+n|(?:\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/g;
|
|
|
|
var digit = /[0-9]/;
|
|
|
|
// Dot "." must be distinguished from "..." and decimal
|
|
var dot_pattern = /[^\d\.]/;
|
|
|
|
var positionable_operators = (
|
|
'>>> === !== ' +
|
|
'<< && >= ** != == <= >> || ' +
|
|
'< / - + > : & % ? ^ | *'
|
|
).split(' ');
|
|
|
|
// IMPORTANT: this must be sorted longest to shortest or tokenizing many not work.
|
|
// Also, you must update possitionable operators separately from punct
|
|
var punct =
|
|
'>>>= ' +
|
|
'... >>= <<= === >>> !== **= ' +
|
|
'=> ^= :: /= << <= == && -= >= >> != -- += ** || ++ %= &= *= |= ' +
|
|
'= ! ? > < : / ^ - + * & % ~ |';
|
|
|
|
punct = punct.replace(/[-[\]{}()*+?.,\\^$|#]/g, '\\$&');
|
|
punct = punct.replace(/ /g, '|');
|
|
|
|
var punct_pattern = new RegExp(punct, 'g');
|
|
var shebang_pattern = /#![^\n\r\u2028\u2029]*(?:\r\n|[\n\r\u2028\u2029])?/g;
|
|
var include_pattern = /#include[^\n\r\u2028\u2029]*(?:\r\n|[\n\r\u2028\u2029])?/g;
|
|
|
|
// words which should always start on new line.
|
|
var line_starters =
|
|
'continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export'.split(
|
|
','
|
|
);
|
|
var reserved_words = line_starters.concat([
|
|
'do',
|
|
'in',
|
|
'of',
|
|
'else',
|
|
'get',
|
|
'set',
|
|
'new',
|
|
'catch',
|
|
'finally',
|
|
'typeof',
|
|
'yield',
|
|
'async',
|
|
'await',
|
|
'from',
|
|
'as'
|
|
]);
|
|
var reserved_word_pattern = new RegExp('^(?:' + reserved_words.join('|') + ')$');
|
|
|
|
// /* ... */ comment ends with nearest */ or end of file
|
|
var block_comment_pattern = /\/\*(?:[\s\S]*?)((?:\*\/)|$)/g;
|
|
|
|
// comment ends just before nearest linefeed or end of file
|
|
var comment_pattern = /\/\/(?:[^\n\r\u2028\u2029]*)/g;
|
|
|
|
var template_pattern = /(?:(?:<\?php|<\?=)[\s\S]*?\?>)|(?:<%[\s\S]*?%>)/g;
|
|
|
|
var in_html_comment;
|
|
|
|
var Tokenizer = function (input_string, options) {
|
|
BaseTokenizer.call(this, input_string, options);
|
|
|
|
this._whitespace_pattern =
|
|
/[\n\r\u2028\u2029\t\u000B\u00A0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff ]+/g;
|
|
this._newline_pattern = /([^\n\r\u2028\u2029]*)(\r\n|[\n\r\u2028\u2029])?/g;
|
|
};
|
|
Tokenizer.prototype = new BaseTokenizer();
|
|
|
|
Tokenizer.prototype._is_comment = function (current_token) {
|
|
return (
|
|
current_token.type === TOKEN.COMMENT ||
|
|
current_token.type === TOKEN.BLOCK_COMMENT ||
|
|
current_token.type === TOKEN.UNKNOWN
|
|
);
|
|
};
|
|
|
|
Tokenizer.prototype._is_opening = function (current_token) {
|
|
return current_token.type === TOKEN.START_BLOCK || current_token.type === TOKEN.START_EXPR;
|
|
};
|
|
|
|
Tokenizer.prototype._is_closing = function (current_token, open_token) {
|
|
return (
|
|
(current_token.type === TOKEN.END_BLOCK || current_token.type === TOKEN.END_EXPR) &&
|
|
open_token &&
|
|
((current_token.text === ']' && open_token.text === '[') ||
|
|
(current_token.text === ')' && open_token.text === '(') ||
|
|
(current_token.text === '}' && open_token.text === '{'))
|
|
);
|
|
};
|
|
|
|
Tokenizer.prototype._reset = function () {
|
|
in_html_comment = false;
|
|
};
|
|
|
|
Tokenizer.prototype._get_next_token = function (previous_token, open_token) {
|
|
this._readWhitespace();
|
|
var token = null;
|
|
var c = this._input.peek();
|
|
|
|
token = token || this._read_singles(c);
|
|
token = token || this._read_word(previous_token);
|
|
token = token || this._read_comment(c);
|
|
token = token || this._read_string(c);
|
|
token = token || this._read_regexp(c, previous_token);
|
|
token = token || this._read_xml(c, previous_token);
|
|
token = token || this._read_non_javascript(c);
|
|
token = token || this._read_punctuation();
|
|
token = token || this._create_token(TOKEN.UNKNOWN, this._input.next());
|
|
|
|
return token;
|
|
};
|
|
|
|
Tokenizer.prototype._read_word = function (previous_token) {
|
|
var resulting_string;
|
|
resulting_string = this._input.read(acorn.identifier);
|
|
if (resulting_string !== '') {
|
|
if (
|
|
!(
|
|
previous_token.type === TOKEN.DOT ||
|
|
(previous_token.type === TOKEN.RESERVED &&
|
|
(previous_token.text === 'set' || previous_token.text === 'get'))
|
|
) &&
|
|
reserved_word_pattern.test(resulting_string)
|
|
) {
|
|
if (resulting_string === 'in' || resulting_string === 'of') {
|
|
// hack for 'in' and 'of' operators
|
|
return this._create_token(TOKEN.OPERATOR, resulting_string);
|
|
}
|
|
return this._create_token(TOKEN.RESERVED, resulting_string);
|
|
}
|
|
|
|
return this._create_token(TOKEN.WORD, resulting_string);
|
|
}
|
|
|
|
resulting_string = this._input.read(number_pattern);
|
|
if (resulting_string !== '') {
|
|
return this._create_token(TOKEN.WORD, resulting_string);
|
|
}
|
|
};
|
|
|
|
Tokenizer.prototype._read_singles = function (c) {
|
|
var token = null;
|
|
if (c === null) {
|
|
token = this._create_token(TOKEN.EOF, '');
|
|
} else if (c === '(' || c === '[') {
|
|
token = this._create_token(TOKEN.START_EXPR, c);
|
|
} else if (c === ')' || c === ']') {
|
|
token = this._create_token(TOKEN.END_EXPR, c);
|
|
} else if (c === '{') {
|
|
token = this._create_token(TOKEN.START_BLOCK, c);
|
|
} else if (c === '}') {
|
|
token = this._create_token(TOKEN.END_BLOCK, c);
|
|
} else if (c === ';') {
|
|
token = this._create_token(TOKEN.SEMICOLON, c);
|
|
} else if (c === '.' && dot_pattern.test(this._input.peek(1))) {
|
|
token = this._create_token(TOKEN.DOT, c);
|
|
} else if (c === ',') {
|
|
token = this._create_token(TOKEN.COMMA, c);
|
|
}
|
|
|
|
if (token) {
|
|
this._input.next();
|
|
}
|
|
return token;
|
|
};
|
|
|
|
Tokenizer.prototype._read_punctuation = function () {
|
|
var resulting_string = this._input.read(punct_pattern);
|
|
|
|
if (resulting_string !== '') {
|
|
if (resulting_string === '=') {
|
|
return this._create_token(TOKEN.EQUALS, resulting_string);
|
|
} else {
|
|
return this._create_token(TOKEN.OPERATOR, resulting_string);
|
|
}
|
|
}
|
|
};
|
|
|
|
Tokenizer.prototype._read_non_javascript = function (c) {
|
|
var resulting_string = '';
|
|
|
|
if (c === '#') {
|
|
if (this._is_first_token()) {
|
|
resulting_string = this._input.read(shebang_pattern);
|
|
|
|
if (resulting_string) {
|
|
return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\n');
|
|
}
|
|
}
|
|
|
|
// handles extendscript #includes
|
|
resulting_string = this._input.read(include_pattern);
|
|
|
|
if (resulting_string) {
|
|
return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\n');
|
|
}
|
|
|
|
c = this._input.next();
|
|
|
|
// Spidermonkey-specific sharp variables for circular references. Considered obsolete.
|
|
var sharp = '#';
|
|
if (this._input.hasNext() && this._input.testChar(digit)) {
|
|
do {
|
|
c = this._input.next();
|
|
sharp += c;
|
|
} while (this._input.hasNext() && c !== '#' && c !== '=');
|
|
if (c === '#');
|
|
else if (this._input.peek() === '[' && this._input.peek(1) === ']') {
|
|
sharp += '[]';
|
|
this._input.next();
|
|
this._input.next();
|
|
} else if (this._input.peek() === '{' && this._input.peek(1) === '}') {
|
|
sharp += '{}';
|
|
this._input.next();
|
|
this._input.next();
|
|
}
|
|
return this._create_token(TOKEN.WORD, sharp);
|
|
}
|
|
|
|
this._input.back();
|
|
} else if (c === '<') {
|
|
if (this._input.peek(1) === '?' || this._input.peek(1) === '%') {
|
|
resulting_string = this._input.read(template_pattern);
|
|
if (resulting_string) {
|
|
resulting_string = resulting_string.replace(acorn.allLineBreaks, '\n');
|
|
return this._create_token(TOKEN.STRING, resulting_string);
|
|
}
|
|
} else if (this._input.match(/<\!--/g)) {
|
|
c = '<!--';
|
|
while (this._input.hasNext() && !this._input.testChar(acorn.newline)) {
|
|
c += this._input.next();
|
|
}
|
|
in_html_comment = true;
|
|
return this._create_token(TOKEN.COMMENT, c);
|
|
}
|
|
} else if (c === '-' && in_html_comment && this._input.match(/-->/g)) {
|
|
in_html_comment = false;
|
|
return this._create_token(TOKEN.COMMENT, '-->');
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
Tokenizer.prototype._read_comment = function (c) {
|
|
var token = null;
|
|
if (c === '/') {
|
|
var comment = '';
|
|
if (this._input.peek(1) === '*') {
|
|
// peek for comment /* ... */
|
|
comment = this._input.read(block_comment_pattern);
|
|
var directives = directives_core.get_directives(comment);
|
|
if (directives && directives.ignore === 'start') {
|
|
comment += directives_core.readIgnored(this._input);
|
|
}
|
|
comment = comment.replace(acorn.allLineBreaks, '\n');
|
|
token = this._create_token(TOKEN.BLOCK_COMMENT, comment);
|
|
token.directives = directives;
|
|
} else if (this._input.peek(1) === '/') {
|
|
// peek for comment // ...
|
|
comment = this._input.read(comment_pattern);
|
|
token = this._create_token(TOKEN.COMMENT, comment);
|
|
}
|
|
}
|
|
return token;
|
|
};
|
|
|
|
Tokenizer.prototype._read_string = function (c) {
|
|
if (c === '`' || c === "'" || c === '"') {
|
|
var resulting_string = this._input.next();
|
|
this.has_char_escapes = false;
|
|
|
|
if (c === '`') {
|
|
resulting_string += this._read_string_recursive('`', true, '${');
|
|
} else {
|
|
resulting_string += this._read_string_recursive(c);
|
|
}
|
|
|
|
if (this.has_char_escapes && this._options.unescape_strings) {
|
|
resulting_string = unescape_string(resulting_string);
|
|
}
|
|
if (this._input.peek() === c) {
|
|
resulting_string += this._input.next();
|
|
}
|
|
|
|
return this._create_token(TOKEN.STRING, resulting_string);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
Tokenizer.prototype._allow_regexp_or_xml = function (previous_token) {
|
|
// regex and xml can only appear in specific locations during parsing
|
|
return (
|
|
(previous_token.type === TOKEN.RESERVED &&
|
|
in_array(previous_token.text, [
|
|
'return',
|
|
'case',
|
|
'throw',
|
|
'else',
|
|
'do',
|
|
'typeof',
|
|
'yield'
|
|
])) ||
|
|
(previous_token.type === TOKEN.END_EXPR &&
|
|
previous_token.text === ')' &&
|
|
previous_token.opened.previous.type === TOKEN.RESERVED &&
|
|
in_array(previous_token.opened.previous.text, ['if', 'while', 'for'])) ||
|
|
in_array(previous_token.type, [
|
|
TOKEN.COMMENT,
|
|
TOKEN.START_EXPR,
|
|
TOKEN.START_BLOCK,
|
|
TOKEN.START,
|
|
TOKEN.END_BLOCK,
|
|
TOKEN.OPERATOR,
|
|
TOKEN.EQUALS,
|
|
TOKEN.EOF,
|
|
TOKEN.SEMICOLON,
|
|
TOKEN.COMMA
|
|
])
|
|
);
|
|
};
|
|
|
|
Tokenizer.prototype._read_regexp = function (c, previous_token) {
|
|
if (c === '/' && this._allow_regexp_or_xml(previous_token)) {
|
|
// handle regexp
|
|
//
|
|
var resulting_string = this._input.next();
|
|
var esc = false;
|
|
|
|
var in_char_class = false;
|
|
while (
|
|
this._input.hasNext() &&
|
|
(esc || in_char_class || this._input.peek() !== c) &&
|
|
!this._input.testChar(acorn.newline)
|
|
) {
|
|
resulting_string += this._input.peek();
|
|
if (!esc) {
|
|
esc = this._input.peek() === '\\';
|
|
if (this._input.peek() === '[') {
|
|
in_char_class = true;
|
|
} else if (this._input.peek() === ']') {
|
|
in_char_class = false;
|
|
}
|
|
} else {
|
|
esc = false;
|
|
}
|
|
this._input.next();
|
|
}
|
|
|
|
if (this._input.peek() === c) {
|
|
resulting_string += this._input.next();
|
|
|
|
// regexps may have modifiers /regexp/MOD , so fetch those, too
|
|
// Only [gim] are valid, but if the user puts in garbage, do what we can to take it.
|
|
resulting_string += this._input.read(acorn.identifier);
|
|
}
|
|
return this._create_token(TOKEN.STRING, resulting_string);
|
|
}
|
|
return null;
|
|
};
|
|
|
|
var startXmlRegExp =
|
|
/<()([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/g;
|
|
var xmlRegExp =
|
|
/[\s\S]*?<(\/?)([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/g;
|
|
|
|
Tokenizer.prototype._read_xml = function (c, previous_token) {
|
|
if (
|
|
this._options.e4x &&
|
|
c === '<' &&
|
|
this._input.test(startXmlRegExp) &&
|
|
this._allow_regexp_or_xml(previous_token)
|
|
) {
|
|
// handle e4x xml literals
|
|
//
|
|
var xmlStr = '';
|
|
var match = this._input.match(startXmlRegExp);
|
|
if (match) {
|
|
// Trim root tag to attempt to
|
|
var rootTag = match[2].replace(/^{\s+/, '{').replace(/\s+}$/, '}');
|
|
var isCurlyRoot = rootTag.indexOf('{') === 0;
|
|
var depth = 0;
|
|
while (match) {
|
|
var isEndTag = !!match[1];
|
|
var tagName = match[2];
|
|
var isSingletonTag = !!match[match.length - 1] || tagName.slice(0, 8) === '![CDATA[';
|
|
if (
|
|
!isSingletonTag &&
|
|
(tagName === rootTag ||
|
|
(isCurlyRoot && tagName.replace(/^{\s+/, '{').replace(/\s+}$/, '}')))
|
|
) {
|
|
if (isEndTag) {
|
|
--depth;
|
|
} else {
|
|
++depth;
|
|
}
|
|
}
|
|
xmlStr += match[0];
|
|
if (depth <= 0) {
|
|
break;
|
|
}
|
|
match = this._input.match(xmlRegExp);
|
|
}
|
|
// if we didn't close correctly, keep unformatted.
|
|
if (!match) {
|
|
xmlStr += this._input.match(/[\s\S]*/g)[0];
|
|
}
|
|
xmlStr = xmlStr.replace(acorn.allLineBreaks, '\n');
|
|
return this._create_token(TOKEN.STRING, xmlStr);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
function unescape_string(s) {
|
|
// You think that a regex would work for this
|
|
// return s.replace(/\\x([0-9a-f]{2})/gi, function(match, val) {
|
|
// return String.fromCharCode(parseInt(val, 16));
|
|
// })
|
|
// However, dealing with '\xff', '\\xff', '\\\xff' makes this more fun.
|
|
var out = '',
|
|
escaped = 0;
|
|
|
|
var input_scan = new InputScanner(s);
|
|
var matched = null;
|
|
|
|
while (input_scan.hasNext()) {
|
|
// Keep any whitespace, non-slash characters
|
|
// also keep slash pairs.
|
|
matched = input_scan.match(/([\s]|[^\\]|\\\\)+/g);
|
|
|
|
if (matched) {
|
|
out += matched[0];
|
|
}
|
|
|
|
if (input_scan.peek() === '\\') {
|
|
input_scan.next();
|
|
if (input_scan.peek() === 'x') {
|
|
matched = input_scan.match(/x([0-9A-Fa-f]{2})/g);
|
|
} else if (input_scan.peek() === 'u') {
|
|
matched = input_scan.match(/u([0-9A-Fa-f]{4})/g);
|
|
} else {
|
|
out += '\\';
|
|
if (input_scan.hasNext()) {
|
|
out += input_scan.next();
|
|
}
|
|
continue;
|
|
}
|
|
|
|
// If there's some error decoding, return the original string
|
|
if (!matched) {
|
|
return s;
|
|
}
|
|
|
|
escaped = parseInt(matched[1], 16);
|
|
|
|
if (escaped > 0x7e && escaped <= 0xff && matched[0].indexOf('x') === 0) {
|
|
// we bail out on \x7f..\xff,
|
|
// leaving whole string escaped,
|
|
// as it's probably completely binary
|
|
return s;
|
|
} else if (escaped >= 0x00 && escaped < 0x20) {
|
|
// leave 0x00...0x1f escaped
|
|
out += '\\' + matched[0];
|
|
continue;
|
|
} else if (escaped === 0x22 || escaped === 0x27 || escaped === 0x5c) {
|
|
// single-quote, apostrophe, backslash - escape these
|
|
out += '\\' + String.fromCharCode(escaped);
|
|
} else {
|
|
out += String.fromCharCode(escaped);
|
|
}
|
|
}
|
|
}
|
|
|
|
return out;
|
|
}
|
|
|
|
// handle string
|
|
//
|
|
Tokenizer.prototype._read_string_recursive = function (
|
|
delimiter,
|
|
allow_unescaped_newlines,
|
|
start_sub
|
|
) {
|
|
// Template strings can travers lines without escape characters.
|
|
// Other strings cannot
|
|
var current_char;
|
|
var resulting_string = '';
|
|
var esc = false;
|
|
while (this._input.hasNext()) {
|
|
current_char = this._input.peek();
|
|
if (
|
|
!(
|
|
esc ||
|
|
(current_char !== delimiter &&
|
|
(allow_unescaped_newlines || !acorn.newline.test(current_char)))
|
|
)
|
|
) {
|
|
break;
|
|
}
|
|
|
|
// Handle \r\n linebreaks after escapes or in template strings
|
|
if ((esc || allow_unescaped_newlines) && acorn.newline.test(current_char)) {
|
|
if (current_char === '\r' && this._input.peek(1) === '\n') {
|
|
this._input.next();
|
|
current_char = this._input.peek();
|
|
}
|
|
resulting_string += '\n';
|
|
} else {
|
|
resulting_string += current_char;
|
|
}
|
|
|
|
if (esc) {
|
|
if (current_char === 'x' || current_char === 'u') {
|
|
this.has_char_escapes = true;
|
|
}
|
|
esc = false;
|
|
} else {
|
|
esc = current_char === '\\';
|
|
}
|
|
|
|
this._input.next();
|
|
|
|
if (
|
|
start_sub &&
|
|
resulting_string.indexOf(start_sub, resulting_string.length - start_sub.length) !== -1
|
|
) {
|
|
if (delimiter === '`') {
|
|
resulting_string += this._read_string_recursive('}', allow_unescaped_newlines, '`');
|
|
} else {
|
|
resulting_string += this._read_string_recursive('`', allow_unescaped_newlines, '${');
|
|
}
|
|
|
|
if (this._input.hasNext()) {
|
|
resulting_string += this._input.next();
|
|
}
|
|
}
|
|
}
|
|
|
|
return resulting_string;
|
|
};
|
|
|
|
module.exports.Tokenizer = Tokenizer;
|
|
module.exports.TOKEN = TOKEN;
|
|
module.exports.positionable_operators = positionable_operators.slice();
|
|
module.exports.line_starters = line_starters.slice();
|
|
|
|
/***/
|
|
},
|
|
/* 8 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
function InputScanner(input_string) {
|
|
this.__input = input_string || '';
|
|
this.__input_length = this.__input.length;
|
|
this.__position = 0;
|
|
}
|
|
|
|
InputScanner.prototype.restart = function () {
|
|
this.__position = 0;
|
|
};
|
|
|
|
InputScanner.prototype.back = function () {
|
|
if (this.__position > 0) {
|
|
this.__position -= 1;
|
|
}
|
|
};
|
|
|
|
InputScanner.prototype.hasNext = function () {
|
|
return this.__position < this.__input_length;
|
|
};
|
|
|
|
InputScanner.prototype.next = function () {
|
|
var val = null;
|
|
if (this.hasNext()) {
|
|
val = this.__input.charAt(this.__position);
|
|
this.__position += 1;
|
|
}
|
|
return val;
|
|
};
|
|
|
|
InputScanner.prototype.peek = function (index) {
|
|
var val = null;
|
|
index = index || 0;
|
|
index += this.__position;
|
|
if (index >= 0 && index < this.__input_length) {
|
|
val = this.__input.charAt(index);
|
|
}
|
|
return val;
|
|
};
|
|
|
|
InputScanner.prototype.test = function (pattern, index) {
|
|
index = index || 0;
|
|
index += this.__position;
|
|
pattern.lastIndex = index;
|
|
|
|
if (index >= 0 && index < this.__input_length) {
|
|
var pattern_match = pattern.exec(this.__input);
|
|
return pattern_match && pattern_match.index === index;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
InputScanner.prototype.testChar = function (pattern, index) {
|
|
// test one character regex match
|
|
var val = this.peek(index);
|
|
return val !== null && pattern.test(val);
|
|
};
|
|
|
|
InputScanner.prototype.match = function (pattern) {
|
|
pattern.lastIndex = this.__position;
|
|
var pattern_match = pattern.exec(this.__input);
|
|
if (pattern_match && pattern_match.index === this.__position) {
|
|
this.__position += pattern_match[0].length;
|
|
} else {
|
|
pattern_match = null;
|
|
}
|
|
return pattern_match;
|
|
};
|
|
|
|
InputScanner.prototype.read = function (pattern) {
|
|
var val = '';
|
|
var match = this.match(pattern);
|
|
if (match) {
|
|
val = match[0];
|
|
}
|
|
return val;
|
|
};
|
|
|
|
InputScanner.prototype.readUntil = function (pattern, include_match) {
|
|
var val = '';
|
|
var match_index = this.__position;
|
|
pattern.lastIndex = this.__position;
|
|
var pattern_match = pattern.exec(this.__input);
|
|
if (pattern_match) {
|
|
if (include_match) {
|
|
match_index = pattern_match.index + pattern_match[0].length;
|
|
} else {
|
|
match_index = pattern_match.index;
|
|
}
|
|
} else {
|
|
match_index = this.__input_length;
|
|
}
|
|
|
|
val = this.__input.substring(this.__position, match_index);
|
|
this.__position = match_index;
|
|
return val;
|
|
};
|
|
|
|
InputScanner.prototype.readUntilAfter = function (pattern) {
|
|
return this.readUntil(pattern, true);
|
|
};
|
|
|
|
/* css beautifier legacy helpers */
|
|
InputScanner.prototype.peekUntilAfter = function (pattern) {
|
|
var start = this.__position;
|
|
var val = this.readUntilAfter(pattern);
|
|
this.__position = start;
|
|
return val;
|
|
};
|
|
|
|
InputScanner.prototype.lookBack = function (testVal) {
|
|
var start = this.__position - 1;
|
|
return (
|
|
start >= testVal.length &&
|
|
this.__input.substring(start - testVal.length, start).toLowerCase() === testVal
|
|
);
|
|
};
|
|
|
|
module.exports.InputScanner = InputScanner;
|
|
|
|
/***/
|
|
},
|
|
/* 9 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
var InputScanner = __webpack_require__(8).InputScanner;
|
|
var Token = __webpack_require__(3).Token;
|
|
var TokenStream = __webpack_require__(10).TokenStream;
|
|
|
|
var TOKEN = {
|
|
START: 'TK_START',
|
|
RAW: 'TK_RAW',
|
|
EOF: 'TK_EOF'
|
|
};
|
|
|
|
var Tokenizer = function (input_string, options) {
|
|
this._input = new InputScanner(input_string);
|
|
this._options = options || {};
|
|
this.__tokens = null;
|
|
this.__newline_count = 0;
|
|
this.__whitespace_before_token = '';
|
|
|
|
this._whitespace_pattern = /[\n\r\t ]+/g;
|
|
this._newline_pattern = /([^\n\r]*)(\r\n|[\n\r])?/g;
|
|
};
|
|
|
|
Tokenizer.prototype.tokenize = function () {
|
|
this._input.restart();
|
|
this.__tokens = new TokenStream();
|
|
|
|
this._reset();
|
|
|
|
var current;
|
|
var previous = new Token(TOKEN.START, '');
|
|
var open_token = null;
|
|
var open_stack = [];
|
|
var comments = new TokenStream();
|
|
|
|
while (previous.type !== TOKEN.EOF) {
|
|
current = this._get_next_token(previous, open_token);
|
|
while (this._is_comment(current)) {
|
|
comments.add(current);
|
|
current = this._get_next_token(previous, open_token);
|
|
}
|
|
|
|
if (!comments.isEmpty()) {
|
|
current.comments_before = comments;
|
|
comments = new TokenStream();
|
|
}
|
|
|
|
current.parent = open_token;
|
|
|
|
if (this._is_opening(current)) {
|
|
open_stack.push(open_token);
|
|
open_token = current;
|
|
} else if (open_token && this._is_closing(current, open_token)) {
|
|
current.opened = open_token;
|
|
open_token.closed = current;
|
|
open_token = open_stack.pop();
|
|
current.parent = open_token;
|
|
}
|
|
|
|
current.previous = previous;
|
|
previous.next = current;
|
|
|
|
this.__tokens.add(current);
|
|
previous = current;
|
|
}
|
|
|
|
return this.__tokens;
|
|
};
|
|
|
|
Tokenizer.prototype._is_first_token = function () {
|
|
return this.__tokens.isEmpty();
|
|
};
|
|
|
|
Tokenizer.prototype._reset = function () {};
|
|
|
|
Tokenizer.prototype._get_next_token = function (previous_token, open_token) {
|
|
this._readWhitespace();
|
|
var resulting_string = this._input.read(/.+/g);
|
|
if (resulting_string) {
|
|
return this._create_token(TOKEN.RAW, resulting_string);
|
|
} else {
|
|
return this._create_token(TOKEN.EOF, '');
|
|
}
|
|
};
|
|
|
|
Tokenizer.prototype._is_comment = function (current_token) {
|
|
return false;
|
|
};
|
|
|
|
Tokenizer.prototype._is_opening = function (current_token) {
|
|
return false;
|
|
};
|
|
|
|
Tokenizer.prototype._is_closing = function (current_token, open_token) {
|
|
return false;
|
|
};
|
|
|
|
Tokenizer.prototype._create_token = function (type, text) {
|
|
var token = new Token(type, text, this.__newline_count, this.__whitespace_before_token);
|
|
this.__newline_count = 0;
|
|
this.__whitespace_before_token = '';
|
|
return token;
|
|
};
|
|
|
|
Tokenizer.prototype._readWhitespace = function () {
|
|
var resulting_string = this._input.read(this._whitespace_pattern);
|
|
if (resulting_string === ' ') {
|
|
this.__whitespace_before_token = resulting_string;
|
|
} else if (resulting_string !== '') {
|
|
this._newline_pattern.lastIndex = 0;
|
|
var nextMatch = this._newline_pattern.exec(resulting_string);
|
|
while (nextMatch[2]) {
|
|
this.__newline_count += 1;
|
|
nextMatch = this._newline_pattern.exec(resulting_string);
|
|
}
|
|
this.__whitespace_before_token = nextMatch[1];
|
|
}
|
|
};
|
|
|
|
module.exports.Tokenizer = Tokenizer;
|
|
module.exports.TOKEN = TOKEN;
|
|
|
|
/***/
|
|
},
|
|
/* 10 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
function TokenStream(parent_token) {
|
|
// private
|
|
this.__tokens = [];
|
|
this.__tokens_length = this.__tokens.length;
|
|
this.__position = 0;
|
|
this.__parent_token = parent_token;
|
|
}
|
|
|
|
TokenStream.prototype.restart = function () {
|
|
this.__position = 0;
|
|
};
|
|
|
|
TokenStream.prototype.isEmpty = function () {
|
|
return this.__tokens_length === 0;
|
|
};
|
|
|
|
TokenStream.prototype.hasNext = function () {
|
|
return this.__position < this.__tokens_length;
|
|
};
|
|
|
|
TokenStream.prototype.next = function () {
|
|
var val = null;
|
|
if (this.hasNext()) {
|
|
val = this.__tokens[this.__position];
|
|
this.__position += 1;
|
|
}
|
|
return val;
|
|
};
|
|
|
|
TokenStream.prototype.peek = function (index) {
|
|
var val = null;
|
|
index = index || 0;
|
|
index += this.__position;
|
|
if (index >= 0 && index < this.__tokens_length) {
|
|
val = this.__tokens[index];
|
|
}
|
|
return val;
|
|
};
|
|
|
|
TokenStream.prototype.add = function (token) {
|
|
if (this.__parent_token) {
|
|
token.parent = this.__parent_token;
|
|
}
|
|
this.__tokens.push(token);
|
|
this.__tokens_length += 1;
|
|
};
|
|
|
|
module.exports.TokenStream = TokenStream;
|
|
|
|
/***/
|
|
},
|
|
/* 11 */
|
|
/***/ function (module, exports, __webpack_require__) {
|
|
function Directives(start_block_pattern, end_block_pattern) {
|
|
start_block_pattern =
|
|
typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;
|
|
end_block_pattern =
|
|
typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;
|
|
this.__directives_block_pattern = new RegExp(
|
|
start_block_pattern + / beautify( \w+[:]\w+)+ /.source + end_block_pattern,
|
|
'g'
|
|
);
|
|
this.__directive_pattern = / (\w+)[:](\w+)/g;
|
|
|
|
this.__directives_end_ignore_pattern = new RegExp(
|
|
'(?:[\\s\\S]*?)((?:' +
|
|
start_block_pattern +
|
|
/\sbeautify\signore:end\s/.source +
|
|
end_block_pattern +
|
|
')|$)',
|
|
'g'
|
|
);
|
|
}
|
|
|
|
Directives.prototype.get_directives = function (text) {
|
|
if (!text.match(this.__directives_block_pattern)) {
|
|
return null;
|
|
}
|
|
|
|
var directives = {};
|
|
this.__directive_pattern.lastIndex = 0;
|
|
var directive_match = this.__directive_pattern.exec(text);
|
|
|
|
while (directive_match) {
|
|
directives[directive_match[1]] = directive_match[2];
|
|
directive_match = this.__directive_pattern.exec(text);
|
|
}
|
|
|
|
return directives;
|
|
};
|
|
|
|
Directives.prototype.readIgnored = function (input) {
|
|
return input.read(this.__directives_end_ignore_pattern);
|
|
};
|
|
|
|
module.exports.Directives = Directives;
|
|
|
|
/***/
|
|
}
|
|
/******/
|
|
]
|
|
);
|
|
var js_beautify = legacy_beautify_js;
|
|
/* Footer */
|
|
{
|
|
// Add support for CommonJS. Just put this file somewhere on your require.paths
|
|
// and you will be able to `var js_beautify = require("beautify").js_beautify`.
|
|
exports.js_beautify = js_beautify;
|
|
}
|
|
})();
|
|
});
|
|
|
|
unwrapExports(beautify);
|
|
var beautify_1 = beautify.js_beautify;
|
|
|
|
/*
|
|
* Generated by PEG.js 0.10.0.
|
|
*
|
|
* http://pegjs.org/
|
|
*/
|
|
|
|
var javaAST = (function () {
|
|
function peg$subclass(child, parent) {
|
|
function ctor() {
|
|
this.constructor = child;
|
|
}
|
|
ctor.prototype = parent.prototype;
|
|
child.prototype = new ctor();
|
|
}
|
|
|
|
function peg$SyntaxError(message, expected, found, location) {
|
|
this.message = message;
|
|
this.expected = expected;
|
|
this.found = found;
|
|
this.location = location;
|
|
this.name = 'SyntaxError';
|
|
|
|
if (typeof Error.captureStackTrace === 'function') {
|
|
Error.captureStackTrace(this, peg$SyntaxError);
|
|
}
|
|
}
|
|
|
|
peg$subclass(peg$SyntaxError, Error);
|
|
|
|
peg$SyntaxError.buildMessage = function (expected, found) {
|
|
var DESCRIBE_EXPECTATION_FNS = {
|
|
literal: function (expectation) {
|
|
return '"' + literalEscape(expectation.text) + '"';
|
|
},
|
|
|
|
class: function (expectation) {
|
|
var escapedParts = '',
|
|
i;
|
|
|
|
for (i = 0; i < expectation.parts.length; i++) {
|
|
escapedParts +=
|
|
expectation.parts[i] instanceof Array
|
|
? classEscape(expectation.parts[i][0]) + '-' + classEscape(expectation.parts[i][1])
|
|
: classEscape(expectation.parts[i]);
|
|
}
|
|
|
|
return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']';
|
|
},
|
|
|
|
any: function (expectation) {
|
|
return 'any character';
|
|
},
|
|
|
|
end: function (expectation) {
|
|
return 'end of input';
|
|
},
|
|
|
|
other: function (expectation) {
|
|
return expectation.description;
|
|
}
|
|
};
|
|
|
|
function hex(ch) {
|
|
return ch.charCodeAt(0).toString(16).toUpperCase();
|
|
}
|
|
|
|
function literalEscape(s) {
|
|
return s
|
|
.replace(/\\/g, '\\\\')
|
|
.replace(/"/g, '\\"')
|
|
.replace(/\0/g, '\\0')
|
|
.replace(/\t/g, '\\t')
|
|
.replace(/\n/g, '\\n')
|
|
.replace(/\r/g, '\\r')
|
|
.replace(/[\x00-\x0F]/g, function (ch) {
|
|
return '\\x0' + hex(ch);
|
|
})
|
|
.replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) {
|
|
return '\\x' + hex(ch);
|
|
});
|
|
}
|
|
|
|
function classEscape(s) {
|
|
return s
|
|
.replace(/\\/g, '\\\\')
|
|
.replace(/\]/g, '\\]')
|
|
.replace(/\^/g, '\\^')
|
|
.replace(/-/g, '\\-')
|
|
.replace(/\0/g, '\\0')
|
|
.replace(/\t/g, '\\t')
|
|
.replace(/\n/g, '\\n')
|
|
.replace(/\r/g, '\\r')
|
|
.replace(/[\x00-\x0F]/g, function (ch) {
|
|
return '\\x0' + hex(ch);
|
|
})
|
|
.replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) {
|
|
return '\\x' + hex(ch);
|
|
});
|
|
}
|
|
|
|
function describeExpectation(expectation) {
|
|
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
|
|
}
|
|
|
|
function describeExpected(expected) {
|
|
var descriptions = new Array(expected.length),
|
|
i,
|
|
j;
|
|
|
|
for (i = 0; i < expected.length; i++) {
|
|
descriptions[i] = describeExpectation(expected[i]);
|
|
}
|
|
|
|
descriptions.sort();
|
|
|
|
if (descriptions.length > 0) {
|
|
for (i = 1, j = 1; i < descriptions.length; i++) {
|
|
if (descriptions[i - 1] !== descriptions[i]) {
|
|
descriptions[j] = descriptions[i];
|
|
j++;
|
|
}
|
|
}
|
|
descriptions.length = j;
|
|
}
|
|
|
|
switch (descriptions.length) {
|
|
case 1:
|
|
return descriptions[0];
|
|
|
|
case 2:
|
|
return descriptions[0] + ' or ' + descriptions[1];
|
|
|
|
default:
|
|
return descriptions.slice(0, -1).join(', ') + ', or ' + descriptions[descriptions.length - 1];
|
|
}
|
|
}
|
|
|
|
function describeFound(found) {
|
|
return found ? '"' + literalEscape(found) + '"' : 'end of input';
|
|
}
|
|
|
|
return 'Expected ' + describeExpected(expected) + ' but ' + describeFound(found) + ' found.';
|
|
};
|
|
|
|
function peg$parse(input, options) {
|
|
options = options !== void 0 ? options : {};
|
|
|
|
var peg$FAILED = {},
|
|
peg$startRuleFunctions = { CompilationUnit: peg$parseCompilationUnit },
|
|
peg$startRuleFunction = peg$parseCompilationUnit,
|
|
peg$c0 = function (pack, imports, types) {
|
|
return {
|
|
node: 'CompilationUnit',
|
|
types: skipNulls(types),
|
|
package: pack,
|
|
imports: skipNulls(imports)
|
|
};
|
|
},
|
|
peg$c1 = function (annot, name) {
|
|
return {
|
|
node: 'PackageDeclaration',
|
|
name: name,
|
|
annotations: annot
|
|
};
|
|
},
|
|
peg$c2 = function (stat, name, asterisk) {
|
|
return {
|
|
node: 'ImportDeclaration',
|
|
name: name,
|
|
static: !!stat,
|
|
onDemand: !!extractOptional(asterisk, 1)
|
|
};
|
|
},
|
|
peg$c3 = function () {
|
|
return null;
|
|
},
|
|
peg$c4 = function (modifiers, type) {
|
|
return mergeProps(type, { modifiers: modifiers });
|
|
},
|
|
peg$c5 = function (id, gen, ext, impl, body) {
|
|
return {
|
|
node: 'TypeDeclaration',
|
|
name: id,
|
|
superInterfaceTypes: extractOptionalList(impl, 1),
|
|
superclassType: extractOptional(ext, 1),
|
|
bodyDeclarations: body,
|
|
typeParameters: optionalList(gen),
|
|
interface: false
|
|
};
|
|
},
|
|
peg$c6 = function (decls) {
|
|
return skipNulls(decls);
|
|
},
|
|
peg$c7 = function (modifier, body) {
|
|
return {
|
|
node: 'Initializer',
|
|
body: body,
|
|
modifiers: modifier === null ? [] : [makeModifier('static')]
|
|
};
|
|
},
|
|
peg$c8 = function (modifiers, member) {
|
|
return mergeProps(member, { modifiers: modifiers });
|
|
},
|
|
peg$c9 = function (params, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'MethodDeclaration',
|
|
typeParameters: params
|
|
});
|
|
},
|
|
peg$c10 = function (type, id, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'MethodDeclaration',
|
|
returnType2: type,
|
|
name: id,
|
|
typeParameters: []
|
|
});
|
|
},
|
|
peg$c11 = function (type, decls) {
|
|
return {
|
|
node: 'FieldDeclaration',
|
|
fragments: decls,
|
|
type: type
|
|
};
|
|
},
|
|
peg$c12 = function (id, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'MethodDeclaration',
|
|
returnType2: makePrimitive('void'),
|
|
name: id,
|
|
constructor: false
|
|
});
|
|
},
|
|
peg$c13 = function (id, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'MethodDeclaration',
|
|
name: id,
|
|
typeParameters: []
|
|
});
|
|
},
|
|
peg$c14 = function () {
|
|
return makePrimitive('void');
|
|
},
|
|
peg$c15 = function (type, id, rest) {
|
|
return mergeProps(rest, {
|
|
returnType2: type,
|
|
name: id
|
|
});
|
|
},
|
|
peg$c16 = function (id, rest) {
|
|
return mergeProps(rest, { name: id });
|
|
},
|
|
peg$c17 = function (params, dims, throws) {
|
|
return null;
|
|
},
|
|
peg$c18 = function (params, dims, throws, body) {
|
|
return {
|
|
parameters: params,
|
|
thrownExceptions: extractThrowsClassType(extractOptionalList(throws, 1)),
|
|
extraDimensions: dims.length,
|
|
body: body,
|
|
constructor: false
|
|
};
|
|
},
|
|
peg$c19 = function (params, throws) {
|
|
return null;
|
|
},
|
|
peg$c20 = function (params, throws, body) {
|
|
return {
|
|
parameters: params,
|
|
thrownExceptions: extractThrowsClassType(extractOptionalList(throws, 1)),
|
|
body: body,
|
|
extraDimensions: 0,
|
|
typeParameters: []
|
|
};
|
|
},
|
|
peg$c21 = function (params, throws, body) {
|
|
return {
|
|
parameters: params,
|
|
thrownExceptions: extractThrowsClassType(extractOptionalList(throws, 1)),
|
|
body: body,
|
|
returnType2: null,
|
|
constructor: true,
|
|
extraDimensions: 0
|
|
};
|
|
},
|
|
peg$c22 = function (id, gen, ext, body) {
|
|
return {
|
|
node: 'TypeDeclaration',
|
|
name: id,
|
|
superInterfaceTypes: extractOptionalList(ext, 1),
|
|
superclassType: null,
|
|
bodyDeclarations: body,
|
|
typeParameters: optionalList(gen),
|
|
interface: true
|
|
};
|
|
},
|
|
peg$c23 = function (type, id, rest) {
|
|
if (rest.node === 'FieldDeclaration') {
|
|
rest.fragments[0].name = id;
|
|
return mergeProps(rest, { type: type });
|
|
} else {
|
|
return mergeProps(rest, {
|
|
returnType2: type,
|
|
name: id,
|
|
typeParameters: []
|
|
});
|
|
}
|
|
},
|
|
peg$c24 = function (rest) {
|
|
return { node: 'FieldDeclaration', fragments: rest };
|
|
},
|
|
peg$c25 = function (params, dims, throws) {
|
|
return {
|
|
node: 'MethodDeclaration',
|
|
parameters: params,
|
|
thrownExceptions: extractThrowsClassType(extractOptionalList(throws, 1)),
|
|
extraDimensions: dims.length,
|
|
body: null,
|
|
constructor: false
|
|
};
|
|
},
|
|
peg$c26 = function (params) {
|
|
return makePrimitive('void');
|
|
},
|
|
peg$c27 = function (params, type, id, rest) {
|
|
return mergeProps(rest, {
|
|
returnType2: type,
|
|
name: id,
|
|
typeParameters: params
|
|
});
|
|
},
|
|
peg$c28 = function (params, throws) {
|
|
return {
|
|
node: 'MethodDeclaration',
|
|
parameters: params,
|
|
thrownExceptions: extractThrowsClassType(extractOptionalList(throws, 1)),
|
|
returnType2: makePrimitive('void'),
|
|
extraDimensions: 0,
|
|
typeParameters: [],
|
|
body: null,
|
|
constructor: false
|
|
};
|
|
},
|
|
peg$c29 = function (first, rest) {
|
|
return buildList(first, rest, 1);
|
|
},
|
|
peg$c30 = function (dims, init) {
|
|
return {
|
|
node: 'VariableDeclarationFragment',
|
|
extraDimensions: dims.length,
|
|
initializer: init
|
|
};
|
|
},
|
|
peg$c31 = function (name, impl, eb) {
|
|
return mergeProps(eb, {
|
|
node: 'EnumDeclaration',
|
|
name: name,
|
|
superInterfaceTypes: extractOptionalList(impl, 1)
|
|
});
|
|
},
|
|
peg$c32 = function (consts, body) {
|
|
return {
|
|
enumConstants: optionalList(consts),
|
|
bodyDeclarations: optionalList(body)
|
|
};
|
|
},
|
|
peg$c33 = function (annot, name, args, cls) {
|
|
return {
|
|
node: 'EnumConstantDeclaration',
|
|
anonymousClassDeclaration:
|
|
cls === null
|
|
? null
|
|
: {
|
|
node: 'AnonymousClassDeclaration',
|
|
bodyDeclarations: cls
|
|
},
|
|
arguments: optionalList(args),
|
|
modifiers: annot,
|
|
name: name
|
|
};
|
|
},
|
|
peg$c34 = function (decl) {
|
|
return decl;
|
|
},
|
|
peg$c35 = function () {
|
|
return makeModifier('final');
|
|
},
|
|
peg$c36 = function (modifiers, type, decls) {
|
|
return {
|
|
node: 'VariableDeclarationStatement',
|
|
fragments: decls,
|
|
modifiers: modifiers,
|
|
type: type
|
|
};
|
|
},
|
|
peg$c37 = function (name, dims, init) {
|
|
return {
|
|
node: 'VariableDeclarationFragment',
|
|
name: name,
|
|
extraDimensions: dims.length,
|
|
initializer: extractOptional(init, 1)
|
|
};
|
|
},
|
|
peg$c38 = function (params) {
|
|
return optionalList(params);
|
|
},
|
|
peg$c39 = function (modifiers, type, decl) {
|
|
return mergeProps(decl, {
|
|
type: type,
|
|
modifiers: modifiers,
|
|
varargs: false,
|
|
initializer: null
|
|
});
|
|
},
|
|
peg$c40 = function (modifiers, type, decl) {
|
|
return mergeProps(decl, {
|
|
type: type,
|
|
modifiers: modifiers,
|
|
varargs: true,
|
|
initializer: null
|
|
});
|
|
},
|
|
peg$c41 = function (first, rest, last) {
|
|
return buildList(first, rest, 1).concat(extractOptionalList(last, 1));
|
|
},
|
|
peg$c42 = function (last) {
|
|
return [last];
|
|
},
|
|
peg$c43 = function (id, dims) {
|
|
return {
|
|
node: 'SingleVariableDeclaration',
|
|
name: id,
|
|
extraDimensions: dims.length
|
|
};
|
|
},
|
|
peg$c44 = function (statements) {
|
|
return {
|
|
node: 'Block',
|
|
statements: statements
|
|
};
|
|
},
|
|
peg$c45 = function (modifiers, decl) {
|
|
return {
|
|
node: 'TypeDeclarationStatement',
|
|
declaration: mergeProps(decl, { modifiers: modifiers })
|
|
};
|
|
},
|
|
peg$c46 = function (expr, message) {
|
|
return {
|
|
node: 'AssertStatement',
|
|
expression: expr,
|
|
message: extractOptional(message, 1)
|
|
};
|
|
},
|
|
peg$c47 = function (expr, then, alt) {
|
|
return {
|
|
node: 'IfStatement',
|
|
elseStatement: extractOptional(alt, 1),
|
|
thenStatement: then,
|
|
expression: expr.expression
|
|
};
|
|
},
|
|
peg$c48 = function (init, expr, up, body) {
|
|
return {
|
|
node: 'ForStatement',
|
|
initializers: optionalList(init),
|
|
expression: expr,
|
|
updaters: optionalList(up),
|
|
body: body
|
|
};
|
|
},
|
|
peg$c49 = function (param, expr, statement) {
|
|
return {
|
|
node: 'EnhancedForStatement',
|
|
parameter: param,
|
|
expression: expr,
|
|
body: statement
|
|
};
|
|
},
|
|
peg$c50 = function (expr, body) {
|
|
return {
|
|
node: 'WhileStatement',
|
|
expression: expr.expression,
|
|
body: body
|
|
};
|
|
},
|
|
peg$c51 = function (statement, expr) {
|
|
return {
|
|
node: 'DoStatement',
|
|
expression: expr.expression,
|
|
body: statement
|
|
};
|
|
},
|
|
peg$c52 = function (first, rest, body, cat, fin) {
|
|
return mergeProps(makeCatchFinally(cat, fin), {
|
|
node: 'TryStatement',
|
|
body: body,
|
|
resources: buildList(first, rest, 1)
|
|
});
|
|
},
|
|
peg$c53 = function (body, cat, fin) {
|
|
return makeCatchFinally(cat, fin);
|
|
},
|
|
peg$c54 = function (body, fin) {
|
|
return makeCatchFinally([], fin);
|
|
},
|
|
peg$c55 = function (body, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'TryStatement',
|
|
body: body,
|
|
resources: []
|
|
});
|
|
},
|
|
peg$c56 = function (expr, cases) {
|
|
return { node: 'SwitchStatement', statements: cases, expression: expr.expression };
|
|
},
|
|
peg$c57 = function (expr, body) {
|
|
return { node: 'SynchronizedStatement', expression: expr.expression, body: body };
|
|
},
|
|
peg$c58 = function (expr) {
|
|
return { node: 'ReturnStatement', expression: expr };
|
|
},
|
|
peg$c59 = function (expr) {
|
|
return { node: 'ThrowStatement', expression: expr };
|
|
},
|
|
peg$c60 = function (id) {
|
|
return { node: 'BreakStatement', label: id };
|
|
},
|
|
peg$c61 = function (id) {
|
|
return { node: 'ContinueStatement', label: id };
|
|
},
|
|
peg$c62 = function () {
|
|
return { node: 'EmptyStatement' };
|
|
},
|
|
peg$c63 = function (statement) {
|
|
return statement;
|
|
},
|
|
peg$c64 = function (id, statement) {
|
|
return { node: 'LabeledStatement', label: id, body: statement };
|
|
},
|
|
peg$c65 = function (modifiers, type, decl, expr) {
|
|
var fragment = mergeProps(decl, { initializer: expr });
|
|
fragment.node = 'VariableDeclarationFragment';
|
|
return {
|
|
node: 'VariableDeclarationExpression',
|
|
modifiers: modifiers,
|
|
type: type,
|
|
fragments: [fragment]
|
|
};
|
|
},
|
|
peg$c66 = function (modifiers, first, rest, decl, body) {
|
|
return {
|
|
node: 'CatchClause',
|
|
body: body,
|
|
exception: mergeProps(decl, {
|
|
modifiers: modifiers,
|
|
initializer: null,
|
|
varargs: false,
|
|
type: rest.length
|
|
? {
|
|
node: 'UnionType',
|
|
types: buildList(first, rest, 1)
|
|
}
|
|
: first
|
|
})
|
|
};
|
|
},
|
|
peg$c67 = function (block) {
|
|
return block;
|
|
},
|
|
peg$c68 = function (blocks) {
|
|
return [].concat.apply([], blocks);
|
|
},
|
|
peg$c69 = function (expr, blocks) {
|
|
return [{ node: 'SwitchCase', expression: expr }].concat(blocks);
|
|
},
|
|
peg$c70 = function (expr) {
|
|
return expr;
|
|
},
|
|
peg$c71 = function (modifiers, type, decls) {
|
|
return [
|
|
{
|
|
node: 'VariableDeclarationExpression',
|
|
modifiers: modifiers,
|
|
fragments: decls,
|
|
type: type
|
|
}
|
|
];
|
|
},
|
|
peg$c72 = function (first, rest) {
|
|
return extractExpressions(buildList(first, rest, 1));
|
|
},
|
|
peg$c73 = function (expr) {
|
|
switch (expr.node) {
|
|
case 'SuperConstructorInvocation':
|
|
case 'ConstructorInvocation':
|
|
return expr;
|
|
default:
|
|
return {
|
|
node: 'ExpressionStatement',
|
|
expression: expr
|
|
};
|
|
}
|
|
},
|
|
peg$c74 = function (left, op, right) {
|
|
return {
|
|
node: 'Assignment',
|
|
operator: op[0] /* remove ending spaces */,
|
|
leftHandSide: left,
|
|
rightHandSide: right
|
|
};
|
|
},
|
|
peg$c75 = function (expr, then, alt) {
|
|
return {
|
|
node: 'ConditionalExpression',
|
|
expression: expr,
|
|
thenExpression: then,
|
|
elseExpression: alt
|
|
};
|
|
},
|
|
peg$c76 = function (first, rest) {
|
|
return buildInfixExpr(first, rest);
|
|
},
|
|
peg$c77 = function (first, rest) {
|
|
return buildTree(first, rest, function (result, element) {
|
|
return element[0][0] === 'instanceof'
|
|
? {
|
|
node: 'InstanceofExpression',
|
|
leftOperand: result,
|
|
rightOperand: element[1]
|
|
}
|
|
: {
|
|
node: 'InfixExpression',
|
|
operator: element[0][0], // remove ending Spacing
|
|
leftOperand: result,
|
|
rightOperand: element[1]
|
|
};
|
|
});
|
|
},
|
|
peg$c78 = function (operator, operand) {
|
|
return operand.node === 'NumberLiteral' &&
|
|
operator === '-' &&
|
|
(operand.token === '9223372036854775808L' ||
|
|
operand.token === '9223372036854775808l' ||
|
|
operand.token === '2147483648')
|
|
? { node: 'NumberLiteral', token: text() }
|
|
: {
|
|
node: 'PrefixExpression',
|
|
operator: operator,
|
|
operand: operand
|
|
};
|
|
},
|
|
peg$c79 = function (expr) {
|
|
return {
|
|
node: 'CastExpression',
|
|
type: expr[1],
|
|
expression: expr[3]
|
|
};
|
|
},
|
|
peg$c80 = function (arg, sel, sels, operator) {
|
|
return operator.length > 1
|
|
? TODO(/* JLS7? */)
|
|
: {
|
|
node: 'PostfixExpression',
|
|
operator: operator[0],
|
|
operand: buildSelectorTree(arg, sel, sels)
|
|
};
|
|
},
|
|
peg$c81 = function (arg, sel, sels) {
|
|
return buildSelectorTree(arg, sel, sels);
|
|
},
|
|
peg$c82 = function (arg, operator) {
|
|
return operator.length > 1
|
|
? TODO(/* JLS7? */)
|
|
: {
|
|
node: 'PostfixExpression',
|
|
operator: operator[0],
|
|
operand: arg
|
|
};
|
|
},
|
|
peg$c83 = function (args, args_r) {
|
|
return { node: 'ConstructorInvocation', arguments: args_r, typeArguments: [] };
|
|
},
|
|
peg$c84 = function (args, ret) {
|
|
if (ret.typeArguments.length) return TODO(/* Ugly ! */);
|
|
ret.typeArguments = args;
|
|
return ret;
|
|
},
|
|
peg$c85 = function (args) {
|
|
return args === null
|
|
? {
|
|
node: 'ThisExpression',
|
|
qualifier: null
|
|
}
|
|
: {
|
|
node: 'ConstructorInvocation',
|
|
arguments: args,
|
|
typeArguments: []
|
|
};
|
|
},
|
|
peg$c86 = function (suffix) {
|
|
return suffix.node === 'SuperConstructorInvocation'
|
|
? suffix
|
|
: mergeProps(suffix, { qualifier: null });
|
|
},
|
|
peg$c87 = function (creator) {
|
|
return creator;
|
|
},
|
|
peg$c88 = function (type, dims) {
|
|
return {
|
|
node: 'TypeLiteral',
|
|
type: buildArrayTree(type, dims)
|
|
};
|
|
},
|
|
peg$c89 = function () {
|
|
return {
|
|
node: 'TypeLiteral',
|
|
type: makePrimitive('void')
|
|
};
|
|
},
|
|
peg$c90 = function (qual, dims) {
|
|
return {
|
|
node: 'TypeLiteral',
|
|
type: buildArrayTree(buildTypeName(qual, null, []), dims)
|
|
};
|
|
},
|
|
peg$c91 = function (qual, expr) {
|
|
return { node: 'ArrayAccess', array: qual, index: expr };
|
|
},
|
|
peg$c92 = function (qual, args) {
|
|
return mergeProps(popQualified(qual), {
|
|
node: 'MethodInvocation',
|
|
arguments: args,
|
|
typeArguments: []
|
|
});
|
|
},
|
|
peg$c93 = function (qual) {
|
|
return { node: 'TypeLiteral', type: buildTypeName(qual, null, []) };
|
|
},
|
|
peg$c94 = function (qual, ret) {
|
|
if (ret.expression) return TODO(/* Ugly ! */);
|
|
ret.expression = qual;
|
|
return ret;
|
|
},
|
|
peg$c95 = function (qual) {
|
|
return { node: 'ThisExpression', qualifier: qual };
|
|
},
|
|
peg$c96 = function (qual, args) {
|
|
return {
|
|
node: 'SuperConstructorInvocation',
|
|
arguments: args,
|
|
expression: qual,
|
|
typeArguments: []
|
|
};
|
|
},
|
|
peg$c97 = function (qual, args, rest) {
|
|
return mergeProps(rest, { expression: qual, typeArguments: optionalList(args) });
|
|
},
|
|
peg$c98 = function () {
|
|
return [];
|
|
},
|
|
peg$c99 = function (suffix) {
|
|
return suffix;
|
|
},
|
|
peg$c100 = function (id, args) {
|
|
return { node: 'MethodInvocation', arguments: args, name: id, typeArguments: [] };
|
|
},
|
|
peg$c101 = function (op) {
|
|
return op[0]; /* remove ending spaces */
|
|
},
|
|
peg$c102 = function (id) {
|
|
return { node: 'FieldAccess', name: id };
|
|
},
|
|
peg$c103 = function (ret) {
|
|
return ret;
|
|
},
|
|
peg$c104 = function () {
|
|
return TODO(/* Any sample ? */);
|
|
},
|
|
peg$c105 = function (args, ret) {
|
|
return mergeProps(ret, { typeArguments: optionalList(args) });
|
|
},
|
|
peg$c106 = function (expr) {
|
|
return { node: 'ArrayAccess', index: expr };
|
|
},
|
|
peg$c107 = function (args) {
|
|
return {
|
|
node: 'SuperConstructorInvocation',
|
|
arguments: args,
|
|
expression: null,
|
|
typeArguments: []
|
|
};
|
|
},
|
|
peg$c108 = function (gen, id, args) {
|
|
return args === null
|
|
? {
|
|
node: 'SuperFieldAccess',
|
|
name: id
|
|
}
|
|
: {
|
|
node: 'SuperMethodInvocation',
|
|
typeArguments: optionalList(gen),
|
|
name: id,
|
|
arguments: args
|
|
};
|
|
},
|
|
peg$c109 = 'byte',
|
|
peg$c110 = peg$literalExpectation('byte', false),
|
|
peg$c111 = 'short',
|
|
peg$c112 = peg$literalExpectation('short', false),
|
|
peg$c113 = 'char',
|
|
peg$c114 = peg$literalExpectation('char', false),
|
|
peg$c115 = 'int',
|
|
peg$c116 = peg$literalExpectation('int', false),
|
|
peg$c117 = 'long',
|
|
peg$c118 = peg$literalExpectation('long', false),
|
|
peg$c119 = 'float',
|
|
peg$c120 = peg$literalExpectation('float', false),
|
|
peg$c121 = 'double',
|
|
peg$c122 = peg$literalExpectation('double', false),
|
|
peg$c123 = 'boolean',
|
|
peg$c124 = peg$literalExpectation('boolean', false),
|
|
peg$c125 = function (type) {
|
|
return makePrimitive(type);
|
|
},
|
|
peg$c126 = function (args) {
|
|
return optionalList(args);
|
|
},
|
|
peg$c127 = function (type, rest) {
|
|
return {
|
|
node: 'ArrayCreation',
|
|
type: buildArrayTree(type, rest.extraDims),
|
|
initializer: rest.init,
|
|
dimensions: rest.dimms
|
|
};
|
|
},
|
|
peg$c128 = function (args, type, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'ClassInstanceCreation',
|
|
type: type,
|
|
typeArguments: optionalList(args),
|
|
expression: null
|
|
});
|
|
},
|
|
peg$c129 = function (qual, args, rest) {
|
|
return buildTypeName(qual, args, rest);
|
|
},
|
|
peg$c130 = function (id, args, rest) {
|
|
return mergeProps(rest, {
|
|
node: 'ClassInstanceCreation',
|
|
type: buildTypeName(id, args, [])
|
|
});
|
|
},
|
|
peg$c131 = function (args, body) {
|
|
return {
|
|
arguments: args,
|
|
anonymousClassDeclaration:
|
|
body === null
|
|
? null
|
|
: {
|
|
node: 'AnonymousClassDeclaration',
|
|
bodyDeclarations: body
|
|
}
|
|
};
|
|
},
|
|
peg$c132 = function (dims, init) {
|
|
return { extraDims: dims, init: init, dimms: [] };
|
|
},
|
|
peg$c133 = function (dimexpr, dims) {
|
|
return { extraDims: dimexpr.concat(dims), init: null, dimms: dimexpr };
|
|
},
|
|
peg$c134 = function (dim) {
|
|
return { extraDims: [dim], init: null, dimms: [] };
|
|
},
|
|
peg$c135 = function (init) {
|
|
return { node: 'ArrayInitializer', expressions: optionalList(init) };
|
|
},
|
|
peg$c136 = function (expr) {
|
|
return { node: 'ParenthesizedExpression', expression: expr };
|
|
},
|
|
peg$c137 = function (first, rest) {
|
|
return buildQualified(first, rest, 1);
|
|
},
|
|
peg$c138 = function (exp) {
|
|
return exp;
|
|
},
|
|
peg$c139 = function (type, dims) {
|
|
return buildArrayTree(type, dims);
|
|
},
|
|
peg$c140 = function (bas, dims) {
|
|
return buildArrayTree(bas, dims);
|
|
},
|
|
peg$c141 = function (cls, dims) {
|
|
return buildArrayTree(cls, dims);
|
|
},
|
|
peg$c142 = function () {
|
|
return true;
|
|
},
|
|
peg$c143 = function () {
|
|
return false;
|
|
},
|
|
peg$c144 = function (rest) {
|
|
return {
|
|
node: 'WildcardType',
|
|
upperBound: extractOptional(rest, 0, true),
|
|
bound: extractOptional(rest, 1)
|
|
};
|
|
},
|
|
peg$c145 = function (id, bounds) {
|
|
return {
|
|
node: 'TypeParameter',
|
|
name: id,
|
|
typeBounds: extractOptionalList(bounds, 1)
|
|
};
|
|
},
|
|
peg$c146 = 'public',
|
|
peg$c147 = peg$literalExpectation('public', false),
|
|
peg$c148 = 'protected',
|
|
peg$c149 = peg$literalExpectation('protected', false),
|
|
peg$c150 = 'private',
|
|
peg$c151 = peg$literalExpectation('private', false),
|
|
peg$c152 = 'static',
|
|
peg$c153 = peg$literalExpectation('static', false),
|
|
peg$c154 = 'abstract',
|
|
peg$c155 = peg$literalExpectation('abstract', false),
|
|
peg$c156 = 'final',
|
|
peg$c157 = peg$literalExpectation('final', false),
|
|
peg$c158 = 'native',
|
|
peg$c159 = peg$literalExpectation('native', false),
|
|
peg$c160 = 'synchronized',
|
|
peg$c161 = peg$literalExpectation('synchronized', false),
|
|
peg$c162 = 'transient',
|
|
peg$c163 = peg$literalExpectation('transient', false),
|
|
peg$c164 = 'volatile',
|
|
peg$c165 = peg$literalExpectation('volatile', false),
|
|
peg$c166 = 'strictfp',
|
|
peg$c167 = peg$literalExpectation('strictfp', false),
|
|
peg$c168 = function (keyword) {
|
|
return makeModifier(keyword);
|
|
},
|
|
peg$c169 = function (id, body) {
|
|
return {
|
|
node: 'AnnotationTypeDeclaration',
|
|
name: id,
|
|
bodyDeclarations: body
|
|
};
|
|
},
|
|
peg$c170 = function (decl) {
|
|
return skipNulls(decl);
|
|
},
|
|
peg$c171 = function (modifiers, rest) {
|
|
return mergeProps(rest, { modifiers: modifiers });
|
|
},
|
|
peg$c172 = function (type, rest) {
|
|
return mergeProps(rest, { type: type });
|
|
},
|
|
peg$c173 = function (id, def) {
|
|
return {
|
|
node: 'AnnotationTypeMemberDeclaration',
|
|
name: id,
|
|
default: def
|
|
};
|
|
},
|
|
peg$c174 = function (fragments) {
|
|
return { node: 'FieldDeclaration', fragments: fragments };
|
|
},
|
|
peg$c175 = function (val) {
|
|
return val;
|
|
},
|
|
peg$c176 = function (id, pairs) {
|
|
return {
|
|
node: 'NormalAnnotation',
|
|
typeName: id,
|
|
values: optionalList(pairs)
|
|
};
|
|
},
|
|
peg$c177 = function (id, value) {
|
|
return {
|
|
node: 'SingleMemberAnnotation',
|
|
typeName: id,
|
|
value: value
|
|
};
|
|
},
|
|
peg$c178 = function (id) {
|
|
return { node: 'MarkerAnnotation', typeName: id };
|
|
},
|
|
peg$c179 = function (name, value) {
|
|
return {
|
|
node: 'MemberValuePair',
|
|
name: name,
|
|
value: value
|
|
};
|
|
},
|
|
peg$c180 = function (values) {
|
|
return { node: 'ArrayInitializer', expressions: optionalList(values) };
|
|
},
|
|
peg$c181 = /^[ \t\r\n\f]/,
|
|
peg$c182 = peg$classExpectation([' ', '\t', '\r', '\n', '\f'], false, false),
|
|
peg$c183 = '/*',
|
|
peg$c184 = peg$literalExpectation('/*', false),
|
|
peg$c185 = '*/',
|
|
peg$c186 = peg$literalExpectation('*/', false),
|
|
peg$c187 = '//',
|
|
peg$c188 = peg$literalExpectation('//', false),
|
|
peg$c189 = /^[\r\n]/,
|
|
peg$c190 = peg$classExpectation(['\r', '\n'], false, false),
|
|
peg$c191 = function (first, rest) {
|
|
return { identifier: first + rest, node: 'SimpleName' };
|
|
},
|
|
peg$c192 = /^[a-z]/,
|
|
peg$c193 = peg$classExpectation([['a', 'z']], false, false),
|
|
peg$c194 = /^[A-Z]/,
|
|
peg$c195 = peg$classExpectation([['A', 'Z']], false, false),
|
|
peg$c196 = /^[_$]/,
|
|
peg$c197 = peg$classExpectation(['_', '$'], false, false),
|
|
peg$c198 = /^[0-9]/,
|
|
peg$c199 = peg$classExpectation([['0', '9']], false, false),
|
|
peg$c200 = 'assert',
|
|
peg$c201 = peg$literalExpectation('assert', false),
|
|
peg$c202 = 'break',
|
|
peg$c203 = peg$literalExpectation('break', false),
|
|
peg$c204 = 'case',
|
|
peg$c205 = peg$literalExpectation('case', false),
|
|
peg$c206 = 'catch',
|
|
peg$c207 = peg$literalExpectation('catch', false),
|
|
peg$c208 = 'class',
|
|
peg$c209 = peg$literalExpectation('class', false),
|
|
peg$c210 = 'const',
|
|
peg$c211 = peg$literalExpectation('const', false),
|
|
peg$c212 = 'continue',
|
|
peg$c213 = peg$literalExpectation('continue', false),
|
|
peg$c214 = 'default',
|
|
peg$c215 = peg$literalExpectation('default', false),
|
|
peg$c216 = 'do',
|
|
peg$c217 = peg$literalExpectation('do', false),
|
|
peg$c218 = 'else',
|
|
peg$c219 = peg$literalExpectation('else', false),
|
|
peg$c220 = 'enum',
|
|
peg$c221 = peg$literalExpectation('enum', false),
|
|
peg$c222 = 'extends',
|
|
peg$c223 = peg$literalExpectation('extends', false),
|
|
peg$c224 = 'false',
|
|
peg$c225 = peg$literalExpectation('false', false),
|
|
peg$c226 = 'finally',
|
|
peg$c227 = peg$literalExpectation('finally', false),
|
|
peg$c228 = 'for',
|
|
peg$c229 = peg$literalExpectation('for', false),
|
|
peg$c230 = 'goto',
|
|
peg$c231 = peg$literalExpectation('goto', false),
|
|
peg$c232 = 'if',
|
|
peg$c233 = peg$literalExpectation('if', false),
|
|
peg$c234 = 'implements',
|
|
peg$c235 = peg$literalExpectation('implements', false),
|
|
peg$c236 = 'import',
|
|
peg$c237 = peg$literalExpectation('import', false),
|
|
peg$c238 = 'interface',
|
|
peg$c239 = peg$literalExpectation('interface', false),
|
|
peg$c240 = 'instanceof',
|
|
peg$c241 = peg$literalExpectation('instanceof', false),
|
|
peg$c242 = 'new',
|
|
peg$c243 = peg$literalExpectation('new', false),
|
|
peg$c244 = 'null',
|
|
peg$c245 = peg$literalExpectation('null', false),
|
|
peg$c246 = 'package',
|
|
peg$c247 = peg$literalExpectation('package', false),
|
|
peg$c248 = 'return',
|
|
peg$c249 = peg$literalExpectation('return', false),
|
|
peg$c250 = 'super',
|
|
peg$c251 = peg$literalExpectation('super', false),
|
|
peg$c252 = 'switch',
|
|
peg$c253 = peg$literalExpectation('switch', false),
|
|
peg$c254 = 'this',
|
|
peg$c255 = peg$literalExpectation('this', false),
|
|
peg$c256 = 'throws',
|
|
peg$c257 = peg$literalExpectation('throws', false),
|
|
peg$c258 = 'throw',
|
|
peg$c259 = peg$literalExpectation('throw', false),
|
|
peg$c260 = 'true',
|
|
peg$c261 = peg$literalExpectation('true', false),
|
|
peg$c262 = 'try',
|
|
peg$c263 = peg$literalExpectation('try', false),
|
|
peg$c264 = 'void',
|
|
peg$c265 = peg$literalExpectation('void', false),
|
|
peg$c266 = 'while',
|
|
peg$c267 = peg$literalExpectation('while', false),
|
|
peg$c268 = function () {
|
|
return { node: 'BooleanLiteral', booleanValue: true };
|
|
},
|
|
peg$c269 = function () {
|
|
return { node: 'BooleanLiteral', booleanValue: false };
|
|
},
|
|
peg$c270 = function () {
|
|
return { node: 'NullLiteral' };
|
|
},
|
|
peg$c271 = function (literal) {
|
|
return literal;
|
|
},
|
|
peg$c272 = /^[lL]/,
|
|
peg$c273 = peg$classExpectation(['l', 'L'], false, false),
|
|
peg$c274 = function () {
|
|
return { node: 'NumberLiteral', token: text() };
|
|
},
|
|
peg$c275 = '0',
|
|
peg$c276 = peg$literalExpectation('0', false),
|
|
peg$c277 = /^[1-9]/,
|
|
peg$c278 = peg$classExpectation([['1', '9']], false, false),
|
|
peg$c279 = /^[_]/,
|
|
peg$c280 = peg$classExpectation(['_'], false, false),
|
|
peg$c281 = '0x',
|
|
peg$c282 = peg$literalExpectation('0x', false),
|
|
peg$c283 = '0X',
|
|
peg$c284 = peg$literalExpectation('0X', false),
|
|
peg$c285 = '0b',
|
|
peg$c286 = peg$literalExpectation('0b', false),
|
|
peg$c287 = '0B',
|
|
peg$c288 = peg$literalExpectation('0B', false),
|
|
peg$c289 = /^[01]/,
|
|
peg$c290 = peg$classExpectation(['0', '1'], false, false),
|
|
peg$c291 = /^[0-7]/,
|
|
peg$c292 = peg$classExpectation([['0', '7']], false, false),
|
|
peg$c293 = '.',
|
|
peg$c294 = peg$literalExpectation('.', false),
|
|
peg$c295 = /^[fFdD]/,
|
|
peg$c296 = peg$classExpectation(['f', 'F', 'd', 'D'], false, false),
|
|
peg$c297 = /^[eE]/,
|
|
peg$c298 = peg$classExpectation(['e', 'E'], false, false),
|
|
peg$c299 = /^[+\-]/,
|
|
peg$c300 = peg$classExpectation(['+', '-'], false, false),
|
|
peg$c301 = /^[pP]/,
|
|
peg$c302 = peg$classExpectation(['p', 'P'], false, false),
|
|
peg$c303 = /^[a-f]/,
|
|
peg$c304 = peg$classExpectation([['a', 'f']], false, false),
|
|
peg$c305 = /^[A-F]/,
|
|
peg$c306 = peg$classExpectation([['A', 'F']], false, false),
|
|
peg$c307 = "'",
|
|
peg$c308 = peg$literalExpectation("'", false),
|
|
peg$c309 = /^['\\\n\r]/,
|
|
peg$c310 = peg$classExpectation(["'", '\\', '\n', '\r'], false, false),
|
|
peg$c311 = function () {
|
|
return { node: 'CharacterLiteral', escapedValue: text() };
|
|
},
|
|
peg$c312 = '"',
|
|
peg$c313 = peg$literalExpectation('"', false),
|
|
peg$c314 = /^["\\\n\r]/,
|
|
peg$c315 = peg$classExpectation(['"', '\\', '\n', '\r'], false, false),
|
|
peg$c316 = function () {
|
|
return { node: 'StringLiteral', escapedValue: text() };
|
|
},
|
|
peg$c317 = '\\',
|
|
peg$c318 = peg$literalExpectation('\\', false),
|
|
peg$c319 = /^[btnfr"'\\]/,
|
|
peg$c320 = peg$classExpectation(['b', 't', 'n', 'f', 'r', '"', "'", '\\'], false, false),
|
|
peg$c321 = /^[0-3]/,
|
|
peg$c322 = peg$classExpectation([['0', '3']], false, false),
|
|
peg$c323 = 'u',
|
|
peg$c324 = peg$literalExpectation('u', false),
|
|
peg$c325 = '@',
|
|
peg$c326 = peg$literalExpectation('@', false),
|
|
peg$c327 = '&',
|
|
peg$c328 = peg$literalExpectation('&', false),
|
|
peg$c329 = /^[=&]/,
|
|
peg$c330 = peg$classExpectation(['=', '&'], false, false),
|
|
peg$c331 = '&&',
|
|
peg$c332 = peg$literalExpectation('&&', false),
|
|
peg$c333 = '&=',
|
|
peg$c334 = peg$literalExpectation('&=', false),
|
|
peg$c335 = '!',
|
|
peg$c336 = peg$literalExpectation('!', false),
|
|
peg$c337 = '=',
|
|
peg$c338 = peg$literalExpectation('=', false),
|
|
peg$c339 = '>>>',
|
|
peg$c340 = peg$literalExpectation('>>>', false),
|
|
peg$c341 = '>>>=',
|
|
peg$c342 = peg$literalExpectation('>>>=', false),
|
|
peg$c343 = ':',
|
|
peg$c344 = peg$literalExpectation(':', false),
|
|
peg$c345 = ',',
|
|
peg$c346 = peg$literalExpectation(',', false),
|
|
peg$c347 = '--',
|
|
peg$c348 = peg$literalExpectation('--', false),
|
|
peg$c349 = '/',
|
|
peg$c350 = peg$literalExpectation('/', false),
|
|
peg$c351 = '/=',
|
|
peg$c352 = peg$literalExpectation('/=', false),
|
|
peg$c353 = '...',
|
|
peg$c354 = peg$literalExpectation('...', false),
|
|
peg$c355 = '==',
|
|
peg$c356 = peg$literalExpectation('==', false),
|
|
peg$c357 = '>=',
|
|
peg$c358 = peg$literalExpectation('>=', false),
|
|
peg$c359 = '>',
|
|
peg$c360 = peg$literalExpectation('>', false),
|
|
peg$c361 = /^[=>]/,
|
|
peg$c362 = peg$classExpectation(['=', '>'], false, false),
|
|
peg$c363 = '^',
|
|
peg$c364 = peg$literalExpectation('^', false),
|
|
peg$c365 = '^=',
|
|
peg$c366 = peg$literalExpectation('^=', false),
|
|
peg$c367 = '++',
|
|
peg$c368 = peg$literalExpectation('++', false),
|
|
peg$c369 = '[',
|
|
peg$c370 = peg$literalExpectation('[', false),
|
|
peg$c371 = '<=',
|
|
peg$c372 = peg$literalExpectation('<=', false),
|
|
peg$c373 = '(',
|
|
peg$c374 = peg$literalExpectation('(', false),
|
|
peg$c375 = '<',
|
|
peg$c376 = peg$literalExpectation('<', false),
|
|
peg$c377 = /^[=<]/,
|
|
peg$c378 = peg$classExpectation(['=', '<'], false, false),
|
|
peg$c379 = '{',
|
|
peg$c380 = peg$literalExpectation('{', false),
|
|
peg$c381 = '-',
|
|
peg$c382 = peg$literalExpectation('-', false),
|
|
peg$c383 = /^[=\-]/,
|
|
peg$c384 = peg$classExpectation(['=', '-'], false, false),
|
|
peg$c385 = '-=',
|
|
peg$c386 = peg$literalExpectation('-=', false),
|
|
peg$c387 = '%',
|
|
peg$c388 = peg$literalExpectation('%', false),
|
|
peg$c389 = '%=',
|
|
peg$c390 = peg$literalExpectation('%=', false),
|
|
peg$c391 = '!=',
|
|
peg$c392 = peg$literalExpectation('!=', false),
|
|
peg$c393 = '|',
|
|
peg$c394 = peg$literalExpectation('|', false),
|
|
peg$c395 = /^[=|]/,
|
|
peg$c396 = peg$classExpectation(['=', '|'], false, false),
|
|
peg$c397 = '|=',
|
|
peg$c398 = peg$literalExpectation('|=', false),
|
|
peg$c399 = '||',
|
|
peg$c400 = peg$literalExpectation('||', false),
|
|
peg$c401 = '+',
|
|
peg$c402 = peg$literalExpectation('+', false),
|
|
peg$c403 = /^[=+]/,
|
|
peg$c404 = peg$classExpectation(['=', '+'], false, false),
|
|
peg$c405 = '+=',
|
|
peg$c406 = peg$literalExpectation('+=', false),
|
|
peg$c407 = '?',
|
|
peg$c408 = peg$literalExpectation('?', false),
|
|
peg$c409 = ']',
|
|
peg$c410 = peg$literalExpectation(']', false),
|
|
peg$c411 = ')',
|
|
peg$c412 = peg$literalExpectation(')', false),
|
|
peg$c413 = '}',
|
|
peg$c414 = peg$literalExpectation('}', false),
|
|
peg$c415 = ';',
|
|
peg$c416 = peg$literalExpectation(';', false),
|
|
peg$c417 = '<<',
|
|
peg$c418 = peg$literalExpectation('<<', false),
|
|
peg$c419 = '<<=',
|
|
peg$c420 = peg$literalExpectation('<<=', false),
|
|
peg$c421 = '>>',
|
|
peg$c422 = peg$literalExpectation('>>', false),
|
|
peg$c423 = '>>=',
|
|
peg$c424 = peg$literalExpectation('>>=', false),
|
|
peg$c425 = '*',
|
|
peg$c426 = peg$literalExpectation('*', false),
|
|
peg$c427 = '*=',
|
|
peg$c428 = peg$literalExpectation('*=', false),
|
|
peg$c429 = '~',
|
|
peg$c430 = peg$literalExpectation('~', false),
|
|
peg$c431 = peg$anyExpectation(),
|
|
peg$currPos = 0,
|
|
peg$savedPos = 0,
|
|
peg$posDetailsCache = [{ line: 1, column: 1 }],
|
|
peg$maxFailPos = 0,
|
|
peg$maxFailExpected = [],
|
|
peg$silentFails = 0,
|
|
peg$result;
|
|
|
|
if ('startRule' in options) {
|
|
if (!(options.startRule in peg$startRuleFunctions)) {
|
|
throw new Error('Can\'t start parsing from rule "' + options.startRule + '".');
|
|
}
|
|
|
|
peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
|
|
}
|
|
|
|
function text() {
|
|
return input.substring(peg$savedPos, peg$currPos);
|
|
}
|
|
|
|
function peg$literalExpectation(text, ignoreCase) {
|
|
return { type: 'literal', text: text, ignoreCase: ignoreCase };
|
|
}
|
|
|
|
function peg$classExpectation(parts, inverted, ignoreCase) {
|
|
return { type: 'class', parts: parts, inverted: inverted, ignoreCase: ignoreCase };
|
|
}
|
|
|
|
function peg$anyExpectation() {
|
|
return { type: 'any' };
|
|
}
|
|
|
|
function peg$endExpectation() {
|
|
return { type: 'end' };
|
|
}
|
|
|
|
function peg$computePosDetails(pos) {
|
|
var details = peg$posDetailsCache[pos],
|
|
p;
|
|
|
|
if (details) {
|
|
return details;
|
|
} else {
|
|
p = pos - 1;
|
|
while (!peg$posDetailsCache[p]) {
|
|
p--;
|
|
}
|
|
|
|
details = peg$posDetailsCache[p];
|
|
details = {
|
|
line: details.line,
|
|
column: details.column
|
|
};
|
|
|
|
while (p < pos) {
|
|
if (input.charCodeAt(p) === 10) {
|
|
details.line++;
|
|
details.column = 1;
|
|
} else {
|
|
details.column++;
|
|
}
|
|
|
|
p++;
|
|
}
|
|
|
|
peg$posDetailsCache[pos] = details;
|
|
return details;
|
|
}
|
|
}
|
|
|
|
function peg$computeLocation(startPos, endPos) {
|
|
var startPosDetails = peg$computePosDetails(startPos),
|
|
endPosDetails = peg$computePosDetails(endPos);
|
|
|
|
return {
|
|
start: {
|
|
offset: startPos,
|
|
line: startPosDetails.line,
|
|
column: startPosDetails.column
|
|
},
|
|
end: {
|
|
offset: endPos,
|
|
line: endPosDetails.line,
|
|
column: endPosDetails.column
|
|
}
|
|
};
|
|
}
|
|
|
|
function peg$fail(expected) {
|
|
if (peg$currPos < peg$maxFailPos) {
|
|
return;
|
|
}
|
|
|
|
if (peg$currPos > peg$maxFailPos) {
|
|
peg$maxFailPos = peg$currPos;
|
|
peg$maxFailExpected = [];
|
|
}
|
|
|
|
peg$maxFailExpected.push(expected);
|
|
}
|
|
|
|
function peg$buildStructuredError(expected, found, location) {
|
|
return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location);
|
|
}
|
|
|
|
function peg$parseCompilationUnit() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSpacing();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parsePackageDeclaration();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$parseImportDeclaration();
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$parseImportDeclaration();
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = [];
|
|
s5 = peg$parseTypeDeclaration();
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$parseTypeDeclaration();
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseEOT();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c0(s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePackageDeclaration() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseAnnotation();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parsePACKAGE();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseQualifiedIdentifier();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSEMI();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c1(s1, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseImportDeclaration() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIMPORT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSTATIC();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseQualifiedIdentifier();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseDOT();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseSTAR();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseSEMI();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c2(s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c3();
|
|
}
|
|
s0 = s1;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTypeDeclaration() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseModifier();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseModifier();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseClassDeclaration();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseEnumDeclaration();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseInterfaceDeclaration();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotationTypeDeclaration();
|
|
}
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c4(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c3();
|
|
}
|
|
s0 = s1;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseClassDeclaration() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseCLASS();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseTypeParameters();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseEXTENDS();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseClassType();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseIMPLEMENTS();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseClassTypeList();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 === peg$FAILED) {
|
|
s5 = null;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseClassBody();
|
|
if (s6 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c5(s2, s3, s4, s5, s6);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseClassBody() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseClassBodyDeclaration();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseClassBodyDeclaration();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRWING();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c6(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseClassBodyDeclaration() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c3();
|
|
}
|
|
s0 = s1;
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSTATIC();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = null;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBlock();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c7(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseModifier();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseModifier();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseMemberDecl();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c8(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMemberDecl() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseTypeParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseGenericMethodOrConstructorRest();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c9(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseMethodDeclaratorRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c10(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseVariableDeclarators();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c11(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseVOID();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVoidMethodDeclaratorRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c12(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseConstructorDeclaratorRest();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c13(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseInterfaceDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseClassDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseEnumDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseAnnotationTypeDeclaration();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseGenericMethodOrConstructorRest() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseType();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
s2 = peg$parseVOID();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s1;
|
|
s2 = peg$c14();
|
|
}
|
|
s1 = s2;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseMethodDeclaratorRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c15(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseConstructorDeclaratorRest();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c16(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMethodDeclaratorRest() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFormalParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseTHROWS();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassTypeList();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseBlock();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseSEMI();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s4;
|
|
s5 = peg$c17(s1, s2, s3);
|
|
}
|
|
s4 = s5;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c18(s1, s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVoidMethodDeclaratorRest() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFormalParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseTHROWS();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseClassTypeList();
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = [s3, s4];
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseBlock();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseSEMI();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s3;
|
|
s4 = peg$c19(s1, s2);
|
|
}
|
|
s3 = s4;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c20(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConstructorDeclaratorRest() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFormalParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseTHROWS();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseClassTypeList();
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = [s3, s4];
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseBlock();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c21(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceDeclaration() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseINTERFACE();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseTypeParameters();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseEXTENDS();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseClassTypeList();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseInterfaceBody();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c22(s2, s3, s4, s5);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceBody() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseInterfaceBodyDeclaration();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseInterfaceBodyDeclaration();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRWING();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c6(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceBodyDeclaration() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseModifier();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseModifier();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseInterfaceMemberDecl();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c8(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c3();
|
|
}
|
|
s0 = s1;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceMemberDecl() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$parseInterfaceMethodOrFieldDecl();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseInterfaceGenericMethodDecl();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseVOID();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVoidInterfaceMethodDeclaratorRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c16(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseInterfaceDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseAnnotationTypeDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseClassDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseEnumDeclaration();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceMethodOrFieldDecl() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseInterfaceMethodOrFieldRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c23(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceMethodOrFieldRest() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseConstantDeclaratorsRest();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSEMI();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c24(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseInterfaceMethodDeclaratorRest();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceMethodDeclaratorRest() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFormalParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseTHROWS();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassTypeList();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSEMI();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c25(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInterfaceGenericMethodDecl() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseTypeParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseType();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseVOID();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c26(s1);
|
|
}
|
|
s2 = s3;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseIdentifier();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseInterfaceMethodDeclaratorRest();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c27(s1, s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVoidInterfaceMethodDeclaratorRest() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFormalParameters();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseTHROWS();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseClassTypeList();
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = [s3, s4];
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c28(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConstantDeclaratorsRest() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseConstantDeclaratorRest();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseConstantDeclarator();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseConstantDeclarator();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConstantDeclarator() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseConstantDeclaratorRest();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c16(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConstantDeclaratorRest() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseDim();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseDim();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseEQU();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVariableInitializer();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c30(s1, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEnumDeclaration() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseENUM();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseIMPLEMENTS();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassTypeList();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseEnumBody();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c31(s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEnumBody() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseEnumConstants();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCOMMA();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseEnumBodyDeclarations();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseRWING();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c32(s2, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEnumConstants() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseEnumConstant();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseEnumConstant();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseEnumConstant();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEnumConstant() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseAnnotation();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseArguments();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseClassBody();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c33(s1, s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEnumBodyDeclarations() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseClassBodyDeclaration();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseClassBodyDeclaration();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c34(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLocalVariableDeclarationStatement() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVariableDeclarators();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSEMI();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c36(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVariableDeclarators() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseVariableDeclarator();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseVariableDeclarator();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseVariableDeclarator();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVariableDeclarator() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseEQU();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseVariableInitializer();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c37(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFormalParameters() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPAR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseFormalParameterList();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c38(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFormalParameter() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVariableDeclaratorId();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c39(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLastFormalParameter() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseELLIPSIS();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseVariableDeclaratorId();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c40(s1, s2, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFormalParameterList() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFormalParameter();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseFormalParameter();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseFormalParameter();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseLastFormalParameter();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c41(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLastFormalParameter();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c42(s1);
|
|
}
|
|
s0 = s1;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVariableDeclaratorId() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c43(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBlock() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBlockStatements();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRWING();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c44(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBlockStatements() {
|
|
var s0, s1;
|
|
|
|
s0 = [];
|
|
s1 = peg$parseBlockStatement();
|
|
while (s1 !== peg$FAILED) {
|
|
s0.push(s1);
|
|
s1 = peg$parseBlockStatement();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBlockStatement() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$parseLocalVariableDeclarationStatement();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseModifier();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseModifier();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseClassDeclaration();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseEnumDeclaration();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c45(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseStatement();
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseStatement() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
|
|
|
|
s0 = peg$parseBlock();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseASSERT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOLON();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSEMI();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c46(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIF();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseParExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseStatement();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseELSE();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseStatement();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c47(s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFOR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLPAR();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseForInit();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSEMI();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseExpression();
|
|
if (s5 === peg$FAILED) {
|
|
s5 = null;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseSEMI();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseForUpdate();
|
|
if (s7 === peg$FAILED) {
|
|
s7 = null;
|
|
}
|
|
if (s7 !== peg$FAILED) {
|
|
s8 = peg$parseRPAR();
|
|
if (s8 !== peg$FAILED) {
|
|
s9 = peg$parseStatement();
|
|
if (s9 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c48(s3, s5, s7, s9);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFOR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLPAR();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseFormalParameter();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseCOLON();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseRPAR();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseStatement();
|
|
if (s7 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c49(s3, s5, s7);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseWHILE();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseParExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseStatement();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c50(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDO();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseStatement();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseWHILE();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseParExpression();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseSEMI();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c51(s2, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseTRY();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLPAR();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseResource();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = [];
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseSEMI();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseResource();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseSEMI();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseResource();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseSEMI();
|
|
if (s5 === peg$FAILED) {
|
|
s5 = null;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseRPAR();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseBlock();
|
|
if (s7 !== peg$FAILED) {
|
|
s8 = [];
|
|
s9 = peg$parseCatch();
|
|
while (s9 !== peg$FAILED) {
|
|
s8.push(s9);
|
|
s9 = peg$parseCatch();
|
|
}
|
|
if (s8 !== peg$FAILED) {
|
|
s9 = peg$parseFinally();
|
|
if (s9 === peg$FAILED) {
|
|
s9 = null;
|
|
}
|
|
if (s9 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c52(s3, s4, s7, s8, s9);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseTRY();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBlock();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
s5 = peg$parseCatch();
|
|
if (s5 !== peg$FAILED) {
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$parseCatch();
|
|
}
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseFinally();
|
|
if (s5 === peg$FAILED) {
|
|
s5 = null;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s3;
|
|
s4 = peg$c53(s2, s4, s5);
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseFinally();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s3;
|
|
s4 = peg$c54(s2, s4);
|
|
}
|
|
s3 = s4;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c55(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSWITCH();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseParExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseLWING();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSwitchBlockStatementGroups();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseRWING();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c56(s2, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSYNCHRONIZED();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseParExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseBlock();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c57(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseRETURN();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExpression();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c58(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseTHROW();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c59(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseBREAK();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c60(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseCONTINUE();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c61(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c62();
|
|
}
|
|
s0 = s1;
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseStatementExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSEMI();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c63(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseCOLON();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseStatement();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c64(s1, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseResource() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVariableDeclaratorId();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseEQU();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c65(s1, s2, s3, s5);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCatch() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7, s8;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseCATCH();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLPAR();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseFINAL();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s4;
|
|
s5 = peg$c35();
|
|
}
|
|
s4 = s5;
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseAnnotation();
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseFINAL();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s4;
|
|
s5 = peg$c35();
|
|
}
|
|
s4 = s5;
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseAnnotation();
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseType();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = [];
|
|
s6 = peg$currPos;
|
|
s7 = peg$parseOR();
|
|
if (s7 !== peg$FAILED) {
|
|
s8 = peg$parseType();
|
|
if (s8 !== peg$FAILED) {
|
|
s7 = [s7, s8];
|
|
s6 = s7;
|
|
} else {
|
|
peg$currPos = s6;
|
|
s6 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s6;
|
|
s6 = peg$FAILED;
|
|
}
|
|
while (s6 !== peg$FAILED) {
|
|
s5.push(s6);
|
|
s6 = peg$currPos;
|
|
s7 = peg$parseOR();
|
|
if (s7 !== peg$FAILED) {
|
|
s8 = peg$parseType();
|
|
if (s8 !== peg$FAILED) {
|
|
s7 = [s7, s8];
|
|
s6 = s7;
|
|
} else {
|
|
peg$currPos = s6;
|
|
s6 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s6;
|
|
s6 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseVariableDeclaratorId();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseRPAR();
|
|
if (s7 !== peg$FAILED) {
|
|
s8 = peg$parseBlock();
|
|
if (s8 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c66(s3, s4, s5, s6, s8);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFinally() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFINALLY();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBlock();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c67(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSwitchBlockStatementGroups() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseSwitchBlockStatementGroup();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseSwitchBlockStatementGroup();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c68(s1);
|
|
}
|
|
s0 = s1;
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSwitchBlockStatementGroup() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSwitchLabel();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBlockStatements();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c69(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSwitchLabel() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseCASE();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCOLON();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c70(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseCASE();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCOLON();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c70(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDEFAULT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseCOLON();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c3();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseForInit() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseFINAL();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c35();
|
|
}
|
|
s2 = s3;
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseAnnotation();
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseVariableDeclarators();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c71(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseStatementExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseStatementExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseStatementExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c72(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseForUpdate() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseStatementExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseStatementExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseStatementExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c72(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseStatementExpression() {
|
|
var s0, s1;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c73(s1);
|
|
}
|
|
s0 = s1;
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseExpression() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseConditionalExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseAssignmentOperator();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseExpression();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c74(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseConditionalExpression();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAssignmentOperator() {
|
|
var s0;
|
|
|
|
s0 = peg$parseEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parsePLUSEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseMINUSEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseSTAREQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseDIVEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseANDEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseOREQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseHATEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseMODEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseSLEQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseSREQU();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseBSREQU();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConditionalExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseConditionalOrExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseQUERY();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseExpression();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseCOLON();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseConditionalExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c75(s1, s3, s5);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseConditionalOrExpression();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConditionalOrExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseConditionalAndExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseOROR();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseConditionalAndExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseOROR();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseConditionalAndExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseConditionalAndExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseInclusiveOrExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseANDAND();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseInclusiveOrExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseANDAND();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseInclusiveOrExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInclusiveOrExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseExclusiveOrExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseOR();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseExclusiveOrExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseOR();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseExclusiveOrExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseExclusiveOrExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseAndExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseHAT();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseAndExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseHAT();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseAndExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAndExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseEqualityExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseAND();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseEqualityExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseAND();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseEqualityExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEqualityExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseRelationalExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseEQUAL();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseNOTEQUAL();
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseRelationalExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseEQUAL();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseNOTEQUAL();
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseRelationalExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseRelationalExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseShiftExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseLE();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseGE();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseLT();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseGT();
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseShiftExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseINSTANCEOF();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseReferenceType();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseLE();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseGE();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseLT();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseGT();
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseShiftExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseINSTANCEOF();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseReferenceType();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c77(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseShiftExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseAdditiveExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseSL();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseSR();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseBSR();
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseAdditiveExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseSL();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseSR();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseBSR();
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseAdditiveExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAdditiveExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseMultiplicativeExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parsePLUS();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseMINUS();
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseMultiplicativeExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parsePLUS();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseMINUS();
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseMultiplicativeExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMultiplicativeExpression() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseUnaryExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseSTAR();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseDIV();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseMOD();
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseUnaryExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseSTAR();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseDIV();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = peg$parseMOD();
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseUnaryExpression();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c76(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseUnaryExpression() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parsePrefixOp();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseUnaryExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c78(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseUnaryExpressionNotPlusMinus();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseUnaryExpressionNotPlusMinus() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseCastExpression();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c79(s1);
|
|
}
|
|
s0 = s1;
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parsePrimary();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSelector();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$parseSelector();
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$parseSelector();
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = [];
|
|
s5 = peg$parsePostfixOp();
|
|
if (s5 !== peg$FAILED) {
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$parsePostfixOp();
|
|
}
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c80(s1, s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parsePrimary();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSelector();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$parseSelector();
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$parseSelector();
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c81(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parsePrimary();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parsePostfixOp();
|
|
if (s3 !== peg$FAILED) {
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parsePostfixOp();
|
|
}
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c82(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parsePrimary();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCastExpression() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPAR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBasicType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseUnaryExpression();
|
|
if (s4 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3, s4];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPAR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseReferenceType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseUnaryExpressionNotPlusMinus();
|
|
if (s4 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3, s4];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePrimary() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$parseParExpression();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseNonWildcardTypeArguments();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExplicitGenericInvocationSuffix();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseTHIS();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseArguments();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c83(s1, s4);
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c84(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseTHIS();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseArguments();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c85(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSUPER();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSuperSuffix();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c86(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseLiteral();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseNEW();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseCreator();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c87(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseQualifiedIdentifierSuffix();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseQualifiedIdentifier();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseBasicType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseDOT();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseCLASS();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c88(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseVOID();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDOT();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCLASS();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c89();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseQualifiedIdentifierSuffix() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
if (s3 !== peg$FAILED) {
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseDOT();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseCLASS();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c90(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLBRK();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseExpression();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseRBRK();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c91(s1, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseArguments();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c92(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDOT();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCLASS();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c93(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDOT();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseExplicitGenericInvocation();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c94(s1, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDOT();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseTHIS();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c95(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDOT();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSUPER();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseArguments();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c96(s1, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDOT();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseNEW();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseNonWildcardTypeArguments();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseInnerCreator();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c97(s1, s4, s5);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseExplicitGenericInvocation() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseNonWildcardTypeArguments();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExplicitGenericInvocationSuffix();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c84(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseNonWildcardTypeArguments() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPOINT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseReferenceType();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseCOMMA();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseReferenceType();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseCOMMA();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseReferenceType();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseRPOINT();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTypeArgumentsOrDiamond() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPOINT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseRPOINT();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c98();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseTypeArguments();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseNonWildcardTypeArgumentsOrDiamond() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPOINT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseRPOINT();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseNonWildcardTypeArguments();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseExplicitGenericInvocationSuffix() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSUPER();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSuperSuffix();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c99(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseArguments();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c100(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePrefixOp() {
|
|
var s0, s1;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseINC();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseDEC();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseBANG();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseTILDA();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parsePLUS();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseMINUS();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c101(s1);
|
|
}
|
|
s0 = s1;
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePostfixOp() {
|
|
var s0, s1;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseINC();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseDEC();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c101(s1);
|
|
}
|
|
s0 = s1;
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSelector() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseArguments();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c100(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c102(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExplicitGenericInvocation();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c103(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseTHIS();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c104();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSUPER();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSuperSuffix();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c99(s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseNEW();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseNonWildcardTypeArguments();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseInnerCreator();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c105(s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDimExpr();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c106(s1);
|
|
}
|
|
s0 = s1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSuperSuffix() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseArguments();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c107(s1);
|
|
}
|
|
s0 = s1;
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDOT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseNonWildcardTypeArguments();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseIdentifier();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseArguments();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c108(s2, s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBasicType() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c109) {
|
|
s1 = peg$c109;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c110);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c111) {
|
|
s1 = peg$c111;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c112);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c113) {
|
|
s1 = peg$c113;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c114);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 3) === peg$c115) {
|
|
s1 = peg$c115;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c116);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c117) {
|
|
s1 = peg$c117;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c118);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c119) {
|
|
s1 = peg$c119;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c120);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 6) === peg$c121) {
|
|
s1 = peg$c121;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c122);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 7) === peg$c123) {
|
|
s1 = peg$c123;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c124);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c125(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseArguments() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPAR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseExpression();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = [];
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseCOMMA();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseExpression();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseCOMMA();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseExpression();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c29(s3, s4);
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c126(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCreator() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseBasicType();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseCreatedName();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseArrayCreatorRest();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c127(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseNonWildcardTypeArguments();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = null;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseCreatedName();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseClassCreatorRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c128(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCreatedName() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseTypeArgumentsOrDiamond();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseDOT();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseIdentifier();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseTypeArgumentsOrDiamond();
|
|
if (s7 === peg$FAILED) {
|
|
s7 = null;
|
|
}
|
|
if (s7 !== peg$FAILED) {
|
|
s5 = [s5, s6, s7];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseDOT();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseIdentifier();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseTypeArgumentsOrDiamond();
|
|
if (s7 === peg$FAILED) {
|
|
s7 = null;
|
|
}
|
|
if (s7 !== peg$FAILED) {
|
|
s5 = [s5, s6, s7];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c129(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseInnerCreator() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseNonWildcardTypeArgumentsOrDiamond();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseClassCreatorRest();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c130(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseClassCreatorRest() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseArguments();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseClassBody();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c131(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseArrayCreatorRest() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseDim();
|
|
if (s2 !== peg$FAILED) {
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseDim();
|
|
}
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseArrayInitializer();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c132(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseDimExpr();
|
|
if (s2 !== peg$FAILED) {
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseDimExpr();
|
|
}
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c133(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDim();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c134(s1);
|
|
}
|
|
s0 = s1;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseArrayInitializer() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseVariableInitializer();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = [];
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseCOMMA();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseVariableInitializer();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$currPos;
|
|
s6 = peg$parseCOMMA();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseVariableInitializer();
|
|
if (s7 !== peg$FAILED) {
|
|
s6 = [s6, s7];
|
|
s5 = s6;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s2;
|
|
s3 = peg$c29(s3, s4);
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCOMMA();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseRWING();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c135(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVariableInitializer() {
|
|
var s0;
|
|
|
|
s0 = peg$parseArrayInitializer();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseExpression();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseParExpression() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPAR();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c136(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseQualifiedIdentifier() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseDOT();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseIdentifier();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseDOT();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseIdentifier();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c137(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDim() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLBRK();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseRBRK();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDimExpr() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLBRK();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExpression();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRBRK();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c138(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseType() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseBasicType();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseClassType();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c139(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseReferenceType() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseBasicType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
if (s3 !== peg$FAILED) {
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c140(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseClassType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseDim();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseDim();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c141(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseClassType() {
|
|
var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQualifiedIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseTypeArguments();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseDOT();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseIdentifier();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseTypeArguments();
|
|
if (s7 === peg$FAILED) {
|
|
s7 = null;
|
|
}
|
|
if (s7 !== peg$FAILED) {
|
|
s5 = [s5, s6, s7];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseDOT();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseIdentifier();
|
|
if (s6 !== peg$FAILED) {
|
|
s7 = peg$parseTypeArguments();
|
|
if (s7 === peg$FAILED) {
|
|
s7 = null;
|
|
}
|
|
if (s7 !== peg$FAILED) {
|
|
s5 = [s5, s6, s7];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c129(s1, s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseClassTypeList() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseClassType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassType();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassType();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTypeArguments() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPOINT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseTypeArgument();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseCOMMA();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseTypeArgument();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseCOMMA();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseTypeArgument();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseRPOINT();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTypeArgument() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$parseReferenceType();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseQUERY();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseEXTENDS();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s3;
|
|
s4 = peg$c142();
|
|
}
|
|
s3 = s4;
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseSUPER();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s3;
|
|
s4 = peg$c143();
|
|
}
|
|
s3 = s4;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseReferenceType();
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = [s3, s4];
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c144(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTypeParameters() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLPOINT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseTypeParameter();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseCOMMA();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseTypeParameter();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$parseCOMMA();
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parseTypeParameter();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseRPOINT();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTypeParameter() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$parseEXTENDS();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseBound();
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = [s3, s4];
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c145(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBound() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseClassType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseAND();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassType();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseAND();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseClassType();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseModifier() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$parseAnnotation();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c146) {
|
|
s1 = peg$c146;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c147);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 9) === peg$c148) {
|
|
s1 = peg$c148;
|
|
peg$currPos += 9;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c149);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 7) === peg$c150) {
|
|
s1 = peg$c150;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c151);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 6) === peg$c152) {
|
|
s1 = peg$c152;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c153);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 8) === peg$c154) {
|
|
s1 = peg$c154;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c155);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c156) {
|
|
s1 = peg$c156;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c157);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 6) === peg$c158) {
|
|
s1 = peg$c158;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c159);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 12) === peg$c160) {
|
|
s1 = peg$c160;
|
|
peg$currPos += 12;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c161);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 9) === peg$c162) {
|
|
s1 = peg$c162;
|
|
peg$currPos += 9;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c163);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 8) === peg$c164) {
|
|
s1 = peg$c164;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c165);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 8) === peg$c166) {
|
|
s1 = peg$c166;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c167);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c168(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationTypeDeclaration() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseAT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseINTERFACE();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseIdentifier();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseAnnotationTypeBody();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c169(s3, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationTypeBody() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseAnnotationTypeElementDeclaration();
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseAnnotationTypeElementDeclaration();
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRWING();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c170(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationTypeElementDeclaration() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
s2 = peg$parseModifier();
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
s2 = peg$parseModifier();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseAnnotationTypeElementRest();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c171(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseSEMI();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c3();
|
|
}
|
|
s0 = s1;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationTypeElementRest() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseType();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseAnnotationMethodOrConstantRest();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSEMI();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c172(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseClassDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseEnumDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseInterfaceDeclaration();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseAnnotationTypeDeclaration();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationMethodOrConstantRest() {
|
|
var s0;
|
|
|
|
s0 = peg$parseAnnotationMethodRest();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseAnnotationConstantRest();
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationMethodRest() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLPAR();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseRPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseDefaultValue();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c173(s1, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotationConstantRest() {
|
|
var s0, s1;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseVariableDeclarators();
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c174(s1);
|
|
}
|
|
s0 = s1;
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDefaultValue() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDEFAULT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseElementValue();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c175(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAnnotation() {
|
|
var s0;
|
|
|
|
s0 = peg$parseNormalAnnotation();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseSingleElementAnnotation();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseMarkerAnnotation();
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseNormalAnnotation() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseAT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseQualifiedIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseLPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseElementValuePairs();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseRPAR();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c176(s2, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSingleElementAnnotation() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseAT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseQualifiedIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseLPAR();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseElementValue();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseRPAR();
|
|
if (s5 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c177(s2, s4);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMarkerAnnotation() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseAT();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseQualifiedIdentifier();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c178(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseElementValuePairs() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseElementValuePair();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseElementValuePair();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseElementValuePair();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseElementValuePair() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseIdentifier();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseEQU();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseElementValue();
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c179(s1, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseElementValue() {
|
|
var s0;
|
|
|
|
s0 = peg$parseConditionalExpression();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseAnnotation();
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$parseElementValueArrayInitializer();
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseElementValueArrayInitializer() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseLWING();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseElementValues();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseCOMMA();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseRWING();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c180(s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseElementValues() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseElementValue();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseElementValue();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = peg$parseCOMMA();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseElementValue();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c29(s1, s2);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSpacing() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = [];
|
|
s1 = [];
|
|
if (peg$c181.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c182);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
if (peg$c181.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c182);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c183) {
|
|
s2 = peg$c183;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c184);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.substr(peg$currPos, 2) === peg$c185) {
|
|
s6 = peg$c185;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c186);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.substr(peg$currPos, 2) === peg$c185) {
|
|
s6 = peg$c185;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c186);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c185) {
|
|
s4 = peg$c185;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c186);
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s2 = [s2, s3, s4];
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c187) {
|
|
s2 = peg$c187;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c188);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c189.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c190);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c189.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c190);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
if (peg$c189.test(input.charAt(peg$currPos))) {
|
|
s4 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c190);
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s2 = [s2, s3, s4];
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
while (s1 !== peg$FAILED) {
|
|
s0.push(s1);
|
|
s1 = [];
|
|
if (peg$c181.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c182);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
if (peg$c181.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c182);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c183) {
|
|
s2 = peg$c183;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c184);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.substr(peg$currPos, 2) === peg$c185) {
|
|
s6 = peg$c185;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c186);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.substr(peg$currPos, 2) === peg$c185) {
|
|
s6 = peg$c185;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c186);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c185) {
|
|
s4 = peg$c185;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c186);
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s2 = [s2, s3, s4];
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c187) {
|
|
s2 = peg$c187;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c188);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c189.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c190);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c189.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c190);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s6 === peg$FAILED) {
|
|
s5 = void 0;
|
|
} else {
|
|
peg$currPos = s5;
|
|
s5 = peg$FAILED;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s6 = peg$parse_();
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
if (peg$c189.test(input.charAt(peg$currPos))) {
|
|
s4 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c190);
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s2 = [s2, s3, s4];
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseIdentifier() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$currPos;
|
|
peg$silentFails++;
|
|
s2 = peg$parseKeyword();
|
|
peg$silentFails--;
|
|
if (s2 === peg$FAILED) {
|
|
s1 = void 0;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseLetter();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
s5 = peg$parseLetterOrDigit();
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
s5 = peg$parseLetterOrDigit();
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = input.substring(s3, peg$currPos);
|
|
} else {
|
|
s3 = s4;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseSpacing();
|
|
if (s4 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c191(s2, s3);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLetter() {
|
|
var s0;
|
|
|
|
if (peg$c192.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c193);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c194.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c195);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c196.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c197);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLetterOrDigit() {
|
|
var s0;
|
|
|
|
if (peg$c192.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c193);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c194.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c195);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c196.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c197);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseKeyword() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 8) === peg$c154) {
|
|
s1 = peg$c154;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c155);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 6) === peg$c200) {
|
|
s1 = peg$c200;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c201);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 7) === peg$c123) {
|
|
s1 = peg$c123;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c124);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c202) {
|
|
s1 = peg$c202;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c203);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c109) {
|
|
s1 = peg$c109;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c110);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c204) {
|
|
s1 = peg$c204;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c205);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c206) {
|
|
s1 = peg$c206;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c207);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c113) {
|
|
s1 = peg$c113;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c114);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c208) {
|
|
s1 = peg$c208;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c209);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c210) {
|
|
s1 = peg$c210;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c211);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 8) === peg$c212) {
|
|
s1 = peg$c212;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c213);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 7) === peg$c214) {
|
|
s1 = peg$c214;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c215);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 6) === peg$c121) {
|
|
s1 = peg$c121;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c122);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c216) {
|
|
s1 = peg$c216;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c217);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c218) {
|
|
s1 = peg$c218;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c219);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c220) {
|
|
s1 = peg$c220;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c221);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 7) === peg$c222) {
|
|
s1 = peg$c222;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c223);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c224) {
|
|
s1 = peg$c224;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c225);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 7) === peg$c226) {
|
|
s1 = peg$c226;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c227);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c156) {
|
|
s1 = peg$c156;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c157);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 5) === peg$c119) {
|
|
s1 = peg$c119;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c120);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 3) === peg$c228) {
|
|
s1 = peg$c228;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c229);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 4) === peg$c230) {
|
|
s1 = peg$c230;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c231);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c232) {
|
|
s1 = peg$c232;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c233);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 10) === peg$c234) {
|
|
s1 = peg$c234;
|
|
peg$currPos += 10;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c235);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 6) === peg$c236) {
|
|
s1 = peg$c236;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c237);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 9) === peg$c238) {
|
|
s1 = peg$c238;
|
|
peg$currPos += 9;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c239);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 3) === peg$c115) {
|
|
s1 = peg$c115;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c116);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 10) === peg$c240
|
|
) {
|
|
s1 = peg$c240;
|
|
peg$currPos += 10;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c241);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 4) === peg$c117
|
|
) {
|
|
s1 = peg$c117;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c118);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 6) === peg$c158
|
|
) {
|
|
s1 = peg$c158;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c159);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 3) ===
|
|
peg$c242
|
|
) {
|
|
s1 = peg$c242;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c243);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 4) ===
|
|
peg$c244
|
|
) {
|
|
s1 = peg$c244;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c245);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 7) ===
|
|
peg$c246
|
|
) {
|
|
s1 = peg$c246;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c247);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 7) ===
|
|
peg$c150
|
|
) {
|
|
s1 = peg$c150;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c151);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(peg$currPos, 9) ===
|
|
peg$c148
|
|
) {
|
|
s1 = peg$c148;
|
|
peg$currPos += 9;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c149);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
6
|
|
) === peg$c146
|
|
) {
|
|
s1 = peg$c146;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c147);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
6
|
|
) === peg$c248
|
|
) {
|
|
s1 = peg$c248;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c249);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
5
|
|
) === peg$c111
|
|
) {
|
|
s1 = peg$c111;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (
|
|
peg$silentFails === 0
|
|
) {
|
|
peg$fail(peg$c112);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
6
|
|
) === peg$c152
|
|
) {
|
|
s1 = peg$c152;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (
|
|
peg$silentFails === 0
|
|
) {
|
|
peg$fail(peg$c153);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
8
|
|
) === peg$c166
|
|
) {
|
|
s1 = peg$c166;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(peg$c167);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
5
|
|
) === peg$c250
|
|
) {
|
|
s1 = peg$c250;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c251
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 === peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
6
|
|
) === peg$c252
|
|
) {
|
|
s1 = peg$c252;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c253
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 === peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
12
|
|
) === peg$c160
|
|
) {
|
|
s1 = peg$c160;
|
|
peg$currPos += 12;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c161
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
4
|
|
) === peg$c254
|
|
) {
|
|
s1 = peg$c254;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c255
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
6
|
|
) ===
|
|
peg$c256
|
|
) {
|
|
s1 =
|
|
peg$c256;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c257
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
5
|
|
) ===
|
|
peg$c258
|
|
) {
|
|
s1 =
|
|
peg$c258;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c259
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
9
|
|
) ===
|
|
peg$c162
|
|
) {
|
|
s1 =
|
|
peg$c162;
|
|
peg$currPos += 9;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c163
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
4
|
|
) ===
|
|
peg$c260
|
|
) {
|
|
s1 =
|
|
peg$c260;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c261
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
3
|
|
) ===
|
|
peg$c262
|
|
) {
|
|
s1 =
|
|
peg$c262;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c263
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
4
|
|
) ===
|
|
peg$c264
|
|
) {
|
|
s1 =
|
|
peg$c264;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c265
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
8
|
|
) ===
|
|
peg$c164
|
|
) {
|
|
s1 =
|
|
peg$c164;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c165
|
|
);
|
|
}
|
|
}
|
|
if (
|
|
s1 ===
|
|
peg$FAILED
|
|
) {
|
|
if (
|
|
input.substr(
|
|
peg$currPos,
|
|
5
|
|
) ===
|
|
peg$c266
|
|
) {
|
|
s1 =
|
|
peg$c266;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 =
|
|
peg$FAILED;
|
|
if (
|
|
peg$silentFails ===
|
|
0
|
|
) {
|
|
peg$fail(
|
|
peg$c267
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseASSERT() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c200) {
|
|
s1 = peg$c200;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c201);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBREAK() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c202) {
|
|
s1 = peg$c202;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c203);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCASE() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c204) {
|
|
s1 = peg$c204;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c205);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCATCH() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c206) {
|
|
s1 = peg$c206;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c207);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCLASS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c208) {
|
|
s1 = peg$c208;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c209);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCONTINUE() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 8) === peg$c212) {
|
|
s1 = peg$c212;
|
|
peg$currPos += 8;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c213);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDEFAULT() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 7) === peg$c214) {
|
|
s1 = peg$c214;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c215);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDO() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c216) {
|
|
s1 = peg$c216;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c217);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseELSE() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c218) {
|
|
s1 = peg$c218;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c219);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseENUM() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c220) {
|
|
s1 = peg$c220;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c221);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEXTENDS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 7) === peg$c222) {
|
|
s1 = peg$c222;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c223);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFINALLY() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 7) === peg$c226) {
|
|
s1 = peg$c226;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c227);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFINAL() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c156) {
|
|
s1 = peg$c156;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c157);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFOR() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c228) {
|
|
s1 = peg$c228;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c229);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseIF() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c232) {
|
|
s1 = peg$c232;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c233);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseIMPLEMENTS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 10) === peg$c234) {
|
|
s1 = peg$c234;
|
|
peg$currPos += 10;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c235);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseIMPORT() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c236) {
|
|
s1 = peg$c236;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c237);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseINTERFACE() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 9) === peg$c238) {
|
|
s1 = peg$c238;
|
|
peg$currPos += 9;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c239);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseINSTANCEOF() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 10) === peg$c240) {
|
|
s1 = peg$c240;
|
|
peg$currPos += 10;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c241);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseNEW() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c242) {
|
|
s1 = peg$c242;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c243);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePACKAGE() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 7) === peg$c246) {
|
|
s1 = peg$c246;
|
|
peg$currPos += 7;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c247);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseRETURN() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c248) {
|
|
s1 = peg$c248;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c249);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSTATIC() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c152) {
|
|
s1 = peg$c152;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c153);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSUPER() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c250) {
|
|
s1 = peg$c250;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c251);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSWITCH() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c252) {
|
|
s1 = peg$c252;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c253);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSYNCHRONIZED() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 12) === peg$c160) {
|
|
s1 = peg$c160;
|
|
peg$currPos += 12;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c161);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTHIS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c254) {
|
|
s1 = peg$c254;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c255);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTHROWS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 6) === peg$c256) {
|
|
s1 = peg$c256;
|
|
peg$currPos += 6;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c257);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTHROW() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c258) {
|
|
s1 = peg$c258;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c259);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTRY() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c262) {
|
|
s1 = peg$c262;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c263);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseVOID() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c264) {
|
|
s1 = peg$c264;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c265);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseWHILE() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c266) {
|
|
s1 = peg$c266;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c267);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
s3 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLiteral() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseFloatLiteral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseIntegerLiteral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseCharLiteral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseStringLiteral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c260) {
|
|
s2 = peg$c260;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c261);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
peg$silentFails++;
|
|
s4 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s4 === peg$FAILED) {
|
|
s3 = void 0;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s1;
|
|
s2 = peg$c268();
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 5) === peg$c224) {
|
|
s2 = peg$c224;
|
|
peg$currPos += 5;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c225);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
peg$silentFails++;
|
|
s4 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s4 === peg$FAILED) {
|
|
s3 = void 0;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s1;
|
|
s2 = peg$c269();
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c244) {
|
|
s2 = peg$c244;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c245);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
peg$silentFails++;
|
|
s4 = peg$parseLetterOrDigit();
|
|
peg$silentFails--;
|
|
if (s4 === peg$FAILED) {
|
|
s3 = void 0;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s1;
|
|
s2 = peg$c270();
|
|
s1 = s2;
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s1;
|
|
s1 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c271(s1);
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseIntegerLiteral() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseHexNumeral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseBinaryNumeral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseOctalNumeral();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseDecimalNumeral();
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c272.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c273);
|
|
}
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c274();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDecimalNumeral() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
if (input.charCodeAt(peg$currPos) === 48) {
|
|
s0 = peg$c275;
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c276);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
if (peg$c277.test(input.charAt(peg$currPos))) {
|
|
s1 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c278);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHexNumeral() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c281) {
|
|
s1 = peg$c281;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c282);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c283) {
|
|
s1 = peg$c283;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c284);
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseHexDigits();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBinaryNumeral() {
|
|
var s0, s1, s2, s3, s4, s5, s6;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c285) {
|
|
s1 = peg$c285;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c286);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c287) {
|
|
s1 = peg$c287;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c288);
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c289.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c290);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = [];
|
|
s4 = peg$currPos;
|
|
s5 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s6 !== peg$FAILED) {
|
|
s5.push(s6);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
if (peg$c289.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c290);
|
|
}
|
|
}
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
while (s4 !== peg$FAILED) {
|
|
s3.push(s4);
|
|
s4 = peg$currPos;
|
|
s5 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s6 !== peg$FAILED) {
|
|
s5.push(s6);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
if (peg$c289.test(input.charAt(peg$currPos))) {
|
|
s6 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s6 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c290);
|
|
}
|
|
}
|
|
if (s6 !== peg$FAILED) {
|
|
s5 = [s5, s6];
|
|
s4 = s5;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseOctalNumeral() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 48) {
|
|
s1 = peg$c275;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c276);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseFloatLiteral() {
|
|
var s0, s1;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseHexFloat();
|
|
if (s1 === peg$FAILED) {
|
|
s1 = peg$parseDecimalFloat();
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c274();
|
|
}
|
|
s0 = s1;
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDecimalFloat() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDigits();
|
|
if (s1 !== peg$FAILED) {
|
|
if (input.charCodeAt(peg$currPos) === 46) {
|
|
s2 = peg$c293;
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c294);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseDigits();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseExponent();
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c295.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c296);
|
|
}
|
|
}
|
|
if (s5 === peg$FAILED) {
|
|
s5 = null;
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3, s4, s5];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 46) {
|
|
s1 = peg$c293;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c294);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseDigits();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseExponent();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
if (peg$c295.test(input.charAt(peg$currPos))) {
|
|
s4 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c296);
|
|
}
|
|
}
|
|
if (s4 === peg$FAILED) {
|
|
s4 = null;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3, s4];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDigits();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExponent();
|
|
if (s2 !== peg$FAILED) {
|
|
if (peg$c295.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c296);
|
|
}
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseDigits();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseExponent();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
if (peg$c295.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c296);
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseExponent() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (peg$c297.test(input.charAt(peg$currPos))) {
|
|
s1 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c298);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c299.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c300);
|
|
}
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseDigits();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHexFloat() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseHexSignificand();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseBinaryExponent();
|
|
if (s2 !== peg$FAILED) {
|
|
if (peg$c295.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c296);
|
|
}
|
|
}
|
|
if (s3 === peg$FAILED) {
|
|
s3 = null;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHexSignificand() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c281) {
|
|
s1 = peg$c281;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c282);
|
|
}
|
|
}
|
|
if (s1 === peg$FAILED) {
|
|
if (input.substr(peg$currPos, 2) === peg$c283) {
|
|
s1 = peg$c283;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c284);
|
|
}
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseHexDigits();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
if (input.charCodeAt(peg$currPos) === 46) {
|
|
s3 = peg$c293;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c294);
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseHexDigits();
|
|
if (s4 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3, s4];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseHexNumeral();
|
|
if (s1 !== peg$FAILED) {
|
|
if (input.charCodeAt(peg$currPos) === 46) {
|
|
s2 = peg$c293;
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c294);
|
|
}
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBinaryExponent() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (peg$c301.test(input.charAt(peg$currPos))) {
|
|
s1 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c302);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c299.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c300);
|
|
}
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = null;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseDigits();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDigits() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s1 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHexDigits() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = peg$parseHexDigit();
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseHexDigit();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$currPos;
|
|
s4 = [];
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
while (s5 !== peg$FAILED) {
|
|
s4.push(s5);
|
|
if (peg$c279.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c280);
|
|
}
|
|
}
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseHexDigit();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHexDigit() {
|
|
var s0;
|
|
|
|
if (peg$c303.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c304);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c305.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c306);
|
|
}
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c198.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c199);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCharLiteral() {
|
|
var s0, s1, s2, s3, s4;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 39) {
|
|
s1 = peg$c307;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c308);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseEscape();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
s3 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c309.test(input.charAt(peg$currPos))) {
|
|
s4 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s4 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c310);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s4 === peg$FAILED) {
|
|
s3 = void 0;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parse_();
|
|
if (s4 !== peg$FAILED) {
|
|
s3 = [s3, s4];
|
|
s2 = s3;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
if (input.charCodeAt(peg$currPos) === 39) {
|
|
s3 = peg$c307;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c308);
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c311();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseStringLiteral() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 34) {
|
|
s1 = peg$c312;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c313);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = [];
|
|
s3 = peg$parseEscape();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c314.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c315);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s5 === peg$FAILED) {
|
|
s4 = void 0;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parse_();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
while (s3 !== peg$FAILED) {
|
|
s2.push(s3);
|
|
s3 = peg$parseEscape();
|
|
if (s3 === peg$FAILED) {
|
|
s3 = peg$currPos;
|
|
s4 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c314.test(input.charAt(peg$currPos))) {
|
|
s5 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s5 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c315);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s5 === peg$FAILED) {
|
|
s4 = void 0;
|
|
} else {
|
|
peg$currPos = s4;
|
|
s4 = peg$FAILED;
|
|
}
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parse_();
|
|
if (s5 !== peg$FAILED) {
|
|
s4 = [s4, s5];
|
|
s3 = s4;
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s3;
|
|
s3 = peg$FAILED;
|
|
}
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
if (input.charCodeAt(peg$currPos) === 34) {
|
|
s3 = peg$c312;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c313);
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
peg$savedPos = s0;
|
|
s1 = peg$c316();
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEscape() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 92) {
|
|
s1 = peg$c317;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c318);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c319.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c320);
|
|
}
|
|
}
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseOctalEscape();
|
|
if (s2 === peg$FAILED) {
|
|
s2 = peg$parseUnicodeEscape();
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseOctalEscape() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (peg$c321.test(input.charAt(peg$currPos))) {
|
|
s1 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c322);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
s0 = peg$currPos;
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s1 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s2 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
if (s0 === peg$FAILED) {
|
|
if (peg$c291.test(input.charAt(peg$currPos))) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c292);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseUnicodeEscape() {
|
|
var s0, s1, s2, s3, s4, s5;
|
|
|
|
s0 = peg$currPos;
|
|
s1 = [];
|
|
if (input.charCodeAt(peg$currPos) === 117) {
|
|
s2 = peg$c323;
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c324);
|
|
}
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
while (s2 !== peg$FAILED) {
|
|
s1.push(s2);
|
|
if (input.charCodeAt(peg$currPos) === 117) {
|
|
s2 = peg$c323;
|
|
peg$currPos++;
|
|
} else {
|
|
s2 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c324);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseHexDigit();
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseHexDigit();
|
|
if (s3 !== peg$FAILED) {
|
|
s4 = peg$parseHexDigit();
|
|
if (s4 !== peg$FAILED) {
|
|
s5 = peg$parseHexDigit();
|
|
if (s5 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3, s4, s5];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAT() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 64) {
|
|
s1 = peg$c325;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c326);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseAND() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 38) {
|
|
s1 = peg$c327;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c328);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c329.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c330);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseANDAND() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c331) {
|
|
s1 = peg$c331;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c332);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseANDEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c333) {
|
|
s1 = peg$c333;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c334);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBANG() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 33) {
|
|
s1 = peg$c335;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c336);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBSR() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c339) {
|
|
s1 = peg$c339;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c340);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseBSREQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 4) === peg$c341) {
|
|
s1 = peg$c341;
|
|
peg$currPos += 4;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c342);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCOLON() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 58) {
|
|
s1 = peg$c343;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c344);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseCOMMA() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 44) {
|
|
s1 = peg$c345;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c346);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDEC() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c347) {
|
|
s1 = peg$c347;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c348);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDIV() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 47) {
|
|
s1 = peg$c349;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c350);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDIVEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c351) {
|
|
s1 = peg$c351;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c352);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseDOT() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 46) {
|
|
s1 = peg$c293;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c294);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseELLIPSIS() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c353) {
|
|
s1 = peg$c353;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c354);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEQU() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s1 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEQUAL() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c355) {
|
|
s1 = peg$c355;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c356);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseGE() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c357) {
|
|
s1 = peg$c357;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c358);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseGT() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 62) {
|
|
s1 = peg$c359;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c360);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c361.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c362);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHAT() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 94) {
|
|
s1 = peg$c363;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c364);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseHATEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c365) {
|
|
s1 = peg$c365;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c366);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseINC() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c367) {
|
|
s1 = peg$c367;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c368);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLBRK() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 91) {
|
|
s1 = peg$c369;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c370);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLE() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c371) {
|
|
s1 = peg$c371;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c372);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLPAR() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 40) {
|
|
s1 = peg$c373;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c374);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLPOINT() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 60) {
|
|
s1 = peg$c375;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c376);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLT() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 60) {
|
|
s1 = peg$c375;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c376);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c377.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c378);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseLWING() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 123) {
|
|
s1 = peg$c379;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c380);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMINUS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 45) {
|
|
s1 = peg$c381;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c382);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c383.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c384);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMINUSEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c385) {
|
|
s1 = peg$c385;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c386);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMOD() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 37) {
|
|
s1 = peg$c387;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c388);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseMODEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c389) {
|
|
s1 = peg$c389;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c390);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseNOTEQUAL() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c391) {
|
|
s1 = peg$c391;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c392);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseOR() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 124) {
|
|
s1 = peg$c393;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c394);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c395.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c396);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseOREQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c397) {
|
|
s1 = peg$c397;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c398);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseOROR() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c399) {
|
|
s1 = peg$c399;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c400);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePLUS() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 43) {
|
|
s1 = peg$c401;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c402);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c403.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c404);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parsePLUSEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c405) {
|
|
s1 = peg$c405;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c406);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseQUERY() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 63) {
|
|
s1 = peg$c407;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c408);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseRBRK() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 93) {
|
|
s1 = peg$c409;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c410);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseRPAR() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 41) {
|
|
s1 = peg$c411;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c412);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseRPOINT() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 62) {
|
|
s1 = peg$c359;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c360);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseRWING() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 125) {
|
|
s1 = peg$c413;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c414);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSEMI() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 59) {
|
|
s1 = peg$c415;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c416);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSL() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c417) {
|
|
s1 = peg$c417;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c418);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSLEQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c419) {
|
|
s1 = peg$c419;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c420);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSR() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c421) {
|
|
s1 = peg$c421;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c422);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (peg$c361.test(input.charAt(peg$currPos))) {
|
|
s3 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c362);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSREQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 3) === peg$c423) {
|
|
s1 = peg$c423;
|
|
peg$currPos += 3;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c424);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSTAR() {
|
|
var s0, s1, s2, s3;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 42) {
|
|
s1 = peg$c425;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c426);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$currPos;
|
|
peg$silentFails++;
|
|
if (input.charCodeAt(peg$currPos) === 61) {
|
|
s3 = peg$c337;
|
|
peg$currPos++;
|
|
} else {
|
|
s3 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c338);
|
|
}
|
|
}
|
|
peg$silentFails--;
|
|
if (s3 === peg$FAILED) {
|
|
s2 = void 0;
|
|
} else {
|
|
peg$currPos = s2;
|
|
s2 = peg$FAILED;
|
|
}
|
|
if (s2 !== peg$FAILED) {
|
|
s3 = peg$parseSpacing();
|
|
if (s3 !== peg$FAILED) {
|
|
s1 = [s1, s2, s3];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseSTAREQU() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.substr(peg$currPos, 2) === peg$c427) {
|
|
s1 = peg$c427;
|
|
peg$currPos += 2;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c428);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseTILDA() {
|
|
var s0, s1, s2;
|
|
|
|
s0 = peg$currPos;
|
|
if (input.charCodeAt(peg$currPos) === 126) {
|
|
s1 = peg$c429;
|
|
peg$currPos++;
|
|
} else {
|
|
s1 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c430);
|
|
}
|
|
}
|
|
if (s1 !== peg$FAILED) {
|
|
s2 = peg$parseSpacing();
|
|
if (s2 !== peg$FAILED) {
|
|
s1 = [s1, s2];
|
|
s0 = s1;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parseEOT() {
|
|
var s0, s1;
|
|
|
|
s0 = peg$currPos;
|
|
peg$silentFails++;
|
|
s1 = peg$parse_();
|
|
peg$silentFails--;
|
|
if (s1 === peg$FAILED) {
|
|
s0 = void 0;
|
|
} else {
|
|
peg$currPos = s0;
|
|
s0 = peg$FAILED;
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function peg$parse_() {
|
|
var s0;
|
|
|
|
if (input.length > peg$currPos) {
|
|
s0 = input.charAt(peg$currPos);
|
|
peg$currPos++;
|
|
} else {
|
|
s0 = peg$FAILED;
|
|
if (peg$silentFails === 0) {
|
|
peg$fail(peg$c431);
|
|
}
|
|
}
|
|
|
|
return s0;
|
|
}
|
|
|
|
function extractOptional(optional, index, def) {
|
|
def = typeof def !== 'undefined' ? def : null;
|
|
return optional ? optional[index] : def;
|
|
}
|
|
|
|
function extractList(list, index) {
|
|
var result = new Array(list.length),
|
|
i;
|
|
|
|
for (i = 0; i < list.length; i++) {
|
|
result[i] = list[i][index];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function buildList(first, rest, index) {
|
|
return [first].concat(extractList(rest, index));
|
|
}
|
|
|
|
function buildTree(first, rest, builder) {
|
|
var result = first,
|
|
i;
|
|
|
|
for (i = 0; i < rest.length; i++) {
|
|
result = builder(result, rest[i]);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function buildInfixExpr(first, rest) {
|
|
return buildTree(first, rest, function (result, element) {
|
|
return {
|
|
node: 'InfixExpression',
|
|
operator: element[0][0], // remove ending Spacing
|
|
leftOperand: result,
|
|
rightOperand: element[1]
|
|
};
|
|
});
|
|
}
|
|
|
|
function buildQualified(first, rest, index) {
|
|
return buildTree(first, rest, function (result, element) {
|
|
return {
|
|
node: 'QualifiedName',
|
|
qualifier: result,
|
|
name: element[index]
|
|
};
|
|
});
|
|
}
|
|
|
|
function popQualified(tree) {
|
|
return tree.node === 'QualifiedName'
|
|
? { name: tree.name, expression: tree.qualifier }
|
|
: { name: tree, expression: null };
|
|
}
|
|
|
|
function extractThrowsClassType(list) {
|
|
return list.map(function (node) {
|
|
return node.name;
|
|
});
|
|
}
|
|
|
|
function extractExpressions(list) {
|
|
return list.map(function (node) {
|
|
return node.expression;
|
|
});
|
|
}
|
|
|
|
function buildArrayTree(first, rest) {
|
|
return buildTree(first, rest, function (result, element) {
|
|
return {
|
|
node: 'ArrayType',
|
|
componentType: result
|
|
};
|
|
});
|
|
}
|
|
|
|
function optionalList(value) {
|
|
return value !== null ? value : [];
|
|
}
|
|
|
|
function extractOptionalList(list, index) {
|
|
return optionalList(extractOptional(list, index));
|
|
}
|
|
|
|
function skipNulls(list) {
|
|
return list.filter(function (v) {
|
|
return v !== null;
|
|
});
|
|
}
|
|
|
|
function makePrimitive(code) {
|
|
return {
|
|
node: 'PrimitiveType',
|
|
primitiveTypeCode: code
|
|
};
|
|
}
|
|
|
|
function makeModifier(keyword) {
|
|
return {
|
|
node: 'Modifier',
|
|
keyword: keyword
|
|
};
|
|
}
|
|
|
|
function makeCatchFinally(catchClauses, finallyBlock) {
|
|
return {
|
|
catchClauses: catchClauses,
|
|
finally: finallyBlock
|
|
};
|
|
}
|
|
|
|
function buildTypeName(qual, args, rest) {
|
|
var first =
|
|
args === null
|
|
? {
|
|
node: 'SimpleType',
|
|
name: qual
|
|
}
|
|
: {
|
|
node: 'ParameterizedType',
|
|
type: {
|
|
node: 'SimpleType',
|
|
name: qual
|
|
},
|
|
typeArguments: args
|
|
};
|
|
|
|
return buildTree(first, rest, function (result, element) {
|
|
var args = element[2];
|
|
return args === null
|
|
? {
|
|
node: 'QualifiedType',
|
|
name: element[1],
|
|
qualifier: result
|
|
}
|
|
: {
|
|
node: 'ParameterizedType',
|
|
type: {
|
|
node: 'QualifiedType',
|
|
name: element[1],
|
|
qualifier: result
|
|
},
|
|
typeArguments: args
|
|
};
|
|
});
|
|
}
|
|
|
|
function mergeProps(obj, props) {
|
|
var key;
|
|
for (key in props) {
|
|
if (props.hasOwnProperty(key)) {
|
|
if (obj.hasOwnProperty(key)) {
|
|
throw new Error(
|
|
'Property ' +
|
|
key +
|
|
' exists ' +
|
|
line() +
|
|
'\n' +
|
|
text() +
|
|
'\nCurrent value: ' +
|
|
JSON.stringify(obj[key], null, 2) +
|
|
'\nNew value: ' +
|
|
JSON.stringify(props[key], null, 2)
|
|
);
|
|
} else {
|
|
obj[key] = props[key];
|
|
}
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
function buildSelectorTree(arg, sel, sels) {
|
|
function getMergeVal(o, v) {
|
|
switch (o.node) {
|
|
case 'SuperFieldAccess':
|
|
case 'SuperMethodInvocation':
|
|
return { qualifier: v };
|
|
case 'ArrayAccess':
|
|
return { array: v };
|
|
default:
|
|
return { expression: v };
|
|
}
|
|
}
|
|
return buildTree(mergeProps(sel, getMergeVal(sel, arg)), sels, function (result, element) {
|
|
return mergeProps(element, getMergeVal(element, result));
|
|
});
|
|
}
|
|
|
|
function TODO() {
|
|
throw new Error('TODO: not impl line ' + line() + '\n' + text());
|
|
}
|
|
|
|
peg$result = peg$startRuleFunction();
|
|
|
|
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
|
|
return peg$result;
|
|
} else {
|
|
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
|
|
peg$fail(peg$endExpectation());
|
|
}
|
|
|
|
throw peg$buildStructuredError(
|
|
peg$maxFailExpected,
|
|
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
|
|
peg$maxFailPos < input.length
|
|
? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
|
|
: peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
|
|
);
|
|
}
|
|
}
|
|
|
|
return {
|
|
SyntaxError: peg$SyntaxError,
|
|
parse: peg$parse
|
|
};
|
|
})();
|
|
|
|
var p5_options = {
|
|
globalScope: 'p5',
|
|
globalVars: {
|
|
// Map methods
|
|
pushMatrix: 'push',
|
|
popMatrix: 'pop',
|
|
size: 'createCanvas',
|
|
println: 'print',
|
|
PVector: 'Vector',
|
|
|
|
// Fix literal methods
|
|
int$: 'int',
|
|
float$: 'float',
|
|
byte$: 'byte',
|
|
char$: 'char',
|
|
boolean$: 'boolean',
|
|
|
|
// Methods
|
|
alpha: true,
|
|
blue: true,
|
|
brightness: true,
|
|
color: true,
|
|
green: true,
|
|
hue: true,
|
|
lerpColor: true,
|
|
lightness: true,
|
|
red: true,
|
|
saturation: true,
|
|
background: true,
|
|
clear: true,
|
|
colorMode: true,
|
|
fill: true,
|
|
noFill: true,
|
|
noStroke: true,
|
|
stroke: true,
|
|
arc: true,
|
|
ellipse: true,
|
|
line: true,
|
|
point: true,
|
|
quad: true,
|
|
rect: true,
|
|
triangle: true,
|
|
ellipseMode: true,
|
|
noSmooth: true,
|
|
rectMode: true,
|
|
smooth: true,
|
|
strokeCap: true,
|
|
strokeJoin: true,
|
|
strokeWeight: true,
|
|
bezier: true,
|
|
bezierDetail: true,
|
|
bezierPoint: true,
|
|
bezierTangent: true,
|
|
curve: true,
|
|
curveDetail: true,
|
|
curveTightness: true,
|
|
curvePoint: true,
|
|
curveTangent: true,
|
|
beginContour: true,
|
|
beginShape: true,
|
|
bezierVertex: true,
|
|
curveVertex: true,
|
|
endContour: true,
|
|
endShape: true,
|
|
quadraticVertex: true,
|
|
vertex: true,
|
|
loadModel: true,
|
|
model: true,
|
|
plane: true,
|
|
box: true,
|
|
sphere: true,
|
|
cylinder: true,
|
|
cone: true,
|
|
ellipsoid: true,
|
|
torus: true,
|
|
preload: true,
|
|
setup: true,
|
|
draw: true,
|
|
remove: true,
|
|
noLoop: true,
|
|
loop: true,
|
|
redraw: true,
|
|
print: true,
|
|
cursor: true,
|
|
frameRate: true,
|
|
noCursor: true,
|
|
windowResized: true,
|
|
fullscreen: true,
|
|
pixelDensity: true,
|
|
displayDensity: true,
|
|
getURL: true,
|
|
getURLPath: true,
|
|
getURLParams: true,
|
|
resizeCanvas: true,
|
|
noCanvas: true,
|
|
createGraphics: true,
|
|
blendMode: true,
|
|
setAttributes: true,
|
|
applyMatrix: true,
|
|
resetMatrix: true,
|
|
rotate: true,
|
|
rotateX: true,
|
|
rotateY: true,
|
|
rotateZ: true,
|
|
scale: true,
|
|
shearX: true,
|
|
shearY: true,
|
|
translate: true,
|
|
createStringDict: true,
|
|
createNumberDict: true,
|
|
append: true,
|
|
arrayCopy: true,
|
|
concat: true,
|
|
reverse: true,
|
|
shorten: true,
|
|
shuffle: true,
|
|
sort: true,
|
|
splice: true,
|
|
subset: true,
|
|
float: true,
|
|
int: true,
|
|
str: true,
|
|
boolean: true,
|
|
byte: true,
|
|
char: true,
|
|
unchar: true,
|
|
hex: true,
|
|
unhex: true,
|
|
join: true,
|
|
match: true,
|
|
matchAll: true,
|
|
nf: true,
|
|
nfc: true,
|
|
nfp: true,
|
|
nfs: true,
|
|
split: true,
|
|
splitTokens: true,
|
|
trim: true,
|
|
setMoveThreshold: true,
|
|
setShakeThreshold: true,
|
|
deviceMoved: true,
|
|
deviceTurned: true,
|
|
deviceShaken: true,
|
|
keyPressed: true,
|
|
keyReleased: true,
|
|
keyTyped: true,
|
|
keyIsDown: true,
|
|
mouseMoved: true,
|
|
mouseDragged: true,
|
|
mousePressed: true,
|
|
mouseReleased: true,
|
|
mouseClicked: true,
|
|
doubleClicked: true,
|
|
mouseWheel: true,
|
|
touchStarted: true,
|
|
touchMoved: true,
|
|
touchEnded: true,
|
|
createImage: true,
|
|
saveCanvas: true,
|
|
saveFrames: true,
|
|
loadImage: true,
|
|
image: true,
|
|
tint: true,
|
|
noTint: true,
|
|
imageMode: true,
|
|
blend: true,
|
|
copy: true,
|
|
filter: true,
|
|
get: true,
|
|
loadPixels: true,
|
|
set: true,
|
|
updatePixels: true,
|
|
loadJSON: true,
|
|
loadStrings: true,
|
|
loadTable: true,
|
|
loadXML: true,
|
|
loadBytes: true,
|
|
httpGet: true,
|
|
httpPost: true,
|
|
httpDo: true,
|
|
createWriter: true,
|
|
save: true,
|
|
saveJSON: true,
|
|
saveStrings: true,
|
|
saveTable: true,
|
|
day: true,
|
|
hour: true,
|
|
minute: true,
|
|
millis: true,
|
|
month: true,
|
|
second: true,
|
|
year: true,
|
|
createVector: true,
|
|
abs: true,
|
|
ceil: true,
|
|
constrain: true,
|
|
dist: true,
|
|
exp: true,
|
|
floor: true,
|
|
lerp: true,
|
|
log: true,
|
|
mag: true,
|
|
map: true,
|
|
max: true,
|
|
min: true,
|
|
norm: true,
|
|
pow: true,
|
|
round: true,
|
|
sq: true,
|
|
sqrt: true,
|
|
noise: true,
|
|
noiseDetail: true,
|
|
noiseSeed: true,
|
|
randomSeed: true,
|
|
random: true,
|
|
randomGaussian: true,
|
|
acos: true,
|
|
asin: true,
|
|
atan: true,
|
|
atan2: true,
|
|
cos: true,
|
|
sin: true,
|
|
tan: true,
|
|
degrees: true,
|
|
radians: true,
|
|
angleMode: true,
|
|
textAlign: true,
|
|
textLeading: true,
|
|
textSize: true,
|
|
textStyle: true,
|
|
textWidth: true,
|
|
textAscent: true,
|
|
textDescent: true,
|
|
loadFont: true,
|
|
text: true,
|
|
textFont: true,
|
|
camera: true,
|
|
perspective: true,
|
|
ortho: true,
|
|
orbitControl: true,
|
|
ambientLight: true,
|
|
directionalLight: true,
|
|
pointLight: true,
|
|
loadShader: true,
|
|
createShader: true,
|
|
shader: true,
|
|
normalMaterial: true,
|
|
texture: true,
|
|
ambientMaterial: true,
|
|
specularMaterial: true,
|
|
|
|
// Classes
|
|
Graphics: true,
|
|
Vector3: true,
|
|
|
|
// Constants
|
|
P2D: true,
|
|
WEBGL: true,
|
|
ARROW: true,
|
|
CROSS: true,
|
|
HAND: true,
|
|
MOVE: true,
|
|
TEXT: true,
|
|
WAIT: true,
|
|
HALF_PI: true,
|
|
PI: true,
|
|
QUARTER_PI: true,
|
|
TAU: true,
|
|
TWO_PI: true,
|
|
DEGREES: true,
|
|
RADIANS: true,
|
|
DEG_TO_RAD: true,
|
|
RAD_TO_DEG: true,
|
|
CORNER: true,
|
|
CORNERS: true,
|
|
RADIUS: true,
|
|
RIGHT: true,
|
|
LEFT: true,
|
|
CENTER: true,
|
|
TOP: true,
|
|
BOTTOM: true,
|
|
BASELINE: true,
|
|
POINTS: true,
|
|
LINES: true,
|
|
LINE_STRIP: true,
|
|
LINE_LOOP: true,
|
|
TRIANGLES: true,
|
|
TRIANGLE_FAN: true,
|
|
TRIANGLE_STRIP: true,
|
|
QUADS: true,
|
|
QUAD_STRIP: true,
|
|
CLOSE: true,
|
|
OPEN: true,
|
|
CHORD: true,
|
|
PIE: true,
|
|
PROJECT: true,
|
|
SQUARE: true,
|
|
ROUND: true,
|
|
BEVEL: true,
|
|
MITER: true,
|
|
RGB: true,
|
|
HSB: true,
|
|
HSL: true,
|
|
AUTO: true,
|
|
ALT: true,
|
|
BACKSPACE: true,
|
|
CONTROL: true,
|
|
DELETE: true,
|
|
DOWN_ARROW: true,
|
|
ENTER: true,
|
|
ESCAPE: true,
|
|
LEFT_ARROW: true,
|
|
OPTION: true,
|
|
RETURN: true,
|
|
RIGHT_ARROW: true,
|
|
SHIFT: true,
|
|
TAB: true,
|
|
UP_ARROW: true,
|
|
BLEND: true,
|
|
ADD: true,
|
|
DARKEST: true,
|
|
LIGHTEST: true,
|
|
DIFFERENCE: true,
|
|
EXCLUSION: true,
|
|
MULTIPLY: true,
|
|
SCREEN: true,
|
|
REPLACE: true,
|
|
OVERLAY: true,
|
|
HARD_LIGHT: true,
|
|
SOFT_LIGHT: true,
|
|
DODGE: true,
|
|
BURN: true,
|
|
THRESHOLD: true,
|
|
GRAY: true,
|
|
OPAQUE: true,
|
|
INVERT: true,
|
|
POSTERIZE: true,
|
|
DILATE: true,
|
|
ERODE: true,
|
|
BLUR: true,
|
|
NORMAL: true,
|
|
ITALIC: true,
|
|
BOLD: true,
|
|
LINEAR: true,
|
|
QUADRATIC: true,
|
|
BEZIER: true,
|
|
CURVE: true,
|
|
STROKE: true,
|
|
FILL: true,
|
|
TEXTURE: true,
|
|
IMMEDIATE: true,
|
|
NEAREST: true,
|
|
REPEAT: true,
|
|
CLAMP: true,
|
|
MIRROR: true,
|
|
LANDSCAPE: true,
|
|
PORTRAIT: true,
|
|
GRID: true,
|
|
AXES: true,
|
|
|
|
// Variables
|
|
frameCount: true,
|
|
focused: true,
|
|
Color: true,
|
|
displayWidth: true,
|
|
displayHeight: true,
|
|
windowWidth: true,
|
|
windowHeight: true,
|
|
width: true,
|
|
height: true,
|
|
deviceOrientation: true,
|
|
accelerationX: true,
|
|
accelerationY: true,
|
|
accelerationZ: true,
|
|
pAccelerationX: true,
|
|
pAccelerationY: true,
|
|
pAccelerationZ: true,
|
|
rotationX: true,
|
|
rotationY: true,
|
|
rotationZ: true,
|
|
pRotationX: true,
|
|
pRotationY: true,
|
|
pRotationZ: true,
|
|
turnAxis: true,
|
|
keyIsPressed: true,
|
|
key: true,
|
|
keyCode: true,
|
|
mouseX: true,
|
|
mouseY: true,
|
|
pmouseX: true,
|
|
pmouseY: true,
|
|
winMouseX: true,
|
|
winMouseY: true,
|
|
pwinMouseX: true,
|
|
pwinMouseY: true,
|
|
mouseButton: true,
|
|
mouseIsPressed: true,
|
|
touches: true,
|
|
pixels: true
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @module java-to-javascript
|
|
*/
|
|
|
|
// const beautify = require('js-beautify').js;
|
|
const beautify$2 = beautify.js_beautify;
|
|
|
|
const DEFAULT_OPTIONS = {
|
|
globalVars: {},
|
|
globalScope: null,
|
|
separator: '\n\n'
|
|
};
|
|
const opts = {};
|
|
|
|
const literalInitializers = {
|
|
int: '0',
|
|
float: '0',
|
|
double: '0',
|
|
short: '0',
|
|
long: '0',
|
|
char: "''",
|
|
boolean: 'false'
|
|
};
|
|
|
|
const SEP = '$';
|
|
|
|
const unhandledNode = (node, more = '') => {
|
|
console.error(`Unhandled node: ${node.node}. ${more}`);
|
|
return '';
|
|
};
|
|
|
|
const joinStatements = (stats) => `${stats.join(';')}${stats.length ? ';' : ''}`;
|
|
|
|
let variableTypes = {};
|
|
|
|
const varToString = ({ name, value, type, final }, noLet) => {
|
|
if (value === undefined) value = literalInitializers[type] || 'null';
|
|
variableTypes[name] = type;
|
|
return `${noLet !== true ? (final ? 'const ' : 'let ') : ''}${name} = ${value}`;
|
|
};
|
|
|
|
const parseType = (type) => {
|
|
if (type.node === 'ArrayType') return 'Array';
|
|
// Doesn't matter what we return, we don't use it
|
|
else if (type.node === 'SimpleType') return type.name.identifier;
|
|
else if (type.node === 'PrimitiveType') return type.primitiveTypeCode;
|
|
else if (type.node === 'ParameterizedType') return parseType(type.type);
|
|
else return unhandledNode(type);
|
|
};
|
|
|
|
const parseModifiers = (modifiers) => {
|
|
const mods = {};
|
|
for (const mod of modifiers) {
|
|
mods[mod.keyword] = true;
|
|
}
|
|
return mods;
|
|
};
|
|
|
|
const parseClass = (class_, isGlobal) => {
|
|
const modifiers = parseModifiers(class_.modifiers);
|
|
if (modifiers.abstract || class_.interface) return { abstract: true };
|
|
|
|
const classData = {
|
|
name: class_.name.identifier,
|
|
superclass: class_.superclassType && parseType(class_.superclassType),
|
|
classes: [],
|
|
vars: [],
|
|
methods: []
|
|
};
|
|
const classVarsMap = {};
|
|
|
|
let asyncMethods = {
|
|
Scanner: [
|
|
'hasNext',
|
|
'hasNextLine',
|
|
'next',
|
|
'nextLine',
|
|
'nextInt',
|
|
'nextShort',
|
|
'nextLong',
|
|
'nextFloat',
|
|
'nextDouble'
|
|
],
|
|
Thread: ['sleep']
|
|
};
|
|
if (typeof QuintOS != 'undefined') {
|
|
Object.assign(asyncMethods, {
|
|
Sprite: ['move'],
|
|
window: ['alert', 'delay', 'eraseRect', 'frame', 'play', 'prompt', 'text', 'textRect']
|
|
});
|
|
}
|
|
if (!asyncMethods.window) asyncMethods.window = [];
|
|
|
|
const assignParent = (name, isInConstructor) => {
|
|
if (name in classVarsMap) {
|
|
let v = classData.vars.find((x) => x.name == name);
|
|
if (!isInConstructor && (!v || !v.static)) {
|
|
return `this.${name}`;
|
|
} else if (v.static) {
|
|
return `${classData.name}.${name}`;
|
|
} else {
|
|
return name;
|
|
}
|
|
}
|
|
const mapped = opts.globalVars[name];
|
|
if (mapped) {
|
|
const newName = typeof mapped === 'string' ? mapped : name;
|
|
return opts.globalScope ? `${opts.globalScope}.${newName}` : newName;
|
|
}
|
|
return name;
|
|
};
|
|
|
|
const parseExpr = (expr) => {
|
|
if (!expr) return undefined;
|
|
|
|
switch (expr.node) {
|
|
case 'ThisExpression':
|
|
return 'this';
|
|
case 'NullLiteral':
|
|
return 'null';
|
|
case 'BooleanLiteral':
|
|
return expr.booleanValue;
|
|
case 'NumberLiteral':
|
|
let num = expr.token;
|
|
num = num.replace(/_/g, '');
|
|
if (/^0\d+$/.test(num)) num = '0o' + num.substring(1);
|
|
else if (/[lfd]$/i.test(num)) num = num.slice(0, -1);
|
|
return num;
|
|
case 'StringLiteral':
|
|
return expr.escapedValue.replace(/'/g, "\\'").replace(/"/g, "'");
|
|
case 'CharacterLiteral':
|
|
const char = expr.escapedValue.slice(1, -1);
|
|
if (char.length === 1) return "'" + char + "'";
|
|
else if (char.startsWith('\\u')) return parseInt(char.substring(2), 16).toString();
|
|
else return unhandledNode(expr, 'Weird char: ' + char);
|
|
case 'CastExpression':
|
|
let exp = parseExpr(expr.expression);
|
|
let type;
|
|
if (expr.expression.node == 'SimpleName') {
|
|
type = variableTypes[expr.expression.identifier];
|
|
} else if (expr.expression.node == 'CharacterLiteral') {
|
|
type = 'char';
|
|
} else if (expr.expression.node == 'NumberLiteral') {
|
|
type = 'double';
|
|
} else if (expr.expression.node == 'StringLiteral') {
|
|
type = 'String';
|
|
}
|
|
let castError = false;
|
|
let cast = expr.type.primitiveTypeCode;
|
|
if (cast == 'int') {
|
|
// if cast to int
|
|
if (type == 'String') {
|
|
castError = true;
|
|
} else if (type == 'char') {
|
|
exp += '.charCodeAt(0)';
|
|
} else {
|
|
exp = 'Math.floor(' + exp + ')';
|
|
}
|
|
} else if (cast == 'char') {
|
|
if (type == 'String') {
|
|
castError = true;
|
|
} else {
|
|
exp = 'String.fromCharCode(' + exp + ')';
|
|
}
|
|
}
|
|
if (castError) {
|
|
let msg = `error: incompatible types: ${type} cannot be converted to ${cast}: ${exp}`;
|
|
console.log(msg);
|
|
System.err.println(msg);
|
|
return '';
|
|
}
|
|
return exp;
|
|
case 'ConditionalExpression':
|
|
return `${parseExpr(expr.expression)} ? ${parseExpr(expr.thenExpression)} : ${parseExpr(
|
|
expr.elseExpression
|
|
)}`;
|
|
case 'SimpleName':
|
|
return assignParent(expr.identifier, expr.isInConstructor);
|
|
case 'QualifiedName':
|
|
return `${parseExpr(expr.qualifier)}.${expr.name.identifier}`;
|
|
case 'FieldAccess':
|
|
return `${parseExpr(expr.expression)}.${expr.name.identifier}`;
|
|
case 'Assignment':
|
|
return `${parseExpr(expr.leftHandSide)} ${expr.operator} ${parseExpr(expr.rightHandSide)}`;
|
|
case 'InfixExpression':
|
|
let op = expr.operator;
|
|
if (op === '!=' || op === '==') op += '='; // triple equals in JS
|
|
return `${parseExpr(expr.leftOperand)} ${op} ${parseExpr(expr.rightOperand)}`;
|
|
case 'MethodInvocation':
|
|
let str = '';
|
|
if (expr.expression) {
|
|
let exp = expr.expression;
|
|
if (exp.expression) exp = exp.expression;
|
|
let arr = asyncMethods[variableTypes[exp.identifier]];
|
|
if (arr && arr.length && arr.includes(expr.name.identifier) && !expr.isInConstructor) {
|
|
str += 'await ';
|
|
}
|
|
str += `${parseExpr(expr.expression)}.${expr.name.identifier}`;
|
|
if (expr.name.identifier == 'length') return str;
|
|
} else {
|
|
if (asyncMethods.window.includes(expr.name.identifier) && !expr.isInConstructor) {
|
|
str += 'await ';
|
|
}
|
|
str += `${assignParent(expr.name.identifier)}`;
|
|
}
|
|
return str + `(${expr.arguments.map(parseExpr)})`;
|
|
case 'InstanceofExpression':
|
|
return `${parseExpr(expr.leftOperand)} instanceof ${parseType(expr.rightOperand)}`;
|
|
case 'SuperMethodInvocation':
|
|
return `super.${expr.name.identifier}(${expr.arguments.map(parseExpr)})`;
|
|
case 'ClassInstanceCreation':
|
|
return `new ${parseType(expr.type)}(${expr.arguments.map(parseExpr)})`;
|
|
case 'PostfixExpression':
|
|
return `${parseExpr(expr.operand)}${expr.operator}`;
|
|
case 'PrefixExpression':
|
|
return `${expr.operator}${parseExpr(expr.operand)}`;
|
|
case 'VariableDeclarationExpression':
|
|
return `${parseFieldVars(expr).map(varToString)}`;
|
|
case 'ArrayInitializer':
|
|
return `[${expr.expressions.map(parseExpr)}]`;
|
|
case 'ArrayCreation':
|
|
return `new Array()`;
|
|
case 'ArrayAccess':
|
|
let arr = expr.array;
|
|
// TODO support for three dimensional arrays
|
|
if (arr.array) {
|
|
return `${assignParent(arr.array.identifier)}[${parseExpr(arr.index)}][${parseExpr(expr.index)}]`;
|
|
}
|
|
if (arr.identifier) {
|
|
return `${assignParent(arr.identifier)}[${parseExpr(expr.index)}]`;
|
|
}
|
|
// TODO support for third level subclasses
|
|
if (arr.qualifier.qualifier) {
|
|
return `${assignParent(arr.qualifier.qualifier.identifier)}.${arr.qualifier.name.identifier}.${
|
|
arr.name.identifier
|
|
}[${parseExpr(expr.index)}]`;
|
|
}
|
|
return `${assignParent(arr.qualifier.identifier)}.${arr.name.identifier}[${parseExpr(expr.index)}]`;
|
|
case 'ParenthesizedExpression':
|
|
return `(${parseExpr(expr.expression)})`;
|
|
default:
|
|
return unhandledNode(expr);
|
|
}
|
|
};
|
|
|
|
const parseFieldVars = (field) => {
|
|
const vars = [];
|
|
const data = parseModifiers(field.modifiers);
|
|
data.type = parseType(field.type);
|
|
|
|
for (const frag of field.fragments) {
|
|
if (frag.node === 'VariableDeclarationFragment') {
|
|
vars.push(
|
|
Object.assign(
|
|
{
|
|
name: frag.name.identifier,
|
|
value: parseExpr(frag.initializer)
|
|
},
|
|
data
|
|
)
|
|
);
|
|
variableTypes[frag.name.identifier] = data.type;
|
|
} else unhandledNode(frag);
|
|
}
|
|
return vars;
|
|
};
|
|
|
|
const parseStatement = (stat) => {
|
|
switch (stat.node) {
|
|
case 'EmptyStatement':
|
|
return '';
|
|
case 'ExpressionStatement':
|
|
return parseExpr(stat.expression);
|
|
case 'VariableDeclarationStatement':
|
|
return parseFieldVars(stat).map(varToString);
|
|
case 'ReturnStatement':
|
|
return `return ${parseExpr(stat.expression)}`;
|
|
case 'SuperConstructorInvocation':
|
|
// TODO stat.expression stat.typeArguments
|
|
return `super(${stat.arguments.map(parseExpr)})`;
|
|
case 'IfStatement':
|
|
let ifBlock = `if(${parseExpr(stat.expression)}){${parseBlock(stat.thenStatement)}}`;
|
|
if (stat.elseStatement) ifBlock += `else{${parseBlock(stat.elseStatement)}}`;
|
|
return ifBlock;
|
|
case 'WhileStatement':
|
|
return `while(${parseExpr(stat.expression)}){${parseBlock(stat.body)}}`;
|
|
case 'DoStatement':
|
|
return `do{${parseBlock(stat.body)}}while(${parseExpr(stat.expression)})`;
|
|
case 'ForStatement':
|
|
let initializers = stat.initializers.map(parseExpr).join(',');
|
|
if (stat.initializers.length && stat.initializers[0].node === 'VariableDeclarationExpression')
|
|
initializers = 'let ' + initializers.replace(/(let|const) /g, '');
|
|
return `for(${initializers};${parseExpr(stat.expression) || ''};${stat.updaters.map(
|
|
parseExpr
|
|
)}){${parseBlock(stat.body)}}`;
|
|
case 'EnhancedForStatement':
|
|
return `for(const ${stat.parameter.name.identifier} of ${parseExpr(stat.expression)}){${parseBlock(
|
|
stat.body
|
|
)}}`;
|
|
case 'BreakStatement':
|
|
return `break ${stat.label ? stat.label.identifier : ''}`;
|
|
case 'ContinueStatement':
|
|
return `continue ${stat.label ? stat.label.identifier : ''}`;
|
|
case 'LabeledStatement':
|
|
return `${stat.label.identifier}:${parseStatement(stat.body)}`;
|
|
case 'SwitchCase':
|
|
return `case ${parseExpr(stat.expression)}:`;
|
|
case 'SwitchStatement':
|
|
let switchStats = '';
|
|
for (const _stat of stat.statements) {
|
|
const statStr = parseStatement(_stat);
|
|
switchStats += statStr + (statStr.endsWith(':') ? '' : ';');
|
|
}
|
|
return `switch(${parseExpr(stat.expression)}){${switchStats}}`;
|
|
case 'AssertStatement':
|
|
return `if(!(${parseExpr(stat.expression)}))throw ${
|
|
stat.message ? parseExpr(stat.message) : "'Assertion Failed'"
|
|
}`;
|
|
case 'ThrowStatement':
|
|
return `throw ${parseExpr(stat.expression)}`;
|
|
case 'TryStatement':
|
|
let tryBlock = `try{${parseBlock(stat.body)}}`;
|
|
for (const clause of stat.catchClauses)
|
|
tryBlock += ` catch(${clause.exception.name.identifier}){${parseBlock(clause.body)}}`; // TODO handle exception types?
|
|
if (stat.finally) tryBlock += `finally{${parseBlock(stat.finally)}}`;
|
|
return tryBlock;
|
|
default:
|
|
return unhandledNode(stat);
|
|
}
|
|
};
|
|
|
|
const parseBlock = (block, method) => {
|
|
const semicolon = (str) => `${str}${str.endsWith('}') ? '' : ';'}`;
|
|
|
|
if (block.node !== 'Block') return semicolon(parseStatement(block));
|
|
|
|
const statements = [];
|
|
|
|
for (const stat of block.statements) {
|
|
if (method && stat.node == 'ExpressionStatement') {
|
|
stat.expression.isInConstructor = method.constructor;
|
|
}
|
|
const str = parseStatement(stat);
|
|
const arr = Array.isArray(str) ? str : [str];
|
|
statements.push(...arr.map(semicolon));
|
|
if (method && !method.isAsync && !method.constructor && statements.join('').includes('await')) {
|
|
asyncMethods.window.push(method.name.identifier);
|
|
method.isAsync = true;
|
|
}
|
|
}
|
|
|
|
return statements.join('');
|
|
};
|
|
|
|
const parseMethod = (method) => {
|
|
const data = Object.assign(
|
|
{
|
|
name: method.name.identifier,
|
|
parameters: []
|
|
},
|
|
parseModifiers(method.modifiers)
|
|
);
|
|
|
|
if (method.constructor) {
|
|
data.isConstructor = true;
|
|
data.name = 'constructor';
|
|
data.static = false;
|
|
for (let stat of method.body.statements) {
|
|
if (stat.expression.rightHandSide) {
|
|
stat.expression.rightHandSide.isInConstructor = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (const param of method.parameters) {
|
|
if (param.node === 'SingleVariableDeclaration') data.parameters.push(param.name.identifier);
|
|
else unhandledNode(block);
|
|
}
|
|
|
|
data.block = parseBlock(method.body, method);
|
|
|
|
if (data.block.includes('await')) data.isAsync = true;
|
|
|
|
return data;
|
|
};
|
|
|
|
for (const dec of class_.bodyDeclarations) {
|
|
if (dec.node === 'FieldDeclaration') {
|
|
classData.vars.push(...parseFieldVars(dec));
|
|
} else if (dec.node === 'MethodDeclaration' && !dec.constructor && isGlobal !== true) {
|
|
classVarsMap[dec.name.identifier] = true;
|
|
}
|
|
}
|
|
|
|
if (isGlobal !== true) {
|
|
for (const var_ of classData.vars) classVarsMap[var_.name] = true;
|
|
}
|
|
|
|
for (const dec of class_.bodyDeclarations) {
|
|
if (dec.node === 'TypeDeclaration') classData.classes.push(parseClass(dec));
|
|
else if (dec.node === 'MethodDeclaration') classData.methods.push(parseMethod(dec));
|
|
else if (dec.node !== 'FieldDeclaration') unhandledNode(dec);
|
|
}
|
|
|
|
return classData;
|
|
};
|
|
|
|
const classToJs = ({ name: className, vars, superclass, methods, abstract, classes }) => {
|
|
if (abstract) return '';
|
|
|
|
const initVars = [];
|
|
const classProps = [];
|
|
const staticVars = [];
|
|
|
|
for (const cl of classes) {
|
|
staticVars.push(`${classToJs(cl)}\n${className}.${cl.name}=${cl.name};`);
|
|
}
|
|
|
|
for (const var_ of vars) {
|
|
if (var_.value === undefined) var_.value = literalInitializers[var_.type] || 'null';
|
|
if (var_.static) {
|
|
staticVars.push(`${className}.${var_.name}=${var_.value};`);
|
|
} else {
|
|
if (typeof var_.value == 'string') {
|
|
for (const vv of vars) {
|
|
var_.value = var_.value.replaceAll(vv.name, 'this.' + vv.name);
|
|
}
|
|
}
|
|
initVars.push(`this.${var_.name}=${var_.value};`);
|
|
}
|
|
}
|
|
|
|
let addedConstructor = false;
|
|
|
|
const addMethod = ({ name, parameters, block, isConstructor, isAsync, static: static_ }, addInitVars) => {
|
|
if (isConstructor) addedConstructor = true;
|
|
if (static_) staticVars.push(`${className}.${name}=(${parameters})=>{${block}};`);
|
|
else {
|
|
const preblock =
|
|
isConstructor && addInitVars && initVars.length
|
|
? initVars.join('') + (block ? opts.separator : '')
|
|
: '';
|
|
let method = `${name}(${parameters}){${preblock}${block}}`;
|
|
if (isAsync) method = 'async ' + method;
|
|
classProps.push(method);
|
|
}
|
|
};
|
|
|
|
const methodMap = {};
|
|
for (const meth of methods) {
|
|
const safeName = meth.name + '$$';
|
|
if (!(safeName in methodMap)) methodMap[safeName] = {};
|
|
methodMap[safeName][meth.parameters.length] = meth;
|
|
}
|
|
for (const safeName in methodMap) {
|
|
const name = safeName.slice(0, -2);
|
|
const paramMap = methodMap[safeName];
|
|
const paramCounts = Object.keys(paramMap);
|
|
|
|
const first = paramMap[paramCounts[0]];
|
|
if (paramCounts.length === 1) {
|
|
addMethod(first, true);
|
|
} else {
|
|
let cases = '';
|
|
for (const paramCount of paramCounts) {
|
|
const meth = paramMap[paramCount];
|
|
meth.name = `${name}${SEP}${paramCount}`;
|
|
cases += `case ${paramCount}:return ${meth.static ? className : 'this'}.${meth.name}(...args$);`;
|
|
addMethod(meth);
|
|
}
|
|
if (first.static)
|
|
staticVars.push(`${className}.${name}=(...args${SEP})=>{switch(args${SEP}.length){${cases}}};`);
|
|
else classProps.push(`${name}(...args${SEP}){switch(args${SEP}.length){${cases}}}`);
|
|
}
|
|
if (name == 'main') staticVars.push(`jdk.main = ${className}.main;`);
|
|
}
|
|
|
|
if (!addedConstructor && initVars.length) classProps.unshift(`constructor(){${initVars.join('')}}`);
|
|
|
|
return `class ${className}${superclass ? ' extends ' + superclass : ''}{${classProps.join(
|
|
''
|
|
)}}${staticVars.join('')}`;
|
|
};
|
|
|
|
const globalsToJs = ({ vars, methods, classes }) => {
|
|
const join = [];
|
|
|
|
join.push(joinStatements(vars.map(varToString)));
|
|
|
|
join.push(
|
|
methods
|
|
.map(
|
|
({ name, parameters, block }) =>
|
|
`${
|
|
opts.globalScope && name in opts.globalVars ? `${opts.globalScope}.` : 'const '
|
|
}${name} = (${parameters}) => {${block}};`
|
|
)
|
|
.join(opts.separator)
|
|
);
|
|
|
|
join.push(classes.map(classToJs).join(opts.separator));
|
|
|
|
return join.join(opts.separator);
|
|
};
|
|
|
|
const fixP5 = (str) => {
|
|
return str
|
|
.replace(/(int|float|byte|char|boolean)\s*\(/g, '$1$$(') // Temporarily change name of literal method calls e.g. int(x) -> int$(x)
|
|
.replace(/[^"](#[a-f0-9]{6,8})[^"]/gi, "'$1'") // Replace silly hex notation with string
|
|
.replace(/new\s+PVector\s*\(/g, 'createVector('); // use p5 vector initializer
|
|
};
|
|
|
|
/**
|
|
* Convert Java string to JavaScript string
|
|
* @param {string} javaString - Java file contents
|
|
* @param {object} [options]
|
|
* @param {object} [options.globalVars] - Object keys are added to the `globalScope` object. If the object value is a string, the variable is renamed to that string
|
|
* @param {string} [options.globalScope] - If specified, variables in `globalVars` are appended to `globalScope` object
|
|
* @param {boolean} [options.p5] - Sets `globalScope` to `'p5'`, adds [p5 variable mappings](./p5_globals.js) to `globalVars`, and allows for global methods and variables
|
|
* @param {boolean} [options.ugly] - Don't beautify JavaScript code
|
|
* @param {function} [progress] - Callback on progress of conversion. Args are progress number (0 to 1), and a message string
|
|
* @return {string} - Converted JavaScript
|
|
*/
|
|
const javaToJavascript = (javaString, options = {}, progress) => {
|
|
if (typeof javaString !== 'string') {
|
|
throw 'java-to-javascript: First argument must be a string';
|
|
}
|
|
|
|
// Reset opts parameters
|
|
Object.assign(opts, DEFAULT_OPTIONS);
|
|
|
|
if (options.globalVars) opts.globalVars = options.globalVars;
|
|
if (options.globalScope) opts.globalScope = options.globalScope;
|
|
if (options.ugly) opts.separator = '';
|
|
if (options.p5) {
|
|
Object.assign(opts.globalVars, p5_options.globalVars, opts.globalVars);
|
|
if (!opts.globalScope) opts.globalScope = 'p5';
|
|
}
|
|
|
|
if (progress) progress(0, 'Parsing Java');
|
|
|
|
if (options.p5) javaString = `class JavaJsTemp__ {${fixP5(javaString)}}`;
|
|
|
|
let javaAST$$1;
|
|
try {
|
|
javaAST$$1 = javaAST.parse(javaString);
|
|
} catch (e) {
|
|
let line = e.location.start.line;
|
|
if (e.location) throw `on line ${line}: \n\n${javaString.split('\n')[line - 1].trim()}\n\n${e.stack}`;
|
|
else throw e;
|
|
}
|
|
|
|
if (progress) progress(0.5, 'Converting to JavaScript');
|
|
|
|
let jsString;
|
|
if (options.p5) {
|
|
jsString = globalsToJs(parseClass(javaAST$$1.types[0], true));
|
|
} else {
|
|
jsString = javaAST$$1.types.map((globalClass) => classToJs(parseClass(globalClass))).join(opts.separator);
|
|
}
|
|
|
|
if (progress) progress(0.75, 'Beautifying');
|
|
|
|
if (!options.ugly) {
|
|
jsString =
|
|
beautify$2(jsString, {
|
|
indent_size: 2
|
|
}) + '\n';
|
|
}
|
|
|
|
if (progress) progress(1.0, 'Success');
|
|
|
|
return jsString;
|
|
};
|
|
|
|
var lib = javaToJavascript;
|
|
|
|
return lib;
|
|
});
|
|
|
|
/* beautify ignore:end */
|
|
},
|
|
{}
|
|
]
|
|
},
|
|
{},
|
|
[1]
|
|
);
|