Skip to content

Commit b7e83a3

Browse files
committed
Merge branch 'bigint_and_numeric_separators_support'
2 parents a2d3991 + fe48e32 commit b7e83a3

8 files changed

+133
-0
lines changed

escodegen.js

+10
Original file line numberDiff line numberDiff line change
@@ -2385,6 +2385,11 @@
23852385
return '/' + expr.regex.pattern + '/' + expr.regex.flags;
23862386
}
23872387

2388+
// BigInt, eg: 1n
2389+
if (typeof expr.bigint === 'string' && expr.raw) {
2390+
return expr.raw;
2391+
}
2392+
23882393
if (expr.value === null) {
23892394
return 'null';
23902395
}
@@ -2394,6 +2399,11 @@
23942399
}
23952400

23962401
if (typeof expr.value === 'number') {
2402+
// Has Numeric Separator
2403+
if (expr.raw && expr.raw.indexOf('_') !== -1) {
2404+
return expr.raw;
2405+
}
2406+
23972407
return generateNumber(expr.value);
23982408
}
23992409

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
0n;
2+
2n;
3+
0x2n;
4+
0o2n;
5+
0b10n;
6+
-0xbf2ed51ff75d380fd3be813ec6185780n;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0n;2n;0x2n;0o2n;0b10n;-0xbf2ed51ff75d380fd3be813ec6185780n

test/compare-acorn-es2020/bigint.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
0n;
2+
2n;
3+
0x2n;
4+
0o2n;
5+
0b10n;
6+
-0xbf2ed51ff75d380fd3be813ec6185780n;

test/compare-acorn-es2021.js

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*
2+
Copyright (C) 2012-2013 Yusuke Suzuki <[email protected]>
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are met:
6+
7+
* Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
* Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in the
11+
documentation and/or other materials provided with the distribution.
12+
13+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16+
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
17+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23+
*/
24+
25+
'use strict';
26+
27+
var fs = require('fs'),
28+
acorn = require('acorn'),
29+
escodegen = require('./loader'),
30+
chai = require('chai'),
31+
chaiExclude = require('chai-exclude'),
32+
expect = chai.expect;
33+
34+
chai.use(chaiExclude);
35+
36+
function test(code, expected) {
37+
var tree, actual, actualTree, options;
38+
39+
options = {
40+
ranges: false,
41+
locations: false,
42+
ecmaVersion: 12
43+
};
44+
45+
tree = acorn.parse(code, options);
46+
47+
// for UNIX text comment
48+
actual = escodegen.generate(tree);
49+
actualTree = acorn.parse(actual, options);
50+
51+
expect(actual).to.be.equal(expected);
52+
expect(tree).excludingEvery(['start', 'end']).to.deep.equal(actualTree);
53+
}
54+
55+
function testMin(code, expected) {
56+
var tree, actual, actualTree, options;
57+
58+
options = {
59+
ranges: false,
60+
locations: false,
61+
ecmaVersion: 12
62+
};
63+
64+
tree = acorn.parse(code, options);
65+
66+
// for UNIX text comment
67+
actual = escodegen.generate(tree, {
68+
format: escodegen.FORMAT_MINIFY,
69+
raw: false
70+
}).replace(/[\n\r]$/, '') + '\n';
71+
actualTree = acorn.parse(actual, options);
72+
73+
expect(actual).to.be.equal(expected);
74+
expect(tree).excludingEvery(['start', 'end']).to.deep.equal(actualTree);
75+
}
76+
77+
describe('compare acorn es2021 test', function () {
78+
fs.readdirSync(__dirname + '/compare-acorn-es2021').sort().forEach(function(file) {
79+
var code, expected, exp, min;
80+
if (/\.js$/.test(file) && !/expected\.js$/.test(file) && !/expected\.min\.js$/.test(file)) {
81+
it(file, function () {
82+
exp = file.replace(/\.js$/, '.expected.js');
83+
min = file.replace(/\.js$/, '.expected.min.js');
84+
code = fs.readFileSync(__dirname + '/compare-acorn-es2021/' + file, 'utf-8');
85+
expected = fs.readFileSync(__dirname + '/compare-acorn-es2021/' + exp, 'utf-8');
86+
test(code, expected);
87+
if (fs.existsSync(__dirname + '/compare-acorn-es2021/' + min)) {
88+
expected = fs.readFileSync(__dirname + '/compare-acorn-es2021/' + min, 'utf-8');
89+
testMin(code, expected);
90+
}
91+
});
92+
}
93+
});
94+
});
95+
/* vim: set sw=4 ts=4 et tw=80 : */
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
123_456;
2+
123_456.123_456e+123_456;
3+
0b1010_0001;
4+
0xDEAD_BEAF;
5+
0o755_666;
6+
123_456n;
7+
.012_345;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
123_456;123_456.123_456e+123_456;0b1010_0001;0xDEAD_BEAF;0o755_666;123_456n;.012_345
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
123_456;
2+
123_456.123_456e+123_456;
3+
0b1010_0001;
4+
0xDEAD_BEAF;
5+
0o755_666;
6+
123_456n;
7+
.012_345;

0 commit comments

Comments
 (0)