diff --git a/benchmark/benchmarks.js b/benchmark/benchmarks.js index 6987675..f492190 100644 --- a/benchmark/benchmarks.js +++ b/benchmark/benchmarks.js @@ -1,6 +1,6 @@ "use strict"; -var benchmarks = [ +let benchmarks = [ { id: "json", title: "JSON", diff --git a/benchmark/index.js b/benchmark/index.js index 97e54e5..cce8fcb 100644 --- a/benchmark/index.js +++ b/benchmark/index.js @@ -1,6 +1,6 @@ /* eslint-env browser, jquery */ -var benchmarks = require("./benchmarks.js"), +let benchmarks = require("./benchmarks.js"), Runner = require("./runner.js"); $("#run").click(function() { @@ -8,7 +8,7 @@ $("#run").click(function() { /* Results Table Manipulation */ - var resultsTable = $("#results-table"); + let resultsTable = $("#results-table"); function appendHeading(heading) { resultsTable.append( @@ -17,8 +17,8 @@ $("#run").click(function() { } function appendResult(klass, title, url, inputSize, parseTime) { - var KB = 1024, - MS_IN_S = 1000; + const KB = 1024, + MS_IN_S = 1000; resultsTable.append( "" @@ -62,7 +62,7 @@ $("#run").click(function() { * 2. To minimize random errors. */ - var runCount = parseInt($("#run-count").val(), 10), + let runCount = parseInt($("#run-count").val(), 10), options = { cache: $("#cache").is(":checked"), optimize: $("#optimize").val() diff --git a/benchmark/run b/benchmark/run index 7896f74..ee67203 100755 --- a/benchmark/run +++ b/benchmark/run @@ -5,16 +5,16 @@ "use strict"; -var fs = require("fs"); +let fs = require("fs"); -var benchmarks = require("./benchmarks.js"); -var Runner = require("./runner.js"); +let benchmarks = require("./benchmarks.js"); +let Runner = require("./runner.js"); /* Results Table Manipulation */ function dup(text, count) { - var result = ""; - for (var i = 1; i <= count; i++) { + let result = ""; + for (let i = 1; i <= count; i++) { result += text; } return result; @@ -29,7 +29,7 @@ function padRight(text, length) { } function center(text, length) { - var padLength = (length - text.length) / 2; + let padLength = (length - text.length) / 2; return dup(" ", Math.floor(padLength)) + text + dup(" ", Math.ceil(padLength)); @@ -47,8 +47,8 @@ function writeHeading(heading) { } function writeResult(title, inputSize, parseTime) { - var KB = 1024; - var MS_IN_S = 1000; + const KB = 1024; + const MS_IN_S = 1000; console.log("│ " + padRight(title, 35) @@ -99,7 +99,7 @@ function abort(message) { /* Arguments */ -var args = process.argv.slice(2); // Trim "node" and the script path. +let args = process.argv.slice(2); // Trim "node" and the script path. function isOption(arg) { return (/^-/).test(arg); @@ -111,8 +111,8 @@ function nextArg() { /* Main */ -var runCount = 10; -var options = { +let runCount = 10; +let options = { cache: false, optimize: "speed" }; diff --git a/benchmark/runner.js b/benchmark/runner.js index 5090619..b28f93a 100644 --- a/benchmark/runner.js +++ b/benchmark/runner.js @@ -2,14 +2,14 @@ "use strict"; -var peg = require("../lib/peg"); +let peg = require("../lib/peg"); -var Runner = { +let Runner = { run: function(benchmarks, runCount, options, callbacks) { /* Queue */ - var Q = { + let Q = { functions: [], add: function(f) { @@ -44,7 +44,7 @@ var Runner = { * of the |state| object. */ - var state = {}; + let state = {}; function initialize() { callbacks.start(); @@ -68,7 +68,7 @@ var Runner = { function testRunner(benchmark, test) { return function() { - var input, parseTime, averageParseTime, i, t; + let input, parseTime, averageParseTime, i, t; callbacks.testStart(benchmark, test); diff --git a/benchmark/server b/benchmark/server index 865a2fe..1125531 100755 --- a/benchmark/server +++ b/benchmark/server @@ -9,20 +9,20 @@ * served to the browser. */ -var express = require("express"), +let express = require("express"), logger = require("morgan"), glob = require("glob"), browserify = require("browserify"), babelify = require("babelify"); -var app = express(); +let app = express(); app.use(logger("dev")); app.use(express.static(__dirname)); app.use("/examples", express.static(__dirname + "/../examples")); app.get("/bundle.js", function(req, res) { - var files = glob.sync(__dirname + "/**/*.js", { + let files = glob.sync(__dirname + "/**/*.js", { ignore: __dirname + "/vendor/**/*" }); diff --git a/bin/pegjs b/bin/pegjs index 6ea1ec1..7a624b0 100755 --- a/bin/pegjs +++ b/bin/pegjs @@ -2,9 +2,9 @@ "use strict"; -var fs = require("fs"); -var path = require("path"); -var peg = require("../lib/peg"); +let fs = require("fs"); +let path = require("path"); +let peg = require("../lib/peg"); /* Helpers */ @@ -56,7 +56,7 @@ function abort(message) { } function addExtraOptions(options, json) { - var extraOptions; + let extraOptions; try { extraOptions = JSON.parse(json); @@ -69,7 +69,7 @@ function addExtraOptions(options, json) { abort("The JSON with extra options has to represent an object."); } - for (var key in extraOptions) { + for (let key in extraOptions) { if (extraOptions.hasOwnProperty(key)) { options[key] = extraOptions[key]; } @@ -86,7 +86,7 @@ function trim(s) { /* Arguments */ -var args = process.argv.slice(2); // Trim "node" and the script path. +let args = process.argv.slice(2); // Trim "node" and the script path. function isOption(arg) { return (/^-.+/).test(arg); @@ -99,17 +99,17 @@ function nextArg() { /* Files */ function readStream(inputStream, callback) { - var input = ""; + let input = ""; inputStream.on("data", function(data) { input += data; }); inputStream.on("end", function() { callback(input); }); } /* Main */ -var inputFile = null; -var outputFile = null; +let inputFile = null; +let outputFile = null; -var options = { +let options = { cache: false, dependencies: {}, exportVar: null, @@ -121,6 +121,8 @@ var options = { }; while (args.length > 0 && isOption(args[0])) { + let json, id, mod; + switch (args[0]) { case "--allowed-start-rules": nextArg(); @@ -143,7 +145,7 @@ while (args.length > 0 && isOption(args[0])) { abort("Missing parameter of the -d/--dependency option."); } if (args[0].indexOf(":") !== -1) { - var parts = args[0].split(":"); + let parts = args[0].split(":"); options.dependencies[parts[0]] = parts[1]; } else { options.dependencies[args[0]] = args[0]; @@ -173,7 +175,7 @@ while (args.length > 0 && isOption(args[0])) { abort("Missing parameter of the --extra-options-file option."); } try { - var json = fs.readFileSync(args[0]); + json = fs.readFileSync(args[0]); } catch(e) { abort("Can't read from file \"" + args[0] + "\"."); } @@ -223,8 +225,8 @@ while (args.length > 0 && isOption(args[0])) { if (args.length === 0) { abort("Missing parameter of the --plugin option."); } - var id = /^(\.\/|\.\.\/)/.test(args[0]) ? path.resolve(args[0]) : args[0]; - var mod; + id = /^(\.\/|\.\.\/)/.test(args[0]) ? path.resolve(args[0]) : args[0]; + mod; try { mod = require(id); } catch (e) { @@ -267,8 +269,8 @@ if (options.exportVar !== null) { } } -var inputStream; -var outputStream; +let inputStream; +let outputStream; switch (args.length) { case 0: @@ -311,7 +313,7 @@ if (outputFile === "-") { } readStream(inputStream, function(input) { - var source; + let source; try { source = peg.generate(input, options); diff --git a/lib/compiler/asts.js b/lib/compiler/asts.js index 0b1ce44..b24979f 100644 --- a/lib/compiler/asts.js +++ b/lib/compiler/asts.js @@ -1,10 +1,10 @@ "use strict"; -var arrays = require("../utils/arrays"), +let arrays = require("../utils/arrays"), visitor = require("./visitor"); /* AST utilities. */ -var asts = { +let asts = { findRule: function(ast, name) { return arrays.find(ast.rules, function(r) { return r.name === name; }); }, @@ -21,7 +21,7 @@ var asts = { return consumes(node.expression); } - var consumes = visitor.build({ + let consumes = visitor.build({ rule: consumesExpression, named: consumesExpression, diff --git a/lib/compiler/index.js b/lib/compiler/index.js index 0607f8e..e4a0d57 100644 --- a/lib/compiler/index.js +++ b/lib/compiler/index.js @@ -1,8 +1,8 @@ "use strict"; -var objects = require("../utils/objects"); +let objects = require("../utils/objects"); -var compiler = { +let compiler = { /* * AST node visitor builder. Useful mainly for plugins which manipulate the * AST. @@ -42,7 +42,7 @@ var compiler = { compile: function(ast, passes, options) { options = options !== undefined ? options : {}; - var stage; + let stage; options = objects.clone(options); objects.defaults(options, { diff --git a/lib/compiler/js.js b/lib/compiler/js.js index 07f5ab0..5f91bc4 100644 --- a/lib/compiler/js.js +++ b/lib/compiler/js.js @@ -3,7 +3,7 @@ function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } /* JavaScript code generation helpers. */ -var js = { +let js = { stringEscape: function(s) { /* * ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string diff --git a/lib/compiler/opcodes.js b/lib/compiler/opcodes.js index 4c52008..da5ff4b 100644 --- a/lib/compiler/opcodes.js +++ b/lib/compiler/opcodes.js @@ -1,7 +1,7 @@ "use strict"; /* Bytecode instruction opcodes. */ -var opcodes = { +let opcodes = { /* Stack Manipulation */ PUSH: 0, // PUSH c diff --git a/lib/compiler/passes/generate-bytecode.js b/lib/compiler/passes/generate-bytecode.js index 934df96..75d90c5 100644 --- a/lib/compiler/passes/generate-bytecode.js +++ b/lib/compiler/passes/generate-bytecode.js @@ -1,6 +1,6 @@ "use strict"; -var arrays = require("../../utils/arrays"), +let arrays = require("../../utils/arrays"), objects = require("../../utils/objects"), asts = require("../asts"), visitor = require("../visitor"), @@ -191,10 +191,10 @@ var arrays = require("../../utils/arrays"), * silentFails--; */ function generateBytecode(ast) { - var consts = []; + let consts = []; function addConst(value) { - var index = arrays.indexOf(consts, value); + let index = arrays.indexOf(consts, value); return index === -1 ? consts.push(value) - 1 : index; } @@ -222,7 +222,7 @@ function generateBytecode(ast) { } function buildCall(functionIndex, delta, env, sp) { - var params = objects.values(env).map(function(p) { return sp - p; }); + let params = objects.values(env).map(function(p) { return sp - p; }); return [op.CALL, functionIndex, delta, params.length].concat(params); } @@ -254,7 +254,7 @@ function generateBytecode(ast) { } function buildSemanticPredicate(code, negative, context) { - var functionIndex = addFunctionConst(Object.keys(context.env), code); + let functionIndex = addFunctionConst(Object.keys(context.env), code); return buildSequence( [op.UPDATE_SAVED_POS], @@ -280,7 +280,7 @@ function generateBytecode(ast) { ); } - var generate = visitor.build({ + let generate = visitor.build({ grammar: function(node) { node.rules.forEach(generate); @@ -296,7 +296,7 @@ function generateBytecode(ast) { }, named: function(node, context) { - var nameIndex = addConst( + let nameIndex = addConst( 'peg$otherExpectation("' + js.stringEscape(node.name) + '")' ); @@ -339,7 +339,7 @@ function generateBytecode(ast) { }, action: function(node, context) { - var env = objects.clone(context.env), + let env = objects.clone(context.env), emitCall = node.expression.type !== "sequence" || node.expression.elements.length === 0, expressionCode = generate(node.expression, { @@ -368,7 +368,7 @@ function generateBytecode(ast) { sequence: function(node, context) { function buildElementsCode(elements, context) { - var processedCount, functionIndex; + let processedCount, functionIndex; if (elements.length > 0) { processedCount = node.elements.length - elements.slice(1).length; @@ -427,7 +427,7 @@ function generateBytecode(ast) { }, labeled: function(node, context) { - var env = objects.clone(context.env); + let env = objects.clone(context.env); context.env[node.label] = context.sp + 1; @@ -478,7 +478,7 @@ function generateBytecode(ast) { }, zero_or_more: function(node, context) { - var expressionCode = generate(node.expression, { + let expressionCode = generate(node.expression, { sp: context.sp + 1, env: objects.clone(context.env), action: null @@ -493,7 +493,7 @@ function generateBytecode(ast) { }, one_or_more: function(node, context) { - var expressionCode = generate(node.expression, { + let expressionCode = generate(node.expression, { sp: context.sp + 1, env: objects.clone(context.env), action: null @@ -531,7 +531,7 @@ function generateBytecode(ast) { }, literal: function(node) { - var stringIndex, expectedIndex; + let stringIndex, expectedIndex; if (node.value.length > 0) { stringIndex = addConst('"' @@ -569,7 +569,7 @@ function generateBytecode(ast) { }, "class": function(node) { - var regexp = '/^[' + let regexp = '/^[' + (node.inverted ? '^' : '') + node.parts.map(function(part) { return Array.isArray(part) @@ -603,7 +603,7 @@ function generateBytecode(ast) { }, any: function() { - var expectedIndex = addConst('peg$anyExpectation()'); + let expectedIndex = addConst('peg$anyExpectation()'); return buildCondition( [op.MATCH_ANY], diff --git a/lib/compiler/passes/generate-js.js b/lib/compiler/passes/generate-js.js index 4108579..41c02f2 100644 --- a/lib/compiler/passes/generate-js.js +++ b/lib/compiler/passes/generate-js.js @@ -1,6 +1,6 @@ "use strict"; -var arrays = require("../../utils/arrays"), +let arrays = require("../../utils/arrays"), objects = require("../../utils/objects"), asts = require("../asts"), op = require("../opcodes"), @@ -38,7 +38,7 @@ function generateJS(ast, options) { } function generateRuleHeader(ruleNameCode, ruleIndexCode) { - var parts = []; + let parts = []; parts.push(''); @@ -94,7 +94,7 @@ function generateJS(ast, options) { } function generateRuleFooter(ruleNameCode, resultCode) { - var parts = []; + let parts = []; if (options.cache) { parts.push([ @@ -132,10 +132,10 @@ function generateJS(ast, options) { } function generateInterpreter() { - var parts = []; + let parts = []; function generateCondition(cond, argsLength) { - var baseLength = argsLength + 3, + let baseLength = argsLength + 3, thenLengthCode = 'bc[ip + ' + (baseLength - 2) + ']', elseLengthCode = 'bc[ip + ' + (baseLength - 1) + ']'; @@ -156,7 +156,7 @@ function generateJS(ast, options) { } function generateLoop(cond) { - var baseLength = 2, + let baseLength = 2, bodyLengthCode = 'bc[ip + ' + (baseLength - 1) + ']'; return [ @@ -175,7 +175,7 @@ function generateJS(ast, options) { } function generateCall() { - var baseLength = 4, + let baseLength = 4, paramsLengthCode = 'bc[ip + ' + (baseLength - 1) + ']'; return [ @@ -410,17 +410,17 @@ function generateJS(ast, options) { } function generateRuleFunction(rule) { - var parts = [], code; + let parts = [], code; function c(i) { return "peg$c" + i; } // |consts[i]| of the abstract machine function s(i) { return "s" + i; } // |stack[i]| of the abstract machine - var stack = { + let stack = { sp: -1, maxSp: -1, push: function(exprCode) { - var code = s(++this.sp) + ' = ' + exprCode + ';'; + let code = s(++this.sp) + ' = ' + exprCode + ';'; if (this.sp > this.maxSp) { this.maxSp = this.sp; } @@ -428,7 +428,7 @@ function generateJS(ast, options) { }, pop: function(n) { - var values; + let values; if (n === undefined) { return s(this.sp--); @@ -450,13 +450,13 @@ function generateJS(ast, options) { }; function compile(bc) { - var ip = 0, + let ip = 0, end = bc.length, parts = [], value; function compileCondition(cond, argCount) { - var baseLength = argCount + 3, + let baseLength = argCount + 3, thenLength = bc[ip + baseLength - 2], elseLength = bc[ip + baseLength - 1], baseSp = stack.sp, @@ -490,7 +490,7 @@ function generateJS(ast, options) { } function compileLoop(cond) { - var baseLength = 2, + let baseLength = 2, bodyLength = bc[ip + baseLength - 1], baseSp = stack.sp, bodyCode, bodySp; @@ -510,10 +510,10 @@ function generateJS(ast, options) { } function compileCall() { - var baseLength = 4, + let baseLength = 4, paramsLength = bc[ip + baseLength - 1]; - var value = c(bc[ip + 1]) + '(' + let value = c(bc[ip + 1]) + '(' + bc.slice(ip + baseLength, ip + baseLength + paramsLength).map( function(p) { return stack.index(p); } ).join(', ') @@ -745,7 +745,7 @@ function generateJS(ast, options) { } function generateToplevel() { - var parts = [], + let parts = [], startRuleIndices, startRuleIndex, startRuleFunctions, startRuleFunction, ruleNames; @@ -1229,7 +1229,7 @@ function generateJS(ast, options) { ].join('\n'); } - var generators = { + let generators = { bare: function() { return [ generateGeneratedByComment(), @@ -1244,7 +1244,7 @@ function generateJS(ast, options) { }, commonjs: function() { - var parts = [], + let parts = [], dependencyVars = Object.keys(options.dependencies), requires = dependencyVars.map( function(variable) { @@ -1278,7 +1278,7 @@ function generateJS(ast, options) { }, amd: function() { - var dependencyIds = objects.values(options.dependencies), + let dependencyIds = objects.values(options.dependencies), dependencyVars = Object.keys(options.dependencies), dependencies = '[' + dependencyIds.map( @@ -1315,7 +1315,7 @@ function generateJS(ast, options) { }, umd: function() { - var parts = [], + let parts = [], dependencyIds = objects.values(options.dependencies), dependencyVars = Object.keys(options.dependencies), dependencies = '[' diff --git a/lib/compiler/passes/remove-proxy-rules.js b/lib/compiler/passes/remove-proxy-rules.js index d90c36f..f8036c0 100644 --- a/lib/compiler/passes/remove-proxy-rules.js +++ b/lib/compiler/passes/remove-proxy-rules.js @@ -1,6 +1,6 @@ "use strict"; -var arrays = require("../../utils/arrays"), +let arrays = require("../../utils/arrays"), visitor = require("../visitor"); /* @@ -12,7 +12,7 @@ function removeProxyRules(ast, options) { } function replaceRuleRefs(ast, from, to) { - var replace = visitor.build({ + let replace = visitor.build({ rule_ref: function(node) { if (node.name === from) { node.name = to; @@ -23,7 +23,7 @@ function removeProxyRules(ast, options) { replace(ast); } - var indices = []; + let indices = []; ast.rules.forEach(function(rule, i) { if (isProxyRule(rule)) { diff --git a/lib/compiler/passes/report-duplicate-labels.js b/lib/compiler/passes/report-duplicate-labels.js index c42b57e..f13659f 100644 --- a/lib/compiler/passes/report-duplicate-labels.js +++ b/lib/compiler/passes/report-duplicate-labels.js @@ -1,6 +1,6 @@ "use strict"; -var GrammarError = require("../../grammar-error"), +let GrammarError = require("../../grammar-error"), objects = require("../../utils/objects"), visitor = require("../visitor"); @@ -10,7 +10,7 @@ function reportDuplicateLabels(ast) { check(node.expression, objects.clone(env)); } - var check = visitor.build({ + let check = visitor.build({ rule: function(node) { check(node.expression, { }); }, diff --git a/lib/compiler/passes/report-duplicate-rules.js b/lib/compiler/passes/report-duplicate-rules.js index c621d37..47714dd 100644 --- a/lib/compiler/passes/report-duplicate-rules.js +++ b/lib/compiler/passes/report-duplicate-rules.js @@ -1,13 +1,13 @@ "use strict"; -var GrammarError = require("../../grammar-error"), +let GrammarError = require("../../grammar-error"), visitor = require("../visitor"); /* Checks that each rule is defined only once. */ function reportDuplicateRules(ast) { - var rules = {}; + let rules = {}; - var check = visitor.build({ + let check = visitor.build({ rule: function(node) { if (rules.hasOwnProperty(node.name)) { throw new GrammarError( diff --git a/lib/compiler/passes/report-infinite-recursion.js b/lib/compiler/passes/report-infinite-recursion.js index 6623a8b..fc733d0 100644 --- a/lib/compiler/passes/report-infinite-recursion.js +++ b/lib/compiler/passes/report-infinite-recursion.js @@ -1,6 +1,6 @@ "use strict"; -var arrays = require("../../utils/arrays"), +let arrays = require("../../utils/arrays"), GrammarError = require("../../grammar-error"), asts = require("../asts"), visitor = require("../visitor"); @@ -18,9 +18,9 @@ var arrays = require("../../utils/arrays"), * it can lead to left recursion. */ function reportInfiniteRecursion(ast) { - var visitedRules = []; + let visitedRules = []; - var check = visitor.build({ + let check = visitor.build({ rule: function(node) { visitedRules.push(node.name); check(node.expression); diff --git a/lib/compiler/passes/report-infinite-repetition.js b/lib/compiler/passes/report-infinite-repetition.js index e6f12c0..2942b65 100644 --- a/lib/compiler/passes/report-infinite-repetition.js +++ b/lib/compiler/passes/report-infinite-repetition.js @@ -1,6 +1,6 @@ "use strict"; -var GrammarError = require("../../grammar-error"), +let GrammarError = require("../../grammar-error"), asts = require("../asts"), visitor = require("../visitor"); @@ -9,7 +9,7 @@ var GrammarError = require("../../grammar-error"), * grammar, which prevents infinite loops in the generated parser. */ function reportInfiniteRepetition(ast) { - var check = visitor.build({ + let check = visitor.build({ zero_or_more: function(node) { if (!asts.alwaysConsumesOnSuccess(ast, node.expression)) { throw new GrammarError( diff --git a/lib/compiler/passes/report-undefined-rules.js b/lib/compiler/passes/report-undefined-rules.js index c71b03f..78b5d65 100644 --- a/lib/compiler/passes/report-undefined-rules.js +++ b/lib/compiler/passes/report-undefined-rules.js @@ -1,12 +1,12 @@ "use strict"; -var GrammarError = require("../../grammar-error"), +let GrammarError = require("../../grammar-error"), asts = require("../asts"), visitor = require("../visitor"); /* Checks that all referenced rules exist. */ function reportUndefinedRules(ast) { - var check = visitor.build({ + let check = visitor.build({ rule_ref: function(node) { if (!asts.findRule(ast, node.name)) { throw new GrammarError( diff --git a/lib/compiler/visitor.js b/lib/compiler/visitor.js index a7f764e..58545b0 100644 --- a/lib/compiler/visitor.js +++ b/lib/compiler/visitor.js @@ -1,9 +1,9 @@ "use strict"; -var objects = require("../utils/objects"); +let objects = require("../utils/objects"); /* Simple AST node visitor builder. */ -var visitor = { +let visitor = { build: function(functions) { function visit(node) { return functions[node.type].apply(null, arguments); @@ -12,14 +12,14 @@ var visitor = { function visitNop() { } function visitExpression(node) { - var extraArgs = Array.prototype.slice.call(arguments, 1); + let extraArgs = Array.prototype.slice.call(arguments, 1); visit.apply(null, [node.expression].concat(extraArgs)); } function visitChildren(property) { return function(node) { - var extraArgs = Array.prototype.slice.call(arguments, 1); + let extraArgs = Array.prototype.slice.call(arguments, 1); node[property].forEach(function(child) { visit.apply(null, [child].concat(extraArgs)); @@ -27,9 +27,9 @@ var visitor = { }; } - var DEFAULT_FUNCTIONS = { + const DEFAULT_FUNCTIONS = { grammar: function(node) { - var extraArgs = Array.prototype.slice.call(arguments, 1); + let extraArgs = Array.prototype.slice.call(arguments, 1); if (node.initializer) { visit.apply(null, [node.initializer].concat(extraArgs)); diff --git a/lib/grammar-error.js b/lib/grammar-error.js index 758b8e9..99c8215 100644 --- a/lib/grammar-error.js +++ b/lib/grammar-error.js @@ -1,6 +1,6 @@ "use strict"; -var classes = require("./utils/classes"); +let classes = require("./utils/classes"); /* Thrown when the grammar contains an error. */ function GrammarError(message, location) { diff --git a/lib/parser.js b/lib/parser.js index 5ba5bfc..b9edab9 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -4960,19 +4960,19 @@ function peg$parse(input, options) { } - var OPS_TO_PREFIXED_TYPES = { + const OPS_TO_PREFIXED_TYPES = { "$": "text", "&": "simple_and", "!": "simple_not" }; - var OPS_TO_SUFFIXED_TYPES = { + const OPS_TO_SUFFIXED_TYPES = { "?": "optional", "*": "zero_or_more", "+": "one_or_more" }; - var OPS_TO_SEMANTIC_PREDICATE_TYPES = { + const OPS_TO_SEMANTIC_PREDICATE_TYPES = { "&": "semantic_and", "!": "semantic_not" }; diff --git a/lib/peg.js b/lib/peg.js index ee8027c..b95143d 100644 --- a/lib/peg.js +++ b/lib/peg.js @@ -1,8 +1,8 @@ "use strict"; -var objects = require("./utils/objects"); +let objects = require("./utils/objects"); -var peg = { +let peg = { /* PEG.js version (uses semantic versioning). */ VERSION: "0.10.0", @@ -25,7 +25,7 @@ var peg = { options = options !== undefined ? options : {}; function convertPasses(passes) { - var converted = {}, stage; + let converted = {}, stage; for (stage in passes) { if (passes.hasOwnProperty(stage)) { @@ -38,7 +38,7 @@ var peg = { options = objects.clone(options); - var plugins = "plugins" in options ? options.plugins : [], + let plugins = "plugins" in options ? options.plugins : [], config = { parser: peg.parser, passes: convertPasses(peg.compiler.passes) diff --git a/lib/utils/arrays.js b/lib/utils/arrays.js index f22948f..15f8c0a 100644 --- a/lib/utils/arrays.js +++ b/lib/utils/arrays.js @@ -1,9 +1,9 @@ "use strict"; /* Array utilities. */ -var arrays = { +let arrays = { range: function(start, stop) { - var length = stop - start, + let length = stop - start, result = new Array(length), i, j; @@ -15,7 +15,7 @@ var arrays = { }, find: function(array, valueOrPredicate) { - var length = array.length, i; + let length = array.length, i; if (typeof valueOrPredicate === "function") { for (i = 0; i < length; i++) { @@ -33,7 +33,7 @@ var arrays = { }, indexOf: function(array, valueOrPredicate) { - var length = array.length, i; + let length = array.length, i; if (typeof valueOrPredicate === "function") { for (i = 0; i < length; i++) { diff --git a/lib/utils/classes.js b/lib/utils/classes.js index 1ad305e..49c1c45 100644 --- a/lib/utils/classes.js +++ b/lib/utils/classes.js @@ -1,7 +1,7 @@ "use strict"; /* Class utilities */ -var classes = { +let classes = { subclass: function(child, parent) { function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; diff --git a/lib/utils/objects.js b/lib/utils/objects.js index 6973095..9f73876 100644 --- a/lib/utils/objects.js +++ b/lib/utils/objects.js @@ -1,9 +1,9 @@ "use strict"; /* Object utilities. */ -var objects = { +let objects = { values: function(object) { - var result = [], key; + let result = [], key; for (key in object) { if (object.hasOwnProperty(key)) { @@ -15,7 +15,7 @@ var objects = { }, clone: function(object) { - var result = {}, key; + let result = {}, key; for (key in object) { if (object.hasOwnProperty(key)) { @@ -27,7 +27,7 @@ var objects = { }, defaults: function(object, defaults) { - var key; + let key; for (key in defaults) { if (defaults.hasOwnProperty(key)) { diff --git a/spec/api/generated-parser-api.spec.js b/spec/api/generated-parser-api.spec.js index 3ff1dcf..85a50b5 100644 --- a/spec/api/generated-parser-api.spec.js +++ b/spec/api/generated-parser-api.spec.js @@ -3,24 +3,24 @@ "use strict"; -var peg = require("../../lib/peg"); +let peg = require("../../lib/peg"); describe("generated parser API", function() { describe("parse", function() { it("parses input", function() { - var parser = peg.generate('start = "a"'); + let parser = peg.generate('start = "a"'); expect(parser.parse("a")).toBe("a"); }); it("throws an exception on syntax error", function() { - var parser = peg.generate('start = "a"'); + let parser = peg.generate('start = "a"'); expect(function() { parser.parse("b"); }).toThrow(); }); describe("start rule", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'a = "x" { return "a"; }', 'b = "x" { return "b"; }', 'c = "x" { return "c"; }' @@ -49,7 +49,7 @@ describe("generated parser API", function() { }); describe("tracing", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'start = a / b', 'a = "a"', 'b = "b"' @@ -77,7 +77,7 @@ describe("generated parser API", function() { describe("custom tracers", function() { describe("trace", function() { it("receives tracing events", function() { - var tracer = jasmine.createSpyObj("tracer", ["trace"]); + let tracer = jasmine.createSpyObj("tracer", ["trace"]); parser.parse("b", { tracer: tracer }); @@ -137,7 +137,7 @@ describe("generated parser API", function() { }); it("accepts custom options", function() { - var parser = peg.generate('start = "a"'); + let parser = peg.generate('start = "a"'); parser.parse("a", { foo: 42 }); }); diff --git a/spec/api/pegjs-api.spec.js b/spec/api/pegjs-api.spec.js index 9d02c66..1e2e69e 100644 --- a/spec/api/pegjs-api.spec.js +++ b/spec/api/pegjs-api.spec.js @@ -1,11 +1,11 @@ "use strict"; -var peg = require("../../lib/peg"); +let peg = require("../../lib/peg"); describe("PEG.js API", function() { describe("generate", function() { it("generates a parser", function() { - var parser = peg.generate('start = "a"'); + let parser = peg.generate('start = "a"'); expect(typeof parser).toBe("object"); expect(parser.parse("a")).toBe("a"); @@ -20,7 +20,7 @@ describe("PEG.js API", function() { }); describe("allowed start rules", function() { - var grammar = [ + let grammar = [ 'a = "x"', 'b = "x"', 'c = "x"' @@ -34,7 +34,7 @@ describe("PEG.js API", function() { describe("when optimizing for parsing speed", function() { describe("when |allowedStartRules| is not set", function() { it("generated parser can start only from the first rule", function() { - var parser = peg.generate(grammar, { optimize: "speed" }); + let parser = peg.generate(grammar, { optimize: "speed" }); expect(parser.parse("x", { startRule: "a" })).toBe("x"); expect( @@ -48,7 +48,7 @@ describe("PEG.js API", function() { describe("when |allowedStartRules| is set", function() { it("generated parser can start only from specified rules", function() { - var parser = peg.generate(grammar, { + let parser = peg.generate(grammar, { optimize: "speed", allowedStartRules: ["b", "c"] }); @@ -65,7 +65,7 @@ describe("PEG.js API", function() { describe("when optimizing for code size", function() { describe("when |allowedStartRules| is not set", function() { it("generated parser can start only from the first rule", function() { - var parser = peg.generate(grammar, { optimize: "size" }); + let parser = peg.generate(grammar, { optimize: "size" }); expect(parser.parse("x", { startRule: "a" })).toBe("x"); expect( @@ -79,7 +79,7 @@ describe("PEG.js API", function() { describe("when |allowedStartRules| is set", function() { it("generated parser can start only from specified rules", function() { - var parser = peg.generate(grammar, { + let parser = peg.generate(grammar, { optimize: "size", allowedStartRules: ["b", "c"] }); @@ -95,7 +95,7 @@ describe("PEG.js API", function() { }); describe("intermediate results caching", function() { - var grammar = [ + let grammar = [ '{ var n = 0; }', 'start = (a "b") / (a "c") { return n; }', 'a = "a" { n++; }' @@ -103,7 +103,7 @@ describe("PEG.js API", function() { describe("when |cache| is not set", function() { it("generated parser doesn't cache intermediate parse results", function() { - var parser = peg.generate(grammar); + let parser = peg.generate(grammar); expect(parser.parse("ac")).toBe(2); }); @@ -111,7 +111,7 @@ describe("PEG.js API", function() { describe("when |cache| is set to |false|", function() { it("generated parser doesn't cache intermediate parse results", function() { - var parser = peg.generate(grammar, { cache: false }); + let parser = peg.generate(grammar, { cache: false }); expect(parser.parse("ac")).toBe(2); }); @@ -119,7 +119,7 @@ describe("PEG.js API", function() { describe("when |cache| is set to |true|", function() { it("generated parser caches intermediate parse results", function() { - var parser = peg.generate(grammar, { cache: true }); + let parser = peg.generate(grammar, { cache: true }); expect(parser.parse("ac")).toBe(1); }); @@ -127,11 +127,11 @@ describe("PEG.js API", function() { }); describe("tracing", function() { - var grammar = 'start = "a"'; + let grammar = 'start = "a"'; describe("when |trace| is not set", function() { it("generated parser doesn't trace", function() { - var parser = peg.generate(grammar), + let parser = peg.generate(grammar), tracer = jasmine.createSpyObj("tracer", ["trace"]); parser.parse("a", { tracer: tracer }); @@ -142,7 +142,7 @@ describe("PEG.js API", function() { describe("when |trace| is set to |false|", function() { it("generated parser doesn't trace", function() { - var parser = peg.generate(grammar, { trace: false }), + let parser = peg.generate(grammar, { trace: false }), tracer = jasmine.createSpyObj("tracer", ["trace"]); parser.parse("a", { tracer: tracer }); @@ -153,7 +153,7 @@ describe("PEG.js API", function() { describe("when |trace| is set to |true|", function() { it("generated parser traces", function() { - var parser = peg.generate(grammar, { trace: true }), + let parser = peg.generate(grammar, { trace: true }), tracer = jasmine.createSpyObj("tracer", ["trace"]); parser.parse("a", { tracer: tracer }); @@ -169,11 +169,11 @@ describe("PEG.js API", function() { */ describe("output", function() { - var grammar = 'start = "a"'; + let grammar = 'start = "a"'; describe("when |output| is not set", function() { it("returns generated parser object", function() { - var parser = peg.generate(grammar); + let parser = peg.generate(grammar); expect(typeof parser).toBe("object"); expect(parser.parse("a")).toBe("a"); @@ -182,7 +182,7 @@ describe("PEG.js API", function() { describe("when |output| is set to |\"parser\"|", function() { it("returns generated parser object", function() { - var parser = peg.generate(grammar, { output: "parser" }); + let parser = peg.generate(grammar, { output: "parser" }); expect(typeof parser).toBe("object"); expect(parser.parse("a")).toBe("a"); @@ -191,7 +191,7 @@ describe("PEG.js API", function() { describe("when |output| is set to |\"source\"|", function() { it("returns generated parser source code", function() { - var source = peg.generate(grammar, { output: "source" }); + let source = peg.generate(grammar, { output: "source" }); expect(typeof source).toBe("string"); expect(eval(source).parse("a")).toBe("a"); diff --git a/spec/api/plugin-api.spec.js b/spec/api/plugin-api.spec.js index d89356f..da0cd19 100644 --- a/spec/api/plugin-api.spec.js +++ b/spec/api/plugin-api.spec.js @@ -1,6 +1,6 @@ "use strict"; -var peg = require("../../lib/peg"); +let peg = require("../../lib/peg"); describe("plugin API", function() { beforeEach(function() { @@ -38,10 +38,10 @@ describe("plugin API", function() { }); describe("use", function() { - var grammar = 'start = "a"'; + let grammar = 'start = "a"'; it("is called for each plugin", function() { - var pluginsUsed = [false, false, false], + let pluginsUsed = [false, false, false], plugins = [ { use: function() { pluginsUsed[0] = true; } }, { use: function() { pluginsUsed[1] = true; } }, @@ -54,7 +54,7 @@ describe("plugin API", function() { }); it("receives configuration", function() { - var plugin = { + let plugin = { use: function(config) { expect(config).toBeObject(); @@ -84,7 +84,7 @@ describe("plugin API", function() { }); it("receives options", function() { - var plugin = { + let plugin = { use: function(config, options) { expect(options).toEqual(generateOptions); } @@ -95,9 +95,9 @@ describe("plugin API", function() { }); it("can replace parser", function() { - var plugin = { + let plugin = { use: function(config) { - var parser = peg.generate([ + let parser = peg.generate([ 'start = .* {', ' return {', ' type: "grammar",', @@ -121,9 +121,9 @@ describe("plugin API", function() { }); it("can change compiler passes", function() { - var plugin = { + let plugin = { use: function(config) { - var pass = function(ast) { + let pass = function(ast) { ast.code = '({ parse: function() { return 42; } })'; }; @@ -136,7 +136,7 @@ describe("plugin API", function() { }); it("can change options", function() { - var grammar = [ + let grammar = [ 'a = "x"', 'b = "x"', 'c = "x"' diff --git a/spec/behavior/generated-parser-behavior.spec.js b/spec/behavior/generated-parser-behavior.spec.js index 2824569..2f54f8a 100644 --- a/spec/behavior/generated-parser-behavior.spec.js +++ b/spec/behavior/generated-parser-behavior.spec.js @@ -3,12 +3,12 @@ "use strict"; -var peg = require("../../lib/peg"); +let peg = require("../../lib/peg"); describe("generated parser behavior", function() { function varyOptimizationOptions(block) { function clone(object) { - var result = {}, key; + let result = {}, key; for (key in object) { if (object.hasOwnProperty(key)) { @@ -19,7 +19,7 @@ describe("generated parser behavior", function() { return result; } - var optionsVariants = [ + let optionsVariants = [ { cache: false, optimize: "speed", trace: false }, { cache: false, optimize: "speed", trace: true }, { cache: false, optimize: "size", trace: false }, @@ -43,7 +43,7 @@ describe("generated parser behavior", function() { toParse: function(input, expected, options) { options = options !== undefined ? options : {}; - var result; + let result; try { result = this.actual.parse(input, options); @@ -77,7 +77,7 @@ describe("generated parser behavior", function() { toFailToParse: function(input, details, options) { options = options !== undefined ? options : {}; - var result, key; + let result, key; try { result = this.actual.parse(input, options); @@ -138,7 +138,7 @@ describe("generated parser behavior", function() { varyOptimizationOptions(function(options) { describe("initializer", function() { it("executes the code before parsing starts", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result = 42; }', 'start = "a" { return result; }' ].join("\n"), options); @@ -148,7 +148,7 @@ describe("generated parser behavior", function() { describe("available variables and functions", function() { it("|options| contains options", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result = options; }', 'start = "a" { return result; }' ].join("\n"), options); @@ -161,7 +161,7 @@ describe("generated parser behavior", function() { describe("rule", function() { if (options.cache) { it("caches rule match results", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var n = 0; }', 'start = (a "b") / (a "c") { return n; }', 'a = "a" { n++; }' @@ -171,7 +171,7 @@ describe("generated parser behavior", function() { }); } else { it("doesn't cache rule match results", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var n = 0; }', 'start = (a "b") / (a "c") { return n; }', 'a = "a" { n++; }' @@ -183,7 +183,7 @@ describe("generated parser behavior", function() { describe("when the expression matches", function() { it("returns its match result", function() { - var parser = peg.generate('start = "a"'); + let parser = peg.generate('start = "a"'); expect(parser).toParse("a", "a"); }); @@ -192,7 +192,7 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { describe("without display name", function() { it("reports match failure and doesn't record any expectation", function() { - var parser = peg.generate('start = "a"'); + let parser = peg.generate('start = "a"'); expect(parser).toFailToParse("b", { expected: [{ type: "literal", text: "a", ignoreCase: false }] @@ -202,7 +202,7 @@ describe("generated parser behavior", function() { describe("with display name", function() { it("reports match failure and records an expectation of type \"other\"", function() { - var parser = peg.generate('start "start" = "a"'); + let parser = peg.generate('start "start" = "a"'); expect(parser).toFailToParse("b", { expected: [{ type: "other", description: "start" }] @@ -210,7 +210,7 @@ describe("generated parser behavior", function() { }); it("discards any expectations recorded when matching the expression", function() { - var parser = peg.generate('start "start" = "a"'); + let parser = peg.generate('start "start" = "a"'); expect(parser).toFailToParse("b", { expected: [{ type: "other", description: "start" }] @@ -223,34 +223,34 @@ describe("generated parser behavior", function() { describe("literal", function() { describe("matching", function() { it("matches empty literals", function() { - var parser = peg.generate('start = ""', options); + let parser = peg.generate('start = ""', options); expect(parser).toParse(""); }); it("matches one-character literals", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toParse("a"); expect(parser).toFailToParse("b"); }); it("matches multi-character literals", function() { - var parser = peg.generate('start = "abcd"', options); + let parser = peg.generate('start = "abcd"', options); expect(parser).toParse("abcd"); expect(parser).toFailToParse("efgh"); }); it("is case sensitive without the \"i\" flag", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toParse("a"); expect(parser).toFailToParse("A"); }); it("is case insensitive with the \"i\" flag", function() { - var parser = peg.generate('start = "a"i', options); + let parser = peg.generate('start = "a"i', options); expect(parser).toParse("a"); expect(parser).toParse("A"); @@ -259,13 +259,13 @@ describe("generated parser behavior", function() { describe("when it matches", function() { it("returns the matched text", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toParse("a", "a"); }); it("consumes the matched text", function() { - var parser = peg.generate('start = "a" .', options); + let parser = peg.generate('start = "a" .', options); expect(parser).toParse("ab"); }); @@ -273,7 +273,7 @@ describe("generated parser behavior", function() { describe("when it doesn't match", function() { it("reports match failure and records an expectation of type \"literal\"", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("b", { expected: [{ type: "literal", text: "a", ignoreCase: false }] @@ -285,13 +285,13 @@ describe("generated parser behavior", function() { describe("character class", function() { describe("matching", function() { it("matches empty classes", function() { - var parser = peg.generate('start = []', options); + let parser = peg.generate('start = []', options); expect(parser).toFailToParse("a"); }); it("matches classes with a character list", function() { - var parser = peg.generate('start = [abc]', options); + let parser = peg.generate('start = [abc]', options); expect(parser).toParse("a"); expect(parser).toParse("b"); @@ -300,7 +300,7 @@ describe("generated parser behavior", function() { }); it("matches classes with a character range", function() { - var parser = peg.generate('start = [a-c]', options); + let parser = peg.generate('start = [a-c]', options); expect(parser).toParse("a"); expect(parser).toParse("b"); @@ -309,21 +309,21 @@ describe("generated parser behavior", function() { }); it("matches inverted classes", function() { - var parser = peg.generate('start = [^a]', options); + let parser = peg.generate('start = [^a]', options); expect(parser).toFailToParse("a"); expect(parser).toParse("b"); }); it("is case sensitive without the \"i\" flag", function() { - var parser = peg.generate('start = [a]', options); + let parser = peg.generate('start = [a]', options); expect(parser).toParse("a"); expect(parser).toFailToParse("A"); }); it("is case insensitive with the \"i\" flag", function() { - var parser = peg.generate('start = [a]i', options); + let parser = peg.generate('start = [a]i', options); expect(parser).toParse("a"); expect(parser).toParse("A"); @@ -332,13 +332,13 @@ describe("generated parser behavior", function() { describe("when it matches", function() { it("returns the matched character", function() { - var parser = peg.generate('start = [a]', options); + let parser = peg.generate('start = [a]', options); expect(parser).toParse("a", "a"); }); it("consumes the matched character", function() { - var parser = peg.generate('start = [a] .', options); + let parser = peg.generate('start = [a] .', options); expect(parser).toParse("ab"); }); @@ -346,7 +346,7 @@ describe("generated parser behavior", function() { describe("when it doesn't match", function() { it("reports match failure and records an expectation of type \"class\"", function() { - var parser = peg.generate('start = [a]', options); + let parser = peg.generate('start = [a]', options); expect(parser).toFailToParse("b", { expected: [{ type: "class", parts: ["a"], inverted: false, ignoreCase: false }] @@ -358,7 +358,7 @@ describe("generated parser behavior", function() { describe("dot", function() { describe("matching", function() { it("matches any character", function() { - var parser = peg.generate('start = .', options); + let parser = peg.generate('start = .', options); expect(parser).toParse("a"); expect(parser).toParse("b"); @@ -368,13 +368,13 @@ describe("generated parser behavior", function() { describe("when it matches", function() { it("returns the matched character", function() { - var parser = peg.generate('start = .', options); + let parser = peg.generate('start = .', options); expect(parser).toParse("a", "a"); }); it("consumes the matched character", function() { - var parser = peg.generate('start = . .', options); + let parser = peg.generate('start = . .', options); expect(parser).toParse("ab"); }); @@ -382,7 +382,7 @@ describe("generated parser behavior", function() { describe("when it doesn't match", function() { it("reports match failure and records an expectation of type \"any\"", function() { - var parser = peg.generate('start = .', options); + let parser = peg.generate('start = .', options); expect(parser).toFailToParse("", { expected: [{ type: "any" }] @@ -394,7 +394,7 @@ describe("generated parser behavior", function() { describe("rule reference", function() { describe("when referenced rule's expression matches", function() { it("returns its result", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'start = a', 'a = "a"' ].join("\n"), options); @@ -405,7 +405,7 @@ describe("generated parser behavior", function() { describe("when referenced rule's expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'start = a', 'a = "a"' ].join("\n"), options); @@ -423,7 +423,7 @@ describe("generated parser behavior", function() { * |undefined| which we can't compare against in |toParse| due to the * way optional parameters work. */ - var parser = peg.generate('start = &{ return true; } ""', options); + let parser = peg.generate('start = &{ return true; } ""', options); expect(parser).toParse("", [undefined, ""]); }); @@ -431,7 +431,7 @@ describe("generated parser behavior", function() { describe("when the code returns a falsey value", function() { it("reports match failure", function() { - var parser = peg.generate('start = &{ return false; }', options); + let parser = peg.generate('start = &{ return false; }', options); expect(parser).toFailToParse(""); }); @@ -440,7 +440,7 @@ describe("generated parser behavior", function() { describe("label variables", function() { describe("in containing sequence", function() { it("can access variables defined by preceding labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = a:"a" &{ return a === "a"; }', options ); @@ -449,7 +449,7 @@ describe("generated parser behavior", function() { }); it("cannot access variable defined by labeled predicate element", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" b:&{ return b === undefined; } "c"', options ); @@ -458,7 +458,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by following labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = &{ return a === "a"; } a:"a"', options ); @@ -467,7 +467,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by subexpressions", function() { - var testcases = [ + let testcases = [ { grammar: 'start = (a:"a") &{ return a === "a"; }', input: "a" @@ -524,7 +524,7 @@ describe("generated parser behavior", function() { describe("in outer sequence", function() { it("can access variables defined by preceding labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = a:"a" ("b" &{ return a === "a"; })', options ); @@ -533,7 +533,7 @@ describe("generated parser behavior", function() { }); it("cannot access variable defined by labeled predicate element", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" b:("b" &{ return b === undefined; }) "c"', options ); @@ -542,7 +542,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by following labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = ("a" &{ return b === "b"; }) b:"b"', options ); @@ -554,7 +554,7 @@ describe("generated parser behavior", function() { describe("initializer variables & functions", function() { it("can access variables defined in the initializer", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var v = 42 }', 'start = &{ return v === 42; }' ].join("\n"), options); @@ -563,7 +563,7 @@ describe("generated parser behavior", function() { }); it("can access functions defined in the initializer", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ function f() { return 42; } }', 'start = &{ return f() === 42; }' ].join("\n"), options); @@ -574,7 +574,7 @@ describe("generated parser behavior", function() { describe("available variables & functions", function() { it("|options| contains options", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result; }', 'start = &{ result = options; return true; } { return result; }' ].join("\n"), options); @@ -583,7 +583,7 @@ describe("generated parser behavior", function() { }); it("|location| returns current location info", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result; }', 'start = line (nl+ line)* { return result; }', 'line = thing (" "+ thing)*', @@ -619,7 +619,7 @@ describe("generated parser behavior", function() { * |undefined| which we can't compare against in |toParse| due to the * way optional parameters work. */ - var parser = peg.generate('start = !{ return false; } ""', options); + let parser = peg.generate('start = !{ return false; } ""', options); expect(parser).toParse("", [undefined, ""]); }); @@ -627,7 +627,7 @@ describe("generated parser behavior", function() { describe("when the code returns a truthy value", function() { it("reports match failure", function() { - var parser = peg.generate('start = !{ return true; }', options); + let parser = peg.generate('start = !{ return true; }', options); expect(parser).toFailToParse(""); }); @@ -636,7 +636,7 @@ describe("generated parser behavior", function() { describe("label variables", function() { describe("in containing sequence", function() { it("can access variables defined by preceding labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = a:"a" !{ return a !== "a"; }', options ); @@ -645,7 +645,7 @@ describe("generated parser behavior", function() { }); it("cannot access variable defined by labeled predicate element", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" b:!{ return b !== undefined; } "c"', options ); @@ -654,7 +654,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by following labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = !{ return a !== "a"; } a:"a"', options ); @@ -663,7 +663,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by subexpressions", function() { - var testcases = [ + let testcases = [ { grammar: 'start = (a:"a") !{ return a !== "a"; }', input: "a" @@ -720,7 +720,7 @@ describe("generated parser behavior", function() { describe("in outer sequence", function() { it("can access variables defined by preceding labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = a:"a" ("b" !{ return a !== "a"; })', options ); @@ -729,7 +729,7 @@ describe("generated parser behavior", function() { }); it("cannot access variable defined by labeled predicate element", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" b:("b" !{ return b !== undefined; }) "c"', options ); @@ -738,7 +738,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by following labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = ("a" !{ return b !== "b"; }) b:"b"', options ); @@ -750,7 +750,7 @@ describe("generated parser behavior", function() { describe("initializer variables & functions", function() { it("can access variables defined in the initializer", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var v = 42 }', 'start = !{ return v !== 42; }' ].join("\n"), options); @@ -759,7 +759,7 @@ describe("generated parser behavior", function() { }); it("can access functions defined in the initializer", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ function f() { return 42; } }', 'start = !{ return f() !== 42; }' ].join("\n"), options); @@ -770,7 +770,7 @@ describe("generated parser behavior", function() { describe("available variables & functions", function() { it("|options| contains options", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result; }', 'start = !{ result = options; return false; } { return result; }' ].join("\n"), options); @@ -779,7 +779,7 @@ describe("generated parser behavior", function() { }); it("|location| returns current location info", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result; }', 'start = line (nl+ line)* { return result; }', 'line = thing (" "+ thing)*', @@ -810,7 +810,7 @@ describe("generated parser behavior", function() { describe("group", function() { describe("when the expression matches", function() { it("returns its match result", function() { - var parser = peg.generate('start = ("a")', options); + let parser = peg.generate('start = ("a")', options); expect(parser).toParse("a", "a"); }); @@ -818,7 +818,7 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = ("a")', options); + let parser = peg.generate('start = ("a")', options); expect(parser).toFailToParse("b"); }); @@ -828,7 +828,7 @@ describe("generated parser behavior", function() { describe("optional", function() { describe("when the expression matches", function() { it("returns its match result", function() { - var parser = peg.generate('start = "a"?', options); + let parser = peg.generate('start = "a"?', options); expect(parser).toParse("a", "a"); }); @@ -836,7 +836,7 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("returns |null|", function() { - var parser = peg.generate('start = "a"?', options); + let parser = peg.generate('start = "a"?', options); expect(parser).toParse("", null); }); @@ -846,7 +846,7 @@ describe("generated parser behavior", function() { describe("zero or more", function() { describe("when the expression matches zero or more times", function() { it("returns an array of its match results", function() { - var parser = peg.generate('start = "a"*', options); + let parser = peg.generate('start = "a"*', options); expect(parser).toParse("", []); expect(parser).toParse("a", ["a"]); @@ -858,7 +858,7 @@ describe("generated parser behavior", function() { describe("one or more", function() { describe("when the expression matches one or more times", function() { it("returns an array of its match results", function() { - var parser = peg.generate('start = "a"+', options); + let parser = peg.generate('start = "a"+', options); expect(parser).toParse("a", ["a"]); expect(parser).toParse("aaa", ["a", "a", "a"]); @@ -867,7 +867,7 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = "a"+', options); + let parser = peg.generate('start = "a"+', options); expect(parser).toFailToParse(""); }); @@ -877,7 +877,7 @@ describe("generated parser behavior", function() { describe("text", function() { describe("when the expression matches", function() { it("returns the matched text", function() { - var parser = peg.generate('start = $("a" "b" "c")', options); + let parser = peg.generate('start = $("a" "b" "c")', options); expect(parser).toParse("abc", "abc"); }); @@ -885,7 +885,7 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = $("a")', options); + let parser = peg.generate('start = $("a")', options); expect(parser).toFailToParse("b"); }); @@ -895,13 +895,13 @@ describe("generated parser behavior", function() { describe("positive simple predicate", function() { describe("when the expression matches", function() { it("returns |undefined|", function() { - var parser = peg.generate('start = &"a" "a"', options); + let parser = peg.generate('start = &"a" "a"', options); expect(parser).toParse("a", [undefined, "a"]); }); it("resets parse position", function() { - var parser = peg.generate('start = &"a" "a"', options); + let parser = peg.generate('start = &"a" "a"', options); expect(parser).toParse("a"); }); @@ -909,13 +909,13 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = &"a"', options); + let parser = peg.generate('start = &"a"', options); expect(parser).toFailToParse("b"); }); it("discards any expectations recorded when matching the expression", function() { - var parser = peg.generate('start = "a" / &"b" / "c"', options); + let parser = peg.generate('start = "a" / &"b" / "c"', options); expect(parser).toFailToParse("d", { expected: [ @@ -930,7 +930,7 @@ describe("generated parser behavior", function() { describe("negative simple predicate", function() { describe("when the expression matches", function() { it("reports match failure", function() { - var parser = peg.generate('start = !"a"', options); + let parser = peg.generate('start = !"a"', options); expect(parser).toFailToParse("a"); }); @@ -938,19 +938,19 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("returns |undefined|", function() { - var parser = peg.generate('start = !"a" "b"', options); + let parser = peg.generate('start = !"a" "b"', options); expect(parser).toParse("b", [undefined, "b"]); }); it("resets parse position", function() { - var parser = peg.generate('start = !"a" "b"', options); + let parser = peg.generate('start = !"a" "b"', options); expect(parser).toParse("b"); }); it("discards any expectations recorded when matching the expression", function() { - var parser = peg.generate('start = "a" / !"b" / "c"', options); + let parser = peg.generate('start = "a" / !"b" / "c"', options); expect(parser).toFailToParse("b", { expected: [ @@ -965,7 +965,7 @@ describe("generated parser behavior", function() { describe("label", function() { describe("when the expression matches", function() { it("returns its match result", function() { - var parser = peg.generate('start = a:"a"', options); + let parser = peg.generate('start = a:"a"', options); expect(parser).toParse("a", "a"); }); @@ -973,7 +973,7 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = a:"a"', options); + let parser = peg.generate('start = a:"a"', options); expect(parser).toFailToParse("b"); }); @@ -983,7 +983,7 @@ describe("generated parser behavior", function() { describe("sequence", function() { describe("when all expressions match", function() { it("returns an array of their match results", function() { - var parser = peg.generate('start = "a" "b" "c"', options); + let parser = peg.generate('start = "a" "b" "c"', options); expect(parser).toParse("abc", ["a", "b", "c"]); }); @@ -991,7 +991,7 @@ describe("generated parser behavior", function() { describe("when any expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = "a" "b" "c"', options); + let parser = peg.generate('start = "a" "b" "c"', options); expect(parser).toFailToParse("dbc"); expect(parser).toFailToParse("adc"); @@ -999,7 +999,7 @@ describe("generated parser behavior", function() { }); it("resets parse position", function() { - var parser = peg.generate('start = "a" "b" / "a"', options); + let parser = peg.generate('start = "a" "b" / "a"', options); expect(parser).toParse("a", "a"); }); @@ -1009,7 +1009,7 @@ describe("generated parser behavior", function() { describe("action", function() { describe("when the expression matches", function() { it("returns the value returned by the code", function() { - var parser = peg.generate('start = "a" { return 42; }', options); + let parser = peg.generate('start = "a" { return 42; }', options); expect(parser).toParse("a", 42); }); @@ -1017,13 +1017,13 @@ describe("generated parser behavior", function() { describe("label variables", function() { describe("in the expression", function() { it("can access variable defined by labeled expression", function() { - var parser = peg.generate('start = a:"a" { return a; }', options); + let parser = peg.generate('start = a:"a" { return a; }', options); expect(parser).toParse("a", "a"); }); it("can access variables defined by labeled sequence elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = a:"a" b:"b" c:"c" { return [a, b, c]; }', options ); @@ -1032,7 +1032,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by subexpressions", function() { - var testcases = [ + let testcases = [ { grammar: 'start = (a:"a") { return a; }', input: "a" @@ -1089,7 +1089,7 @@ describe("generated parser behavior", function() { describe("in outer sequence", function() { it("can access variables defined by preceding labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = a:"a" ("b" { return a; })', options ); @@ -1098,7 +1098,7 @@ describe("generated parser behavior", function() { }); it("cannot access variable defined by labeled action element", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" b:("b" { return b; }) c:"c"', options ); @@ -1107,7 +1107,7 @@ describe("generated parser behavior", function() { }); it("cannot access variables defined by following labeled elements", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = ("a" { return b; }) b:"b"', options ); @@ -1119,7 +1119,7 @@ describe("generated parser behavior", function() { describe("initializer variables & functions", function() { it("can access variables defined in the initializer", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var v = 42 }', 'start = "a" { return v; }' ].join("\n"), options); @@ -1128,7 +1128,7 @@ describe("generated parser behavior", function() { }); it("can access functions defined in the initializer", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ function f() { return 42; } }', 'start = "a" { return f(); }' ].join("\n"), options); @@ -1139,7 +1139,7 @@ describe("generated parser behavior", function() { describe("available variables & functions", function() { it("|options| contains options", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" { return options; }', options ); @@ -1148,7 +1148,7 @@ describe("generated parser behavior", function() { }); it("|text| returns text matched by the expression", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" { return text(); }', options ); @@ -1157,7 +1157,7 @@ describe("generated parser behavior", function() { }); it("|location| returns location info of the expression", function() { - var parser = peg.generate([ + let parser = peg.generate([ '{ var result; }', 'start = line (nl+ line)* { return result; }', 'line = thing (" "+ thing)*', @@ -1185,7 +1185,7 @@ describe("generated parser behavior", function() { describe("|expected|", function() { it("terminates parsing and throws an exception", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" { expected("a"); }', options ); @@ -1202,7 +1202,7 @@ describe("generated parser behavior", function() { }); it("allows to set custom location info", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'start = "a" {', ' expected("a", {', ' start: { offset: 1, line: 1, column: 2 },', @@ -1225,7 +1225,7 @@ describe("generated parser behavior", function() { describe("|error|", function() { it("terminates parsing and throws an exception", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" { error("a"); }', options ); @@ -1242,7 +1242,7 @@ describe("generated parser behavior", function() { }); it("allows to set custom location info", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'start = "a" {', ' error("a", {', ' start: { offset: 1, line: 1, column: 2 },', @@ -1267,13 +1267,13 @@ describe("generated parser behavior", function() { describe("when the expression doesn't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = "a" { return 42; }', options); + let parser = peg.generate('start = "a" { return 42; }', options); expect(parser).toFailToParse("b"); }); it("doesn't execute the code", function() { - var parser = peg.generate( + let parser = peg.generate( 'start = "a" { throw "Boom!"; } / "b"', options ); @@ -1286,7 +1286,7 @@ describe("generated parser behavior", function() { describe("choice", function() { describe("when any expression matches", function() { it("returns its match result", function() { - var parser = peg.generate('start = "a" / "b" / "c"', options); + let parser = peg.generate('start = "a" / "b" / "c"', options); expect(parser).toParse("a", "a"); expect(parser).toParse("b", "b"); @@ -1296,7 +1296,7 @@ describe("generated parser behavior", function() { describe("when all expressions don't match", function() { it("reports match failure", function() { - var parser = peg.generate('start = "a" / "b" / "c"', options); + let parser = peg.generate('start = "a" / "b" / "c"', options); expect(parser).toFailToParse("d"); }); @@ -1306,7 +1306,7 @@ describe("generated parser behavior", function() { describe("error reporting", function() { describe("behavior", function() { it("reports only the rightmost error", function() { - var parser = peg.generate('start = "a" "b" / "a" "c" "d"', options); + let parser = peg.generate('start = "a" "b" / "a" "c" "d"', options); expect(parser).toFailToParse("ace", { expected: [{ type: "literal", text: "d", ignoreCase: false }] @@ -1316,7 +1316,7 @@ describe("generated parser behavior", function() { describe("expectations reporting", function() { it("reports expectations correctly with no alternative", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("ab", { expected: [{ type: "end" }] @@ -1324,7 +1324,7 @@ describe("generated parser behavior", function() { }); it("reports expectations correctly with one alternative", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("b", { expected: [{ type: "literal", text: "a", ignoreCase: false }] @@ -1332,7 +1332,7 @@ describe("generated parser behavior", function() { }); it("reports expectations correctly with multiple alternatives", function() { - var parser = peg.generate('start = "a" / "b" / "c"', options); + let parser = peg.generate('start = "a" / "b" / "c"', options); expect(parser).toFailToParse("d", { expected: [ @@ -1346,13 +1346,13 @@ describe("generated parser behavior", function() { describe("found string reporting", function() { it("reports found string correctly at the end of input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("", { found: null }); }); it("reports found string correctly in the middle of input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("b", { found: "b" }); }); @@ -1360,7 +1360,7 @@ describe("generated parser behavior", function() { describe("message building", function() { it("builds message correctly with no alternative", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("ab", { message: 'Expected end of input but "b" found.' @@ -1368,7 +1368,7 @@ describe("generated parser behavior", function() { }); it("builds message correctly with one alternative", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("b", { message: 'Expected "a" but "b" found.' @@ -1376,7 +1376,7 @@ describe("generated parser behavior", function() { }); it("builds message correctly with multiple alternatives", function() { - var parser = peg.generate('start = "a" / "b" / "c"', options); + let parser = peg.generate('start = "a" / "b" / "c"', options); expect(parser).toFailToParse("d", { message: 'Expected "a", "b", or "c" but "d" found.' @@ -1384,7 +1384,7 @@ describe("generated parser behavior", function() { }); it("builds message correctly at the end of input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("", { message: 'Expected "a" but end of input found.' @@ -1392,7 +1392,7 @@ describe("generated parser behavior", function() { }); it("builds message correctly in the middle of input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("b", { message: 'Expected "a" but "b" found.' @@ -1400,7 +1400,7 @@ describe("generated parser behavior", function() { }); it("removes duplicates from expectations", function() { - var parser = peg.generate('start = "a" / "a"', options); + let parser = peg.generate('start = "a" / "a"', options); expect(parser).toFailToParse("b", { message: 'Expected "a" but "b" found.' @@ -1408,7 +1408,7 @@ describe("generated parser behavior", function() { }); it("sorts expectations", function() { - var parser = peg.generate('start = "c" / "b" / "a"', options); + let parser = peg.generate('start = "c" / "b" / "a"', options); expect(parser).toFailToParse("d", { message: 'Expected "a", "b", or "c" but "d" found.' @@ -1419,7 +1419,7 @@ describe("generated parser behavior", function() { describe("position reporting", function() { it("reports position correctly at the end of input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("", { location: { @@ -1430,7 +1430,7 @@ describe("generated parser behavior", function() { }); it("reports position correctly in the middle of input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("b", { location: { @@ -1441,7 +1441,7 @@ describe("generated parser behavior", function() { }); it("reports position correctly with trailing input", function() { - var parser = peg.generate('start = "a"', options); + let parser = peg.generate('start = "a"', options); expect(parser).toFailToParse("aa", { location: { @@ -1452,7 +1452,7 @@ describe("generated parser behavior", function() { }); it("reports position correctly in complex cases", function() { - var parser = peg.generate([ + let parser = peg.generate([ 'start = line (nl+ line)*', 'line = digit (" "+ digit)*', 'digit = [0-9]', @@ -1495,7 +1495,7 @@ describe("generated parser behavior", function() { * Sum ← Product (('+' / '-') Product)* * Expr ← Sum */ - var parser = peg.generate([ + let parser = peg.generate([ 'Expr = Sum', 'Sum = head:Product tail:(("+" / "-") Product)* {', ' return tail.reduce(function(result, element) {', @@ -1547,7 +1547,7 @@ describe("generated parser behavior", function() { * A ← a A? b * B ← b B? c */ - var parser = peg.generate([ + let parser = peg.generate([ 'S = &(A "c") a:"a"+ B:B !("a" / "b" / "c") { return a.join("") + B; }', 'A = a:"a" A:A? b:"b" { return [a, A, b].join(""); }', 'B = b:"b" B:B? c:"c" { return [b, B, c].join(""); }' @@ -1571,7 +1571,7 @@ describe("generated parser behavior", function() { * N ← C / (!Begin !End Z) * Z ← any single character */ - var parser = peg.generate([ + let parser = peg.generate([ 'C = begin:Begin ns:N* end:End { return begin + ns.join("") + end; }', 'N = C', ' / !Begin !End z:Z { return z; }', diff --git a/spec/server b/spec/server index 5076728..d6e7526 100755 --- a/spec/server +++ b/spec/server @@ -9,19 +9,19 @@ * browser. */ -var express = require("express"), +let express = require("express"), logger = require("morgan"), glob = require("glob"), browserify = require("browserify"), babelify = require("babelify"); -var app = express(); +let app = express(); app.use(logger("dev")); app.use(express.static(__dirname)); app.get("/bundle.js", function(req, res) { - var files = glob.sync(__dirname + "/**/*.js", { + let files = glob.sync(__dirname + "/**/*.js", { ignore: __dirname + "/vendor/**/*" }); diff --git a/spec/unit/compiler/passes/generate-bytecode.spec.js b/spec/unit/compiler/passes/generate-bytecode.spec.js index 0071a7b..cb6334d 100644 --- a/spec/unit/compiler/passes/generate-bytecode.spec.js +++ b/spec/unit/compiler/passes/generate-bytecode.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |generateBytecode|", function() { - var pass = peg.compiler.passes.generate.generateBytecode; + let pass = peg.compiler.passes.generate.generateBytecode; function bytecodeDetails(bytecode) { return { @@ -53,7 +53,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for named", function() { - var grammar = 'start "start" = "a"'; + let grammar = 'start "start" = "a"'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -90,7 +90,7 @@ describe("compiler pass |generateBytecode|", function() { describe("for action", function() { describe("without labels", function() { - var grammar = 'start = "a" { code }'; + let grammar = 'start = "a" { code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -113,7 +113,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("with one label", function() { - var grammar = 'start = a:"a" { code }'; + let grammar = 'start = a:"a" { code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -136,7 +136,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("with multiple labels", function() { - var grammar = 'start = a:"a" b:"b" c:"c" { code }'; + let grammar = 'start = a:"a" b:"b" c:"c" { code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -177,7 +177,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for sequence", function() { - var grammar = 'start = "a" "b" "c"'; + let grammar = 'start = "a" "b" "c"'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -236,7 +236,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for simple_and", function() { - var grammar = 'start = &"a"'; + let grammar = 'start = &"a"'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -263,7 +263,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for simple_not", function() { - var grammar = 'start = !"a"'; + let grammar = 'start = !"a"'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -290,7 +290,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for optional", function() { - var grammar = 'start = "a"?'; + let grammar = 'start = "a"?'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -310,7 +310,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for zero_or_more", function() { - var grammar = 'start = "a"*'; + let grammar = 'start = "a"*'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -332,7 +332,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for one_or_more", function() { - var grammar = 'start = "a"+'; + let grammar = 'start = "a"+'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -367,7 +367,7 @@ describe("compiler pass |generateBytecode|", function() { describe("for semantic_and", function() { describe("without labels", function() { - var grammar = 'start = &{ code }'; + let grammar = 'start = &{ code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -390,7 +390,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("with labels", function() { - var grammar = 'start = a:"a" b:"b" c:"c" &{ code }'; + let grammar = 'start = a:"a" b:"b" c:"c" &{ code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -442,7 +442,7 @@ describe("compiler pass |generateBytecode|", function() { describe("for semantic_not", function() { describe("without labels", function() { - var grammar = 'start = !{ code }'; + let grammar = 'start = !{ code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -465,7 +465,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("with labels", function() { - var grammar = 'start = a:"a" b:"b" c:"c" !{ code }'; + let grammar = 'start = a:"a" b:"b" c:"c" !{ code }'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -533,7 +533,7 @@ describe("compiler pass |generateBytecode|", function() { describe("for literal", function() { describe("empty", function() { - var grammar = 'start = ""'; + let grammar = 'start = ""'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -547,7 +547,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("non-empty case-sensitive", function() { - var grammar = 'start = "a"'; + let grammar = 'start = "a"'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -566,7 +566,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("non-empty case-insensitive", function() { - var grammar = 'start = "A"i'; + let grammar = 'start = "A"i'; it("generates correct bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ @@ -632,7 +632,7 @@ describe("compiler pass |generateBytecode|", function() { }); describe("for any", function() { - var grammar = 'start = .'; + let grammar = 'start = .'; it("generates bytecode", function() { expect(pass).toChangeAST(grammar, bytecodeDetails([ diff --git a/spec/unit/compiler/passes/helpers.js b/spec/unit/compiler/passes/helpers.js index da0a4d2..113f2fa 100644 --- a/spec/unit/compiler/passes/helpers.js +++ b/spec/unit/compiler/passes/helpers.js @@ -1,6 +1,6 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); beforeEach(function() { this.addMatchers({ @@ -16,7 +16,7 @@ beforeEach(function() { return value !== null && typeof value === "object"; } - var i, key; + let i, key; if (isArray(details)) { if (!isArray(value)) { return false; } @@ -44,7 +44,7 @@ beforeEach(function() { } } - var ast = peg.parser.parse(grammar); + let ast = peg.parser.parse(grammar); this.actual(ast, options); @@ -61,7 +61,7 @@ beforeEach(function() { }, toReportError: function(grammar, details) { - var ast = peg.parser.parse(grammar), + let ast = peg.parser.parse(grammar), key; try { diff --git a/spec/unit/compiler/passes/remove-proxy-rules.spec.js b/spec/unit/compiler/passes/remove-proxy-rules.spec.js index 5ab6691..d989a8b 100644 --- a/spec/unit/compiler/passes/remove-proxy-rules.spec.js +++ b/spec/unit/compiler/passes/remove-proxy-rules.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |removeProxyRules|", function() { - var pass = peg.compiler.passes.transform.removeProxyRules; + let pass = peg.compiler.passes.transform.removeProxyRules; describe("when a proxy rule isn't listed in |allowedStartRules|", function() { it("updates references and removes it", function() { diff --git a/spec/unit/compiler/passes/report-duplicate-labels.spec.js b/spec/unit/compiler/passes/report-duplicate-labels.spec.js index 11d5b2f..3d8aa43 100644 --- a/spec/unit/compiler/passes/report-duplicate-labels.spec.js +++ b/spec/unit/compiler/passes/report-duplicate-labels.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |reportDuplicateLabels|", function() { - var pass = peg.compiler.passes.check.reportDuplicateLabels; + let pass = peg.compiler.passes.check.reportDuplicateLabels; describe("in a sequence", function() { it("reports labels duplicate with labels of preceding elements", function() { diff --git a/spec/unit/compiler/passes/report-duplicate-rules.spec.js b/spec/unit/compiler/passes/report-duplicate-rules.spec.js index cdc45c5..46c31b4 100644 --- a/spec/unit/compiler/passes/report-duplicate-rules.spec.js +++ b/spec/unit/compiler/passes/report-duplicate-rules.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |reportDuplicateRules|", function() { - var pass = peg.compiler.passes.check.reportDuplicateRules; + let pass = peg.compiler.passes.check.reportDuplicateRules; it("reports duplicate rules", function() { expect(pass).toReportError([ diff --git a/spec/unit/compiler/passes/report-infinite-recursion.spec.js b/spec/unit/compiler/passes/report-infinite-recursion.spec.js index 906fd8b..6f3fb4d 100644 --- a/spec/unit/compiler/passes/report-infinite-recursion.spec.js +++ b/spec/unit/compiler/passes/report-infinite-recursion.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |reportInfiniteRecursion|", function() { - var pass = peg.compiler.passes.check.reportInfiniteRecursion; + let pass = peg.compiler.passes.check.reportInfiniteRecursion; it("reports direct left recursion", function() { expect(pass).toReportError('start = start', { diff --git a/spec/unit/compiler/passes/report-infinite-repetition.spec.js b/spec/unit/compiler/passes/report-infinite-repetition.spec.js index 1671926..eccc349 100644 --- a/spec/unit/compiler/passes/report-infinite-repetition.spec.js +++ b/spec/unit/compiler/passes/report-infinite-repetition.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |reportInfiniteRepetition|", function() { - var pass = peg.compiler.passes.check.reportInfiniteRepetition; + let pass = peg.compiler.passes.check.reportInfiniteRepetition; it("reports infinite loops for zero_or_more", function() { expect(pass).toReportError('start = ("")*', { diff --git a/spec/unit/compiler/passes/report-undefined-rules.spec.js b/spec/unit/compiler/passes/report-undefined-rules.spec.js index ad73007..3f4df85 100644 --- a/spec/unit/compiler/passes/report-undefined-rules.spec.js +++ b/spec/unit/compiler/passes/report-undefined-rules.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../../../lib/peg"); +let peg = require("../../../../lib/peg"); describe("compiler pass |reportUndefinedRules|", function() { - var pass = peg.compiler.passes.check.reportUndefinedRules; + let pass = peg.compiler.passes.check.reportUndefinedRules; it("reports undefined rules", function() { expect(pass).toReportError('start = undefined', { diff --git a/spec/unit/parser.spec.js b/spec/unit/parser.spec.js index 0ef46c8..6f6a85c 100644 --- a/spec/unit/parser.spec.js +++ b/spec/unit/parser.spec.js @@ -1,9 +1,9 @@ "use strict"; -var peg = require("../../lib/peg"); +let peg = require("../../lib/peg"); describe("PEG.js grammar parser", function() { - var literalAbcd = { type: "literal", value: "abcd", ignoreCase: false }, + let literalAbcd = { type: "literal", value: "abcd", ignoreCase: false }, literalEfgh = { type: "literal", value: "efgh", ignoreCase: false }, literalIjkl = { type: "literal", value: "ijkl", ignoreCase: false }, literalMnop = { type: "literal", value: "mnop", ignoreCase: false }, @@ -96,14 +96,14 @@ describe("PEG.js grammar parser", function() { return oneRuleGrammar({ type: "rule_ref", name: name }); } - var trivialGrammar = literalGrammar("abcd", false), + let trivialGrammar = literalGrammar("abcd", false), twoRuleGrammar = { type: "grammar", initializer: null, rules: [ruleA, ruleB] }; - var stripLocation = (function() { + let stripLocation = (function() { function buildVisitor(functions) { return function(node) { return functions[node.type].apply(null, arguments); @@ -128,7 +128,7 @@ describe("PEG.js grammar parser", function() { }; } - var strip = buildVisitor({ + let strip = buildVisitor({ grammar: function(node) { delete node.location; @@ -166,7 +166,7 @@ describe("PEG.js grammar parser", function() { beforeEach(function() { this.addMatchers({ toParseAs: function(expected) { - var result; + let result; try { result = peg.parser.parse(this.actual); @@ -194,7 +194,7 @@ describe("PEG.js grammar parser", function() { }, toFailToParse: function(details) { - var result, key; + let result, key; try { result = peg.parser.parse(this.actual); diff --git a/src/parser.pegjs b/src/parser.pegjs index 9578d94..61cc7ac 100644 --- a/src/parser.pegjs +++ b/src/parser.pegjs @@ -24,19 +24,19 @@ */ { - var OPS_TO_PREFIXED_TYPES = { + const OPS_TO_PREFIXED_TYPES = { "$": "text", "&": "simple_and", "!": "simple_not" }; - var OPS_TO_SUFFIXED_TYPES = { + const OPS_TO_SUFFIXED_TYPES = { "?": "optional", "*": "zero_or_more", "+": "one_or_more" }; - var OPS_TO_SEMANTIC_PREDICATE_TYPES = { + const OPS_TO_SEMANTIC_PREDICATE_TYPES = { "&": "semantic_and", "!": "semantic_not" };