From 3eb4e97112ec4f9d7fc18acbc79e52cb95f21769 Mon Sep 17 00:00:00 2001 From: Avital Oliver Date: Thu, 20 Mar 2014 14:14:54 -0700 Subject: [PATCH] Greenspan comments on keyword argument parsing --- packages/spacebars-compiler/templatetag.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/spacebars-compiler/templatetag.js b/packages/spacebars-compiler/templatetag.js index 997ebb079d..5a50fde13e 100644 --- a/packages/spacebars-compiler/templatetag.js +++ b/packages/spacebars-compiler/templatetag.js @@ -181,27 +181,30 @@ TemplateTag.parse = function (scannerOrString) { // keyword name. var scanArg = function () { var keyword = scanArgKeyword(); // null if not parsing a kwarg - var withKeyword = function (type, value) { - return keyword ? [type, value, keyword] : [type, value]; - }; + var value = scanArgValue(); + return keyword ? value.concat(keyword) : value; + }; + // scan an argument value (for keyword or positional arguments); + // succeeds or errors. Result is an array of type, value. + var scanArgValue = function () { var startPos = scanner.pos; var result; if ((result = parseNumber(scanner))) { - return withKeyword('NUMBER', result.value); + return ['NUMBER', result.value]; } else if ((result = parseStringLiteral(scanner))) { - return withKeyword('STRING', result.value); + return ['STRING', result.value]; } else if (/^[\.\[]/.test(scanner.peek())) { - return withKeyword('PATH', scanPath()); + return ['PATH', scanPath()]; } else if ((result = parseIdentifierName(scanner))) { var id = result; if (id === 'null') { - return withKeyword('NULL', null); + return ['NULL', null]; } else if (id === 'true' || id === 'false') { - return withKeyword('BOOLEAN', id === 'true'); + return ['BOOLEAN', id === 'true']; } else { scanner.pos = startPos; // unconsume `id` - return withKeyword('PATH', scanPath()); + return ['PATH', scanPath()]; } } else { expected('identifier, number, string, boolean, or null');