1*ab11e3c9SKudo Chien #include "FrozenObject.h"
2*ab11e3c9SKudo Chien #include "RuntimeManager.h"
3*ab11e3c9SKudo Chien #include "ShareableValue.h"
4*ab11e3c9SKudo Chien #include "SharedParent.h"
5*ab11e3c9SKudo Chien 
6*ab11e3c9SKudo Chien namespace reanimated {
7*ab11e3c9SKudo Chien 
FrozenObject(jsi::Runtime & rt,const jsi::Object & object,RuntimeManager * runtimeManager)8*ab11e3c9SKudo Chien FrozenObject::FrozenObject(
9*ab11e3c9SKudo Chien     jsi::Runtime &rt,
10*ab11e3c9SKudo Chien     const jsi::Object &object,
11*ab11e3c9SKudo Chien     RuntimeManager *runtimeManager) {
12*ab11e3c9SKudo Chien   auto propertyNames = object.getPropertyNames(rt);
13*ab11e3c9SKudo Chien   const size_t count = propertyNames.size(rt);
14*ab11e3c9SKudo Chien   namesOrder.reserve(count);
15*ab11e3c9SKudo Chien   for (size_t i = 0; i < count; i++) {
16*ab11e3c9SKudo Chien     auto propertyName = propertyNames.getValueAtIndex(rt, i).asString(rt);
17*ab11e3c9SKudo Chien     namesOrder.push_back(propertyName.utf8(rt));
18*ab11e3c9SKudo Chien     std::string nameStr = propertyName.utf8(rt);
19*ab11e3c9SKudo Chien     map[nameStr] = ShareableValue::adapt(
20*ab11e3c9SKudo Chien         rt, object.getProperty(rt, propertyName), runtimeManager);
21*ab11e3c9SKudo Chien     this->containsHostFunction |= map[nameStr]->containsHostFunction;
22*ab11e3c9SKudo Chien   }
23*ab11e3c9SKudo Chien }
24*ab11e3c9SKudo Chien 
shallowClone(jsi::Runtime & rt)25*ab11e3c9SKudo Chien jsi::Object FrozenObject::shallowClone(jsi::Runtime &rt) {
26*ab11e3c9SKudo Chien   jsi::Object object(rt);
27*ab11e3c9SKudo Chien   for (auto propName : namesOrder) {
28*ab11e3c9SKudo Chien     auto value = map[propName];
29*ab11e3c9SKudo Chien     object.setProperty(
30*ab11e3c9SKudo Chien         rt, jsi::String::createFromUtf8(rt, propName), value->getValue(rt));
31*ab11e3c9SKudo Chien   }
32*ab11e3c9SKudo Chien   return object;
33*ab11e3c9SKudo Chien }
34*ab11e3c9SKudo Chien 
35*ab11e3c9SKudo Chien } // namespace reanimated
36