From 4012a00a0578185d92fb6e7d3babd059fee6d6ab Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Tue, 29 Nov 2016 17:04:22 +0100 Subject: [PATCH] Allow negative enum ids even if super inefficient (encodes as 10 bytes), fixes #499, fixes #500 [ci skip] --- src/parse.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/parse.js b/src/parse.js index 8644cc1e8..e1debf8ef 100644 --- a/src/parse.js +++ b/src/parse.js @@ -150,18 +150,20 @@ function parse(source, root) { throw illegal(token, 'number'); } - function parseId(token) { + function parseId(token, acceptNegative) { var tokenLower = lower(token); switch (tokenLower) { case "min": return 1; case "max": return 0x1FFFFFFF; case "0": return 0; } - if (/^[1-9][0-9]*$/.test(token)) + if (token.charAt(0) === '-' && !acceptNegative) + throw illegal(token, "id"); + if (/^\-?[1-9][0-9]*$/.test(token)) return parseInt(token, 10); - if (/^0[x][0-9a-f]+$/.test(tokenLower)) + if (/^\-?0[x][0-9a-f]+$/.test(tokenLower)) return parseInt(token, 16); - if (/^0[0-7]+$/.test(token)) + if (/^\-?0[0-7]+$/.test(token)) return parseInt(token, 8); throw illegal(token, "id"); } @@ -357,7 +359,7 @@ function parse(source, root) { throw illegal(token, s_name); var name = token; skip("="); - var value = parseId(next()); + var value = parseId(next(), true); parseInlineOptions(parent.values[name] = new Number(value)); // eslint-disable-line no-new-wrappers }