Skip to content

Commit 46eed18

Browse files
committed
Remove WeakMap usage
1 parent 5f0ea26 commit 46eed18

File tree

5 files changed

+24
-63
lines changed

5 files changed

+24
-63
lines changed

core/src/main/scala/japgolly/scalajs/react/AsyncCallback.scala

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,6 @@ object AsyncCallback {
113113

114114
@inline implicit def asynCallbackCovariance[A, B >: A](c: AsyncCallback[A]): AsyncCallback[B] =
115115
c.widen
116-
117-
private[AsyncCallback] val memoMap = {
118-
type Fn[A] = (Try[A] => Callback) => Callback
119-
internal.WeakMap().castK[Fn, AsyncCallback]
120-
}
121116
}
122117

123118
/** Pure asynchronous callback.
@@ -289,19 +284,17 @@ final class AsyncCallback[A] private[AsyncCallback] (val completeWith: (Try[A] =
289284
/** Return a version of this callback that will only execute once, and reuse the result for all
290285
* other invocations.
291286
*/
292-
def memo: AsyncCallback[A] =
293-
AsyncCallback.memoMap.getOrSet(completeWith) {
294-
var result: Option[AsyncCallback[A]] = None
295-
def set(r: AsyncCallback[A]) = {result = Some(r); r}
296-
297-
AsyncCallback.byName {
298-
result.getOrElse {
299-
val first = attemptTry.flatMap(t => AsyncCallback.byName(set(AsyncCallback.const(t))))
300-
val promise = first.unsafeToJsPromise()
301-
result getOrElse set(AsyncCallback.fromJsPromise(promise))
302-
}
287+
def memo(): AsyncCallback[A] = {
288+
var result: Option[AsyncCallback[A]] = None
289+
def set(r: AsyncCallback[A]) = {result = Some(r); r}
290+
AsyncCallback.byName {
291+
result.getOrElse {
292+
val first = attemptTry.flatMap(t => AsyncCallback.byName(set(AsyncCallback.const(t))))
293+
val promise = first.unsafeToJsPromise()
294+
result getOrElse set(AsyncCallback.fromJsPromise(promise))
303295
}
304296
}
297+
}
305298

306299
/** Conditional execution of this callback.
307300
*

core/src/main/scala/japgolly/scalajs/react/Callback.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -372,9 +372,6 @@ object CallbackTo {
372372

373373
@inline implicit def MapGuard[A]: MapGuard[A] =
374374
null.asInstanceOf[MapGuard[A]]
375-
376-
private[CallbackTo] val memoMap =
377-
internal.WeakMap().castK[Function0, CallbackTo]
378375
}
379376

380377
// =====================================================================================================================
@@ -536,11 +533,19 @@ final class CallbackTo[A] private[react] (private[CallbackTo] val f: () => A) ex
536533
/** Return a version of this callback that will only execute once, and reuse the result for all
537534
* other invocations.
538535
*/
539-
def memo: CallbackTo[A] =
540-
CallbackTo.memoMap.getOrSet(f) {
541-
lazy val t = attemptTry.runNow()
542-
CallbackTo(t.get)
536+
def memo(): CallbackTo[A] = {
537+
var result: Option[Try[A]] = None
538+
val self = attemptTry
539+
CallbackTo {
540+
val t: Try[A] =
541+
result.getOrElse {
542+
val t = self.runNow()
543+
result = Some(t)
544+
t
545+
}
546+
t.get
543547
}
548+
}
544549

545550
/** Conditional execution of this callback.
546551
*

core/src/main/scala/japgolly/scalajs/react/internal/WeakMap.scala

Lines changed: 0 additions & 37 deletions
This file was deleted.

gh-pages/src/main/scala/ghpages/secret/tests/AsyncTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,14 @@ object AsyncTest {
124124
var count = 0
125125
val getCount = AsyncCallback.point(count)
126126
val incCount = AsyncCallback.point(count += 1).delayMs(400)
127-
def m = incCount.memo
127+
val m = incCount.memo()
128128
// start 1
129129
// start 2
130130
// complete 1
131131
// complete 2
132132
// start 3
133133
// complete 3
134-
val t = (m *> m) >> m.memo >> getCount
134+
val t = (m *> m) >> m.memo() >> getCount
135135
t -> 1
136136
})
137137

test/src/test/scala/japgolly/scalajs/react/core/CallbackTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object CallbackTest extends TestSuite {
1010
'memo {
1111
var count = 0
1212
val inc = Callback(count += 1)
13-
def c = inc.memo
13+
val c = inc.memo()
1414
(c >> c.memo >> c).runNow()
1515
assert(count == 1)
1616
}

0 commit comments

Comments
 (0)