diff --git a/packages/jsparse/parser.js b/packages/jsparse/parser.js index f67d644b36..ebc29f741c 100644 --- a/packages/jsparse/parser.js +++ b/packages/jsparse/parser.js @@ -124,7 +124,7 @@ var parse = function (tokenizer) { var primaryOrFunctionExpression = expecting('expression', - or(node('this', seq(token('this'))), + or(node('this', token('this')), // XXXX remove unnecessary seqs in node(...) args node('identifier', seq(tokenClass('IDENTIFIER'))), node('number', seq(tokenClass('NUMBER'))), node('boolean', seq(tokenClass('BOOLEAN'))), diff --git a/packages/jsparse/parserlib.js b/packages/jsparse/parserlib.js index 2325767f9b..8ccf623ca9 100644 --- a/packages/jsparse/parserlib.js +++ b/packages/jsparse/parserlib.js @@ -163,6 +163,8 @@ var node = function (name, childrenParser) { var children = childrenParser.parse(t); if (! children) return null; + if (! isArray(children)) + children = [children]; return new ParseNode(name, children); }); }; @@ -246,6 +248,7 @@ var unary = function (name, termParser, opParser) { // `x` => ["x"] // `x,y` => ["x", ",", "y"] // `x,y,z` => ["x", ",", "y", ",", "z"] +// Unpacks. var list = function (itemParser, sepParser) { var push = function(array, newThing) { if (isArray(newThing)) @@ -277,6 +280,7 @@ var list = function (itemParser, sepParser) { }); }; +// Unpacks arrays (nested seqs). var seq = function (/*parsers*/) { var args = arguments; if (! args.length)