From 35ed18f628bcc54dd864c27a9f2ff626c0441134 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Sun, 28 Feb 2016 20:31:37 -0500 Subject: [PATCH] Fix invalid codegen for non decimal numeric literals in MemberExpression Fixes T7156 --- packages/babel-generator/src/generators/expressions.js | 7 ++++++- .../edgecase/member-expression-numeric-literals/actual.js | 5 +++++ .../member-expression-numeric-literals/expected.js | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/actual.js create mode 100644 packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/expected.js diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index a58fe38e04..1f302a4342 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -8,6 +8,7 @@ import * as n from "../node"; const SCIENTIFIC_NOTATION = /e/i; const ZERO_DECIMAL_INTEGER = /\.0+$/; +const NON_DECIMAL_LITERAL = /^0[box]/; export function UnaryExpression(node: Object) { let needsSpace = /[a-z]$/.test(node.operator); @@ -225,7 +226,11 @@ export function MemberExpression(node: Object) { } else { if (t.isNumericLiteral(node.object)) { let val = this.getPossibleRaw(node.object) || node.object.value; - if (isInteger(+val) && !SCIENTIFIC_NOTATION.test(val) && !ZERO_DECIMAL_INTEGER.test(val) && !this.endsWith(".")) { + if (isInteger(+val) && + !NON_DECIMAL_LITERAL.test(val) && + !SCIENTIFIC_NOTATION.test(val) && + !ZERO_DECIMAL_INTEGER.test(val) && + !this.endsWith(".")) { this.push("."); } } diff --git a/packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/actual.js b/packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/actual.js new file mode 100644 index 0000000000..747ba88e36 --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/actual.js @@ -0,0 +1,5 @@ +1..toString; +2..toString(); +0x1F7.toString(); +0b111110111.toString(); +0o767.toString(); diff --git a/packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/expected.js b/packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/expected.js new file mode 100644 index 0000000000..747ba88e36 --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/member-expression-numeric-literals/expected.js @@ -0,0 +1,5 @@ +1..toString; +2..toString(); +0x1F7.toString(); +0b111110111.toString(); +0o767.toString();