Merge pull request #6159 from jridgewell/pr/3701
Allow native Symbols as computed property names
This commit is contained in:
@@ -278,6 +278,20 @@ helpers.defineEnumerableProperties = template(`
|
||||
if ("value" in desc) desc.writable = true;
|
||||
Object.defineProperty(obj, key, desc);
|
||||
}
|
||||
|
||||
// Symbols are not enumerated over by for-in loops. If native
|
||||
// Symbols are available, fetch all of the descs object's own
|
||||
// symbol properties and define them on our target object too.
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var objectSymbols = Object.getOwnPropertySymbols(descs);
|
||||
for (var i = 0; i < objectSymbols.length; i++) {
|
||||
var sym = objectSymbols[i];
|
||||
var desc = descs[sym];
|
||||
desc.configurable = desc.enumerable = true;
|
||||
if ("value" in desc) desc.writable = true;
|
||||
Object.defineProperty(obj, sym, desc);
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
})
|
||||
`);
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
var foo = {
|
||||
[Symbol.iterator]: "foobar"
|
||||
};
|
||||
@@ -1,3 +0,0 @@
|
||||
var _foo;
|
||||
|
||||
var foo = (_foo = {}, _foo[Symbol.iterator] = "foobar", _foo);
|
||||
@@ -0,0 +1,7 @@
|
||||
var k = Symbol();
|
||||
var foo = {
|
||||
[Symbol.iterator]: "foobar",
|
||||
get [k]() {
|
||||
return k;
|
||||
}
|
||||
};
|
||||
10
packages/babel-plugin-transform-es2015-computed-properties/test/fixtures/loose/symbol/exec.js
vendored
Normal file
10
packages/babel-plugin-transform-es2015-computed-properties/test/fixtures/loose/symbol/exec.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
var k = Symbol();
|
||||
var foo = {
|
||||
[Symbol.iterator]: "foobar",
|
||||
get [k]() {
|
||||
return k;
|
||||
}
|
||||
};
|
||||
|
||||
assert(foo[Symbol.iterator], "foobar")
|
||||
assert(foo[k], k)
|
||||
@@ -0,0 +1,6 @@
|
||||
var _foo, _mutatorMap;
|
||||
|
||||
var k = Symbol();
|
||||
var foo = (_foo = {}, _foo[Symbol.iterator] = "foobar", _mutatorMap = {}, _mutatorMap[k] = _mutatorMap[k] || {}, _mutatorMap[k].get = function () {
|
||||
return k;
|
||||
}, babelHelpers.defineEnumerableProperties(_foo, _mutatorMap), _foo);
|
||||
@@ -1,3 +0,0 @@
|
||||
var foo = {
|
||||
[Symbol.iterator]: "foobar"
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
var foo = babelHelpers.defineProperty({}, Symbol.iterator, "foobar");
|
||||
@@ -0,0 +1,7 @@
|
||||
var k = Symbol();
|
||||
var foo = {
|
||||
[Symbol.iterator]: "foobar",
|
||||
get [k]() {
|
||||
return k;
|
||||
}
|
||||
};
|
||||
10
packages/babel-plugin-transform-es2015-computed-properties/test/fixtures/spec/symbol/exec.js
vendored
Normal file
10
packages/babel-plugin-transform-es2015-computed-properties/test/fixtures/spec/symbol/exec.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
var k = Symbol();
|
||||
var foo = {
|
||||
[Symbol.iterator]: "foobar",
|
||||
get [k]() {
|
||||
return k;
|
||||
}
|
||||
};
|
||||
|
||||
assert(foo[Symbol.iterator], "foobar")
|
||||
assert(foo[k], k)
|
||||
@@ -0,0 +1,6 @@
|
||||
var _foo, _mutatorMap;
|
||||
|
||||
var k = Symbol();
|
||||
var foo = (_foo = {}, babelHelpers.defineProperty(_foo, Symbol.iterator, "foobar"), _mutatorMap = {}, _mutatorMap[k] = _mutatorMap[k] || {}, _mutatorMap[k].get = function () {
|
||||
return k;
|
||||
}, babelHelpers.defineEnumerableProperties(_foo, _mutatorMap), _foo);
|
||||
Reference in New Issue
Block a user