Refactor "literal" emitter function a bit

redux
David Majda 13 years ago
parent 2120c908c7
commit eaba6b8a9d

@ -868,43 +868,26 @@ PEG.compiler.emitter = function(ast) {
}, },
literal: function(node, context) { literal: function(node, context) {
var length = node.value.length;
if (length === 0) {
return formatCode( return formatCode(
'#if node.value.length === 0',
' #{resultVar} = "";', ' #{resultVar} = "";',
{ resultVar: resultVar(context.resultIndex) } '#else',
); ' #if node.value.length === 1',
} ' if (input.charCodeAt(pos) === #{node.value.charCodeAt(0)}) {',
' #else',
var testCode = length === 1 ' if (input.substr(pos, #{node.value.length}) === #{string(node.value)}) {',
? formatCode( ' #end',
'input.charCodeAt(pos) === #{valueCharCode}', ' #{resultVar} = #{string(node.value)};',
{ valueCharCode: node.value.charCodeAt(0) } ' pos += #{node.value.length};',
)
: formatCode(
'input.substr(pos, #{length}) === #{string(value)}',
{
value: node.value,
length: length
}
);
return formatCode(
'if (#{testCode}) {',
' #{resultVar} = #{string(value)};',
' pos += #{length};',
' } else {', ' } else {',
' #{resultVar} = null;', ' #{resultVar} = null;',
' if (reportFailures === 0) {', ' if (reportFailures === 0) {',
' matchFailed(#{string(valueQuoted)});', ' matchFailed(#{string(string(node.value))});',
' }', ' }',
' }', ' }',
'#end',
{ {
testCode: testCode, node: node,
value: node.value,
valueQuoted: quote(node.value),
length: length,
resultVar: resultVar(context.resultIndex) resultVar: resultVar(context.resultIndex)
} }
); );

Loading…
Cancel
Save