summaryrefslogtreecommitdiffstats
path: root/js/src
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2020-09-06 10:01:37 +0000
committerMoonchild <moonchild@palemoon.org>2020-09-06 10:01:37 +0000
commit4698b4b3cadd2547cf87a03daebaa23e3bd92cd5 (patch)
tree116750daa4df440186a8f79a0ab26726eaf4bb4a /js/src
parent798f0bd3ad1f5b1abd9ed7c4832dbbac51be9f8b (diff)
downloadUXP-4698b4b3cadd2547cf87a03daebaa23e3bd92cd5.tar
UXP-4698b4b3cadd2547cf87a03daebaa23e3bd92cd5.tar.gz
UXP-4698b4b3cadd2547cf87a03daebaa23e3bd92cd5.tar.lz
UXP-4698b4b3cadd2547cf87a03daebaa23e3bd92cd5.tar.xz
UXP-4698b4b3cadd2547cf87a03daebaa23e3bd92cd5.zip
Issue #1639 - Implement object.fromEntries()
Adds a self-hosted implementation of this map->object conversion. This resolves #1639.
Diffstat (limited to 'js/src')
-rw-r--r--js/src/builtin/Object.cpp1
-rw-r--r--js/src/builtin/Object.js18
2 files changed, 19 insertions, 0 deletions
diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
index bfcc8d20e..d3001b69e 100644
--- a/js/src/builtin/Object.cpp
+++ b/js/src/builtin/Object.cpp
@@ -1239,6 +1239,7 @@ static const JSFunctionSpec object_static_methods[] = {
JS_FN("isFrozen", obj_isFrozen, 1, 0),
JS_FN("seal", obj_seal, 1, 0),
JS_FN("isSealed", obj_isSealed, 1, 0),
+ JS_SELF_HOSTED_FN("fromEntries", "ObjectFromEntries", 1, 0),
JS_FS_END
};
diff --git a/js/src/builtin/Object.js b/js/src/builtin/Object.js
index 9ed1be0e1..c4739037e 100644
--- a/js/src/builtin/Object.js
+++ b/js/src/builtin/Object.js
@@ -202,3 +202,21 @@ function ObjectLookupGetter(name) {
// Step 3.d. (implicit)
}
+
+// Stage 4 draft 2020-09-06 https://tc39.github.io/proposal-object-from-entries/
+// Object.fromEntries (iterable)
+function ObjectFromEntries(iter) {
+ // We omit the usual step number comments here because they don't help.
+ // This implementation inlines AddEntriesFromIterator and
+ // CreateDataPropertyOnObject, so it looks more like the polyfill
+ // than the step-by-step spec algorithm.
+ const obj = {};
+
+ for (const pair of allowContentIter(iter)) {
+ if (!IsObject(pair))
+ ThrowTypeError(JSMSG_INVALID_MAP_ITERABLE, "Object.fromEntries");
+ _DefineDataProperty(obj, pair[0], pair[1]);
+ }
+
+ return obj;
+}