|
@@ -1,4121 +1,3700 @@
|
|
|
define("amber_vm/parser", ["./smalltalk", "./nil"], function(smalltalk, nil) {
|
|
|
-smalltalk.parser = (function(){
|
|
|
+smalltalk.parser = (function() {
|
|
|
/*
|
|
|
- * Generated by PEG.js 0.7.0.
|
|
|
+ * Generated by PEG.js 0.8.0.
|
|
|
*
|
|
|
* http://pegjs.majda.cz/
|
|
|
*/
|
|
|
-
|
|
|
- function quote(s) {
|
|
|
- /*
|
|
|
- * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
|
|
|
- * string literal except for the closing quote character, backslash,
|
|
|
- * carriage return, line separator, paragraph separator, and line feed.
|
|
|
- * Any character may appear in the form of an escape sequence.
|
|
|
- *
|
|
|
- * For portability, we also escape escape all control and non-ASCII
|
|
|
- * characters. Note that "\0" and "\v" escape sequences are not used
|
|
|
- * because JSHint does not like the first and IE the second.
|
|
|
- */
|
|
|
- return '"' + s
|
|
|
- .replace(/\\/g, '\\\\') // backslash
|
|
|
- .replace(/"/g, '\\"') // closing quote character
|
|
|
- .replace(/\x08/g, '\\b') // backspace
|
|
|
- .replace(/\t/g, '\\t') // horizontal tab
|
|
|
- .replace(/\n/g, '\\n') // line feed
|
|
|
- .replace(/\f/g, '\\f') // form feed
|
|
|
- .replace(/\r/g, '\\r') // carriage return
|
|
|
- .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape)
|
|
|
- + '"';
|
|
|
+
|
|
|
+ function peg$subclass(child, parent) {
|
|
|
+ function ctor() { this.constructor = child; }
|
|
|
+ ctor.prototype = parent.prototype;
|
|
|
+ child.prototype = new ctor();
|
|
|
}
|
|
|
-
|
|
|
- var result = {
|
|
|
- /*
|
|
|
- * Parses the input with a generated parser. If the parsing is successfull,
|
|
|
- * returns a value explicitly or implicitly specified by the grammar from
|
|
|
- * which the parser was generated (see |PEG.buildParser|). If the parsing is
|
|
|
- * unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
|
|
|
- */
|
|
|
- parse: function(input, startRule) {
|
|
|
- var parseFunctions = {
|
|
|
- "separator": parse_separator,
|
|
|
- "comments": parse_comments,
|
|
|
- "ws": parse_ws,
|
|
|
- "identifier": parse_identifier,
|
|
|
- "keyword": parse_keyword,
|
|
|
- "selector": parse_selector,
|
|
|
- "className": parse_className,
|
|
|
- "string": parse_string,
|
|
|
- "symbol": parse_symbol,
|
|
|
- "bareSymbol": parse_bareSymbol,
|
|
|
- "number": parse_number,
|
|
|
- "numberExp": parse_numberExp,
|
|
|
- "hex": parse_hex,
|
|
|
- "float": parse_float,
|
|
|
- "integer": parse_integer,
|
|
|
- "literalArray": parse_literalArray,
|
|
|
- "bareLiteralArray": parse_bareLiteralArray,
|
|
|
- "literalArrayRest": parse_literalArrayRest,
|
|
|
- "dynamicArray": parse_dynamicArray,
|
|
|
- "dynamicDictionary": parse_dynamicDictionary,
|
|
|
- "pseudoVariable": parse_pseudoVariable,
|
|
|
- "parseTimeLiteral": parse_parseTimeLiteral,
|
|
|
- "runtimeLiteral": parse_runtimeLiteral,
|
|
|
- "literal": parse_literal,
|
|
|
- "variable": parse_variable,
|
|
|
- "keywordPair": parse_keywordPair,
|
|
|
- "binarySelector": parse_binarySelector,
|
|
|
- "keywordPattern": parse_keywordPattern,
|
|
|
- "binaryPattern": parse_binaryPattern,
|
|
|
- "unaryPattern": parse_unaryPattern,
|
|
|
- "expression": parse_expression,
|
|
|
- "expressionList": parse_expressionList,
|
|
|
- "expressions": parse_expressions,
|
|
|
- "assignment": parse_assignment,
|
|
|
- "ret": parse_ret,
|
|
|
- "temps": parse_temps,
|
|
|
- "blockParamList": parse_blockParamList,
|
|
|
- "subexpression": parse_subexpression,
|
|
|
- "statements": parse_statements,
|
|
|
- "sequence": parse_sequence,
|
|
|
- "stSequence": parse_stSequence,
|
|
|
- "block": parse_block,
|
|
|
- "operand": parse_operand,
|
|
|
- "unaryMessage": parse_unaryMessage,
|
|
|
- "unaryTail": parse_unaryTail,
|
|
|
- "unarySend": parse_unarySend,
|
|
|
- "binaryMessage": parse_binaryMessage,
|
|
|
- "binaryTail": parse_binaryTail,
|
|
|
- "binarySend": parse_binarySend,
|
|
|
- "keywordMessage": parse_keywordMessage,
|
|
|
- "keywordSend": parse_keywordSend,
|
|
|
- "message": parse_message,
|
|
|
- "cascade": parse_cascade,
|
|
|
- "jsStatement": parse_jsStatement,
|
|
|
- "method": parse_method
|
|
|
- };
|
|
|
-
|
|
|
- if (startRule !== undefined) {
|
|
|
- if (parseFunctions[startRule] === undefined) {
|
|
|
- throw new Error("Invalid rule name: " + quote(startRule) + ".");
|
|
|
- }
|
|
|
- } else {
|
|
|
- startRule = "method";
|
|
|
- }
|
|
|
-
|
|
|
- var pos = { offset: 0, line: 1, column: 1, seenCR: false };
|
|
|
- var reportFailures = 0;
|
|
|
- var rightmostFailuresPos = { offset: 0, line: 1, column: 1, seenCR: false };
|
|
|
- var rightmostFailuresExpected = [];
|
|
|
- var cache = {};
|
|
|
-
|
|
|
- function padLeft(input, padding, length) {
|
|
|
- var result = input;
|
|
|
-
|
|
|
- var padLength = length - input.length;
|
|
|
- for (var i = 0; i < padLength; i++) {
|
|
|
- result = padding + result;
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- function escape(ch) {
|
|
|
- var charCode = ch.charCodeAt(0);
|
|
|
- var escapeChar;
|
|
|
- var length;
|
|
|
-
|
|
|
- if (charCode <= 0xFF) {
|
|
|
- escapeChar = 'x';
|
|
|
- length = 2;
|
|
|
- } else {
|
|
|
- escapeChar = 'u';
|
|
|
- length = 4;
|
|
|
- }
|
|
|
-
|
|
|
- return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
|
|
|
- }
|
|
|
-
|
|
|
- function clone(object) {
|
|
|
- var result = {};
|
|
|
- for (var key in object) {
|
|
|
- result[key] = object[key];
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- function advance(pos, n) {
|
|
|
- var endOffset = pos.offset + n;
|
|
|
-
|
|
|
- for (var offset = pos.offset; offset < endOffset; offset++) {
|
|
|
- var ch = input.charAt(offset);
|
|
|
- if (ch === "\n") {
|
|
|
- if (!pos.seenCR) { pos.line++; }
|
|
|
- pos.column = 1;
|
|
|
- pos.seenCR = false;
|
|
|
- } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
|
|
|
- pos.line++;
|
|
|
- pos.column = 1;
|
|
|
- pos.seenCR = true;
|
|
|
- } else {
|
|
|
- pos.column++;
|
|
|
- pos.seenCR = false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- pos.offset += n;
|
|
|
- }
|
|
|
-
|
|
|
- function matchFailed(failure) {
|
|
|
- if (pos.offset < rightmostFailuresPos.offset) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (pos.offset > rightmostFailuresPos.offset) {
|
|
|
- rightmostFailuresPos = clone(pos);
|
|
|
- rightmostFailuresExpected = [];
|
|
|
- }
|
|
|
-
|
|
|
- rightmostFailuresExpected.push(failure);
|
|
|
- }
|
|
|
-
|
|
|
- function parse_separator() {
|
|
|
- var cacheKey = "separator@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
-
|
|
|
- if (/^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [];
|
|
|
- while (result1 !== null) {
|
|
|
- result0.push(result1);
|
|
|
- if (/^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_comments() {
|
|
|
- var cacheKey = "comments@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- if (/^["]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = [];
|
|
|
- if (/^[^"]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result3 !== null) {
|
|
|
- result2.push(result3);
|
|
|
- if (/^[^"]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- if (/^["]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result1 = [result1, result2, result3];
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [];
|
|
|
- while (result1 !== null) {
|
|
|
- result0.push(result1);
|
|
|
- pos0 = clone(pos);
|
|
|
- if (/^["]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = [];
|
|
|
- if (/^[^"]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result3 !== null) {
|
|
|
- result2.push(result3);
|
|
|
- if (/^[^"]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- if (/^["]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\"]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result1 = [result1, result2, result3];
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_ws() {
|
|
|
- var cacheKey = "ws@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
-
|
|
|
- result0 = [];
|
|
|
- result1 = parse_separator();
|
|
|
- if (result1 === null) {
|
|
|
- result1 = parse_comments();
|
|
|
- }
|
|
|
- while (result1 !== null) {
|
|
|
- result0.push(result1);
|
|
|
- result1 = parse_separator();
|
|
|
- if (result1 === null) {
|
|
|
- result1 = parse_comments();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_identifier() {
|
|
|
- var cacheKey = "identifier@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[a-zA-Z]/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, first, others) {return first + others.join("");})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_keyword() {
|
|
|
- var cacheKey = "keyword@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_identifier();
|
|
|
- if (result0 !== null) {
|
|
|
- if (/^[:]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[:]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, first, last) {return first + last;})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_selector() {
|
|
|
- var cacheKey = "selector@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[a-zA-Z]/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z0-9:]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[a-zA-Z0-9:]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z0-9:]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, first, others) {return first + others.join("");})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_className() {
|
|
|
- var cacheKey = "className@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[A-Z]/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[A-Z]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[a-zA-Z0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[a-zA-Z0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, first, others) {return first + others.join("");})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_string() {
|
|
|
- var cacheKey = "string@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1, pos2;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[']/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[']");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- pos2 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 2) === "''") {
|
|
|
- result2 = "''";
|
|
|
- advance(pos, 2);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"''\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column) {return "'";})(pos2.offset, pos2.line, pos2.column);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- if (/^[^']/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^']");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- pos2 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 2) === "''") {
|
|
|
- result2 = "''";
|
|
|
- advance(pos, 2);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"''\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column) {return "'";})(pos2.offset, pos2.line, pos2.column);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- if (/^[^']/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^']");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- if (/^[']/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[']");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, val) {
|
|
|
+
|
|
|
+ function SyntaxError(message, expected, found, offset, line, column) {
|
|
|
+ this.message = message;
|
|
|
+ this.expected = expected;
|
|
|
+ this.found = found;
|
|
|
+ this.offset = offset;
|
|
|
+ this.line = line;
|
|
|
+ this.column = column;
|
|
|
+
|
|
|
+ this.name = "SyntaxError";
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$subclass(SyntaxError, Error);
|
|
|
+
|
|
|
+ function parse(input) {
|
|
|
+ var options = arguments.length > 1 ? arguments[1] : {},
|
|
|
+
|
|
|
+ peg$FAILED = {},
|
|
|
+
|
|
|
+ peg$startRuleFunctions = { start: peg$parsestart },
|
|
|
+ peg$startRuleFunction = peg$parsestart,
|
|
|
+
|
|
|
+ peg$c0 = [],
|
|
|
+ peg$c1 = peg$FAILED,
|
|
|
+ peg$c2 = /^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/,
|
|
|
+ peg$c3 = { type: "class", value: "[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]", description: "[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]" },
|
|
|
+ peg$c4 = /^["]/,
|
|
|
+ peg$c5 = { type: "class", value: "[\"]", description: "[\"]" },
|
|
|
+ peg$c6 = /^[^"]/,
|
|
|
+ peg$c7 = { type: "class", value: "[^\"]", description: "[^\"]" },
|
|
|
+ peg$c8 = /^[a-zA-Z]/,
|
|
|
+ peg$c9 = { type: "class", value: "[a-zA-Z]", description: "[a-zA-Z]" },
|
|
|
+ peg$c10 = /^[a-zA-Z0-9]/,
|
|
|
+ peg$c11 = { type: "class", value: "[a-zA-Z0-9]", description: "[a-zA-Z0-9]" },
|
|
|
+ peg$c12 = function(first, others) {return first + others.join("");},
|
|
|
+ peg$c13 = /^[:]/,
|
|
|
+ peg$c14 = { type: "class", value: "[:]", description: "[:]" },
|
|
|
+ peg$c15 = function(first, last) {return first + last;},
|
|
|
+ peg$c16 = /^[a-zA-Z0-9:]/,
|
|
|
+ peg$c17 = { type: "class", value: "[a-zA-Z0-9:]", description: "[a-zA-Z0-9:]" },
|
|
|
+ peg$c18 = /^[A-Z]/,
|
|
|
+ peg$c19 = { type: "class", value: "[A-Z]", description: "[A-Z]" },
|
|
|
+ peg$c20 = /^[']/,
|
|
|
+ peg$c21 = { type: "class", value: "[']", description: "[']" },
|
|
|
+ peg$c22 = "''",
|
|
|
+ peg$c23 = { type: "literal", value: "''", description: "\"''\"" },
|
|
|
+ peg$c24 = function() {return "'";},
|
|
|
+ peg$c25 = /^[^']/,
|
|
|
+ peg$c26 = { type: "class", value: "[^']", description: "[^']" },
|
|
|
+ peg$c27 = function(val) {
|
|
|
return smalltalk.ValueNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
._value_(val.join("").replace(/\"/ig, '"'));
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_symbol() {
|
|
|
- var cacheKey = "symbol@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 35) {
|
|
|
- result0 = "#";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"#\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_bareSymbol();
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, rest) {return rest;})(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_bareSymbol() {
|
|
|
- var cacheKey = "bareSymbol@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- result0 = parse_selector();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_binarySelector();
|
|
|
- if (result0 === null) {
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_string();
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, node) {return node._value();})(pos1.offset, pos1.line, pos1.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, val) {
|
|
|
+ },
|
|
|
+ peg$c28 = "#",
|
|
|
+ peg$c29 = { type: "literal", value: "#", description: "\"#\"" },
|
|
|
+ peg$c30 = function(rest) {return rest;},
|
|
|
+ peg$c31 = function(node) {return node._value();},
|
|
|
+ peg$c32 = function(val) {
|
|
|
return smalltalk.ValueNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
._value_(val);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_number() {
|
|
|
- var cacheKey = "number@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
- var pos0;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- result0 = parse_numberExp();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_hex();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_float();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_integer();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, n) {
|
|
|
+ },
|
|
|
+ peg$c33 = function(n) {
|
|
|
return smalltalk.ValueNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
._value_(n);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_numberExp() {
|
|
|
- var cacheKey = "numberExp@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_float();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_integer();
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 101) {
|
|
|
- result1 = "e";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"e\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_integer();
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, n) {return parseFloat(n.join(""));})(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_hex() {
|
|
|
- var cacheKey = "hex@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[\-]/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\\-]");
|
|
|
- }
|
|
|
- }
|
|
|
- result0 = result0 !== null ? result0 : "";
|
|
|
- if (result0 !== null) {
|
|
|
- if (input.substr(pos.offset, 3) === "16r") {
|
|
|
- result1 = "16r";
|
|
|
- advance(pos, 3);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"16r\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- if (/^[0-9a-fA-F]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9a-fA-F]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [];
|
|
|
- while (result3 !== null) {
|
|
|
- result2.push(result3);
|
|
|
- if (/^[0-9a-fA-F]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9a-fA-F]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ },
|
|
|
+ peg$c34 = "e",
|
|
|
+ peg$c35 = { type: "literal", value: "e", description: "\"e\"" },
|
|
|
+ peg$c36 = function(n) {return parseFloat(n.join(""));},
|
|
|
+ peg$c37 = null,
|
|
|
+ peg$c38 = /^[\-]/,
|
|
|
+ peg$c39 = { type: "class", value: "[\\-]", description: "[\\-]" },
|
|
|
+ peg$c40 = "16r",
|
|
|
+ peg$c41 = { type: "literal", value: "16r", description: "\"16r\"" },
|
|
|
+ peg$c42 = /^[0-9a-fA-F]/,
|
|
|
+ peg$c43 = { type: "class", value: "[0-9a-fA-F]", description: "[0-9a-fA-F]" },
|
|
|
+ peg$c44 = function(neg, num) {return parseInt(((neg || '') + num.join("")), 16);},
|
|
|
+ peg$c45 = /^[0-9]/,
|
|
|
+ peg$c46 = { type: "class", value: "[0-9]", description: "[0-9]" },
|
|
|
+ peg$c47 = ".",
|
|
|
+ peg$c48 = { type: "literal", value: ".", description: "\".\"" },
|
|
|
+ peg$c49 = function(neg, digits, dec) {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);},
|
|
|
+ peg$c50 = function(neg, digits) {return (parseInt((neg || '') +digits.join(""), 10));},
|
|
|
+ peg$c51 = "#(",
|
|
|
+ peg$c52 = { type: "literal", value: "#(", description: "\"#(\"" },
|
|
|
+ peg$c53 = "(",
|
|
|
+ peg$c54 = { type: "literal", value: "(", description: "\"(\"" },
|
|
|
+ peg$c55 = function(lit) {return lit._value();},
|
|
|
+ peg$c56 = ")",
|
|
|
+ peg$c57 = { type: "literal", value: ")", description: "\")\"" },
|
|
|
+ peg$c58 = function(lits) {
|
|
|
+ return smalltalk.ValueNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._value_(lits);
|
|
|
+ },
|
|
|
+ peg$c59 = "{",
|
|
|
+ peg$c60 = { type: "literal", value: "{", description: "\"{\"" },
|
|
|
+ peg$c61 = "}",
|
|
|
+ peg$c62 = { type: "literal", value: "}", description: "\"}\"" },
|
|
|
+ peg$c63 = function(expressions) {
|
|
|
+ return smalltalk.DynamicArrayNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._nodes_(expressions || []);
|
|
|
+ },
|
|
|
+ peg$c64 = "#{",
|
|
|
+ peg$c65 = { type: "literal", value: "#{", description: "\"#{\"" },
|
|
|
+ peg$c66 = function(expressions) {
|
|
|
+ return smalltalk.DynamicDictionaryNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._nodes_(expressions || []);
|
|
|
+ },
|
|
|
+ peg$c67 = "true",
|
|
|
+ peg$c68 = { type: "literal", value: "true", description: "\"true\"" },
|
|
|
+ peg$c69 = function() {return true;},
|
|
|
+ peg$c70 = "false",
|
|
|
+ peg$c71 = { type: "literal", value: "false", description: "\"false\"" },
|
|
|
+ peg$c72 = function() {return false;},
|
|
|
+ peg$c73 = "nil",
|
|
|
+ peg$c74 = { type: "literal", value: "nil", description: "\"nil\"" },
|
|
|
+ peg$c75 = function() {return nil;},
|
|
|
+ peg$c76 = function(val) {
|
|
|
+ return smalltalk.ValueNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._value_(val);
|
|
|
+ },
|
|
|
+ peg$c77 = function(identifier) {
|
|
|
+ return smalltalk.VariableNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._value_(identifier);
|
|
|
+ },
|
|
|
+ peg$c78 = function(key, arg) {return {key:key, arg: arg};},
|
|
|
+ peg$c79 = /^[\\+*\/=><,@%~|&\-]/,
|
|
|
+ peg$c80 = { type: "class", value: "[\\\\+*\\/=><,@%~|&\\-]", description: "[\\\\+*\\/=><,@%~|&\\-]" },
|
|
|
+ peg$c81 = function(bin) {return bin.join("");},
|
|
|
+ peg$c82 = function(pairs) {
|
|
|
+ var keywords = [];
|
|
|
+ var params = [];
|
|
|
+ var i = 0;
|
|
|
+ for(i = 0; i < pairs.length; i++){
|
|
|
+ keywords.push(pairs[i].key);
|
|
|
+ }
|
|
|
+ for(i = 0; i < pairs.length; i++){
|
|
|
+ params.push(pairs[i].arg);
|
|
|
+ }
|
|
|
+ return [keywords.join(""), params];
|
|
|
+ },
|
|
|
+ peg$c83 = function(selector, arg) {return [selector, [arg]];},
|
|
|
+ peg$c84 = function(selector) {return [selector, []];},
|
|
|
+ peg$c85 = function(expression) {return expression;},
|
|
|
+ peg$c86 = function(first, others) {
|
|
|
+ var result = [first];
|
|
|
+ for(var i = 0; i < others.length; i++) {
|
|
|
+ result.push(others[i]);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ peg$c87 = ":=",
|
|
|
+ peg$c88 = { type: "literal", value: ":=", description: "\":=\"" },
|
|
|
+ peg$c89 = function(variable, expression) {
|
|
|
+ return smalltalk.AssignmentNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._left_(variable)
|
|
|
+ ._right_(expression);
|
|
|
+ },
|
|
|
+ peg$c90 = "^",
|
|
|
+ peg$c91 = { type: "literal", value: "^", description: "\"^\"" },
|
|
|
+ peg$c92 = function(expression) {
|
|
|
+ return smalltalk.ReturnNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._nodes_([expression]);
|
|
|
+ },
|
|
|
+ peg$c93 = "|",
|
|
|
+ peg$c94 = { type: "literal", value: "|", description: "\"|\"" },
|
|
|
+ peg$c95 = function(variable) {return variable;},
|
|
|
+ peg$c96 = function(vars) {return vars;},
|
|
|
+ peg$c97 = ":",
|
|
|
+ peg$c98 = { type: "literal", value: ":", description: "\":\"" },
|
|
|
+ peg$c99 = function(param) {return param;},
|
|
|
+ peg$c100 = function(params) {return params;},
|
|
|
+ peg$c101 = /^[.]/,
|
|
|
+ peg$c102 = { type: "class", value: "[.]", description: "[.]" },
|
|
|
+ peg$c103 = function(ret) {return [ret];},
|
|
|
+ peg$c104 = function(exps, ret) {
|
|
|
+ var expressions = exps;
|
|
|
+ expressions.push(ret);
|
|
|
+ return expressions;
|
|
|
+ },
|
|
|
+ peg$c105 = function(expressions) {
|
|
|
+ return expressions || [];
|
|
|
+ },
|
|
|
+ peg$c106 = function(temps, statements) {
|
|
|
+ return smalltalk.SequenceNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._temps_(temps || [])
|
|
|
+ ._nodes_(statements || []);
|
|
|
+ },
|
|
|
+ peg$c107 = "[",
|
|
|
+ peg$c108 = { type: "literal", value: "[", description: "\"[\"" },
|
|
|
+ peg$c109 = "]",
|
|
|
+ peg$c110 = { type: "literal", value: "]", description: "\"]\"" },
|
|
|
+ peg$c111 = function(params, sequence) {
|
|
|
+ return smalltalk.BlockNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._parameters_(params || [])
|
|
|
+ ._nodes_([sequence._asBlockSequenceNode()]);
|
|
|
+ },
|
|
|
+ peg$c112 = void 0,
|
|
|
+ peg$c113 = function(selector) {
|
|
|
+ return smalltalk.SendNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._selector_(selector);
|
|
|
+ },
|
|
|
+ peg$c114 = function(message, tail) {
|
|
|
+ if(tail) {
|
|
|
+ return tail._valueForReceiver_(message);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return message;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ peg$c115 = function(receiver, tail) {
|
|
|
+ if(tail) {
|
|
|
+ return tail._valueForReceiver_(receiver);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return receiver;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ peg$c116 = function(selector, arg) {
|
|
|
+ return smalltalk.SendNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._selector_(selector)
|
|
|
+ ._arguments_([arg]);
|
|
|
+ },
|
|
|
+ peg$c117 = function(message, tail) {
|
|
|
+ if(tail) {
|
|
|
+ return tail._valueForReceiver_(message);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return message;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ peg$c118 = function(pair) {return pair;},
|
|
|
+ peg$c119 = function(pairs) {
|
|
|
+ var selector = [];
|
|
|
+ var args = [];
|
|
|
+ for(var i = 0; i < pairs.length; i++) {
|
|
|
+ selector.push(pairs[i].key);
|
|
|
+ args.push(pairs[i].arg);
|
|
|
+ }
|
|
|
+ return smalltalk.SendNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._selector_(selector.join(""))
|
|
|
+ ._arguments_(args);
|
|
|
+ },
|
|
|
+ peg$c120 = function(receiver, tail) {
|
|
|
+ return tail._valueForReceiver_(receiver);
|
|
|
+ },
|
|
|
+ peg$c121 = ";",
|
|
|
+ peg$c122 = { type: "literal", value: ";", description: "\";\"" },
|
|
|
+ peg$c123 = function(mess) {return mess;},
|
|
|
+ peg$c124 = function(send, messages) {
|
|
|
+ var cascade = [];
|
|
|
+ cascade.push(send);
|
|
|
+ for(var i = 0; i < messages.length; i++) {
|
|
|
+ cascade.push(messages[i]);
|
|
|
+ }
|
|
|
+ return smalltalk.CascadeNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._receiver_(send._receiver())
|
|
|
+ ._nodes_(cascade);
|
|
|
+ },
|
|
|
+ peg$c125 = "<",
|
|
|
+ peg$c126 = { type: "literal", value: "<", description: "\"<\"" },
|
|
|
+ peg$c127 = ">>",
|
|
|
+ peg$c128 = { type: "literal", value: ">>", description: "\">>\"" },
|
|
|
+ peg$c129 = function() {return ">";},
|
|
|
+ peg$c130 = /^[^>]/,
|
|
|
+ peg$c131 = { type: "class", value: "[^>]", description: "[^>]" },
|
|
|
+ peg$c132 = ">",
|
|
|
+ peg$c133 = { type: "literal", value: ">", description: "\">\"" },
|
|
|
+ peg$c134 = function(val) {
|
|
|
+ return smalltalk.JSStatementNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._source_(val.join(""));
|
|
|
+ },
|
|
|
+ peg$c135 = function(pattern, sequence) {
|
|
|
+ return smalltalk.MethodNode._new()
|
|
|
+ ._position_((line()).__at(column()))
|
|
|
+ ._selector_(pattern[0])
|
|
|
+ ._arguments_(pattern[1])
|
|
|
+ ._nodes_([sequence]);
|
|
|
+ },
|
|
|
+
|
|
|
+ peg$currPos = 0,
|
|
|
+ peg$reportedPos = 0,
|
|
|
+ peg$cachedPos = 0,
|
|
|
+ peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
|
|
|
+ peg$maxFailPos = 0,
|
|
|
+ peg$maxFailExpected = [],
|
|
|
+ peg$silentFails = 0,
|
|
|
+
|
|
|
+ peg$cache = {},
|
|
|
+ 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$reportedPos, peg$currPos);
|
|
|
+ }
|
|
|
+
|
|
|
+ function offset() {
|
|
|
+ return peg$reportedPos;
|
|
|
+ }
|
|
|
+
|
|
|
+ function line() {
|
|
|
+ return peg$computePosDetails(peg$reportedPos).line;
|
|
|
+ }
|
|
|
+
|
|
|
+ function column() {
|
|
|
+ return peg$computePosDetails(peg$reportedPos).column;
|
|
|
+ }
|
|
|
+
|
|
|
+ function expected(description) {
|
|
|
+ throw peg$buildException(
|
|
|
+ null,
|
|
|
+ [{ type: "other", description: description }],
|
|
|
+ peg$reportedPos
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function error(message) {
|
|
|
+ throw peg$buildException(message, null, peg$reportedPos);
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$computePosDetails(pos) {
|
|
|
+ function advance(details, startPos, endPos) {
|
|
|
+ var p, ch;
|
|
|
+
|
|
|
+ for (p = startPos; p < endPos; p++) {
|
|
|
+ ch = input.charAt(p);
|
|
|
+ if (ch === "\n") {
|
|
|
+ if (!details.seenCR) { details.line++; }
|
|
|
+ details.column = 1;
|
|
|
+ details.seenCR = false;
|
|
|
+ } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
|
|
|
+ details.line++;
|
|
|
+ details.column = 1;
|
|
|
+ details.seenCR = true;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ details.column++;
|
|
|
+ details.seenCR = false;
|
|
|
}
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, neg, num) {return parseInt((neg + num.join("")), 16);})(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_float() {
|
|
|
- var cacheKey = "float@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[\-]/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\\-]");
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (peg$cachedPos !== pos) {
|
|
|
+ if (peg$cachedPos > pos) {
|
|
|
+ peg$cachedPos = 0;
|
|
|
+ peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
|
|
|
}
|
|
|
- result0 = result0 !== null ? result0 : "";
|
|
|
- if (result0 !== null) {
|
|
|
- if (/^[0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result1 = [];
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 46) {
|
|
|
- result2 = ".";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\".\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- if (/^[0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result4 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result4 !== null) {
|
|
|
- result3 = [];
|
|
|
- while (result4 !== null) {
|
|
|
- result3.push(result4);
|
|
|
- if (/^[0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result4 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ advance(peg$cachedPosDetails, peg$cachedPos, pos);
|
|
|
+ peg$cachedPos = pos;
|
|
|
+ }
|
|
|
+
|
|
|
+ return peg$cachedPosDetails;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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$buildException(message, expected, pos) {
|
|
|
+ function cleanupExpected(expected) {
|
|
|
+ var i = 1;
|
|
|
+
|
|
|
+ expected.sort(function(a, b) {
|
|
|
+ if (a.description < b.description) {
|
|
|
+ return -1;
|
|
|
+ } else if (a.description > b.description) {
|
|
|
+ return 1;
|
|
|
+ } else {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ while (i < expected.length) {
|
|
|
+ if (expected[i - 1] === expected[i]) {
|
|
|
+ expected.splice(i, 1);
|
|
|
+ } else {
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function buildMessage(expected, found) {
|
|
|
+ function stringEscape(s) {
|
|
|
+ function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
|
|
|
+
|
|
|
+ return s
|
|
|
+ .replace(/\\/g, '\\\\')
|
|
|
+ .replace(/"/g, '\\"')
|
|
|
+ .replace(/\x08/g, '\\b')
|
|
|
+ .replace(/\t/g, '\\t')
|
|
|
+ .replace(/\n/g, '\\n')
|
|
|
+ .replace(/\f/g, '\\f')
|
|
|
+ .replace(/\r/g, '\\r')
|
|
|
+ .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
|
|
|
+ .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
|
|
|
+ .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
|
|
|
+ .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
|
|
|
+ }
|
|
|
+
|
|
|
+ var expectedDescs = new Array(expected.length),
|
|
|
+ expectedDesc, foundDesc, i;
|
|
|
+
|
|
|
+ for (i = 0; i < expected.length; i++) {
|
|
|
+ expectedDescs[i] = expected[i].description;
|
|
|
+ }
|
|
|
+
|
|
|
+ expectedDesc = expected.length > 1
|
|
|
+ ? expectedDescs.slice(0, -1).join(", ")
|
|
|
+ + " or "
|
|
|
+ + expectedDescs[expected.length - 1]
|
|
|
+ : expectedDescs[0];
|
|
|
+
|
|
|
+ foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
|
|
|
+
|
|
|
+ return "Expected " + expectedDesc + " but " + foundDesc + " found.";
|
|
|
+ }
|
|
|
+
|
|
|
+ var posDetails = peg$computePosDetails(pos),
|
|
|
+ found = pos < input.length ? input.charAt(pos) : null;
|
|
|
+
|
|
|
+ if (expected !== null) {
|
|
|
+ cleanupExpected(expected);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new SyntaxError(
|
|
|
+ message !== null ? message : buildMessage(expected, found),
|
|
|
+ expected,
|
|
|
+ found,
|
|
|
+ pos,
|
|
|
+ posDetails.line,
|
|
|
+ posDetails.column
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsestart() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 0,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parsemethod();
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseseparator() {
|
|
|
+ var s0, s1;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 1,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = [];
|
|
|
+ if (peg$c2.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c3); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ while (s1 !== peg$FAILED) {
|
|
|
+ s0.push(s1);
|
|
|
+ if (peg$c2.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c3); }
|
|
|
}
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, neg, digits, dec) {return parseFloat((neg + digits.join("") + "." + dec.join("")), 10);})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1], result0[3]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_integer() {
|
|
|
- var cacheKey = "integer@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (/^[\-]/.test(input.charAt(pos.offset))) {
|
|
|
- result0 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
+ } else {
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsecomments() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 2,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = [];
|
|
|
+ s1 = peg$currPos;
|
|
|
+ if (peg$c4.test(input.charAt(peg$currPos))) {
|
|
|
+ s2 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c5); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = [];
|
|
|
+ if (peg$c6.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\\-]");
|
|
|
- }
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c7); }
|
|
|
}
|
|
|
- result0 = result0 !== null ? result0 : "";
|
|
|
- if (result0 !== null) {
|
|
|
- if (/^[0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result1 = [];
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[0-9]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[0-9]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
+ while (s4 !== peg$FAILED) {
|
|
|
+ s3.push(s4);
|
|
|
+ if (peg$c6.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, neg, digits) {return (parseInt(neg+digits.join(""), 10));})(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_literalArray() {
|
|
|
- var cacheKey = "literalArray@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 2) === "#(") {
|
|
|
- result0 = "#(";
|
|
|
- advance(pos, 2);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"#(\"");
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c7); }
|
|
|
}
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_literalArrayRest();
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ if (peg$c4.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, rest) {return rest;})(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_bareLiteralArray() {
|
|
|
- var cacheKey = "bareLiteralArray@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 40) {
|
|
|
- result0 = "(";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"(\"");
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c5); }
|
|
|
}
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_literalArrayRest();
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s2 = [s2, s3, s4];
|
|
|
+ s1 = s2;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, rest) {return rest;})(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_literalArrayRest() {
|
|
|
- var cacheKey = "literalArrayRest@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1, pos2, pos3;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result2 = parse_parseTimeLiteral();
|
|
|
- if (result2 === null) {
|
|
|
- result2 = parse_bareLiteralArray();
|
|
|
- if (result2 === null) {
|
|
|
- result2 = parse_bareSymbol();
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [result2, result3];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ while (s1 !== peg$FAILED) {
|
|
|
+ s0.push(s1);
|
|
|
+ s1 = peg$currPos;
|
|
|
+ if (peg$c4.test(input.charAt(peg$currPos))) {
|
|
|
+ s2 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c5); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = [];
|
|
|
+ if (peg$c6.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column, lit) {return lit._value();})(pos2.offset, pos2.line, pos2.column, result2[0]);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result2 = parse_parseTimeLiteral();
|
|
|
- if (result2 === null) {
|
|
|
- result2 = parse_bareLiteralArray();
|
|
|
- if (result2 === null) {
|
|
|
- result2 = parse_bareSymbol();
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [result2, result3];
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c7); }
|
|
|
+ }
|
|
|
+ while (s4 !== peg$FAILED) {
|
|
|
+ s3.push(s4);
|
|
|
+ if (peg$c6.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c7); }
|
|
|
}
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column, lit) {return lit._value();})(pos2.offset, pos2.line, pos2.column, result2[0]);
|
|
|
}
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 41) {
|
|
|
- result3 = ")";
|
|
|
- advance(pos, 1);
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ if (peg$c4.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\")\"");
|
|
|
- }
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c5); }
|
|
|
}
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s2 = [s2, s3, s4];
|
|
|
+ s1 = s2;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
}
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, lits) {
|
|
|
- return smalltalk.ValueNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._value_(lits);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_dynamicArray() {
|
|
|
- var cacheKey = "dynamicArray@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4, result5;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 123) {
|
|
|
- result0 = "{";
|
|
|
- advance(pos, 1);
|
|
|
+ } else {
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsews() {
|
|
|
+ var s0, s1;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 3,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = [];
|
|
|
+ s1 = peg$parseseparator();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$parsecomments();
|
|
|
+ }
|
|
|
+ while (s1 !== peg$FAILED) {
|
|
|
+ s0.push(s1);
|
|
|
+ s1 = peg$parseseparator();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$parsecomments();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseidentifier() {
|
|
|
+ var s0, s1, s2, s3;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 4,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c8.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c9); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c10.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"{\"");
|
|
|
- }
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c11); }
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_expressions();
|
|
|
- result2 = result2 !== null ? result2 : "";
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 46) {
|
|
|
- result4 = ".";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\".\"");
|
|
|
- }
|
|
|
- }
|
|
|
- result4 = result4 !== null ? result4 : "";
|
|
|
- if (result4 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 125) {
|
|
|
- result5 = "}";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result5 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"}\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result5 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4, result5];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c10.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c11); }
|
|
|
}
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, expressions) {
|
|
|
- return smalltalk.DynamicArrayNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._nodes_(expressions);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[2]);
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c12(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_dynamicDictionary() {
|
|
|
- var cacheKey = "dynamicDictionary@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsekeyword() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 5,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseidentifier();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ if (peg$c13.test(input.charAt(peg$currPos))) {
|
|
|
+ s2 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c14); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c15(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 2) === "#{") {
|
|
|
- result0 = "#{";
|
|
|
- advance(pos, 2);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseselector() {
|
|
|
+ var s0, s1, s2, s3;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 6,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c8.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c9); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c16.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"#{\"");
|
|
|
- }
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_expressions();
|
|
|
- result2 = result2 !== null ? result2 : "";
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 125) {
|
|
|
- result4 = "}";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"}\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result4 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c16.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
|
|
|
}
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, expressions) {
|
|
|
- return smalltalk.DynamicDictionaryNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._nodes_(expressions);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_pseudoVariable() {
|
|
|
- var cacheKey = "pseudoVariable@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 4) === "true") {
|
|
|
- result0 = "true";
|
|
|
- advance(pos, 4);
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c12(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"true\"");
|
|
|
- }
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column) {return true;})(pos1.offset, pos1.line, pos1.column);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos1);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseclassName() {
|
|
|
+ var s0, s1, s2, s3;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 7,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c18.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c19); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c10.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c11); }
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 5) === "false") {
|
|
|
- result0 = "false";
|
|
|
- advance(pos, 5);
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c10.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"false\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column) {return false;})(pos1.offset, pos1.line, pos1.column);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 3) === "nil") {
|
|
|
- result0 = "nil";
|
|
|
- advance(pos, 3);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"nil\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column) {return nil;})(pos1.offset, pos1.line, pos1.column);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c11); }
|
|
|
}
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, val) {
|
|
|
- return smalltalk.ValueNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._value_(val);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_parseTimeLiteral() {
|
|
|
- var cacheKey = "parseTimeLiteral@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c12(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_pseudoVariable();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_number();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_literalArray();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_string();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_symbol();
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsestring() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 8,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c20.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c21); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ s3 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c22) {
|
|
|
+ s4 = peg$c22;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c23); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c24();
|
|
|
+ }
|
|
|
+ s3 = s4;
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ if (peg$c25.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c26); }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ s3 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c22) {
|
|
|
+ s4 = peg$c22;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c23); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c24();
|
|
|
+ }
|
|
|
+ s3 = s4;
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ if (peg$c25.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c26); }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_runtimeLiteral() {
|
|
|
- var cacheKey = "runtimeLiteral@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_dynamicDictionary();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_dynamicArray();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_block();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (peg$c20.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c21); }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_literal() {
|
|
|
- var cacheKey = "literal@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_runtimeLiteral();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_parseTimeLiteral();
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_variable() {
|
|
|
- var cacheKey = "variable@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
- var pos0;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- result0 = parse_identifier();
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, identifier) {
|
|
|
- return smalltalk.VariableNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._value_(identifier);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_keywordPair() {
|
|
|
- var cacheKey = "keywordPair@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_keyword();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_binarySend();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c27(s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, key, arg) {return {key:key, arg: arg};})(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_binarySelector() {
|
|
|
- var cacheKey = "binarySelector@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- if (/^[\\+*\/=><,@%~|&\-]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\\\\+*\\/=><,@%~|&\\-]");
|
|
|
- }
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [];
|
|
|
- while (result1 !== null) {
|
|
|
- result0.push(result1);
|
|
|
- if (/^[\\+*\/=><,@%~|&\-]/.test(input.charAt(pos.offset))) {
|
|
|
- result1 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[\\\\+*\\/=><,@%~|&\\-]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsesymbol() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 9,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 35) {
|
|
|
+ s1 = peg$c28;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c29); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsebareSymbol();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c30(s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, bin) {return bin.join("");})(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_keywordPattern() {
|
|
|
- var cacheKey = "keywordPattern@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebareSymbol() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 10,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseselector();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$parsebinarySelector();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$currPos;
|
|
|
+ s2 = peg$parsestring();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s1;
|
|
|
+ s2 = peg$c31(s2);
|
|
|
+ }
|
|
|
+ s1 = s2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c32(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsenumber() {
|
|
|
+ var s0, s1;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 11,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsenumberExp();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$parsehex();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$parsefloat();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$parseinteger();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c33(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsenumberExp() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 12,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$currPos;
|
|
|
+ s2 = peg$parsefloat();
|
|
|
+ if (s2 === peg$FAILED) {
|
|
|
+ s2 = peg$parseinteger();
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 101) {
|
|
|
+ s3 = peg$c34;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c35); }
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parseinteger();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s2 = [s2, s3, s4];
|
|
|
+ s1 = s2;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1, pos2;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- pos2 = clone(pos);
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_keyword();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_identifier();
|
|
|
- if (result4 !== null) {
|
|
|
- result1 = [result1, result2, result3, result4];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s1;
|
|
|
+ s1 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c36(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsehex() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 13,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c38.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c39); }
|
|
|
+ }
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ if (input.substr(peg$currPos, 3) === peg$c40) {
|
|
|
+ s2 = peg$c40;
|
|
|
+ peg$currPos += 3;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c41); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = [];
|
|
|
+ if (peg$c42.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c43); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ while (s4 !== peg$FAILED) {
|
|
|
+ s3.push(s4);
|
|
|
+ if (peg$c42.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c43); }
|
|
|
}
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
}
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c44(s1, s3);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result1 = (function(offset, line, column, key, arg) {return {key:key, arg: arg};})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]);
|
|
|
- }
|
|
|
- if (result1 === null) {
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [];
|
|
|
- while (result1 !== null) {
|
|
|
- result0.push(result1);
|
|
|
- pos1 = clone(pos);
|
|
|
- pos2 = clone(pos);
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_keyword();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_identifier();
|
|
|
- if (result4 !== null) {
|
|
|
- result1 = [result1, result2, result3, result4];
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsefloat() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 14,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c38.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c39); }
|
|
|
+ }
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c45.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c45.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result1 = (function(offset, line, column, key, arg) {return {key:key, arg: arg};})(pos1.offset, pos1.line, pos1.column, result1[1], result1[3]);
|
|
|
- }
|
|
|
- if (result1 === null) {
|
|
|
- pos = clone(pos1);
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, pairs) {
|
|
|
- var keywords = [];
|
|
|
- var params = [];
|
|
|
- var i = 0;
|
|
|
- for(i = 0; i < pairs.length; i++){
|
|
|
- keywords.push(pairs[i].key);
|
|
|
- }
|
|
|
- for(i = 0; i < pairs.length; i++){
|
|
|
- params.push(pairs[i].arg);
|
|
|
- }
|
|
|
- return [keywords.join(""), params];
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_binaryPattern() {
|
|
|
- var cacheKey = "binaryPattern@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_binarySelector();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_identifier();
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 46) {
|
|
|
+ s3 = peg$c47;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = [];
|
|
|
+ if (peg$c45.test(input.charAt(peg$currPos))) {
|
|
|
+ s5 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s5 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
|
|
|
+ }
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ while (s5 !== peg$FAILED) {
|
|
|
+ s4.push(s5);
|
|
|
+ if (peg$c45.test(input.charAt(peg$currPos))) {
|
|
|
+ s5 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s5 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ s4 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c49(s1, s2, s4);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, selector, arg) {return [selector, [arg]];})(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_unaryPattern() {
|
|
|
- var cacheKey = "unaryPattern@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_identifier();
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseinteger() {
|
|
|
+ var s0, s1, s2, s3;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 15,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (peg$c38.test(input.charAt(peg$currPos))) {
|
|
|
+ s1 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c39); }
|
|
|
+ }
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c45.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c45.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, selector) {return [selector, []];})(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c50(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseliteralArray() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 16,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c51) {
|
|
|
+ s1 = peg$c51;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c52); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parseliteralArrayRest();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c30(s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_expression() {
|
|
|
- var cacheKey = "expression@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebareLiteralArray() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 17,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 40) {
|
|
|
+ s1 = peg$c53;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c54); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parseliteralArrayRest();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c30(s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_assignment();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_cascade();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_keywordSend();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_binarySend();
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseliteralArrayRest() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 18,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ s3 = peg$currPos;
|
|
|
+ s4 = peg$parseparseTimeLiteral();
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s4 = peg$parsebareLiteralArray();
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s4 = peg$parsebareSymbol();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c55(s4);
|
|
|
+ s3 = s4;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ s3 = peg$currPos;
|
|
|
+ s4 = peg$parseparseTimeLiteral();
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s4 = peg$parsebareLiteralArray();
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s4 = peg$parsebareSymbol();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c55(s4);
|
|
|
+ s3 = s4;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_expressionList() {
|
|
|
- var cacheKey = "expressionList@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 46) {
|
|
|
- result1 = ".";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\".\"");
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 41) {
|
|
|
+ s4 = peg$c56;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c57); }
|
|
|
}
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_expression();
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c58(s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, expression) {return expression;})(pos0.offset, pos0.line, pos0.column, result0[3]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_expressions() {
|
|
|
- var cacheKey = "expressions@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_expression();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- result2 = parse_expressionList();
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- result2 = parse_expressionList();
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, first, others) {
|
|
|
- var result = [first];
|
|
|
- for(var i = 0; i < others.length; i++) {
|
|
|
- result.push(others[i]);
|
|
|
- }
|
|
|
- return result;
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_assignment() {
|
|
|
- var cacheKey = "assignment@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_variable();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.substr(pos.offset, 2) === ":=") {
|
|
|
- result2 = ":=";
|
|
|
- advance(pos, 2);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\":=\"");
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsedynamicArray() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 19,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 123) {
|
|
|
+ s1 = peg$c59;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c60); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseexpressions();
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ s3 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 46) {
|
|
|
+ s5 = peg$c47;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s5 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
|
|
|
}
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_expression();
|
|
|
- if (result4 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4];
|
|
|
+ if (s5 === peg$FAILED) {
|
|
|
+ s5 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 125) {
|
|
|
+ s6 = peg$c61;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s6 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c62); }
|
|
|
+ }
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c63(s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, variable, expression) {
|
|
|
- return smalltalk.AssignmentNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._left_(variable)
|
|
|
- ._right_(expression);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[4]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_ret() {
|
|
|
- var cacheKey = "ret@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 94) {
|
|
|
- result0 = "^";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"^\"");
|
|
|
- }
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_expression();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 46) {
|
|
|
- result4 = ".";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\".\"");
|
|
|
- }
|
|
|
- }
|
|
|
- result4 = result4 !== null ? result4 : "";
|
|
|
- if (result4 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsedynamicDictionary() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 20,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c64) {
|
|
|
+ s1 = peg$c64;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c65); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseexpressions();
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ s3 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 125) {
|
|
|
+ s5 = peg$c61;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s5 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c62); }
|
|
|
+ }
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c66(s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, expression) {
|
|
|
- return smalltalk.ReturnNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._nodes_([expression]);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[2]);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsepseudoVariable() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 21,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 4) === peg$c67) {
|
|
|
+ s2 = peg$c67;
|
|
|
+ peg$currPos += 4;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c68); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s1;
|
|
|
+ s2 = peg$c69();
|
|
|
+ }
|
|
|
+ s1 = s2;
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 5) === peg$c70) {
|
|
|
+ s2 = peg$c70;
|
|
|
+ peg$currPos += 5;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c71); }
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_temps() {
|
|
|
- var cacheKey = "temps@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s1;
|
|
|
+ s2 = peg$c72();
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1, pos2, pos3;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 124) {
|
|
|
- result0 = "|";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"|\"");
|
|
|
+ s1 = s2;
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 3) === peg$c73) {
|
|
|
+ s2 = peg$c73;
|
|
|
+ peg$currPos += 3;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c74); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s1;
|
|
|
+ s2 = peg$c75();
|
|
|
}
|
|
|
+ s1 = s2;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_identifier();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_ws();
|
|
|
- if (result4 !== null) {
|
|
|
- result2 = [result2, result3, result4];
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c76(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseparseTimeLiteral() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 22,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parsepseudoVariable();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsenumber();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parseliteralArray();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsestring();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsesymbol();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseruntimeLiteral() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 23,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parsedynamicDictionary();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsedynamicArray();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parseblock();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseliteral() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 24,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parseruntimeLiteral();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parseparseTimeLiteral();
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsevariable() {
|
|
|
+ var s0, s1;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 25,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseidentifier();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c77(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsekeywordPair() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 26,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsekeyword();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsebinarySend();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c78(s1, s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column, variable) {return variable;})(pos2.offset, pos2.line, pos2.column, result2[1]);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebinarySelector() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 27,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = [];
|
|
|
+ if (peg$c79.test(input.charAt(peg$currPos))) {
|
|
|
+ s2 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c80); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ while (s2 !== peg$FAILED) {
|
|
|
+ s1.push(s2);
|
|
|
+ if (peg$c79.test(input.charAt(peg$currPos))) {
|
|
|
+ s2 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c80); }
|
|
|
}
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ s1 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c81(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsekeywordPattern() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 28,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = [];
|
|
|
+ s2 = peg$currPos;
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsekeyword();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parseidentifier();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s2;
|
|
|
+ s3 = peg$c78(s4, s6);
|
|
|
+ s2 = s3;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_identifier();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_ws();
|
|
|
- if (result4 !== null) {
|
|
|
- result2 = [result2, result3, result4];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ while (s2 !== peg$FAILED) {
|
|
|
+ s1.push(s2);
|
|
|
+ s2 = peg$currPos;
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsekeyword();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parseidentifier();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s2;
|
|
|
+ s3 = peg$c78(s4, s6);
|
|
|
+ s2 = s3;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column, variable) {return variable;})(pos2.offset, pos2.line, pos2.column, result2[1]);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 124) {
|
|
|
- result2 = "|";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"|\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ s1 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c82(s1);
|
|
|
+ }
|
|
|
+ s0 = s1;
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebinaryPattern() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 29,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsebinarySelector();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parseidentifier();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c83(s2, s4);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, vars) {return vars;})(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_blockParamList() {
|
|
|
- var cacheKey = "blockParamList@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseunaryPattern() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 30,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parseidentifier();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c84(s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1, pos2, pos3;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 58) {
|
|
|
- result2 = ":";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\":\"");
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseexpression() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 31,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parseassignment();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsecascade();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsekeywordSend();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsebinarySend();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseexpressionList() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 32,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 46) {
|
|
|
+ s2 = peg$c47;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s2 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parseexpression();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c85(s4);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_identifier();
|
|
|
- if (result4 !== null) {
|
|
|
- result1 = [result1, result2, result3, result4];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseexpressions() {
|
|
|
+ var s0, s1, s2, s3;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 33,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseexpression();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ s3 = peg$parseexpressionList();
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ s3 = peg$parseexpressionList();
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c86(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseassignment() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 34,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsevariable();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c87) {
|
|
|
+ s3 = peg$c87;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c88); }
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parseexpression();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c89(s1, s5);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result1 = (function(offset, line, column, param) {return param;})(pos2.offset, pos2.line, pos2.column, result1[3]);
|
|
|
- }
|
|
|
- if (result1 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [];
|
|
|
- while (result1 !== null) {
|
|
|
- result0.push(result1);
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 58) {
|
|
|
- result2 = ":";
|
|
|
- advance(pos, 1);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseret() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 35,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 94) {
|
|
|
+ s1 = peg$c90;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c91); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseexpression();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 46) {
|
|
|
+ s5 = peg$c47;
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\":\"");
|
|
|
- }
|
|
|
+ s5 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c48); }
|
|
|
}
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_identifier();
|
|
|
- if (result4 !== null) {
|
|
|
- result1 = [result1, result2, result3, result4];
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
+ if (s5 === peg$FAILED) {
|
|
|
+ s5 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c92(s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result1 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result1 = (function(offset, line, column, param) {return param;})(pos2.offset, pos2.line, pos2.column, result1[3]);
|
|
|
- }
|
|
|
- if (result1 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 124) {
|
|
|
- result2 = "|";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"|\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsetemps() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 36,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 124) {
|
|
|
+ s1 = peg$c93;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c94); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ s3 = peg$currPos;
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parseidentifier();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parsews();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c95(s5);
|
|
|
+ s3 = s4;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, params) {return params;})(pos0.offset, pos0.line, pos0.column, result0[0]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_subexpression() {
|
|
|
- var cacheKey = "subexpression@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 40) {
|
|
|
- result0 = "(";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"(\"");
|
|
|
- }
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_expression();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 41) {
|
|
|
- result4 = ")";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\")\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result4 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ s3 = peg$currPos;
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parseidentifier();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parsews();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c95(s5);
|
|
|
+ s3 = s4;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, expression) {return expression;})(pos0.offset, pos0.line, pos0.column, result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_statements() {
|
|
|
- var cacheKey = "statements@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4, result5, result6;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ret();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 124) {
|
|
|
+ s3 = peg$c93;
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c94); }
|
|
|
}
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c96(s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, ret) {return [ret];})(pos0.offset, pos0.line, pos0.column, result0[0]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_expressions();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [];
|
|
|
- while (result3 !== null) {
|
|
|
- result2.push(result3);
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result3 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_ret();
|
|
|
- if (result4 !== null) {
|
|
|
- result5 = [];
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result6 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result6 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result6 !== null) {
|
|
|
- result5.push(result6);
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result6 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result6 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (result5 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4, result5];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseblockParamList() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 37,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = [];
|
|
|
+ s2 = peg$currPos;
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 58) {
|
|
|
+ s4 = peg$c97;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c98); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parseidentifier();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s2;
|
|
|
+ s3 = peg$c99(s6);
|
|
|
+ s2 = s3;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, exps, ret) {
|
|
|
- var expressions = exps;
|
|
|
- expressions.push(ret);
|
|
|
- return expressions;
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[4]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_expressions();
|
|
|
- result0 = result0 !== null ? result0 : "";
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
- }
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- if (/^[.]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ while (s2 !== peg$FAILED) {
|
|
|
+ s1.push(s2);
|
|
|
+ s2 = peg$currPos;
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 58) {
|
|
|
+ s4 = peg$c97;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c98); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parseidentifier();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s2;
|
|
|
+ s3 = peg$c99(s6);
|
|
|
+ s2 = s3;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[.]");
|
|
|
- }
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, expressions) {
|
|
|
- return expressions || [];
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s2;
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_sequence() {
|
|
|
- var cacheKey = "sequence@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_jsStatement();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_stSequence();
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_stSequence() {
|
|
|
- var cacheKey = "stSequence@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ s1 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 124) {
|
|
|
+ s3 = peg$c93;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c94); }
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c100(s1);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_temps();
|
|
|
- result0 = result0 !== null ? result0 : "";
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_statements();
|
|
|
- result2 = result2 !== null ? result2 : "";
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsesubexpression() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 38,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 40) {
|
|
|
+ s1 = peg$c53;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c54); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseexpression();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 41) {
|
|
|
+ s5 = peg$c56;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s5 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c57); }
|
|
|
+ }
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c85(s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, temps, statements) {
|
|
|
- return smalltalk.SequenceNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._temps_(temps || [])
|
|
|
- ._nodes_(statements || []);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_block() {
|
|
|
- var cacheKey = "block@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4, result5, result6;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 91) {
|
|
|
- result0 = "[";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"[\"");
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsestatements() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 39,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseret();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
+ }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c103(s1);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_blockParamList();
|
|
|
- result2 = result2 !== null ? result2 : "";
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_sequence();
|
|
|
- result4 = result4 !== null ? result4 : "";
|
|
|
- if (result4 !== null) {
|
|
|
- result5 = parse_ws();
|
|
|
- if (result5 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 93) {
|
|
|
- result6 = "]";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result6 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"]\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result6 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4, result5, result6];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseexpressions();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = [];
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ while (s4 !== peg$FAILED) {
|
|
|
+ s3.push(s4);
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parseret();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = [];
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s7 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s7 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
+ }
|
|
|
+ while (s7 !== peg$FAILED) {
|
|
|
+ s6.push(s7);
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s7 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ s7 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
}
|
|
|
+ }
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c104(s1, s5);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, params, sequence) {
|
|
|
- return smalltalk.BlockNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._parameters_(params || [])
|
|
|
- ._nodes_([sequence._asBlockSequenceNode()]);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[2], result0[4]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_operand() {
|
|
|
- var cacheKey = "operand@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_literal();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_variable();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_subexpression();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseexpressions();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$c37;
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_unaryMessage() {
|
|
|
- var cacheKey = "unaryMessage@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1, pos2;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_identifier();
|
|
|
- if (result1 !== null) {
|
|
|
- pos2 = clone(pos);
|
|
|
- reportFailures++;
|
|
|
- if (/^[:]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[:]");
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
+ }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ if (peg$c101.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c102); }
|
|
|
}
|
|
|
}
|
|
|
- reportFailures--;
|
|
|
- if (result2 === null) {
|
|
|
- result2 = "";
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c105(s1);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos2);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsesequence() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 40,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parsejsStatement();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsestSequence();
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsestSequence() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 41,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsetemps();
|
|
|
+ if (s1 === peg$FAILED) {
|
|
|
+ s1 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsestatements();
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ s3 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c106(s1, s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, selector) {
|
|
|
- return smalltalk.SendNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._selector_(selector);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_unaryTail() {
|
|
|
- var cacheKey = "unaryTail@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_unaryMessage();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_unaryTail();
|
|
|
- result2 = result2 !== null ? result2 : "";
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseblock() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6, s7;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 42,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 91) {
|
|
|
+ s1 = peg$c107;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c108); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseblockParamList();
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ s3 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsesequence();
|
|
|
+ if (s5 === peg$FAILED) {
|
|
|
+ s5 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ s6 = peg$parsews();
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 93) {
|
|
|
+ s7 = peg$c109;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s7 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c110); }
|
|
|
+ }
|
|
|
+ if (s7 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c111(s3, s5);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, message, tail) {
|
|
|
- if(tail) {
|
|
|
- return tail._valueForReceiver_(message);
|
|
|
- }
|
|
|
- else {
|
|
|
- return message;
|
|
|
- }
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_unarySend() {
|
|
|
- var cacheKey = "unarySend@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseoperand() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 43,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parseliteral();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsevariable();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsesubexpression();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseunaryMessage() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 44,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parseidentifier();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$currPos;
|
|
|
+ peg$silentFails++;
|
|
|
+ if (peg$c13.test(input.charAt(peg$currPos))) {
|
|
|
+ s4 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c14); }
|
|
|
+ }
|
|
|
+ peg$silentFails--;
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s3 = peg$c112;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c113(s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_operand();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_ws();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_unaryTail();
|
|
|
- result2 = result2 !== null ? result2 : "";
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseunaryTail() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 45,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseunaryMessage();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseunaryTail();
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ s3 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsews();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c114(s1, s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, receiver, tail) {
|
|
|
- if(tail) {
|
|
|
- return tail._valueForReceiver_(receiver);
|
|
|
- }
|
|
|
- else {
|
|
|
- return receiver;
|
|
|
- }
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[2]);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_binaryMessage() {
|
|
|
- var cacheKey = "binaryMessage@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parseunarySend() {
|
|
|
+ var s0, s1, s2, s3;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 46,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseoperand();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsews();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parseunaryTail();
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ s3 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c115(s1, s3);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_binarySelector();
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_unarySend();
|
|
|
- if (result3 === null) {
|
|
|
- result3 = parse_operand();
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebinaryMessage() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 47,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsebinarySelector();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parseunarySend();
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s4 = peg$parseoperand();
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c116(s2, s4);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, selector, arg) {
|
|
|
- return smalltalk.SendNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._selector_(selector)
|
|
|
- ._arguments_([arg]);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_binaryTail() {
|
|
|
- var cacheKey = "binaryTail@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_binaryMessage();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_binaryTail();
|
|
|
- result1 = result1 !== null ? result1 : "";
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, message, tail) {
|
|
|
- if(tail) {
|
|
|
- return tail._valueForReceiver_(message);
|
|
|
- }
|
|
|
- else {
|
|
|
- return message;
|
|
|
- }
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_binarySend() {
|
|
|
- var cacheKey = "binarySend@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_unarySend();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_binaryTail();
|
|
|
- result1 = result1 !== null ? result1 : "";
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, receiver, tail) {
|
|
|
- if(tail) {
|
|
|
- return tail._valueForReceiver_(receiver);
|
|
|
- }
|
|
|
- else {
|
|
|
- return receiver;
|
|
|
- }
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebinaryTail() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 48,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsebinaryMessage();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsebinaryTail();
|
|
|
+ if (s2 === peg$FAILED) {
|
|
|
+ s2 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c117(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_keywordMessage() {
|
|
|
- var cacheKey = "keywordMessage@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsebinarySend() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 49,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parseunarySend();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsebinaryTail();
|
|
|
+ if (s2 === peg$FAILED) {
|
|
|
+ s2 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c115(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3;
|
|
|
- var pos0, pos1, pos2, pos3;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result2 = parse_keywordPair();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [result2, result3];
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column, pair) {return pair;})(pos2.offset, pos2.line, pos2.column, result2[0]);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result1 = [];
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result2 = parse_keywordPair();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [result2, result3];
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsekeywordMessage() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 50,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ s3 = peg$currPos;
|
|
|
+ s4 = peg$parsekeywordPair();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c118(s4);
|
|
|
+ s3 = s4;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ s3 = peg$currPos;
|
|
|
+ s4 = peg$parsekeywordPair();
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c118(s4);
|
|
|
+ s3 = s4;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column, pair) {return pair;})(pos2.offset, pos2.line, pos2.column, result2[0]);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s3;
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
- } else {
|
|
|
- result1 = null;
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, pairs) {
|
|
|
- var selector = [];
|
|
|
- var args = [];
|
|
|
- for(var i = 0; i < pairs.length; i++) {
|
|
|
- selector.push(pairs[i].key);
|
|
|
- args.push(pairs[i].arg);
|
|
|
- }
|
|
|
- return smalltalk.SendNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._selector_(selector.join(""))
|
|
|
- ._arguments_(args);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ s2 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_keywordSend() {
|
|
|
- var cacheKey = "keywordSend@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_binarySend();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_keywordMessage();
|
|
|
- if (result1 !== null) {
|
|
|
- result0 = [result0, result1];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c119(s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, receiver, tail) {
|
|
|
- return tail._valueForReceiver_(receiver);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[0], result0[1]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_message() {
|
|
|
- var cacheKey = "message@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0;
|
|
|
-
|
|
|
- result0 = parse_binaryMessage();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_unaryMessage();
|
|
|
- if (result0 === null) {
|
|
|
- result0 = parse_keywordMessage();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_cascade() {
|
|
|
- var cacheKey = "cascade@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsekeywordSend() {
|
|
|
+ var s0, s1, s2;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 51,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsebinarySend();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsekeywordMessage();
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c120(s1, s2);
|
|
|
+ s0 = s1;
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4, result5, result6, result7;
|
|
|
- var pos0, pos1, pos2, pos3;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_keywordSend();
|
|
|
- if (result1 === null) {
|
|
|
- result1 = parse_binarySend();
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 59) {
|
|
|
- result4 = ";";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\";\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result4 !== null) {
|
|
|
- result5 = parse_ws();
|
|
|
- if (result5 !== null) {
|
|
|
- result6 = parse_message();
|
|
|
- if (result6 !== null) {
|
|
|
- result7 = parse_ws();
|
|
|
- if (result7 !== null) {
|
|
|
- result3 = [result3, result4, result5, result6, result7];
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsemessage() {
|
|
|
+ var s0;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 52,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$parsebinaryMessage();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parseunaryMessage();
|
|
|
+ if (s0 === peg$FAILED) {
|
|
|
+ s0 = peg$parsekeywordMessage();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsecascade() {
|
|
|
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 53,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsekeywordSend();
|
|
|
+ if (s2 === peg$FAILED) {
|
|
|
+ s2 = peg$parsebinarySend();
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = [];
|
|
|
+ s4 = peg$currPos;
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 59) {
|
|
|
+ s6 = peg$c121;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s6 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c122); }
|
|
|
+ }
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ s7 = peg$parsews();
|
|
|
+ if (s7 !== peg$FAILED) {
|
|
|
+ s8 = peg$parsemessage();
|
|
|
+ if (s8 !== peg$FAILED) {
|
|
|
+ s9 = peg$parsews();
|
|
|
+ if (s9 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s4;
|
|
|
+ s5 = peg$c123(s8);
|
|
|
+ s4 = s5;
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result3 = (function(offset, line, column, mess) {return mess;})(pos2.offset, pos2.line, pos2.column, result3[3]);
|
|
|
- }
|
|
|
- if (result3 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result2 = [];
|
|
|
- while (result3 !== null) {
|
|
|
- result2.push(result3);
|
|
|
- pos2 = clone(pos);
|
|
|
- pos3 = clone(pos);
|
|
|
- result3 = parse_ws();
|
|
|
- if (result3 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 59) {
|
|
|
- result4 = ";";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result4 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\";\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result4 !== null) {
|
|
|
- result5 = parse_ws();
|
|
|
- if (result5 !== null) {
|
|
|
- result6 = parse_message();
|
|
|
- if (result6 !== null) {
|
|
|
- result7 = parse_ws();
|
|
|
- if (result7 !== null) {
|
|
|
- result3 = [result3, result4, result5, result6, result7];
|
|
|
- } else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ while (s4 !== peg$FAILED) {
|
|
|
+ s3.push(s4);
|
|
|
+ s4 = peg$currPos;
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 59) {
|
|
|
+ s6 = peg$c121;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s6 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c122); }
|
|
|
+ }
|
|
|
+ if (s6 !== peg$FAILED) {
|
|
|
+ s7 = peg$parsews();
|
|
|
+ if (s7 !== peg$FAILED) {
|
|
|
+ s8 = peg$parsemessage();
|
|
|
+ if (s8 !== peg$FAILED) {
|
|
|
+ s9 = peg$parsews();
|
|
|
+ if (s9 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s4;
|
|
|
+ s5 = peg$c123(s8);
|
|
|
+ s4 = s5;
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result3 = null;
|
|
|
- pos = clone(pos3);
|
|
|
- }
|
|
|
- if (result3 !== null) {
|
|
|
- result3 = (function(offset, line, column, mess) {return mess;})(pos2.offset, pos2.line, pos2.column, result3[3]);
|
|
|
- }
|
|
|
- if (result3 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ peg$currPos = s4;
|
|
|
+ s4 = peg$c1;
|
|
|
}
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, send, messages) {
|
|
|
- var cascade = [];
|
|
|
- cascade.push(send);
|
|
|
- for(var i = 0; i < messages.length; i++) {
|
|
|
- cascade.push(messages[i]);
|
|
|
- }
|
|
|
- return smalltalk.CascadeNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._receiver_(send._receiver())
|
|
|
- ._nodes_(cascade);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1], result0[2]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_jsStatement() {
|
|
|
- var cacheKey = "jsStatement@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2;
|
|
|
- var pos0, pos1, pos2;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- if (input.charCodeAt(pos.offset) === 60) {
|
|
|
- result0 = "<";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\"<\"");
|
|
|
+ s3 = peg$c1;
|
|
|
}
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = [];
|
|
|
- pos2 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 2) === ">>") {
|
|
|
- result2 = ">>";
|
|
|
- advance(pos, 2);
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c124(s2, s3);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\">>\"");
|
|
|
- }
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column) {return ">";})(pos2.offset, pos2.line, pos2.column);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- if (/^[^>]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsejsStatement() {
|
|
|
+ var s0, s1, s2, s3, s4;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 54,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ if (input.charCodeAt(peg$currPos) === 60) {
|
|
|
+ s1 = peg$c125;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s1 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c126); }
|
|
|
+ }
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = [];
|
|
|
+ s3 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c127) {
|
|
|
+ s4 = peg$c127;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c128); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c129();
|
|
|
+ }
|
|
|
+ s3 = s4;
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ if (peg$c130.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c131); }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ while (s3 !== peg$FAILED) {
|
|
|
+ s2.push(s3);
|
|
|
+ s3 = peg$currPos;
|
|
|
+ if (input.substr(peg$currPos, 2) === peg$c127) {
|
|
|
+ s4 = peg$c127;
|
|
|
+ peg$currPos += 2;
|
|
|
+ } else {
|
|
|
+ s4 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c128); }
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s3;
|
|
|
+ s4 = peg$c129();
|
|
|
+ }
|
|
|
+ s3 = s4;
|
|
|
+ if (s3 === peg$FAILED) {
|
|
|
+ if (peg$c130.test(input.charAt(peg$currPos))) {
|
|
|
+ s3 = input.charAt(peg$currPos);
|
|
|
+ peg$currPos++;
|
|
|
} else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^>]");
|
|
|
- }
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c131); }
|
|
|
}
|
|
|
}
|
|
|
- while (result2 !== null) {
|
|
|
- result1.push(result2);
|
|
|
- pos2 = clone(pos);
|
|
|
- if (input.substr(pos.offset, 2) === ">>") {
|
|
|
- result2 = ">>";
|
|
|
- advance(pos, 2);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\">>\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result2 = (function(offset, line, column) {return ">";})(pos2.offset, pos2.line, pos2.column);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- pos = clone(pos2);
|
|
|
- }
|
|
|
- if (result2 === null) {
|
|
|
- if (/^[^>]/.test(input.charAt(pos.offset))) {
|
|
|
- result2 = input.charAt(pos.offset);
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("[^>]");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ if (input.charCodeAt(peg$currPos) === 62) {
|
|
|
+ s3 = peg$c132;
|
|
|
+ peg$currPos++;
|
|
|
+ } else {
|
|
|
+ s3 = peg$FAILED;
|
|
|
+ if (peg$silentFails === 0) { peg$fail(peg$c133); }
|
|
|
}
|
|
|
- if (result1 !== null) {
|
|
|
- if (input.charCodeAt(pos.offset) === 62) {
|
|
|
- result2 = ">";
|
|
|
- advance(pos, 1);
|
|
|
- } else {
|
|
|
- result2 = null;
|
|
|
- if (reportFailures === 0) {
|
|
|
- matchFailed("\">\"");
|
|
|
- }
|
|
|
- }
|
|
|
- if (result2 !== null) {
|
|
|
- result0 = [result0, result1, result2];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c134(s2);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, val) {
|
|
|
- return smalltalk.JSStatementNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._source_(val.join(""));
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1]);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
- function parse_method() {
|
|
|
- var cacheKey = "method@" + pos.offset;
|
|
|
- var cachedResult = cache[cacheKey];
|
|
|
- if (cachedResult) {
|
|
|
- pos = clone(cachedResult.nextPos);
|
|
|
- return cachedResult.result;
|
|
|
- }
|
|
|
-
|
|
|
- var result0, result1, result2, result3, result4;
|
|
|
- var pos0, pos1;
|
|
|
-
|
|
|
- pos0 = clone(pos);
|
|
|
- pos1 = clone(pos);
|
|
|
- result0 = parse_ws();
|
|
|
- if (result0 !== null) {
|
|
|
- result1 = parse_keywordPattern();
|
|
|
- if (result1 === null) {
|
|
|
- result1 = parse_binaryPattern();
|
|
|
- if (result1 === null) {
|
|
|
- result1 = parse_unaryPattern();
|
|
|
- }
|
|
|
- }
|
|
|
- if (result1 !== null) {
|
|
|
- result2 = parse_ws();
|
|
|
- if (result2 !== null) {
|
|
|
- result3 = parse_sequence();
|
|
|
- result3 = result3 !== null ? result3 : "";
|
|
|
- if (result3 !== null) {
|
|
|
- result4 = parse_ws();
|
|
|
- if (result4 !== null) {
|
|
|
- result0 = [result0, result1, result2, result3, result4];
|
|
|
- } else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function peg$parsemethod() {
|
|
|
+ var s0, s1, s2, s3, s4, s5;
|
|
|
+
|
|
|
+ var key = peg$currPos * 56 + 55,
|
|
|
+ cached = peg$cache[key];
|
|
|
+
|
|
|
+ if (cached) {
|
|
|
+ peg$currPos = cached.nextPos;
|
|
|
+ return cached.result;
|
|
|
+ }
|
|
|
+
|
|
|
+ s0 = peg$currPos;
|
|
|
+ s1 = peg$parsews();
|
|
|
+ if (s1 !== peg$FAILED) {
|
|
|
+ s2 = peg$parsekeywordPattern();
|
|
|
+ if (s2 === peg$FAILED) {
|
|
|
+ s2 = peg$parsebinaryPattern();
|
|
|
+ if (s2 === peg$FAILED) {
|
|
|
+ s2 = peg$parseunaryPattern();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (s2 !== peg$FAILED) {
|
|
|
+ s3 = peg$parsews();
|
|
|
+ if (s3 !== peg$FAILED) {
|
|
|
+ s4 = peg$parsesequence();
|
|
|
+ if (s4 === peg$FAILED) {
|
|
|
+ s4 = peg$c37;
|
|
|
+ }
|
|
|
+ if (s4 !== peg$FAILED) {
|
|
|
+ s5 = peg$parsews();
|
|
|
+ if (s5 !== peg$FAILED) {
|
|
|
+ peg$reportedPos = s0;
|
|
|
+ s1 = peg$c135(s2, s4);
|
|
|
+ s0 = s1;
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
} else {
|
|
|
- result0 = null;
|
|
|
- pos = clone(pos1);
|
|
|
- }
|
|
|
- if (result0 !== null) {
|
|
|
- result0 = (function(offset, line, column, pattern, sequence) {
|
|
|
- return smalltalk.MethodNode._new()
|
|
|
- ._position_((line).__at(column))
|
|
|
- ._selector_(pattern[0])
|
|
|
- ._arguments_(pattern[1])
|
|
|
- ._nodes_([sequence]);
|
|
|
- })(pos0.offset, pos0.line, pos0.column, result0[1], result0[3]);
|
|
|
- }
|
|
|
- if (result0 === null) {
|
|
|
- pos = clone(pos0);
|
|
|
- }
|
|
|
-
|
|
|
- cache[cacheKey] = {
|
|
|
- nextPos: clone(pos),
|
|
|
- result: result0
|
|
|
- };
|
|
|
- return result0;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- function cleanupExpected(expected) {
|
|
|
- expected.sort();
|
|
|
-
|
|
|
- var lastExpected = null;
|
|
|
- var cleanExpected = [];
|
|
|
- for (var i = 0; i < expected.length; i++) {
|
|
|
- if (expected[i] !== lastExpected) {
|
|
|
- cleanExpected.push(expected[i]);
|
|
|
- lastExpected = expected[i];
|
|
|
- }
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
}
|
|
|
- return cleanExpected;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- var result = parseFunctions[startRule]();
|
|
|
-
|
|
|
- /*
|
|
|
- * The parser is now in one of the following three states:
|
|
|
- *
|
|
|
- * 1. The parser successfully parsed the whole input.
|
|
|
- *
|
|
|
- * - |result !== null|
|
|
|
- * - |pos.offset === input.length|
|
|
|
- * - |rightmostFailuresExpected| may or may not contain something
|
|
|
- *
|
|
|
- * 2. The parser successfully parsed only a part of the input.
|
|
|
- *
|
|
|
- * - |result !== null|
|
|
|
- * - |pos.offset < input.length|
|
|
|
- * - |rightmostFailuresExpected| may or may not contain something
|
|
|
- *
|
|
|
- * 3. The parser did not successfully parse any part of the input.
|
|
|
- *
|
|
|
- * - |result === null|
|
|
|
- * - |pos.offset === 0|
|
|
|
- * - |rightmostFailuresExpected| contains at least one failure
|
|
|
- *
|
|
|
- * All code following this comment (including called functions) must
|
|
|
- * handle these states.
|
|
|
- */
|
|
|
- if (result === null || pos.offset !== input.length) {
|
|
|
- var offset = Math.max(pos.offset, rightmostFailuresPos.offset);
|
|
|
- var found = offset < input.length ? input.charAt(offset) : null;
|
|
|
- var errorPosition = pos.offset > rightmostFailuresPos.offset ? pos : rightmostFailuresPos;
|
|
|
-
|
|
|
- throw new this.SyntaxError(
|
|
|
- cleanupExpected(rightmostFailuresExpected),
|
|
|
- found,
|
|
|
- offset,
|
|
|
- errorPosition.line,
|
|
|
- errorPosition.column
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
- },
|
|
|
-
|
|
|
- /* Returns the parser source code. */
|
|
|
- toSource: function() { return this._source; }
|
|
|
- };
|
|
|
-
|
|
|
- /* Thrown when a parser encounters a syntax error. */
|
|
|
-
|
|
|
- result.SyntaxError = function(expected, found, offset, line, column) {
|
|
|
- function buildMessage(expected, found) {
|
|
|
- var expectedHumanized, foundHumanized;
|
|
|
-
|
|
|
- switch (expected.length) {
|
|
|
- case 0:
|
|
|
- expectedHumanized = "end of input";
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- expectedHumanized = expected[0];
|
|
|
- break;
|
|
|
- default:
|
|
|
- expectedHumanized = expected.slice(0, expected.length - 1).join(", ")
|
|
|
- + " or "
|
|
|
- + expected[expected.length - 1];
|
|
|
- }
|
|
|
-
|
|
|
- foundHumanized = found ? quote(found) : "end of input";
|
|
|
-
|
|
|
- return "Expected " + expectedHumanized + " but " + foundHumanized + " found.";
|
|
|
+ } else {
|
|
|
+ peg$currPos = s0;
|
|
|
+ s0 = peg$c1;
|
|
|
+ }
|
|
|
+
|
|
|
+ peg$cache[key] = { nextPos: peg$currPos, result: s0 };
|
|
|
+
|
|
|
+ return s0;
|
|
|
}
|
|
|
-
|
|
|
- this.name = "SyntaxError";
|
|
|
- this.expected = expected;
|
|
|
- this.found = found;
|
|
|
- this.message = buildMessage(expected, found);
|
|
|
- this.offset = offset;
|
|
|
- this.line = line;
|
|
|
- this.column = column;
|
|
|
+
|
|
|
+ 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({ type: "end", description: "end of input" });
|
|
|
+ }
|
|
|
+
|
|
|
+ throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ SyntaxError: SyntaxError,
|
|
|
+ parse: parse
|
|
|
};
|
|
|
-
|
|
|
- result.SyntaxError.prototype = Error.prototype;
|
|
|
-
|
|
|
- return result;
|
|
|
})();
|
|
|
});
|