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