diff --git a/lib/Jsrt/Jsrt.cpp b/lib/Jsrt/Jsrt.cpp index 8f92c23eb85..e8b963b6072 100644 --- a/lib/Jsrt/Jsrt.cpp +++ b/lib/Jsrt/Jsrt.cpp @@ -4637,6 +4637,13 @@ CHAKRA_API JsCreateWeakReference( PARAM_NOT_NULL(weakRef); *weakRef = nullptr; + if (Js::TaggedNumber::Is(value)) { + // non-recyclable-objects do not get GCd, so there is no difference + // between strong and weak references + *weakRef = value; + return JsNoError; + } + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { ThreadContext* threadContext = ThreadContext::GetContextForCurrentThread(); if (threadContext == nullptr) @@ -4665,6 +4672,12 @@ CHAKRA_API JsGetWeakReferenceValue( PARAM_NOT_NULL(value); *value = JS_INVALID_REFERENCE; + if (Js::TaggedNumber::Is(weakRef)) + { + *value = weakRef; + return JsNoError; + } + return GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode { Memory::RecyclerWeakReference* recyclerWeakReference = reinterpret_cast*>(weakRef);