allow trailing comma for array literals

This commit is contained in:
Dave Holoway
2020-06-15 17:30:17 +01:00
parent 14582503da
commit 1801a81c0f

View File

@@ -2294,7 +2294,7 @@ function rootTerm(tokens, mdecls, scope, imports, typemap) {
// array initer // array initer
let elements = []; let elements = [];
if (!tokens.isValue('}')) { if (!tokens.isValue('}')) {
elements = expressionList(tokens, mdecls, scope, imports, typemap); elements = expressionList(tokens, mdecls, scope, imports, typemap, { isArrayLiteral:true });
tokens.expectValue('}'); tokens.expectValue('}');
} }
const ident = `{${elements.map(e => e.source).join(',')}}`; const ident = `{${elements.map(e => e.source).join(',')}}`;
@@ -2369,12 +2369,18 @@ function newTerm(tokens, mdecls, scope, imports, typemap) {
* @param {Scope} scope * @param {Scope} scope
* @param {ResolvedImport[]} imports * @param {ResolvedImport[]} imports
* @param {Map<string,JavaType>} typemap * @param {Map<string,JavaType>} typemap
* @param {{isArrayLiteral: boolean}} [opts]
*/ */
function expressionList(tokens, mdecls, scope, imports, typemap) { function expressionList(tokens, mdecls, scope, imports, typemap, opts) {
let e = expression(tokens, mdecls, scope, imports, typemap); let e = expression(tokens, mdecls, scope, imports, typemap);
const expressions = [e]; const expressions = [e];
while (tokens.current.value === ',') { while (tokens.isValue(',')) {
tokens.inc(); if (opts && opts.isArrayLiteral) {
// array literals are allowed a single trailing comma
if (tokens.current.value === '}') {
break;
}
}
e = expression(tokens, mdecls, scope, imports, typemap); e = expression(tokens, mdecls, scope, imports, typemap);
expressions.push(e); expressions.push(e);
} }