Diff
Modified: trunk/Source/_javascript_Core/API/JSManagedValue.mm (230024 => 230025)
--- trunk/Source/_javascript_Core/API/JSManagedValue.mm 2018-03-28 06:21:57 UTC (rev 230024)
+++ trunk/Source/_javascript_Core/API/JSManagedValue.mm 2018-03-28 09:16:15 UTC (rev 230025)
@@ -33,7 +33,7 @@
#import "Heap.h"
#import "JSContextInternal.h"
#import "JSValueInternal.h"
-#import "Weak.h"
+#import "JSWeakValue.h"
#import "WeakHandleOwner.h"
#import "ObjcRuntimeExtras.h"
#import "JSCInlines.h"
@@ -46,132 +46,16 @@
bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&) override;
};
-static JSManagedValueHandleOwner* managedValueHandleOwner()
+static JSManagedValueHandleOwner& managedValueHandleOwner()
{
static NeverDestroyed<JSManagedValueHandleOwner> jsManagedValueHandleOwner;
- return &jsManagedValueHandleOwner.get();
+ return jsManagedValueHandleOwner;
}
-class WeakValueRef {
-public:
- WeakValueRef()
- : m_tag(NotSet)
- {
- }
-
- ~WeakValueRef()
- {
- clear();
- }
-
- void clear()
- {
- switch (m_tag) {
- case NotSet:
- return;
- case Primitive:
- u.m_primitive = JSC::JSValue();
- return;
- case Object:
- u.m_object.clear();
- return;
- case String:
- u.m_string.clear();
- return;
- }
- RELEASE_ASSERT_NOT_REACHED();
- }
-
- bool isClear() const
- {
- switch (m_tag) {
- case NotSet:
- return true;
- case Primitive:
- return !u.m_primitive;
- case Object:
- return !u.m_object;
- case String:
- return !u.m_string;
- }
- RELEASE_ASSERT_NOT_REACHED();
- }
-
- bool isSet() const { return m_tag != NotSet; }
- bool isPrimitive() const { return m_tag == Primitive; }
- bool isObject() const { return m_tag == Object; }
- bool isString() const { return m_tag == String; }
-
- void setPrimitive(JSC::JSValue primitive)
- {
- ASSERT(!isSet());
- ASSERT(!u.m_primitive);
- ASSERT(primitive.isPrimitive());
- m_tag = Primitive;
- u.m_primitive = primitive;
- }
-
- void setObject(JSC::JSObject* object, void* context)
- {
- ASSERT(!isSet());
- ASSERT(!u.m_object);
- m_tag = Object;
- JSC::Weak<JSC::JSObject> weak(object, managedValueHandleOwner(), context);
- u.m_object.swap(weak);
- }
-
- void setString(JSC::JSString* string, void* context)
- {
- ASSERT(!isSet());
- ASSERT(!u.m_object);
- m_tag = String;
- JSC::Weak<JSC::JSString> weak(string, managedValueHandleOwner(), context);
- u.m_string.swap(weak);
- }
-
- JSC::JSObject* object()
- {
- ASSERT(isObject());
- return u.m_object.get();
- }
-
- JSC::JSValue primitive()
- {
- ASSERT(isPrimitive());
- return u.m_primitive;
- }
-
- JSC::JSString* string()
- {
- ASSERT(isString());
- return u.m_string.get();
- }
-
-private:
- enum WeakTypeTag { NotSet, Primitive, Object, String };
- WeakTypeTag m_tag;
- union WeakValueUnion {
- public:
- WeakValueUnion ()
- : m_primitive(JSC::JSValue())
- {
- }
-
- ~WeakValueUnion()
- {
- ASSERT(!m_primitive);
- }
-
- JSC::JSValue m_primitive;
- JSC::Weak<JSC::JSObject> m_object;
- JSC::Weak<JSC::JSString> m_string;
- } u;
-};
-
@implementation JSManagedValue {
JSC::Weak<JSC::JSGlobalObject> m_globalObject;
RefPtr<JSC::JSLock> m_lock;
- WeakValueRef m_weakValue;
+ JSC::JSWeakValue m_weakValue;
NSMapTable *m_owners;
}
@@ -203,7 +87,8 @@
JSC::ExecState* exec = toJS([value.context JSGlobalContextRef]);
JSC::JSGlobalObject* globalObject = exec->lexicalGlobalObject();
- JSC::Weak<JSC::JSGlobalObject> weak(globalObject, managedValueHandleOwner(), self);
+ auto& owner = managedValueHandleOwner();
+ JSC::Weak<JSC::JSGlobalObject> weak(globalObject, &owner, self);
m_globalObject.swap(weak);
m_lock = &exec->vm().apiLock();
@@ -214,9 +99,9 @@
JSC::JSValue jsValue = toJS(exec, [value JSValueRef]);
if (jsValue.isObject())
- m_weakValue.setObject(JSC::jsCast<JSC::JSObject*>(jsValue.asCell()), self);
+ m_weakValue.setObject(JSC::jsCast<JSC::JSObject*>(jsValue.asCell()), owner, self);
else if (jsValue.isString())
- m_weakValue.setString(JSC::jsCast<JSC::JSString*>(jsValue.asCell()), self);
+ m_weakValue.setString(JSC::jsCast<JSC::JSString*>(jsValue.asCell()), owner, self);
else
m_weakValue.setPrimitive(jsValue);
return self;
Added: trunk/Source/_javascript_Core/API/JSWeakValue.cpp (0 => 230025)
--- trunk/Source/_javascript_Core/API/JSWeakValue.cpp (rev 0)
+++ trunk/Source/_javascript_Core/API/JSWeakValue.cpp 2018-03-28 09:16:15 UTC (rev 230025)
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2018 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "JSWeakValue.h"
+
+#include "JSCInlines.h"
+#include "WeakHandleOwner.h"
+
+namespace JSC {
+
+JSWeakValue::~JSWeakValue()
+{
+ clear();
+}
+
+void JSWeakValue::clear()
+{
+ switch (m_tag) {
+ case WeakTypeTag::NotSet:
+ return;
+ case WeakTypeTag::Primitive:
+ m_value.primitive = JSValue();
+ return;
+ case WeakTypeTag::Object:
+ m_value.object.clear();
+ return;
+ case WeakTypeTag::String:
+ m_value.string.clear();
+ return;
+ }
+ RELEASE_ASSERT_NOT_REACHED();
+}
+
+bool JSWeakValue::isClear() const
+{
+ switch (m_tag) {
+ case WeakTypeTag::NotSet:
+ return true;
+ case WeakTypeTag::Primitive:
+ return !m_value.primitive;
+ case WeakTypeTag::Object:
+ return !m_value.object;
+ case WeakTypeTag::String:
+ return !m_value.string;
+ }
+ RELEASE_ASSERT_NOT_REACHED();
+}
+
+void JSWeakValue::setPrimitive(JSValue primitive)
+{
+ ASSERT(!isSet());
+ ASSERT(!m_value.primitive);
+ ASSERT(primitive.isPrimitive());
+ m_tag = WeakTypeTag::Primitive;
+ m_value.primitive = primitive;
+}
+
+void JSWeakValue::setObject(JSObject* object, WeakHandleOwner& owner, void* context)
+{
+ ASSERT(!isSet());
+ ASSERT(!m_value.object);
+ m_tag = WeakTypeTag::Object;
+ Weak<JSObject> weak(object, &owner, context);
+ m_value.object.swap(weak);
+}
+
+void JSWeakValue::setString(JSString* string, WeakHandleOwner& owner, void* context)
+{
+ ASSERT(!isSet());
+ ASSERT(!m_value.string);
+ m_tag = WeakTypeTag::String;
+ Weak<JSString> weak(string, &owner, context);
+ m_value.string.swap(weak);
+}
+
+} // namespace JSC
Added: trunk/Source/_javascript_Core/API/JSWeakValue.h (0 => 230025)
--- trunk/Source/_javascript_Core/API/JSWeakValue.h (rev 0)
+++ trunk/Source/_javascript_Core/API/JSWeakValue.h 2018-03-28 09:16:15 UTC (rev 230025)
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2018 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "JSCJSValue.h"
+#include "Weak.h"
+
+namespace JSC {
+
+class JSObject;
+class JSString;
+class WeakHandleOwner;
+
+class JSWeakValue {
+public:
+ JSWeakValue() = default;
+ ~JSWeakValue();
+
+ void clear();
+ bool isClear() const;
+
+ bool isSet() const { return m_tag != WeakTypeTag::NotSet; }
+ bool isPrimitive() const { return m_tag == WeakTypeTag::Primitive; }
+ bool isObject() const { return m_tag == WeakTypeTag::Object; }
+ bool isString() const { return m_tag == WeakTypeTag::String; }
+
+ void setPrimitive(JSValue);
+ void setObject(JSObject*, WeakHandleOwner&, void* context);
+ void setString(JSString*, WeakHandleOwner&, void* context);
+
+ JSObject* object() const
+ {
+ ASSERT(isObject());
+ return m_value.object.get();
+ }
+
+ JSValue primitive() const
+ {
+ ASSERT(isPrimitive());
+ return m_value.primitive;
+ }
+
+ JSString* string() const
+ {
+ ASSERT(isString());
+ return m_value.string.get();
+ }
+
+private:
+ enum class WeakTypeTag { NotSet, Primitive, Object, String };
+
+ WeakTypeTag m_tag { WeakTypeTag::NotSet };
+
+ union WeakValueUnion {
+ WeakValueUnion()
+ : primitive(JSValue())
+ {
+ }
+
+ ~WeakValueUnion()
+ {
+ ASSERT(!primitive);
+ }
+
+ JSValue primitive;
+ Weak<JSObject> object;
+ Weak<JSString> string;
+ } m_value;
+};
+
+} // namespace JSC
Modified: trunk/Source/_javascript_Core/API/glib/JSCWeakValue.cpp (230024 => 230025)
--- trunk/Source/_javascript_Core/API/glib/JSCWeakValue.cpp 2018-03-28 06:21:57 UTC (rev 230024)
+++ trunk/Source/_javascript_Core/API/glib/JSCWeakValue.cpp 2018-03-28 09:16:15 UTC (rev 230025)
@@ -24,7 +24,7 @@
#include "JSCContextPrivate.h"
#include "JSCInlines.h"
#include "JSCValuePrivate.h"
-#include "Weak.h"
+#include "JSWeakValue.h"
#include "WeakHandleOwner.h"
#include <wtf/glib/GRefPtr.h>
#include <wtf/glib/GUniquePtr.h>
@@ -53,124 +53,10 @@
LAST_SIGNAL
};
-// FIXME: move this to its own file to be shared by GLib and Objc APIs.
-class WeakValueRef {
-public:
- ~WeakValueRef()
- {
- clear();
- }
-
- void clear()
- {
- switch (m_tag) {
- case WeakTypeTag::NotSet:
- return;
- case WeakTypeTag::Primitive:
- u.m_primitive = JSC::JSValue();
- return;
- case WeakTypeTag::Object:
- u.m_object.clear();
- return;
- case WeakTypeTag::String:
- u.m_string.clear();
- return;
- }
- RELEASE_ASSERT_NOT_REACHED();
- }
-
- bool isClear() const
- {
- switch (m_tag) {
- case WeakTypeTag::NotSet:
- return true;
- case WeakTypeTag::Primitive:
- return !u.m_primitive;
- case WeakTypeTag::Object:
- return !u.m_object;
- case WeakTypeTag::String:
- return !u.m_string;
- }
- RELEASE_ASSERT_NOT_REACHED();
- }
-
- bool isSet() const { return m_tag != WeakTypeTag::NotSet; }
- bool isPrimitive() const { return m_tag == WeakTypeTag::Primitive; }
- bool isObject() const { return m_tag == WeakTypeTag::Object; }
- bool isString() const { return m_tag == WeakTypeTag::String; }
-
- void setPrimitive(JSC::JSValue primitive)
- {
- ASSERT(!isSet());
- ASSERT(!u.m_primitive);
- ASSERT(primitive.isPrimitive());
- m_tag = WeakTypeTag::Primitive;
- u.m_primitive = primitive;
- }
-
- void setObject(JSC::JSObject* object, JSC::WeakHandleOwner& owner, void* context)
- {
- ASSERT(!isSet());
- ASSERT(!u.m_object);
- m_tag = WeakTypeTag::Object;
- JSC::Weak<JSC::JSObject> weak(object, &owner, context);
- u.m_object.swap(weak);
- }
-
- void setString(JSC::JSString* string, JSC::WeakHandleOwner& owner, void* context)
- {
- ASSERT(!isSet());
- ASSERT(!u.m_object);
- m_tag = WeakTypeTag::String;
- JSC::Weak<JSC::JSString> weak(string, &owner, context);
- u.m_string.swap(weak);
- }
-
- JSC::JSObject* object() const
- {
- ASSERT(isObject());
- return u.m_object.get();
- }
-
- JSC::JSValue primitive() const
- {
- ASSERT(isPrimitive());
- return u.m_primitive;
- }
-
- JSC::JSString* string() const
- {
- ASSERT(isString());
- return u.m_string.get();
- }
-
-private:
- enum class WeakTypeTag { NotSet, Primitive, Object, String };
-
- WeakTypeTag m_tag { WeakTypeTag::NotSet };
-
- union WeakValueUnion {
- public:
- WeakValueUnion()
- : m_primitive(JSC::JSValue())
- {
- }
-
- ~WeakValueUnion()
- {
- ASSERT(!m_primitive);
- }
-
- JSC::JSValue m_primitive;
- JSC::Weak<JSC::JSObject> m_object;
- JSC::Weak<JSC::JSString> m_string;
- } u;
-};
-
struct _JSCWeakValuePrivate {
JSC::Weak<JSC::JSGlobalObject> globalObject;
RefPtr<JSC::JSLock> lock;
- WeakValueRef weakValueRef;
+ JSC::JSWeakValue weakValueRef;
};
static guint signals[LAST_SIGNAL] = { 0, };
Modified: trunk/Source/_javascript_Core/ChangeLog (230024 => 230025)
--- trunk/Source/_javascript_Core/ChangeLog 2018-03-28 06:21:57 UTC (rev 230024)
+++ trunk/Source/_javascript_Core/ChangeLog 2018-03-28 09:16:15 UTC (rev 230025)
@@ -1,3 +1,34 @@
+2018-03-28 Carlos Garcia Campos <[email protected]>
+
+ [JSC] Move WeakValueRef class to its own file and use it from Objc and GLib
+ https://bugs.webkit.org/show_bug.cgi?id=184073
+
+ Reviewed by Yusuke Suzuki.
+
+ We currently have duplicated code in Obj and GLib implementations.
+
+ * API/JSManagedValue.mm:
+ (managedValueHandleOwner):
+ (-[JSManagedValue initWithValue:]):
+ * API/JSWeakValue.cpp: Added.
+ (JSC::JSWeakValue::~JSWeakValue):
+ (JSC::JSWeakValue::clear):
+ (JSC::JSWeakValue::isClear const):
+ (JSC::JSWeakValue::setPrimitive):
+ (JSC::JSWeakValue::setObject):
+ (JSC::JSWeakValue::setString):
+ * API/JSWeakValue.h: Added.
+ (JSC::JSWeakValue::isSet const):
+ (JSC::JSWeakValue::isPrimitive const):
+ (JSC::JSWeakValue::isObject const):
+ (JSC::JSWeakValue::isString const):
+ (JSC::JSWeakValue::object const):
+ (JSC::JSWeakValue::primitive const):
+ (JSC::JSWeakValue::string const):
+ * API/glib/JSCWeakValue.cpp:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * Sources.txt:
+
2018-03-27 Carlos Garcia Campos <[email protected]>
[GLIB] Add JSCWeakValue to _javascript_Core GLib API
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (230024 => 230025)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2018-03-28 06:21:57 UTC (rev 230024)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2018-03-28 09:16:15 UTC (rev 230025)
@@ -1130,6 +1130,7 @@
79EFD4841EBC045C00F3DFEA /* JSWebAssemblyCodeBlockHeapCellType.h in Headers */ = {isa = PBXBuildFile; fileRef = 79EFD4821EBC045C00F3DFEA /* JSWebAssemblyCodeBlockHeapCellType.h */; settings = {ATTRIBUTES = (Private, ); }; };
79F8FC1F1B9FED0F00CA66AB /* DFGMaximalFlushInsertionPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 79F8FC1D1B9FED0F00CA66AB /* DFGMaximalFlushInsertionPhase.h */; };
79FC8A081E32E9F000D88F0E /* DFGRegisteredStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 79FC8A071E32E9F000D88F0E /* DFGRegisteredStructure.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 7A9774A8206B82E4008D03D0 /* JSWeakValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A9774A7206B82C9008D03D0 /* JSWeakValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
7BC547D31B6959A100959B58 /* WasmFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BC547D21B69599B00959B58 /* WasmFormat.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C008CDB187124BB00955C24 /* JSPromiseDeferred.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CD9187124BB00955C24 /* JSPromiseDeferred.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C008CE7187631B600955C24 /* Microtask.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CE5187631B600955C24 /* Microtask.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3661,6 +3662,8 @@
79F8FC1C1B9FED0F00CA66AB /* DFGMaximalFlushInsertionPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGMaximalFlushInsertionPhase.cpp; path = dfg/DFGMaximalFlushInsertionPhase.cpp; sourceTree = "<group>"; };
79F8FC1D1B9FED0F00CA66AB /* DFGMaximalFlushInsertionPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGMaximalFlushInsertionPhase.h; path = dfg/DFGMaximalFlushInsertionPhase.h; sourceTree = "<group>"; };
79FC8A071E32E9F000D88F0E /* DFGRegisteredStructure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGRegisteredStructure.h; path = dfg/DFGRegisteredStructure.h; sourceTree = "<group>"; };
+ 7A9774A6206B828C008D03D0 /* JSWeakValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWeakValue.cpp; sourceTree = "<group>"; };
+ 7A9774A7206B82C9008D03D0 /* JSWeakValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWeakValue.h; sourceTree = "<group>"; };
7BC547D21B69599B00959B58 /* WasmFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmFormat.h; sourceTree = "<group>"; };
7C008CD8187124BB00955C24 /* JSPromiseDeferred.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPromiseDeferred.cpp; sourceTree = "<group>"; };
7C008CD9187124BB00955C24 /* JSPromiseDeferred.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPromiseDeferred.h; sourceTree = "<group>"; };
@@ -5857,6 +5860,8 @@
A7482B791166CDEA003B0712 /* JSWeakObjectMapRefPrivate.h */,
0F0B28691EB8E6CD000EB5D2 /* JSWeakPrivate.cpp */,
0F0B286A1EB8E6CD000EB5D2 /* JSWeakPrivate.h */,
+ 7A9774A6206B828C008D03D0 /* JSWeakValue.cpp */,
+ 7A9774A7206B82C9008D03D0 /* JSWeakValue.h */,
86E3C60C167BAB87006D760A /* JSWrapperMap.h */,
86E3C60B167BAB87006D760A /* JSWrapperMap.mm */,
86F3EEB9168CCF750077B92A /* ObjCCallbackFunction.h */,
@@ -9039,6 +9044,7 @@
A503FA1E188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h in Headers */,
7013CA8C1B491A9400CAE613 /* JSJob.h in Headers */,
BC18C4160E16F5CD00B34460 /* JSLexicalEnvironment.h in Headers */,
+ 7A9774A8206B82E4008D03D0 /* JSWeakValue.h in Headers */,
BC18C4230E16F5CD00B34460 /* JSLock.h in Headers */,
C25D709C16DE99F400FCA6BC /* JSManagedValue.h in Headers */,
2A4BB7F318A41179008A0FCD /* JSManagedValueInternal.h in Headers */,
Modified: trunk/Source/_javascript_Core/Sources.txt (230024 => 230025)
--- trunk/Source/_javascript_Core/Sources.txt 2018-03-28 06:21:57 UTC (rev 230024)
+++ trunk/Source/_javascript_Core/Sources.txt 2018-03-28 09:16:15 UTC (rev 230025)
@@ -37,6 +37,7 @@
API/JSValueRef.cpp
API/JSWeakObjectMapRefPrivate.cpp
API/JSWeakPrivate.cpp
+API/JSWeakValue.cpp
API/OpaqueJSString.cpp
assembler/ARMAssembler.cpp