mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Clarify const-ness of JSI references
Summary: Many operations on references in JS can modify the referent by executing additional JS, including operations that we currently mark as const such as `getProperty`. Because of this, the current distinction between const and non-const operations on references like `jsi::Object` is somewhat arbitrary. A more consistent approach is to mark all operations as const, so that it is clear that the const-ness applies to the reference and not the referent. This is analogous to how smart pointers work, since something like `const shared_ptr<T>` only makes the pointer const, as opposed to `shared_ptr<const T>`. This also gives users better guarantees and more flexibility in where these references may be used. Changelog: [General][Changed] - Mark methods on JSI references as const. Reviewed By: fbmal7 Differential Revision: D41599116 fbshipit-source-id: 40b1537581b09c5a34d0928ee04e7db2b50d26ea
This commit is contained in:
committed by
Facebook GitHub Bot
parent
c4862a2322
commit
03b17d9af7
@@ -187,11 +187,11 @@ class JSCRuntime : public jsi::Runtime {
|
||||
bool hasProperty(const jsi::Object &, const jsi::String &name) override;
|
||||
bool hasProperty(const jsi::Object &, const jsi::PropNameID &name) override;
|
||||
void setPropertyValue(
|
||||
jsi::Object &,
|
||||
const jsi::Object &,
|
||||
const jsi::String &name,
|
||||
const jsi::Value &value) override;
|
||||
void setPropertyValue(
|
||||
jsi::Object &,
|
||||
const jsi::Object &,
|
||||
const jsi::PropNameID &name,
|
||||
const jsi::Value &value) override;
|
||||
bool isArray(const jsi::Object &) const override;
|
||||
@@ -203,7 +203,7 @@ class JSCRuntime : public jsi::Runtime {
|
||||
|
||||
// TODO: revisit this implementation
|
||||
jsi::WeakObject createWeakObject(const jsi::Object &) override;
|
||||
jsi::Value lockWeakObject(jsi::WeakObject &) override;
|
||||
jsi::Value lockWeakObject(const jsi::WeakObject &) override;
|
||||
|
||||
jsi::Array createArray(size_t length) override;
|
||||
jsi::ArrayBuffer createArrayBuffer(
|
||||
@@ -212,8 +212,10 @@ class JSCRuntime : public jsi::Runtime {
|
||||
size_t size(const jsi::ArrayBuffer &) override;
|
||||
uint8_t *data(const jsi::ArrayBuffer &) override;
|
||||
jsi::Value getValueAtIndex(const jsi::Array &, size_t i) override;
|
||||
void setValueAtIndexImpl(jsi::Array &, size_t i, const jsi::Value &value)
|
||||
override;
|
||||
void setValueAtIndexImpl(
|
||||
const jsi::Array &,
|
||||
size_t i,
|
||||
const jsi::Value &value) override;
|
||||
|
||||
jsi::Function createFunctionFromHostFunction(
|
||||
const jsi::PropNameID &name,
|
||||
@@ -949,7 +951,7 @@ bool JSCRuntime::hasProperty(
|
||||
}
|
||||
|
||||
void JSCRuntime::setPropertyValue(
|
||||
jsi::Object &object,
|
||||
const jsi::Object &object,
|
||||
const jsi::PropNameID &name,
|
||||
const jsi::Value &value) {
|
||||
JSValueRef exc = nullptr;
|
||||
@@ -964,7 +966,7 @@ void JSCRuntime::setPropertyValue(
|
||||
}
|
||||
|
||||
void JSCRuntime::setPropertyValue(
|
||||
jsi::Object &object,
|
||||
const jsi::Object &object,
|
||||
const jsi::String &name,
|
||||
const jsi::Value &value) {
|
||||
JSValueRef exc = nullptr;
|
||||
@@ -1064,7 +1066,7 @@ jsi::WeakObject JSCRuntime::createWeakObject(const jsi::Object &obj) {
|
||||
#endif
|
||||
}
|
||||
|
||||
jsi::Value JSCRuntime::lockWeakObject(jsi::WeakObject &obj) {
|
||||
jsi::Value JSCRuntime::lockWeakObject(const jsi::WeakObject &obj) {
|
||||
#ifdef RN_FABRIC_ENABLED
|
||||
// TODO: revisit this implementation
|
||||
JSObjectRef objRef = objectRef(obj);
|
||||
@@ -1107,7 +1109,7 @@ jsi::Value JSCRuntime::getValueAtIndex(const jsi::Array &arr, size_t i) {
|
||||
}
|
||||
|
||||
void JSCRuntime::setValueAtIndexImpl(
|
||||
jsi::Array &arr,
|
||||
const jsi::Array &arr,
|
||||
size_t i,
|
||||
const jsi::Value &value) {
|
||||
JSValueRef exc = nullptr;
|
||||
|
||||
@@ -264,11 +264,13 @@ class RuntimeDecorator : public Base, private jsi::Instrumentation {
|
||||
bool hasProperty(const Object& o, const String& name) override {
|
||||
return plain_.hasProperty(o, name);
|
||||
};
|
||||
void setPropertyValue(Object& o, const PropNameID& name, const Value& value)
|
||||
override {
|
||||
void setPropertyValue(
|
||||
const Object& o,
|
||||
const PropNameID& name,
|
||||
const Value& value) override {
|
||||
plain_.setPropertyValue(o, name, value);
|
||||
};
|
||||
void setPropertyValue(Object& o, const String& name, const Value& value)
|
||||
void setPropertyValue(const Object& o, const String& name, const Value& value)
|
||||
override {
|
||||
plain_.setPropertyValue(o, name, value);
|
||||
};
|
||||
@@ -295,7 +297,7 @@ class RuntimeDecorator : public Base, private jsi::Instrumentation {
|
||||
WeakObject createWeakObject(const Object& o) override {
|
||||
return plain_.createWeakObject(o);
|
||||
};
|
||||
Value lockWeakObject(WeakObject& wo) override {
|
||||
Value lockWeakObject(const WeakObject& wo) override {
|
||||
return plain_.lockWeakObject(wo);
|
||||
};
|
||||
|
||||
@@ -318,7 +320,8 @@ class RuntimeDecorator : public Base, private jsi::Instrumentation {
|
||||
Value getValueAtIndex(const Array& a, size_t i) override {
|
||||
return plain_.getValueAtIndex(a, i);
|
||||
};
|
||||
void setValueAtIndexImpl(Array& a, size_t i, const Value& value) override {
|
||||
void setValueAtIndexImpl(const Array& a, size_t i, const Value& value)
|
||||
override {
|
||||
plain_.setValueAtIndexImpl(a, i, value);
|
||||
};
|
||||
|
||||
@@ -656,12 +659,14 @@ class WithRuntimeDecorator : public RuntimeDecorator<Plain, Base> {
|
||||
Around around{with_};
|
||||
return RD::hasProperty(o, name);
|
||||
};
|
||||
void setPropertyValue(Object& o, const PropNameID& name, const Value& value)
|
||||
override {
|
||||
void setPropertyValue(
|
||||
const Object& o,
|
||||
const PropNameID& name,
|
||||
const Value& value) override {
|
||||
Around around{with_};
|
||||
RD::setPropertyValue(o, name, value);
|
||||
};
|
||||
void setPropertyValue(Object& o, const String& name, const Value& value)
|
||||
void setPropertyValue(const Object& o, const String& name, const Value& value)
|
||||
override {
|
||||
Around around{with_};
|
||||
RD::setPropertyValue(o, name, value);
|
||||
@@ -696,7 +701,7 @@ class WithRuntimeDecorator : public RuntimeDecorator<Plain, Base> {
|
||||
Around around{with_};
|
||||
return RD::createWeakObject(o);
|
||||
};
|
||||
Value lockWeakObject(WeakObject& wo) override {
|
||||
Value lockWeakObject(const WeakObject& wo) override {
|
||||
Around around{with_};
|
||||
return RD::lockWeakObject(wo);
|
||||
};
|
||||
@@ -725,7 +730,8 @@ class WithRuntimeDecorator : public RuntimeDecorator<Plain, Base> {
|
||||
Around around{with_};
|
||||
return RD::getValueAtIndex(a, i);
|
||||
};
|
||||
void setValueAtIndexImpl(Array& a, size_t i, const Value& value) override {
|
||||
void setValueAtIndexImpl(const Array& a, size_t i, const Value& value)
|
||||
override {
|
||||
Around around{with_};
|
||||
RD::setValueAtIndexImpl(a, i, value);
|
||||
};
|
||||
|
||||
@@ -111,19 +111,21 @@ inline bool Object::hasProperty(Runtime& runtime, const PropNameID& name)
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void Object::setProperty(Runtime& runtime, const char* name, T&& value) {
|
||||
void Object::setProperty(Runtime& runtime, const char* name, T&& value) const {
|
||||
setProperty(
|
||||
runtime, String::createFromAscii(runtime, name), std::forward<T>(value));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void Object::setProperty(Runtime& runtime, const String& name, T&& value) {
|
||||
void Object::setProperty(Runtime& runtime, const String& name, T&& value)
|
||||
const {
|
||||
setPropertyValue(
|
||||
runtime, name, detail::toValue(runtime, std::forward<T>(value)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void Object::setProperty(Runtime& runtime, const PropNameID& name, T&& value) {
|
||||
void Object::setProperty(Runtime& runtime, const PropNameID& name, T&& value)
|
||||
const {
|
||||
setPropertyValue(
|
||||
runtime, name, detail::toValue(runtime, std::forward<T>(value)));
|
||||
}
|
||||
@@ -229,12 +231,12 @@ inline Array Object::getPropertyNames(Runtime& runtime) const {
|
||||
return runtime.getPropertyNames(*this);
|
||||
}
|
||||
|
||||
inline Value WeakObject::lock(Runtime& runtime) {
|
||||
inline Value WeakObject::lock(Runtime& runtime) const {
|
||||
return runtime.lockWeakObject(*this);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void Array::setValueAtIndex(Runtime& runtime, size_t i, T&& value) {
|
||||
void Array::setValueAtIndex(Runtime& runtime, size_t i, T&& value) const {
|
||||
setValueAtIndexImpl(
|
||||
runtime, i, detail::toValue(runtime, std::forward<T>(value)));
|
||||
}
|
||||
|
||||
+22
-16
@@ -336,10 +336,12 @@ class JSI_EXPORT Runtime {
|
||||
virtual Value getProperty(const Object&, const String& name) = 0;
|
||||
virtual bool hasProperty(const Object&, const PropNameID& name) = 0;
|
||||
virtual bool hasProperty(const Object&, const String& name) = 0;
|
||||
virtual void setPropertyValue(
|
||||
const Object&,
|
||||
const PropNameID& name,
|
||||
const Value& value) = 0;
|
||||
virtual void
|
||||
setPropertyValue(Object&, const PropNameID& name, const Value& value) = 0;
|
||||
virtual void
|
||||
setPropertyValue(Object&, const String& name, const Value& value) = 0;
|
||||
setPropertyValue(const Object&, const String& name, const Value& value) = 0;
|
||||
|
||||
virtual bool isArray(const Object&) const = 0;
|
||||
virtual bool isArrayBuffer(const Object&) const = 0;
|
||||
@@ -349,7 +351,7 @@ class JSI_EXPORT Runtime {
|
||||
virtual Array getPropertyNames(const Object&) = 0;
|
||||
|
||||
virtual WeakObject createWeakObject(const Object&) = 0;
|
||||
virtual Value lockWeakObject(WeakObject&) = 0;
|
||||
virtual Value lockWeakObject(const WeakObject&) = 0;
|
||||
|
||||
virtual Array createArray(size_t length) = 0;
|
||||
virtual ArrayBuffer createArrayBuffer(
|
||||
@@ -358,7 +360,8 @@ class JSI_EXPORT Runtime {
|
||||
virtual size_t size(const ArrayBuffer&) = 0;
|
||||
virtual uint8_t* data(const ArrayBuffer&) = 0;
|
||||
virtual Value getValueAtIndex(const Array&, size_t i) = 0;
|
||||
virtual void setValueAtIndexImpl(Array&, size_t i, const Value& value) = 0;
|
||||
virtual void
|
||||
setValueAtIndexImpl(const Array&, size_t i, const Value& value) = 0;
|
||||
|
||||
virtual Function createFunctionFromHostFunction(
|
||||
const PropNameID& name,
|
||||
@@ -666,7 +669,7 @@ class JSI_EXPORT Object : public Pointer {
|
||||
}
|
||||
|
||||
/// \return the result of `this instanceOf ctor` in JS.
|
||||
bool instanceOf(Runtime& rt, const Function& ctor) {
|
||||
bool instanceOf(Runtime& rt, const Function& ctor) const {
|
||||
return rt.instanceOf(*this, ctor);
|
||||
}
|
||||
|
||||
@@ -701,19 +704,19 @@ class JSI_EXPORT Object : public Pointer {
|
||||
/// used to make one: nullptr_t, bool, double, int, const char*,
|
||||
/// String, or Object.
|
||||
template <typename T>
|
||||
void setProperty(Runtime& runtime, const char* name, T&& value);
|
||||
void setProperty(Runtime& runtime, const char* name, T&& value) const;
|
||||
|
||||
/// Sets the property value from a Value or anything which can be
|
||||
/// used to make one: nullptr_t, bool, double, int, const char*,
|
||||
/// String, or Object.
|
||||
template <typename T>
|
||||
void setProperty(Runtime& runtime, const String& name, T&& value);
|
||||
void setProperty(Runtime& runtime, const String& name, T&& value) const;
|
||||
|
||||
/// Sets the property value from a Value or anything which can be
|
||||
/// used to make one: nullptr_t, bool, double, int, const char*,
|
||||
/// String, or Object.
|
||||
template <typename T>
|
||||
void setProperty(Runtime& runtime, const PropNameID& name, T&& value);
|
||||
void setProperty(Runtime& runtime, const PropNameID& name, T&& value) const;
|
||||
|
||||
/// \return true iff JS \c Array.isArray() would return \c true. If
|
||||
/// so, then \c getArray() will succeed.
|
||||
@@ -832,15 +835,17 @@ class JSI_EXPORT Object : public Pointer {
|
||||
Array getPropertyNames(Runtime& runtime) const;
|
||||
|
||||
protected:
|
||||
void
|
||||
setPropertyValue(Runtime& runtime, const String& name, const Value& value) {
|
||||
void setPropertyValue(
|
||||
Runtime& runtime,
|
||||
const String& name,
|
||||
const Value& value) const {
|
||||
return runtime.setPropertyValue(*this, name, value);
|
||||
}
|
||||
|
||||
void setPropertyValue(
|
||||
Runtime& runtime,
|
||||
const PropNameID& name,
|
||||
const Value& value) {
|
||||
const Value& value) const {
|
||||
return runtime.setPropertyValue(*this, name, value);
|
||||
}
|
||||
|
||||
@@ -866,7 +871,7 @@ class JSI_EXPORT WeakObject : public Pointer {
|
||||
/// otherwise returns \c undefined. Note that this method has nothing to do
|
||||
/// with threads or concurrency. The name is based on std::weak_ptr::lock()
|
||||
/// which serves a similar purpose.
|
||||
Value lock(Runtime& runtime);
|
||||
Value lock(Runtime& runtime) const;
|
||||
|
||||
friend class Runtime;
|
||||
};
|
||||
@@ -902,7 +907,7 @@ class JSI_EXPORT Array : public Object {
|
||||
/// value behaves as with Object::setProperty(). If \c i is out of
|
||||
/// range [ 0..\c length ] throws a JSIException.
|
||||
template <typename T>
|
||||
void setValueAtIndex(Runtime& runtime, size_t i, T&& value);
|
||||
void setValueAtIndex(Runtime& runtime, size_t i, T&& value) const;
|
||||
|
||||
/// There is no current API for changing the size of an array once
|
||||
/// created. We'll probably need that eventually.
|
||||
@@ -920,7 +925,8 @@ class JSI_EXPORT Array : public Object {
|
||||
friend class Object;
|
||||
friend class Value;
|
||||
|
||||
void setValueAtIndexImpl(Runtime& runtime, size_t i, const Value& value) {
|
||||
void setValueAtIndexImpl(Runtime& runtime, size_t i, const Value& value)
|
||||
const {
|
||||
return runtime.setValueAtIndexImpl(*this, i, value);
|
||||
}
|
||||
|
||||
@@ -946,7 +952,7 @@ class JSI_EXPORT ArrayBuffer : public Object {
|
||||
return runtime.size(*this);
|
||||
}
|
||||
|
||||
uint8_t* data(Runtime& runtime) {
|
||||
uint8_t* data(Runtime& runtime) const {
|
||||
return runtime.data(*this);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user