From e634387431954f0252a4a784e8be83877672c649 Mon Sep 17 00:00:00 2001 From: Mehdi Mulani Date: Sat, 7 Jul 2012 09:34:46 -0700 Subject: [PATCH] Add support for "metric(*)" query. --- lib/cube/event-expression.js | 3846 ++++++++++++++------------------- lib/cube/event-expression.peg | 7 +- 2 files changed, 1615 insertions(+), 2238 deletions(-) diff --git a/lib/cube/event-expression.js b/lib/cube/event-expression.js index baaf39e7..7522d574 100644 --- a/lib/cube/event-expression.js +++ b/lib/cube/event-expression.js @@ -1,5 +1,32 @@ module.exports = (function(){ - /* Generated by PEG.js 0.6.2 (http://pegjs.majda.cz/). */ + /* + * Generated by PEG.js 0.7.0. + * + * http://pegjs.majda.cz/ + */ + + function quote(s) { + /* + * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a + * string literal except for the closing quote character, backslash, + * carriage return, line separator, paragraph separator, and line feed. + * Any character may appear in the form of an escape sequence. + * + * For portability, we also escape escape all control and non-ASCII + * characters. Note that "\0" and "\v" escape sequences are not used + * because JSHint does not like the first and IE the second. + */ + return '"' + s + .replace(/\\/g, '\\\\') // backslash + .replace(/"/g, '\\"') // closing quote character + .replace(/\x08/g, '\\b') // backspace + .replace(/\t/g, '\\t') // horizontal tab + .replace(/\n/g, '\\n') // line feed + .replace(/\f/g, '\\f') // form feed + .replace(/\r/g, '\\r') // carriage return + .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) + + '"'; + } var result = { /* @@ -10,36 +37,36 @@ module.exports = (function(){ */ parse: function(input, startRule) { var parseFunctions = { - "_": parse__, - "array_literal": parse_array_literal, - "character_escape_sequence": parse_character_escape_sequence, - "digit": parse_digit, - "digit19": parse_digit19, - "digits": parse_digits, - "double_string_char": parse_double_string_char, - "e": parse_e, - "escape_character": parse_escape_character, - "escape_sequence": parse_escape_sequence, + "start": parse_start, "event_expression": parse_event_expression, "event_filter_expression": parse_event_filter_expression, - "event_member_expression": parse_event_member_expression, "event_value_expression": parse_event_value_expression, - "exp": parse_exp, + "event_member_expression": parse_event_member_expression, "filter_operator": parse_filter_operator, - "frac": parse_frac, - "hex_digit": parse_hex_digit, - "hex_escape_sequence": parse_hex_escape_sequence, + "type": parse_type, "identifier": parse_identifier, - "int": parse_int, "literal": parse_literal, - "non_escape_character": parse_non_escape_character, - "number": parse_number, - "single_escape_character": parse_single_escape_character, - "single_string_char": parse_single_string_char, - "start": parse_start, + "array_literal": parse_array_literal, "string": parse_string, - "type": parse_type, + "double_string_char": parse_double_string_char, + "single_string_char": parse_single_string_char, + "escape_sequence": parse_escape_sequence, + "character_escape_sequence": parse_character_escape_sequence, + "single_escape_character": parse_single_escape_character, + "non_escape_character": parse_non_escape_character, + "escape_character": parse_escape_character, + "hex_escape_sequence": parse_hex_escape_sequence, "unicode_escape_sequence": parse_unicode_escape_sequence, + "number": parse_number, + "int": parse_int, + "frac": parse_frac, + "exp": parse_exp, + "digits": parse_digits, + "e": parse_e, + "digit": parse_digit, + "digit19": parse_digit19, + "hex_digit": parse_hex_digit, + "_": parse__, "whitespace": parse_whitespace }; @@ -52,10 +79,9 @@ module.exports = (function(){ } var pos = 0; - var reportMatchFailures = true; - var rightmostMatchFailuresPos = 0; - var rightmostMatchFailuresExpected = []; - var cache = {}; + var reportFailures = 0; + var rightmostFailuresPos = 0; + var rightmostFailuresExpected = []; function padLeft(input, padding, length) { var result = input; @@ -70,2830 +96,2213 @@ module.exports = (function(){ function escape(ch) { var charCode = ch.charCodeAt(0); + var escapeChar; + var length; if (charCode <= 0xFF) { - var escapeChar = 'x'; - var length = 2; + escapeChar = 'x'; + length = 2; } else { - var escapeChar = 'u'; - var length = 4; + escapeChar = 'u'; + length = 4; } return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); } - 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. - */ - return '"' + s - .replace(/\\/g, '\\\\') // backslash - .replace(/"/g, '\\"') // closing quote character - .replace(/\r/g, '\\r') // carriage return - .replace(/\n/g, '\\n') // line feed - .replace(/[\x80-\uFFFF]/g, escape) // non-ASCII characters - + '"'; - } - function matchFailed(failure) { - if (pos < rightmostMatchFailuresPos) { + if (pos < rightmostFailuresPos) { return; } - if (pos > rightmostMatchFailuresPos) { - rightmostMatchFailuresPos = pos; - rightmostMatchFailuresExpected = []; + if (pos > rightmostFailuresPos) { + rightmostFailuresPos = pos; + rightmostFailuresExpected = []; } - rightmostMatchFailuresExpected.push(failure); + rightmostFailuresExpected.push(failure); } function parse_start() { - var cacheKey = 'start@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var result3 = parse__(); - if (result3 !== null) { - var result4 = parse_event_expression(); - if (result4 !== null) { - var result5 = parse__(); - if (result5 !== null) { - var result1 = [result3, result4, result5]; + var result0, result1, result2; + var pos0, pos1; + + pos0 = pos; + pos1 = pos; + result0 = parse__(); + if (result0 !== null) { + result1 = parse_event_expression(); + if (result1 !== null) { + result2 = parse__(); + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(expression) { expression.source = input; return expression; })(result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, expression) { expression.source = input; return expression; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_event_expression() { - var cacheKey = 'event_expression@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var result3 = parse_event_value_expression(); - if (result3 !== null) { - var result4 = []; - var savedPos2 = pos; - var result6 = parse__(); - if (result6 !== null) { - if (input.substr(pos, 1) === ".") { - var result7 = "."; - pos += 1; + var result0, result1, result2, result3, result4, result5; + var pos0, pos1, pos2; + + pos0 = pos; + pos1 = pos; + result0 = parse_event_value_expression(); + if (result0 !== null) { + result1 = []; + pos2 = pos; + result2 = parse__(); + if (result2 !== null) { + if (input.charCodeAt(pos) === 46) { + result3 = "."; + pos++; } else { - var result7 = null; - if (reportMatchFailures) { + result3 = null; + if (reportFailures === 0) { matchFailed("\".\""); } } - if (result7 !== null) { - var result8 = parse__(); - if (result8 !== null) { - var result9 = parse_event_filter_expression(); - if (result9 !== null) { - var result5 = [result6, result7, result8, result9]; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + result5 = parse_event_filter_expression(); + if (result5 !== null) { + result2 = [result2, result3, result4, result5]; } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } else { - var result5 = null; - pos = savedPos2; - } - while (result5 !== null) { - result4.push(result5); - var savedPos2 = pos; - var result6 = parse__(); - if (result6 !== null) { - if (input.substr(pos, 1) === ".") { - var result7 = "."; - pos += 1; + result2 = null; + pos = pos2; + } + while (result2 !== null) { + result1.push(result2); + pos2 = pos; + result2 = parse__(); + if (result2 !== null) { + if (input.charCodeAt(pos) === 46) { + result3 = "."; + pos++; } else { - var result7 = null; - if (reportMatchFailures) { + result3 = null; + if (reportFailures === 0) { matchFailed("\".\""); } } - if (result7 !== null) { - var result8 = parse__(); - if (result8 !== null) { - var result9 = parse_event_filter_expression(); - if (result9 !== null) { - var result5 = [result6, result7, result8, result9]; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + result5 = parse_event_filter_expression(); + if (result5 !== null) { + result2 = [result2, result3, result4, result5]; } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } else { - var result5 = null; - pos = savedPos2; + result2 = null; + pos = pos2; } } - if (result4 !== null) { - var result1 = [result3, result4]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(value, filters) { - value.filter = function(filter) { - var i = -1, n = filters.length; - while (++i < n) filters[i][3](filter); - value.exists(filter); - }; - return value; - })(result1[0], result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, value, filters) { + value.filter = function(filter) { + var i = -1, n = filters.length; + while (++i < n) filters[i][3](filter); + value.exists(filter); + }; + return value; + })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_event_filter_expression() { - var cacheKey = 'event_filter_expression@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var result3 = parse_filter_operator(); - if (result3 !== null) { - var result4 = parse__(); - if (result4 !== null) { - if (input.substr(pos, 1) === "(") { - var result5 = "("; - pos += 1; + var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10; + var pos0, pos1; + + pos0 = pos; + pos1 = pos; + result0 = parse_filter_operator(); + if (result0 !== null) { + result1 = parse__(); + if (result1 !== null) { + if (input.charCodeAt(pos) === 40) { + result2 = "("; + pos++; } else { - var result5 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result5 !== null) { - var result6 = parse__(); - if (result6 !== null) { - var result7 = parse_event_member_expression(); - if (result7 !== null) { - var result8 = parse__(); - if (result8 !== null) { - if (input.substr(pos, 1) === ",") { - var result9 = ","; - pos += 1; + if (result2 !== null) { + result3 = parse__(); + if (result3 !== null) { + result4 = parse_event_member_expression(); + if (result4 !== null) { + result5 = parse__(); + if (result5 !== null) { + if (input.charCodeAt(pos) === 44) { + result6 = ","; + pos++; } else { - var result9 = null; - if (reportMatchFailures) { + result6 = null; + if (reportFailures === 0) { matchFailed("\",\""); } } - if (result9 !== null) { - var result10 = parse__(); - if (result10 !== null) { - var result11 = parse_literal(); - if (result11 !== null) { - var result12 = parse__(); - if (result12 !== null) { - if (input.substr(pos, 1) === ")") { - var result13 = ")"; - pos += 1; + if (result6 !== null) { + result7 = parse__(); + if (result7 !== null) { + result8 = parse_literal(); + if (result8 !== null) { + result9 = parse__(); + if (result9 !== null) { + if (input.charCodeAt(pos) === 41) { + result10 = ")"; + pos++; } else { - var result13 = null; - if (reportMatchFailures) { + result10 = null; + if (reportFailures === 0) { matchFailed("\")\""); } } - if (result13 !== null) { - var result1 = [result3, result4, result5, result6, result7, result8, result9, result10, result11, result12, result13]; + if (result10 !== null) { + result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(op, member, value) { return function(o) { op(o, member.field, value); }; })(result1[0], result1[4], result1[8]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, op, member, value) { return function(o) { op(o, member.field, value); }; })(pos0, result0[0], result0[4], result0[8]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_event_value_expression() { - var cacheKey = 'event_value_expression@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos1 = pos; - var savedPos2 = pos; - var result7 = parse_type(); - if (result7 !== null) { - var result8 = parse__(); - if (result8 !== null) { - if (input.substr(pos, 1) === "(") { - var result9 = "("; - pos += 1; + var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9; + var pos0, pos1, pos2; + + pos0 = pos; + pos1 = pos; + result0 = parse_type(); + if (result0 !== null) { + result1 = parse__(); + if (result1 !== null) { + if (input.charCodeAt(pos) === 40) { + result2 = "("; + pos++; } else { - var result9 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result9 !== null) { - var result10 = parse__(); - if (result10 !== null) { - var result11 = parse_event_member_expression(); - if (result11 !== null) { - var result12 = []; - var savedPos3 = pos; - var result16 = parse__(); - if (result16 !== null) { - if (input.substr(pos, 1) === ",") { - var result17 = ","; - pos += 1; + if (result2 !== null) { + result3 = parse__(); + if (result3 !== null) { + if (input.charCodeAt(pos) === 42) { + result4 = "*"; + pos++; + } else { + result4 = null; + if (reportFailures === 0) { + matchFailed("\"*\""); + } + } + if (result4 !== null) { + result5 = parse__(); + if (result5 !== null) { + if (input.charCodeAt(pos) === 41) { + result6 = ")"; + pos++; } else { - var result17 = null; - if (reportMatchFailures) { - matchFailed("\",\""); + result6 = null; + if (reportFailures === 0) { + matchFailed("\")\""); } } - if (result17 !== null) { - var result18 = parse__(); - if (result18 !== null) { - var result19 = parse_event_member_expression(); - if (result19 !== null) { - var result15 = [result16, result17, result18, result19]; - } else { - var result15 = null; - pos = savedPos3; - } - } else { - var result15 = null; - pos = savedPos3; - } + if (result6 !== null) { + result0 = [result0, result1, result2, result3, result4, result5, result6]; } else { - var result15 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result15 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } - while (result15 !== null) { - result12.push(result15); - var savedPos3 = pos; - var result16 = parse__(); - if (result16 !== null) { - if (input.substr(pos, 1) === ",") { - var result17 = ","; - pos += 1; + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + } else { + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, type) { return {type: type, exists: noop, fields: everything}; })(pos0, result0[0]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + result0 = parse_type(); + if (result0 !== null) { + result1 = parse__(); + if (result1 !== null) { + if (input.charCodeAt(pos) === 40) { + result2 = "("; + pos++; + } else { + result2 = null; + if (reportFailures === 0) { + matchFailed("\"(\""); + } + } + if (result2 !== null) { + result3 = parse__(); + if (result3 !== null) { + result4 = parse_event_member_expression(); + if (result4 !== null) { + result5 = []; + pos2 = pos; + result6 = parse__(); + if (result6 !== null) { + if (input.charCodeAt(pos) === 44) { + result7 = ","; + pos++; } else { - var result17 = null; - if (reportMatchFailures) { + result7 = null; + if (reportFailures === 0) { matchFailed("\",\""); } } - if (result17 !== null) { - var result18 = parse__(); - if (result18 !== null) { - var result19 = parse_event_member_expression(); - if (result19 !== null) { - var result15 = [result16, result17, result18, result19]; + if (result7 !== null) { + result8 = parse__(); + if (result8 !== null) { + result9 = parse_event_member_expression(); + if (result9 !== null) { + result6 = [result6, result7, result8, result9]; } else { - var result15 = null; - pos = savedPos3; + result6 = null; + pos = pos2; } } else { - var result15 = null; - pos = savedPos3; + result6 = null; + pos = pos2; } } else { - var result15 = null; - pos = savedPos3; + result6 = null; + pos = pos2; } } else { - var result15 = null; - pos = savedPos3; + result6 = null; + pos = pos2; } - } - if (result12 !== null) { - var result13 = parse__(); - if (result13 !== null) { - if (input.substr(pos, 1) === ")") { - var result14 = ")"; - pos += 1; - } else { - var result14 = null; - if (reportMatchFailures) { - matchFailed("\")\""); + while (result6 !== null) { + result5.push(result6); + pos2 = pos; + result6 = parse__(); + if (result6 !== null) { + if (input.charCodeAt(pos) === 44) { + result7 = ","; + pos++; + } else { + result7 = null; + if (reportFailures === 0) { + matchFailed("\",\""); + } + } + if (result7 !== null) { + result8 = parse__(); + if (result8 !== null) { + result9 = parse_event_member_expression(); + if (result9 !== null) { + result6 = [result6, result7, result8, result9]; + } else { + result6 = null; + pos = pos2; + } + } else { + result6 = null; + pos = pos2; + } + } else { + result6 = null; + pos = pos2; } + } else { + result6 = null; + pos = pos2; } - if (result14 !== null) { - var result5 = [result7, result8, result9, result10, result11, result12, result13, result14]; + } + if (result5 !== null) { + result6 = parse__(); + if (result6 !== null) { + if (input.charCodeAt(pos) === 41) { + result7 = ")"; + pos++; + } else { + result7 = null; + if (reportFailures === 0) { + matchFailed("\")\""); + } + } + if (result7 !== null) { + result0 = [result0, result1, result2, result3, result4, result5, result6, result7]; + } else { + result0 = null; + pos = pos1; + } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } } else { - var result5 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } - } else { - var result5 = null; - pos = savedPos2; - } - var result6 = result5 !== null - ? (function(type, head, tail) { return compoundFields(type, head, tail); })(result5[0], result5[4], result5[5]) - : null; - if (result6 !== null) { - var result4 = result6; - } else { - var result4 = null; - pos = savedPos1; - } - if (result4 !== null) { - var result0 = result4; - } else { - var savedPos0 = pos; - var result2 = parse_type(); - var result3 = result2 !== null - ? (function(type) { return {type: type, exists: noop, fields: noop}; })(result2) - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + if (result0 !== null) { + result0 = (function(offset, type, head, tail) { return compoundFields(type, head, tail); })(pos0, result0[0], result0[4], result0[5]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + result0 = parse_type(); + if (result0 !== null) { + result0 = (function(offset, type) { return {type: type, exists: noop, fields: noop}; })(pos0, result0); + } + if (result0 === null) { + pos = pos0; + } } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_event_member_expression() { - var cacheKey = 'event_member_expression@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var result3 = parse_identifier(); - if (result3 !== null) { - var result4 = []; - var savedPos4 = pos; - var savedPos5 = pos; - var result16 = parse__(); - if (result16 !== null) { - if (input.substr(pos, 1) === "[") { - var result17 = "["; - pos += 1; + var result0, result1, result2, result3, result4, result5, result6, result7; + var pos0, pos1, pos2, pos3; + + pos0 = pos; + pos1 = pos; + result0 = parse_identifier(); + if (result0 !== null) { + result1 = []; + pos2 = pos; + pos3 = pos; + result2 = parse__(); + if (result2 !== null) { + if (input.charCodeAt(pos) === 91) { + result3 = "["; + pos++; } else { - var result17 = null; - if (reportMatchFailures) { + result3 = null; + if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result17 !== null) { - var result18 = parse__(); - if (result18 !== null) { - var result19 = parse_number(); - if (result19 !== null) { - var result20 = parse__(); - if (result20 !== null) { - if (input.substr(pos, 1) === "]") { - var result21 = "]"; - pos += 1; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + result5 = parse_number(); + if (result5 !== null) { + result6 = parse__(); + if (result6 !== null) { + if (input.charCodeAt(pos) === 93) { + result7 = "]"; + pos++; } else { - var result21 = null; - if (reportMatchFailures) { + result7 = null; + if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result21 !== null) { - var result14 = [result16, result17, result18, result19, result20, result21]; + if (result7 !== null) { + result2 = [result2, result3, result4, result5, result6, result7]; } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; - } - var result15 = result14 !== null - ? (function(name) { return arrayAccessor(name); })(result14[3]) - : null; - if (result15 !== null) { - var result13 = result15; - } else { - var result13 = null; - pos = savedPos4; + result2 = null; + pos = pos3; } - if (result13 !== null) { - var result5 = result13; - } else { - var savedPos2 = pos; - var savedPos3 = pos; - var result9 = parse__(); - if (result9 !== null) { - if (input.substr(pos, 1) === ".") { - var result10 = "."; - pos += 1; + if (result2 !== null) { + result2 = (function(offset, name) { return arrayAccessor(name); })(pos2, result2[3]); + } + if (result2 === null) { + pos = pos2; + } + if (result2 === null) { + pos2 = pos; + pos3 = pos; + result2 = parse__(); + if (result2 !== null) { + if (input.charCodeAt(pos) === 46) { + result3 = "."; + pos++; } else { - var result10 = null; - if (reportMatchFailures) { + result3 = null; + if (reportFailures === 0) { matchFailed("\".\""); } } - if (result10 !== null) { - var result11 = parse__(); - if (result11 !== null) { - var result12 = parse_identifier(); - if (result12 !== null) { - var result7 = [result9, result10, result11, result12]; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + result5 = parse_identifier(); + if (result5 !== null) { + result2 = [result2, result3, result4, result5]; } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } } else { - var result7 = null; - pos = savedPos3; - } - var result8 = result7 !== null - ? (function(name) { return objectAccessor(name); })(result7[3]) - : null; - if (result8 !== null) { - var result6 = result8; - } else { - var result6 = null; - pos = savedPos2; + result2 = null; + pos = pos3; } - if (result6 !== null) { - var result5 = result6; - } else { - var result5 = null;; - }; - } - while (result5 !== null) { - result4.push(result5); - var savedPos4 = pos; - var savedPos5 = pos; - var result16 = parse__(); - if (result16 !== null) { - if (input.substr(pos, 1) === "[") { - var result17 = "["; - pos += 1; + if (result2 !== null) { + result2 = (function(offset, name) { return objectAccessor(name); })(pos2, result2[3]); + } + if (result2 === null) { + pos = pos2; + } + } + while (result2 !== null) { + result1.push(result2); + pos2 = pos; + pos3 = pos; + result2 = parse__(); + if (result2 !== null) { + if (input.charCodeAt(pos) === 91) { + result3 = "["; + pos++; } else { - var result17 = null; - if (reportMatchFailures) { + result3 = null; + if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result17 !== null) { - var result18 = parse__(); - if (result18 !== null) { - var result19 = parse_number(); - if (result19 !== null) { - var result20 = parse__(); - if (result20 !== null) { - if (input.substr(pos, 1) === "]") { - var result21 = "]"; - pos += 1; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + result5 = parse_number(); + if (result5 !== null) { + result6 = parse__(); + if (result6 !== null) { + if (input.charCodeAt(pos) === 93) { + result7 = "]"; + pos++; } else { - var result21 = null; - if (reportMatchFailures) { + result7 = null; + if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result21 !== null) { - var result14 = [result16, result17, result18, result19, result20, result21]; + if (result7 !== null) { + result2 = [result2, result3, result4, result5, result6, result7]; } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; + result2 = null; + pos = pos3; } } else { - var result14 = null; - pos = savedPos5; - } - var result15 = result14 !== null - ? (function(name) { return arrayAccessor(name); })(result14[3]) - : null; - if (result15 !== null) { - var result13 = result15; - } else { - var result13 = null; - pos = savedPos4; + result2 = null; + pos = pos3; } - if (result13 !== null) { - var result5 = result13; - } else { - var savedPos2 = pos; - var savedPos3 = pos; - var result9 = parse__(); - if (result9 !== null) { - if (input.substr(pos, 1) === ".") { - var result10 = "."; - pos += 1; + if (result2 !== null) { + result2 = (function(offset, name) { return arrayAccessor(name); })(pos2, result2[3]); + } + if (result2 === null) { + pos = pos2; + } + if (result2 === null) { + pos2 = pos; + pos3 = pos; + result2 = parse__(); + if (result2 !== null) { + if (input.charCodeAt(pos) === 46) { + result3 = "."; + pos++; } else { - var result10 = null; - if (reportMatchFailures) { + result3 = null; + if (reportFailures === 0) { matchFailed("\".\""); } } - if (result10 !== null) { - var result11 = parse__(); - if (result11 !== null) { - var result12 = parse_identifier(); - if (result12 !== null) { - var result7 = [result9, result10, result11, result12]; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + result5 = parse_identifier(); + if (result5 !== null) { + result2 = [result2, result3, result4, result5]; } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } } else { - var result7 = null; - pos = savedPos3; + result2 = null; + pos = pos3; } - var result8 = result7 !== null - ? (function(name) { return objectAccessor(name); })(result7[3]) - : null; - if (result8 !== null) { - var result6 = result8; - } else { - var result6 = null; - pos = savedPos2; + if (result2 !== null) { + result2 = (function(offset, name) { return objectAccessor(name); })(pos2, result2[3]); + } + if (result2 === null) { + pos = pos2; } - if (result6 !== null) { - var result5 = result6; - } else { - var result5 = null;; - }; } } - if (result4 !== null) { - var result1 = [result3, result4]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(head, tail) { return member(head, tail); })(result1[0], result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, head, tail) { return member(head, tail); })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_filter_operator() { - var cacheKey = 'filter_operator@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0; + var pos0; - - var savedPos7 = pos; + pos0 = pos; if (input.substr(pos, 2) === "eq") { - var result23 = "eq"; + result0 = "eq"; pos += 2; } else { - var result23 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"eq\""); } } - var result24 = result23 !== null - ? (function() { return filterEqual; })() - : null; - if (result24 !== null) { - var result22 = result24; - } else { - var result22 = null; - pos = savedPos7; + if (result0 !== null) { + result0 = (function(offset) { return filterEqual; })(pos0); } - if (result22 !== null) { - var result0 = result22; - } else { - var savedPos6 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "gt") { - var result20 = "gt"; + result0 = "gt"; pos += 2; } else { - var result20 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"gt\""); } } - var result21 = result20 !== null - ? (function() { return filterGreater; })() - : null; - if (result21 !== null) { - var result19 = result21; - } else { - var result19 = null; - pos = savedPos6; + if (result0 !== null) { + result0 = (function(offset) { return filterGreater; })(pos0); } - if (result19 !== null) { - var result0 = result19; - } else { - var savedPos5 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "ge") { - var result17 = "ge"; + result0 = "ge"; pos += 2; } else { - var result17 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"ge\""); } } - var result18 = result17 !== null - ? (function() { return filterGreaterOrEqual; })() - : null; - if (result18 !== null) { - var result16 = result18; - } else { - var result16 = null; - pos = savedPos5; + if (result0 !== null) { + result0 = (function(offset) { return filterGreaterOrEqual; })(pos0); } - if (result16 !== null) { - var result0 = result16; - } else { - var savedPos4 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "lt") { - var result14 = "lt"; + result0 = "lt"; pos += 2; } else { - var result14 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"lt\""); } } - var result15 = result14 !== null - ? (function() { return filterLess; })() - : null; - if (result15 !== null) { - var result13 = result15; - } else { - var result13 = null; - pos = savedPos4; + if (result0 !== null) { + result0 = (function(offset) { return filterLess; })(pos0); } - if (result13 !== null) { - var result0 = result13; - } else { - var savedPos3 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "le") { - var result11 = "le"; + result0 = "le"; pos += 2; } else { - var result11 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"le\""); } } - var result12 = result11 !== null - ? (function() { return filterLessOrEqual; })() - : null; - if (result12 !== null) { - var result10 = result12; - } else { - var result10 = null; - pos = savedPos3; + if (result0 !== null) { + result0 = (function(offset) { return filterLessOrEqual; })(pos0); } - if (result10 !== null) { - var result0 = result10; - } else { - var savedPos2 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "ne") { - var result8 = "ne"; + result0 = "ne"; pos += 2; } else { - var result8 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"ne\""); } } - var result9 = result8 !== null - ? (function() { return filterNotEqual; })() - : null; - if (result9 !== null) { - var result7 = result9; - } else { - var result7 = null; - pos = savedPos2; + if (result0 !== null) { + result0 = (function(offset) { return filterNotEqual; })(pos0); } - if (result7 !== null) { - var result0 = result7; - } else { - var savedPos1 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "re") { - var result5 = "re"; + result0 = "re"; pos += 2; } else { - var result5 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"re\""); } } - var result6 = result5 !== null - ? (function() { return filterRegularExpression; })() - : null; - if (result6 !== null) { - var result4 = result6; - } else { - var result4 = null; - pos = savedPos1; + if (result0 !== null) { + result0 = (function(offset) { return filterRegularExpression; })(pos0); } - if (result4 !== null) { - var result0 = result4; - } else { - var savedPos0 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 2) === "in") { - var result2 = "in"; + result0 = "in"; pos += 2; } else { - var result2 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"in\""); } } - var result3 = result2 !== null - ? (function() { return filterIn; })() - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + if (result0 !== null) { + result0 = (function(offset) { return filterIn; })(pos0); } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; - }; - }; - }; - }; - }; - }; + if (result0 === null) { + pos = pos0; + } + } + } + } + } + } + } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_type() { - var cacheKey = 'type@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0, result1, result2; + var pos0, pos1; - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos).match(/^[a-z]/) !== null) { - var result3 = input.charAt(pos); + pos0 = pos; + pos1 = pos; + if (/^[a-z]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result3 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("[a-z]"); } } - if (result3 !== null) { - if (input.substr(pos).match(/^[a-zA-Z0-9_]/) !== null) { - var result5 = input.charAt(pos); + if (result0 !== null) { + if (/^[a-zA-Z0-9_]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); pos++; } else { - var result5 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("[a-zA-Z0-9_]"); } } - if (result5 !== null) { - var result4 = []; - while (result5 !== null) { - result4.push(result5); - if (input.substr(pos).match(/^[a-zA-Z0-9_]/) !== null) { - var result5 = input.charAt(pos); + if (result2 !== null) { + result1 = []; + while (result2 !== null) { + result1.push(result2); + if (/^[a-zA-Z0-9_]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); pos++; } else { - var result5 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("[a-zA-Z0-9_]"); } } } } else { - var result4 = null; + result1 = null; } - if (result4 !== null) { - var result1 = [result3, result4]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(first, rest) { return first + rest.join(""); })(result1[0], result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, first, rest) { return first + rest.join(""); })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_identifier() { - var cacheKey = 'identifier@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0, result1, result2; + var pos0, pos1; - - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos).match(/^[a-zA-Z_]/) !== null) { - var result3 = input.charAt(pos); + pos0 = pos; + pos1 = pos; + if (/^[a-zA-Z_]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result3 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("[a-zA-Z_]"); } } - if (result3 !== null) { - var result4 = []; - if (input.substr(pos).match(/^[a-zA-Z0-9_$]/) !== null) { - var result5 = input.charAt(pos); + if (result0 !== null) { + result1 = []; + if (/^[a-zA-Z0-9_$]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); pos++; } else { - var result5 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("[a-zA-Z0-9_$]"); } } - while (result5 !== null) { - result4.push(result5); - if (input.substr(pos).match(/^[a-zA-Z0-9_$]/) !== null) { - var result5 = input.charAt(pos); + while (result2 !== null) { + result1.push(result2); + if (/^[a-zA-Z0-9_$]/.test(input.charAt(pos))) { + result2 = input.charAt(pos); pos++; } else { - var result5 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("[a-zA-Z0-9_$]"); } } } - if (result4 !== null) { - var result1 = [result3, result4]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(first, rest) { return first + rest.join(""); })(result1[0], result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, first, rest) { return first + rest.join(""); })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_literal() { - var cacheKey = 'literal@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var result9 = parse_array_literal(); - if (result9 !== null) { - var result0 = result9; - } else { - var result8 = parse_string(); - if (result8 !== null) { - var result0 = result8; - } else { - var result7 = parse_number(); - if (result7 !== null) { - var result0 = result7; - } else { - var savedPos1 = pos; + var result0; + var pos0; + + result0 = parse_array_literal(); + if (result0 === null) { + result0 = parse_string(); + if (result0 === null) { + result0 = parse_number(); + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 4) === "true") { - var result5 = "true"; + result0 = "true"; pos += 4; } else { - var result5 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"true\""); } } - var result6 = result5 !== null - ? (function() { return true; })() - : null; - if (result6 !== null) { - var result4 = result6; - } else { - var result4 = null; - pos = savedPos1; + if (result0 !== null) { + result0 = (function(offset) { return true; })(pos0); } - if (result4 !== null) { - var result0 = result4; - } else { - var savedPos0 = pos; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; if (input.substr(pos, 5) === "false") { - var result2 = "false"; + result0 = "false"; pos += 5; } else { - var result2 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"false\""); } } - var result3 = result2 !== null - ? (function() { return false; })() - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + if (result0 !== null) { + result0 = (function(offset) { return false; })(pos0); } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; - }; - }; - }; + if (result0 === null) { + pos = pos0; + } + } + } + } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_array_literal() { - var cacheKey = 'array_literal@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0, result1, result2, result3, result4, result5, result6, result7; + var pos0, pos1, pos2; - - var savedPos2 = pos; - var savedPos3 = pos; - if (input.substr(pos, 1) === "[") { - var result10 = "["; - pos += 1; + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 91) { + result0 = "["; + pos++; } else { - var result10 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result10 !== null) { - var result11 = parse__(); - if (result11 !== null) { - var result12 = parse_literal(); - if (result12 !== null) { - var result13 = []; - var savedPos4 = pos; - var result17 = parse__(); - if (result17 !== null) { - if (input.substr(pos, 1) === ",") { - var result18 = ","; - pos += 1; + if (result0 !== null) { + result1 = parse__(); + if (result1 !== null) { + result2 = parse_literal(); + if (result2 !== null) { + result3 = []; + pos2 = pos; + result4 = parse__(); + if (result4 !== null) { + if (input.charCodeAt(pos) === 44) { + result5 = ","; + pos++; } else { - var result18 = null; - if (reportMatchFailures) { + result5 = null; + if (reportFailures === 0) { matchFailed("\",\""); } } - if (result18 !== null) { - var result19 = parse__(); - if (result19 !== null) { - var result20 = parse_literal(); - if (result20 !== null) { - var result16 = [result17, result18, result19, result20]; + if (result5 !== null) { + result6 = parse__(); + if (result6 !== null) { + result7 = parse_literal(); + if (result7 !== null) { + result4 = [result4, result5, result6, result7]; } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } - while (result16 !== null) { - result13.push(result16); - var savedPos4 = pos; - var result17 = parse__(); - if (result17 !== null) { - if (input.substr(pos, 1) === ",") { - var result18 = ","; - pos += 1; + while (result4 !== null) { + result3.push(result4); + pos2 = pos; + result4 = parse__(); + if (result4 !== null) { + if (input.charCodeAt(pos) === 44) { + result5 = ","; + pos++; } else { - var result18 = null; - if (reportMatchFailures) { + result5 = null; + if (reportFailures === 0) { matchFailed("\",\""); } } - if (result18 !== null) { - var result19 = parse__(); - if (result19 !== null) { - var result20 = parse_literal(); - if (result20 !== null) { - var result16 = [result17, result18, result19, result20]; + if (result5 !== null) { + result6 = parse__(); + if (result6 !== null) { + result7 = parse_literal(); + if (result7 !== null) { + result4 = [result4, result5, result6, result7]; } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } else { - var result16 = null; - pos = savedPos4; + result4 = null; + pos = pos2; } } - if (result13 !== null) { - var result14 = parse__(); - if (result14 !== null) { - if (input.substr(pos, 1) === "]") { - var result15 = "]"; - pos += 1; + if (result3 !== null) { + result4 = parse__(); + if (result4 !== null) { + if (input.charCodeAt(pos) === 93) { + result5 = "]"; + pos++; } else { - var result15 = null; - if (reportMatchFailures) { + result5 = null; + if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result15 !== null) { - var result8 = [result10, result11, result12, result13, result14, result15]; + if (result5 !== null) { + result0 = [result0, result1, result2, result3, result4, result5]; } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result8 = null; - pos = savedPos3; - } - var result9 = result8 !== null - ? (function(first, rest) { return [first].concat(rest.map(function(d) { return d[3]; })); })(result8[2], result8[3]) - : null; - if (result9 !== null) { - var result7 = result9; - } else { - var result7 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } - if (result7 !== null) { - var result0 = result7; - } else { - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "[") { - var result4 = "["; - pos += 1; + if (result0 !== null) { + result0 = (function(offset, first, rest) { return [first].concat(rest.map(function(d) { return d[3]; })); })(pos0, result0[2], result0[3]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 91) { + result0 = "["; + pos++; } else { - var result4 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result4 !== null) { - var result5 = parse__(); - if (result5 !== null) { - if (input.substr(pos, 1) === "]") { - var result6 = "]"; - pos += 1; + if (result0 !== null) { + result1 = parse__(); + if (result1 !== null) { + if (input.charCodeAt(pos) === 93) { + result2 = "]"; + pos++; } else { - var result6 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result6 !== null) { - var result2 = [result4, result5, result6]; + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result2 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result2 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result2 = null; - pos = savedPos1; - } - var result3 = result2 !== null - ? (function() { return []; })() - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset) { return []; })(pos0); + } + if (result0 === null) { + pos = pos0; } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_string() { - var cacheKey = 'string@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - var savedReportMatchFailures = reportMatchFailures; - reportMatchFailures = false; - var savedPos2 = pos; - var savedPos3 = pos; - if (input.substr(pos, 1) === "\"") { - var result11 = "\""; - pos += 1; + var result0, result1, result2; + var pos0, pos1; + + reportFailures++; + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 34) { + result0 = "\""; + pos++; } else { - var result11 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"\\\"\""); } } - if (result11 !== null) { - var result12 = []; - var result14 = parse_double_string_char(); - while (result14 !== null) { - result12.push(result14); - var result14 = parse_double_string_char(); + if (result0 !== null) { + result1 = []; + result2 = parse_double_string_char(); + while (result2 !== null) { + result1.push(result2); + result2 = parse_double_string_char(); } - if (result12 !== null) { - if (input.substr(pos, 1) === "\"") { - var result13 = "\""; - pos += 1; + if (result1 !== null) { + if (input.charCodeAt(pos) === 34) { + result2 = "\""; + pos++; } else { - var result13 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("\"\\\"\""); } } - if (result13 !== null) { - var result9 = [result11, result12, result13]; + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result9 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result9 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result9 = null; - pos = savedPos3; - } - var result10 = result9 !== null - ? (function(chars) { return chars.join(""); })(result9[1]) - : null; - if (result10 !== null) { - var result8 = result10; - } else { - var result8 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } - if (result8 !== null) { - var result0 = result8; - } else { - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "'") { - var result4 = "'"; - pos += 1; + if (result0 !== null) { + result0 = (function(offset, chars) { return chars.join(""); })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 39) { + result0 = "'"; + pos++; } else { - var result4 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result4 !== null) { - var result5 = []; - var result7 = parse_single_string_char(); - while (result7 !== null) { - result5.push(result7); - var result7 = parse_single_string_char(); + if (result0 !== null) { + result1 = []; + result2 = parse_single_string_char(); + while (result2 !== null) { + result1.push(result2); + result2 = parse_single_string_char(); } - if (result5 !== null) { - if (input.substr(pos, 1) === "'") { - var result6 = "'"; - pos += 1; + if (result1 !== null) { + if (input.charCodeAt(pos) === 39) { + result2 = "'"; + pos++; } else { - var result6 = null; - if (reportMatchFailures) { + result2 = null; + if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result6 !== null) { - var result2 = [result4, result5, result6]; + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result2 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result2 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result2 = null; - pos = savedPos1; - } - var result3 = result2 !== null - ? (function(chars) { return chars.join(""); })(result2[1]) - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, chars) { return chars.join(""); })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; } - reportMatchFailures = savedReportMatchFailures; - if (reportMatchFailures && result0 === null) { + reportFailures--; + if (reportFailures === 0 && result0 === null) { matchFailed("string"); } - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_double_string_char() { - var cacheKey = 'double_string_char@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos2 = pos; - var savedPos3 = pos; - var savedPos4 = pos; - var savedReportMatchFailuresVar0 = reportMatchFailures; - reportMatchFailures = false; - if (input.substr(pos, 1) === "\"") { - var result13 = "\""; - pos += 1; + var result0, result1; + var pos0, pos1, pos2; + + pos0 = pos; + pos1 = pos; + pos2 = pos; + reportFailures++; + if (input.charCodeAt(pos) === 34) { + result0 = "\""; + pos++; } else { - var result13 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"\\\"\""); } } - if (result13 !== null) { - var result11 = result13; - } else { - if (input.substr(pos, 1) === "\\") { - var result12 = "\\"; - pos += 1; + if (result0 === null) { + if (input.charCodeAt(pos) === 92) { + result0 = "\\"; + pos++; } else { - var result12 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result12 !== null) { - var result11 = result12; - } else { - var result11 = null;; - }; } - reportMatchFailures = savedReportMatchFailuresVar0; - if (result11 === null) { - var result9 = ''; + reportFailures--; + if (result0 === null) { + result0 = ""; } else { - var result9 = null; - pos = savedPos4; + result0 = null; + pos = pos2; } - if (result9 !== null) { + if (result0 !== null) { if (input.length > pos) { - var result10 = input.charAt(pos); + result1 = input.charAt(pos); pos++; } else { - var result10 = null; - if (reportMatchFailures) { - matchFailed('any character'); + result1 = null; + if (reportFailures === 0) { + matchFailed("any character"); } } - if (result10 !== null) { - var result7 = [result9, result10]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result7 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result7 = null; - pos = savedPos3; - } - var result8 = result7 !== null - ? (function(char_) { return char_; })(result7[1]) - : null; - if (result8 !== null) { - var result6 = result8; - } else { - var result6 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } - if (result6 !== null) { - var result0 = result6; - } else { - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "\\") { - var result4 = "\\"; - pos += 1; + if (result0 !== null) { + result0 = (function(offset, char_) { return char_; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 92) { + result0 = "\\"; + pos++; } else { - var result4 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result4 !== null) { - var result5 = parse_escape_sequence(); - if (result5 !== null) { - var result2 = [result4, result5]; + if (result0 !== null) { + result1 = parse_escape_sequence(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result2 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result2 = null; - pos = savedPos1; - } - var result3 = result2 !== null - ? (function(sequence) { return sequence; })(result2[1]) - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, sequence) { return sequence; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_single_string_char() { - var cacheKey = 'single_string_char@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos2 = pos; - var savedPos3 = pos; - var savedPos4 = pos; - var savedReportMatchFailuresVar0 = reportMatchFailures; - reportMatchFailures = false; - if (input.substr(pos, 1) === "'") { - var result13 = "'"; - pos += 1; + var result0, result1; + var pos0, pos1, pos2; + + pos0 = pos; + pos1 = pos; + pos2 = pos; + reportFailures++; + if (input.charCodeAt(pos) === 39) { + result0 = "'"; + pos++; } else { - var result13 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result13 !== null) { - var result11 = result13; - } else { - if (input.substr(pos, 1) === "\\") { - var result12 = "\\"; - pos += 1; + if (result0 === null) { + if (input.charCodeAt(pos) === 92) { + result0 = "\\"; + pos++; } else { - var result12 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result12 !== null) { - var result11 = result12; - } else { - var result11 = null;; - }; } - reportMatchFailures = savedReportMatchFailuresVar0; - if (result11 === null) { - var result9 = ''; + reportFailures--; + if (result0 === null) { + result0 = ""; } else { - var result9 = null; - pos = savedPos4; + result0 = null; + pos = pos2; } - if (result9 !== null) { + if (result0 !== null) { if (input.length > pos) { - var result10 = input.charAt(pos); + result1 = input.charAt(pos); pos++; } else { - var result10 = null; - if (reportMatchFailures) { - matchFailed('any character'); + result1 = null; + if (reportFailures === 0) { + matchFailed("any character"); } } - if (result10 !== null) { - var result7 = [result9, result10]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result7 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result7 = null; - pos = savedPos3; - } - var result8 = result7 !== null - ? (function(char_) { return char_; })(result7[1]) - : null; - if (result8 !== null) { - var result6 = result8; - } else { - var result6 = null; - pos = savedPos2; + result0 = null; + pos = pos1; } - if (result6 !== null) { - var result0 = result6; - } else { - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "\\") { - var result4 = "\\"; - pos += 1; + if (result0 !== null) { + result0 = (function(offset, char_) { return char_; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 92) { + result0 = "\\"; + pos++; } else { - var result4 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result4 !== null) { - var result5 = parse_escape_sequence(); - if (result5 !== null) { - var result2 = [result4, result5]; + if (result0 !== null) { + result1 = parse_escape_sequence(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result2 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result2 = null; - pos = savedPos1; - } - var result3 = result2 !== null - ? (function(sequence) { return sequence; })(result2[1]) - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, sequence) { return sequence; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_escape_sequence() { - var cacheKey = 'escape_sequence@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var result9 = parse_character_escape_sequence(); - if (result9 !== null) { - var result0 = result9; - } else { - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "0") { - var result6 = "0"; - pos += 1; + var result0, result1; + var pos0, pos1, pos2; + + result0 = parse_character_escape_sequence(); + if (result0 === null) { + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 48) { + result0 = "0"; + pos++; } else { - var result6 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"0\""); } } - if (result6 !== null) { - var savedPos2 = pos; - var savedReportMatchFailuresVar0 = reportMatchFailures; - reportMatchFailures = false; - var result8 = parse_digit(); - reportMatchFailures = savedReportMatchFailuresVar0; - if (result8 === null) { - var result7 = ''; + if (result0 !== null) { + pos2 = pos; + reportFailures++; + result1 = parse_digit(); + reportFailures--; + if (result1 === null) { + result1 = ""; } else { - var result7 = null; - pos = savedPos2; + result1 = null; + pos = pos2; } - if (result7 !== null) { - var result4 = [result6, result7]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result4 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result4 = null; - pos = savedPos1; - } - var result5 = result4 !== null - ? (function() { return "\0"; })() - : null; - if (result5 !== null) { - var result3 = result5; - } else { - var result3 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset) { return "\0"; })(pos0); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + result0 = parse_hex_escape_sequence(); + if (result0 === null) { + result0 = parse_unicode_escape_sequence(); + } } - if (result3 !== null) { - var result0 = result3; - } else { - var result2 = parse_hex_escape_sequence(); - if (result2 !== null) { - var result0 = result2; - } else { - var result1 = parse_unicode_escape_sequence(); - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; - }; - }; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_character_escape_sequence() { - var cacheKey = 'character_escape_sequence@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0; - - var result2 = parse_single_escape_character(); - if (result2 !== null) { - var result0 = result2; - } else { - var result1 = parse_non_escape_character(); - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; + result0 = parse_single_escape_character(); + if (result0 === null) { + result0 = parse_non_escape_character(); } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_single_escape_character() { - var cacheKey = 'single_escape_character@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0; + var pos0; - var savedPos0 = pos; - if (input.substr(pos).match(/^['"\\bfnrtv]/) !== null) { - var result1 = input.charAt(pos); + pos0 = pos; + if (/^['"\\bfnrtv]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result1 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("['\"\\\\bfnrtv]"); } } - var result2 = result1 !== null - ? (function(char_) { return char_.replace("b", "\b").replace("f", "\f").replace("n", "\n").replace("r", "\r").replace("t", "\t").replace("v", "\x0B"); })(result1) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + if (result0 !== null) { + result0 = (function(offset, char_) { return char_.replace("b", "\b").replace("f", "\f").replace("n", "\n").replace("r", "\r").replace("t", "\t").replace("v", "\x0B"); })(pos0, result0); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_non_escape_character() { - var cacheKey = 'non_escape_character@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var savedPos2 = pos; - var savedReportMatchFailuresVar0 = reportMatchFailures; - reportMatchFailures = false; - var result5 = parse_escape_character(); - reportMatchFailures = savedReportMatchFailuresVar0; - if (result5 === null) { - var result3 = ''; - } else { - var result3 = null; - pos = savedPos2; - } - if (result3 !== null) { + var result0, result1; + var pos0, pos1, pos2; + + pos0 = pos; + pos1 = pos; + pos2 = pos; + reportFailures++; + result0 = parse_escape_character(); + reportFailures--; + if (result0 === null) { + result0 = ""; + } else { + result0 = null; + pos = pos2; + } + if (result0 !== null) { if (input.length > pos) { - var result4 = input.charAt(pos); + result1 = input.charAt(pos); pos++; } else { - var result4 = null; - if (reportMatchFailures) { - matchFailed('any character'); + result1 = null; + if (reportFailures === 0) { + matchFailed("any character"); } } - if (result4 !== null) { - var result1 = [result3, result4]; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(char_) { return char_; })(result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, char_) { return char_; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_escape_character() { - var cacheKey = 'escape_character@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var result4 = parse_single_escape_character(); - if (result4 !== null) { - var result0 = result4; - } else { - var result3 = parse_digit(); - if (result3 !== null) { - var result0 = result3; - } else { - if (input.substr(pos, 1) === "x") { - var result2 = "x"; - pos += 1; + var result0; + + result0 = parse_single_escape_character(); + if (result0 === null) { + result0 = parse_digit(); + if (result0 === null) { + if (input.charCodeAt(pos) === 120) { + result0 = "x"; + pos++; } else { - var result2 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"x\""); } } - if (result2 !== null) { - var result0 = result2; - } else { - if (input.substr(pos, 1) === "u") { - var result1 = "u"; - pos += 1; + if (result0 === null) { + if (input.charCodeAt(pos) === 117) { + result0 = "u"; + pos++; } else { - var result1 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"u\""); } } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; - }; - }; + } + } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_hex_escape_sequence() { - var cacheKey = 'hex_escape_sequence@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0, result1, result2; + var pos0, pos1; - - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "x") { - var result3 = "x"; - pos += 1; + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 120) { + result0 = "x"; + pos++; } else { - var result3 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"x\""); } } - if (result3 !== null) { - var result4 = parse_hex_digit(); - if (result4 !== null) { - var result5 = parse_hex_digit(); - if (result5 !== null) { - var result1 = [result3, result4, result5]; + if (result0 !== null) { + result1 = parse_hex_digit(); + if (result1 !== null) { + result2 = parse_hex_digit(); + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(h1, h2) { return String.fromCharCode(+("0x" + h1 + h2)); })(result1[1], result1[2]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, h1, h2) { return String.fromCharCode(+("0x" + h1 + h2)); })(pos0, result0[1], result0[2]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_unicode_escape_sequence() { - var cacheKey = 'unicode_escape_sequence@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0, result1, result2, result3, result4; + var pos0, pos1; - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === "u") { - var result3 = "u"; - pos += 1; + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 117) { + result0 = "u"; + pos++; } else { - var result3 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"u\""); } } - if (result3 !== null) { - var result4 = parse_hex_digit(); - if (result4 !== null) { - var result5 = parse_hex_digit(); - if (result5 !== null) { - var result6 = parse_hex_digit(); - if (result6 !== null) { - var result7 = parse_hex_digit(); - if (result7 !== null) { - var result1 = [result3, result4, result5, result6, result7]; + if (result0 !== null) { + result1 = parse_hex_digit(); + if (result1 !== null) { + result2 = parse_hex_digit(); + if (result2 !== null) { + result3 = parse_hex_digit(); + if (result3 !== null) { + result4 = parse_hex_digit(); + if (result4 !== null) { + result0 = [result0, result1, result2, result3, result4]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(h1, h2, h3, h4) { return String.fromCharCode(+("0x" + h1 + h2 + h3 + h4)); })(result1[1], result1[2], result1[3], result1[4]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, h1, h2, h3, h4) { return String.fromCharCode(+("0x" + h1 + h2 + h3 + h4)); })(pos0, result0[1], result0[2], result0[3], result0[4]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_number() { - var cacheKey = 'number@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - var savedReportMatchFailures = reportMatchFailures; - reportMatchFailures = false; - var savedPos8 = pos; - var savedPos9 = pos; - if (input.substr(pos, 1) === "-") { - var result26 = "-"; - pos += 1; + var result0, result1, result2; + var pos0, pos1; + + reportFailures++; + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 45) { + result0 = "-"; + pos++; } else { - var result26 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result26 !== null) { - var result27 = parse__(); - if (result27 !== null) { - var result28 = parse_number(); - if (result28 !== null) { - var result24 = [result26, result27, result28]; + if (result0 !== null) { + result1 = parse__(); + if (result1 !== null) { + result2 = parse_number(); + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result24 = null; - pos = savedPos9; + result0 = null; + pos = pos1; } } else { - var result24 = null; - pos = savedPos9; + result0 = null; + pos = pos1; } } else { - var result24 = null; - pos = savedPos9; - } - var result25 = result24 !== null - ? (function(number) { return -number; })(result24[2]) - : null; - if (result25 !== null) { - var result23 = result25; - } else { - var result23 = null; - pos = savedPos8; + result0 = null; + pos = pos1; } - if (result23 !== null) { - var result0 = result23; - } else { - var savedPos6 = pos; - var savedPos7 = pos; - var result20 = parse_int(); - if (result20 !== null) { - var result21 = parse_frac(); - if (result21 !== null) { - var result22 = parse_exp(); - if (result22 !== null) { - var result18 = [result20, result21, result22]; + if (result0 !== null) { + result0 = (function(offset, number) { return -number; })(pos0, result0[2]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + result0 = parse_int(); + if (result0 !== null) { + result1 = parse_frac(); + if (result1 !== null) { + result2 = parse_exp(); + if (result2 !== null) { + result0 = [result0, result1, result2]; } else { - var result18 = null; - pos = savedPos7; + result0 = null; + pos = pos1; } } else { - var result18 = null; - pos = savedPos7; + result0 = null; + pos = pos1; } } else { - var result18 = null; - pos = savedPos7; - } - var result19 = result18 !== null - ? (function(int_, frac, exp) { return +(int_ + frac + exp); })(result18[0], result18[1], result18[2]) - : null; - if (result19 !== null) { - var result17 = result19; - } else { - var result17 = null; - pos = savedPos6; + result0 = null; + pos = pos1; } - if (result17 !== null) { - var result0 = result17; - } else { - var savedPos4 = pos; - var savedPos5 = pos; - var result15 = parse_int(); - if (result15 !== null) { - var result16 = parse_frac(); - if (result16 !== null) { - var result13 = [result15, result16]; + if (result0 !== null) { + result0 = (function(offset, int_, frac, exp) { return +(int_ + frac + exp); })(pos0, result0[0], result0[1], result0[2]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + result0 = parse_int(); + if (result0 !== null) { + result1 = parse_frac(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result13 = null; - pos = savedPos5; + result0 = null; + pos = pos1; } } else { - var result13 = null; - pos = savedPos5; - } - var result14 = result13 !== null - ? (function(int_, frac) { return +(int_ + frac); })(result13[0], result13[1]) - : null; - if (result14 !== null) { - var result12 = result14; - } else { - var result12 = null; - pos = savedPos4; + result0 = null; + pos = pos1; } - if (result12 !== null) { - var result0 = result12; - } else { - var savedPos2 = pos; - var savedPos3 = pos; - var result10 = parse_int(); - if (result10 !== null) { - var result11 = parse_exp(); - if (result11 !== null) { - var result8 = [result10, result11]; + if (result0 !== null) { + result0 = (function(offset, int_, frac) { return +(int_ + frac); })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + pos1 = pos; + result0 = parse_int(); + if (result0 !== null) { + result1 = parse_exp(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } } else { - var result8 = null; - pos = savedPos3; + result0 = null; + pos = pos1; } - var result9 = result8 !== null - ? (function(int_, exp) { return +(int_ + exp); })(result8[0], result8[1]) - : null; - if (result9 !== null) { - var result7 = result9; - } else { - var result7 = null; - pos = savedPos2; + if (result0 !== null) { + result0 = (function(offset, int_, exp) { return +(int_ + exp); })(pos0, result0[0], result0[1]); } - if (result7 !== null) { - var result0 = result7; - } else { - var savedPos1 = pos; - var result5 = parse_frac(); - var result6 = result5 !== null - ? (function(frac) { return +frac; })(result5) - : null; - if (result6 !== null) { - var result4 = result6; - } else { - var result4 = null; - pos = savedPos1; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + result0 = parse_frac(); + if (result0 !== null) { + result0 = (function(offset, frac) { return +frac; })(pos0, result0); } - if (result4 !== null) { - var result0 = result4; - } else { - var savedPos0 = pos; - var result2 = parse_int(); - var result3 = result2 !== null - ? (function(int_) { return +int_; })(result2) - : null; - if (result3 !== null) { - var result1 = result3; - } else { - var result1 = null; - pos = savedPos0; + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + pos0 = pos; + result0 = parse_int(); + if (result0 !== null) { + result0 = (function(offset, int_) { return +int_; })(pos0, result0); } - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; - }; - }; - }; - }; + if (result0 === null) { + pos = pos0; + } + } + } + } + } } - reportMatchFailures = savedReportMatchFailures; - if (reportMatchFailures && result0 === null) { + reportFailures--; + if (reportFailures === 0 && result0 === null) { matchFailed("number"); } - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_int() { - var cacheKey = 'int@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var result5 = parse_digit19(); - if (result5 !== null) { - var result6 = parse_digits(); - if (result6 !== null) { - var result3 = [result5, result6]; + var result0, result1; + var pos0, pos1; + + pos0 = pos; + pos1 = pos; + result0 = parse_digit19(); + if (result0 !== null) { + result1 = parse_digits(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result3 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result3 = null; - pos = savedPos1; - } - var result4 = result3 !== null - ? (function(digit19, digits) { return digit19 + digits; })(result3[0], result3[1]) - : null; - if (result4 !== null) { - var result2 = result4; - } else { - var result2 = null; - pos = savedPos0; + result0 = null; + pos = pos1; } - if (result2 !== null) { - var result0 = result2; - } else { - var result1 = parse_digit(); - if (result1 !== null) { - var result0 = result1; - } else { - var result0 = null;; - }; + if (result0 !== null) { + result0 = (function(offset, digit19, digits) { return digit19 + digits; })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; + } + if (result0 === null) { + result0 = parse_digit(); } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_frac() { - var cacheKey = 'frac@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0, result1; + var pos0, pos1; - - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos, 1) === ".") { - var result3 = "."; - pos += 1; + pos0 = pos; + pos1 = pos; + if (input.charCodeAt(pos) === 46) { + result0 = "."; + pos++; } else { - var result3 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("\".\""); } } - if (result3 !== null) { - var result4 = parse_digits(); - if (result4 !== null) { - var result1 = [result3, result4]; + if (result0 !== null) { + result1 = parse_digits(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(digits) { return "." + digits; })(result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, digits) { return "." + digits; })(pos0, result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_exp() { - var cacheKey = 'exp@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - - - var savedPos0 = pos; - var savedPos1 = pos; - var result3 = parse_e(); - if (result3 !== null) { - var result4 = parse_digits(); - if (result4 !== null) { - var result1 = [result3, result4]; + var result0, result1; + var pos0, pos1; + + pos0 = pos; + pos1 = pos; + result0 = parse_e(); + if (result0 !== null) { + result1 = parse_digits(); + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(e, digits) { return e + digits; })(result1[0], result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, e, digits) { return e + digits; })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_digits() { - var cacheKey = 'digits@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0, result1; + var pos0; - var savedPos0 = pos; - var result3 = parse_digit(); - if (result3 !== null) { - var result1 = []; - while (result3 !== null) { - result1.push(result3); - var result3 = parse_digit(); + pos0 = pos; + result1 = parse_digit(); + if (result1 !== null) { + result0 = []; + while (result1 !== null) { + result0.push(result1); + result1 = parse_digit(); } } else { - var result1 = null; + result0 = null; } - var result2 = result1 !== null - ? (function(digits) { return digits.join(""); })(result1) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + if (result0 !== null) { + result0 = (function(offset, digits) { return digits.join(""); })(pos0, result0); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_e() { - var cacheKey = 'e@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0, result1; + var pos0, pos1; - var savedPos0 = pos; - var savedPos1 = pos; - if (input.substr(pos).match(/^[eE]/) !== null) { - var result3 = input.charAt(pos); + pos0 = pos; + pos1 = pos; + if (/^[eE]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result3 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("[eE]"); } } - if (result3 !== null) { - if (input.substr(pos).match(/^[+\-]/) !== null) { - var result5 = input.charAt(pos); + if (result0 !== null) { + if (/^[+\-]/.test(input.charAt(pos))) { + result1 = input.charAt(pos); pos++; } else { - var result5 = null; - if (reportMatchFailures) { + result1 = null; + if (reportFailures === 0) { matchFailed("[+\\-]"); } } - var result4 = result5 !== null ? result5 : ''; - if (result4 !== null) { - var result1 = [result3, result4]; + result1 = result1 !== null ? result1 : ""; + if (result1 !== null) { + result0 = [result0, result1]; } else { - var result1 = null; - pos = savedPos1; + result0 = null; + pos = pos1; } } else { - var result1 = null; - pos = savedPos1; - } - var result2 = result1 !== null - ? (function(e, sign) { return e + sign; })(result1[0], result1[1]) - : null; - if (result2 !== null) { - var result0 = result2; - } else { - var result0 = null; - pos = savedPos0; + result0 = null; + pos = pos1; + } + if (result0 !== null) { + result0 = (function(offset, e, sign) { return e + sign; })(pos0, result0[0], result0[1]); + } + if (result0 === null) { + pos = pos0; } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_digit() { - var cacheKey = 'digit@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0; - if (input.substr(pos).match(/^[0-9]/) !== null) { - var result0 = input.charAt(pos); + if (/^[0-9]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result0 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("[0-9]"); } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_digit19() { - var cacheKey = 'digit19@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0; - - if (input.substr(pos).match(/^[1-9]/) !== null) { - var result0 = input.charAt(pos); + if (/^[1-9]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result0 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("[1-9]"); } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_hex_digit() { - var cacheKey = 'hex_digit@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } - + var result0; - if (input.substr(pos).match(/^[0-9a-fA-F]/) !== null) { - var result0 = input.charAt(pos); + if (/^[0-9a-fA-F]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result0 = null; - if (reportMatchFailures) { + result0 = null; + if (reportFailures === 0) { matchFailed("[0-9a-fA-F]"); } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse__() { - var cacheKey = '_@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0, result1; - var savedReportMatchFailures = reportMatchFailures; - reportMatchFailures = false; - var result0 = []; - var result1 = parse_whitespace(); + reportFailures++; + result0 = []; + result1 = parse_whitespace(); while (result1 !== null) { result0.push(result1); - var result1 = parse_whitespace(); + result1 = parse_whitespace(); } - reportMatchFailures = savedReportMatchFailures; - if (reportMatchFailures && result0 === null) { + reportFailures--; + if (reportFailures === 0 && result0 === null) { matchFailed("whitespace"); } - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } function parse_whitespace() { - var cacheKey = 'whitespace@' + pos; - var cachedResult = cache[cacheKey]; - if (cachedResult) { - pos = cachedResult.nextPos; - return cachedResult.result; - } + var result0; - - if (input.substr(pos).match(/^[ \n\r]/) !== null) { - var result0 = input.charAt(pos); + if (/^[ \t\n\r]/.test(input.charAt(pos))) { + result0 = input.charAt(pos); pos++; } else { - var result0 = null; - if (reportMatchFailures) { - matchFailed("[ \\n\\r]"); + result0 = null; + if (reportFailures === 0) { + matchFailed("[ \\t\\n\\r]"); } } - - - - cache[cacheKey] = { - nextPos: pos, - result: result0 - }; return result0; } - function buildErrorMessage() { - function buildExpected(failuresExpected) { - failuresExpected.sort(); - - var lastFailure = null; - var failuresExpectedUnique = []; - for (var i = 0; i < failuresExpected.length; i++) { - if (failuresExpected[i] !== lastFailure) { - failuresExpectedUnique.push(failuresExpected[i]); - lastFailure = failuresExpected[i]; - } - } - - switch (failuresExpectedUnique.length) { - case 0: - return 'end of input'; - case 1: - return failuresExpectedUnique[0]; - default: - return failuresExpectedUnique.slice(0, failuresExpectedUnique.length - 1).join(', ') - + ' or ' - + failuresExpectedUnique[failuresExpectedUnique.length - 1]; + + 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]; } } - - var expected = buildExpected(rightmostMatchFailuresExpected); - var actualPos = Math.max(pos, rightmostMatchFailuresPos); - var actual = actualPos < input.length - ? quote(input.charAt(actualPos)) - : 'end of input'; - - return 'Expected ' + expected + ' but ' + actual + ' found.'; + return cleanExpected; } function computeErrorPosition() { @@ -2908,13 +2317,13 @@ module.exports = (function(){ var column = 1; var seenCR = false; - for (var i = 0; i < rightmostMatchFailuresPos; i++) { + for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) { var ch = input.charAt(i); - if (ch === '\n') { + if (ch === "\n") { if (!seenCR) { line++; } column = 1; seenCR = false; - } else if (ch === '\r' | ch === '\u2028' || ch === '\u2029') { + } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { line++; column = 1; seenCR = true; @@ -2928,146 +2337,80 @@ module.exports = (function(){ } + var filterEqual = function(o, k, v) { o[k] = v; }, + filterGreater = filter("$gt"), + filterGreaterOrEqual = filter("$gte"), + filterLess = filter("$lt"), + filterLessOrEqual = filter("$lte"), + filterNotEqual = filter("$ne"), + filterRegularExpression = filter("$regex"), + filterIn = filter("$in"), + exists = {$exists: true}; - var filterEqual = function(o, k, v) { o[k] = v; }, - - filterGreater = filter("$gt"), - - filterGreaterOrEqual = filter("$gte"), - - filterLess = filter("$lt"), - - filterLessOrEqual = filter("$lte"), - - filterNotEqual = filter("$ne"), - - filterRegularExpression = filter("$regex"), - - filterIn = filter("$in"), - - exists = {$exists: true}; - - - - function noop() {} - - - - function filter(op) { - - return function(o, k, v) { - - var f = o[k]; - - switch (typeof f) { - - case "undefined": o[k] = f = {}; // continue - - case "object": f[op] = v; break; - - // otherwise, observe the existing equals (literal) filter + function noop() {} + function everything(fields) { + delete fields.t; } - }; - - } - - - - function arrayAccessor(name) { - - name = new String(name); - - name.array = true; - - return name; - - } - - - - function objectAccessor(name) { - - return name; - - } - - - - function compoundFields(type, head, tail) { - - var n = tail.length; - - return { - - type: type, - - exists: function(o) { - - var i = -1; - - head.exists(o); - - while (++i < n) tail[i][3].exists(o); - - }, - - fields: function(o) { - - var i = -1; - - head.fields(o); - - while (++i < n) tail[i][3].fields(o); - + function filter(op) { + return function(o, k, v) { + var f = o[k]; + switch (typeof f) { + case "undefined": o[k] = f = {}; // continue + case "object": f[op] = v; break; + // otherwise, observe the existing equals (literal) filter + } + }; } - }; - - } - - - - function member(head, tail) { - - var fields = ["d", head].concat(tail), - - shortName = fields.filter(function(d) { return !d.array; }).join("."), - - longName = fields.join("."), - - i = -1, - - n = fields.length; - - return { - - field: longName, - - exists: function(o) { - - if (!(shortName in o)) { - - o[shortName] = exists; - - } - - }, - - fields: function(o) { - - o[shortName] = 1; + function arrayAccessor(name) { + name = new String(name); + name.array = true; + return name; + } + function objectAccessor(name) { + return name; } - }; + function compoundFields(type, head, tail) { + var n = tail.length; + return { + type: type, + exists: function(o) { + var i = -1; + head.exists(o); + while (++i < n) tail[i][3].exists(o); + }, + fields: function(o) { + var i = -1; + head.fields(o); + while (++i < n) tail[i][3].fields(o); + } + }; + } - } + function member(head, tail) { + var fields = ["d", head].concat(tail), + shortName = fields.filter(function(d) { return !d.array; }).join("."), + longName = fields.join("."), + i = -1, + n = fields.length; + return { + field: longName, + exists: function(o) { + if (!(shortName in o)) { + o[shortName] = exists; + } + }, + fields: function(o) { + o[shortName] = 1; + } + }; + } - - var result = parseFunctions[startRule](); @@ -3078,27 +2421,32 @@ module.exports = (function(){ * * - |result !== null| * - |pos === input.length| - * - |rightmostMatchFailuresExpected| may or may not contain something + * - |rightmostFailuresExpected| may or may not contain something * * 2. The parser successfully parsed only a part of the input. * * - |result !== null| * - |pos < input.length| - * - |rightmostMatchFailuresExpected| may or may not contain something + * - |rightmostFailuresExpected| may or may not contain something * * 3. The parser did not successfully parse any part of the input. * * - |result === null| * - |pos === 0| - * - |rightmostMatchFailuresExpected| contains at least one failure + * - |rightmostFailuresExpected| contains at least one failure * * All code following this comment (including called functions) must * handle these states. */ if (result === null || pos !== input.length) { + var offset = Math.max(pos, rightmostFailuresPos); + var found = offset < input.length ? input.charAt(offset) : null; var errorPosition = computeErrorPosition(); + throw new this.SyntaxError( - buildErrorMessage(), + cleanupExpected(rightmostFailuresExpected), + found, + offset, errorPosition.line, errorPosition.column ); @@ -3113,9 +2461,33 @@ module.exports = (function(){ /* Thrown when a parser encounters a syntax error. */ - result.SyntaxError = function(message, line, column) { - this.name = 'SyntaxError'; - this.message = message; + result.SyntaxError = function(expected, found, offset, line, column) { + function buildMessage(expected, found) { + var expectedHumanized, foundHumanized; + + switch (expected.length) { + case 0: + expectedHumanized = "end of input"; + break; + case 1: + expectedHumanized = expected[0]; + break; + default: + expectedHumanized = expected.slice(0, expected.length - 1).join(", ") + + " or " + + expected[expected.length - 1]; + } + + foundHumanized = found ? quote(found) : "end of input"; + + return "Expected " + expectedHumanized + " but " + foundHumanized + " found."; + } + + this.name = "SyntaxError"; + this.expected = expected; + this.found = found; + this.message = buildMessage(expected, found); + this.offset = offset; this.line = line; this.column = column; }; diff --git a/lib/cube/event-expression.peg b/lib/cube/event-expression.peg index 560744f2..3876cf62 100644 --- a/lib/cube/event-expression.peg +++ b/lib/cube/event-expression.peg @@ -13,6 +13,10 @@ function noop() {} + function everything(fields) { + delete fields.t; + } + function filter(op) { return function(o, k, v) { var f = o[k]; @@ -90,7 +94,8 @@ event_filter_expression = op:filter_operator _ "(" _ member:event_member_expression _ "," _ value:literal _ ")" { return function(o) { op(o, member.field, value); }; } event_value_expression - = type:type _ "(" _ head:event_member_expression tail:(_ "," _ event_member_expression)* _ ")" { return compoundFields(type, head, tail); } + = type:type _ "(" _ "*" _ ")" { return {type: type, exists: noop, fields: everything}; } + / type:type _ "(" _ head:event_member_expression tail:(_ "," _ event_member_expression)* _ ")" { return compoundFields(type, head, tail); } / type:type { return {type: type, exists: noop, fields: noop}; } event_member_expression