From 45c99f8f6b5a379ac304f6dd1c2ea891b4e3fdc6 Mon Sep 17 00:00:00 2001 From: David Majda Date: Sun, 18 Sep 2011 20:12:26 +0200 Subject: [PATCH] Generate more efficient code for empty literals Original patch by Wolfgang Kluge: https://github.com/WolfgangKluge/pegjs/commit/797173f676805dad80ff96ea733f0d74f93d6664 --- src/emitter.js | 8 ++++++++ src/parser.js | 20 ++------------------ 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/emitter.js b/src/emitter.js index 74ef92d..34e3157 100644 --- a/src/emitter.js +++ b/src/emitter.js @@ -710,6 +710,14 @@ PEG.compiler.emitter = function(ast) { literal: function(node, context) { var length = node.value.length; + + if (length === 0) { + return formatCode( + "${resultVar} = '';", + { resultVar: resultVar(context.resultIndex) } + ); + } + var testCode = length === 1 ? formatCode( "input.charCodeAt(pos) === ${valueCharCode}", diff --git a/src/parser.js b/src/parser.js index d065c46..11a156a 100644 --- a/src/parser.js +++ b/src/parser.js @@ -280,15 +280,7 @@ PEG.parser = (function(){ if (result0 !== null) { result1 = parse_literal(); if (result1 === null) { - if (input.substr(pos, 0) === "") { - result1 = ""; - pos += 0; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"\""); - } - } + result1 = ''; } if (result1 !== null) { @@ -837,15 +829,7 @@ PEG.parser = (function(){ pos3 = pos; result1 = parse_literal(); if (result1 === null) { - if (input.substr(pos, 0) === "") { - result1 = ""; - pos += 0; - } else { - result1 = null; - if (reportFailures === 0) { - matchFailed("\"\""); - } - } + result1 = ''; } if (result1 !== null) {