diff --git a/packages/babel/src/generation/generators/expressions.js b/packages/babel/src/generation/generators/expressions.js index 8d380dc507..ebfb6d0211 100644 --- a/packages/babel/src/generation/generators/expressions.js +++ b/packages/babel/src/generation/generators/expressions.js @@ -8,6 +8,13 @@ import * as t from "../../types"; const SCIENTIFIC_NOTATION = /e/i; +/** + * RegExp for testing if a numeric literal is + * a BinaryIntegerLiteral, OctalIntegerLiteral or HexIntegerLiteral. + */ + +const NON_DECIMAL_NUMERIC_LITERAL = /^0(b|o|x)/i; + /** * Prints UnaryExpression, prints operator and argument. */ @@ -280,7 +287,8 @@ export function MemberExpression(node, print) { } else { if (t.isLiteral(node.object)) { var val = this._Literal(node.object); - if (isInteger(+val) && !SCIENTIFIC_NOTATION.test(val) && !this.endsWith(".")) { + if (isInteger(+val) && !SCIENTIFIC_NOTATION.test(val) && !this.endsWith(".") + && !NON_DECIMAL_NUMERIC_LITERAL.test(val)) { this.push("."); } } diff --git a/packages/babel/test/fixtures/generation/types/MemberExpression/actual.js b/packages/babel/test/fixtures/generation/types/MemberExpression/actual.js index b1b488aa12..2d3ab6715a 100644 --- a/packages/babel/test/fixtures/generation/types/MemberExpression/actual.js +++ b/packages/babel/test/fixtures/generation/types/MemberExpression/actual.js @@ -9,3 +9,6 @@ foo[test()][bar()]; 0..toString(); 0.5.toString(); +0b111.toString(16); +0o111.toString(16); +0x111.toString(16); diff --git a/packages/babel/test/fixtures/generation/types/MemberExpression/expected.js b/packages/babel/test/fixtures/generation/types/MemberExpression/expected.js index b1b488aa12..2d3ab6715a 100644 --- a/packages/babel/test/fixtures/generation/types/MemberExpression/expected.js +++ b/packages/babel/test/fixtures/generation/types/MemberExpression/expected.js @@ -9,3 +9,6 @@ foo[test()][bar()]; 0..toString(); 0.5.toString(); +0b111.toString(16); +0o111.toString(16); +0x111.toString(16);