From 80a3e664e66c6bb11f93ea90b9c48b1429d76444 Mon Sep 17 00:00:00 2001 From: Lee Byron Date: Tue, 18 Sep 2018 20:36:18 -0700 Subject: [PATCH] WIP empty unwrapping --- src/List.js | 2 ++ src/Map.js | 2 ++ src/OrderedMap.js | 7 +++++-- src/Stack.js | 30 ++++++++++++++++-------------- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/List.js b/src/List.js index 5f37846732..61507b5337 100644 --- a/src/List.js +++ b/src/List.js @@ -257,6 +257,8 @@ ListPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; +ListPrototype.__empty = emptyList; + class VNode { constructor(array, ownerID) { this.array = array; diff --git a/src/Map.js b/src/Map.js index 9a3628c691..cbe7ed705e 100644 --- a/src/Map.js +++ b/src/Map.js @@ -185,6 +185,8 @@ MapPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; +MapPrototype.__empty = emptyMap; + // #pragma Trie Nodes class ArrayMapNode { diff --git a/src/OrderedMap.js b/src/OrderedMap.js index 6da2d762b6..2ff216770a 100644 --- a/src/OrderedMap.js +++ b/src/OrderedMap.js @@ -93,8 +93,11 @@ export class OrderedMap extends Map { OrderedMap.isOrderedMap = isOrderedMap; -OrderedMap.prototype[IS_ORDERED_SYMBOL] = true; -OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove; +const OrderedMapPrototype = OrderedMap.prototype; +OrderedMapPrototype[IS_ORDERED_SYMBOL] = true; +OrderedMapPrototype[DELETE] = OrderedMapPrototype.remove; + +OrderedMapPrototype.__empty = emptyOrderedMap; function makeOrderedMap(map, list, ownerID, hash) { const omap = Object.create(OrderedMap.prototype); diff --git a/src/Stack.js b/src/Stack.js index 6a7a6f219f..05241a6191 100644 --- a/src/Stack.js +++ b/src/Stack.js @@ -192,6 +192,21 @@ export class Stack extends IndexedCollection { } } +function makeStack(size, head, ownerID, hash) { + const map = Object.create(StackPrototype); + map.size = size; + map._head = head; + map.__ownerID = ownerID; + map.__hash = hash; + map.__altered = false; + return map; +} + +let EMPTY_STACK; +function emptyStack() { + return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); +} + Stack.isStack = isStack; const StackPrototype = Stack.prototype; @@ -210,17 +225,4 @@ StackPrototype['@@transducer/result'] = function (obj) { return obj.asImmutable(); }; -function makeStack(size, head, ownerID, hash) { - const map = Object.create(StackPrototype); - map.size = size; - map._head = head; - map.__ownerID = ownerID; - map.__hash = hash; - map.__altered = false; - return map; -} - -let EMPTY_STACK; -function emptyStack() { - return EMPTY_STACK || (EMPTY_STACK = makeStack(0)); -} +StackPrototype.__empty = emptyStack;