1 #include "WorkletsCache.h" 2 #include "FrozenObject.h" 3 #include "ShareableValue.h" 4 5 #include <string> 6 #include <utility> 7 8 using namespace ABI48_0_0facebook; 9 10 namespace ABI48_0_0reanimated { 11 12 jsi::Value eval(jsi::Runtime &rt, const char *code) { 13 return rt.global().getPropertyAsFunction(rt, "eval").call(rt, code); 14 } 15 16 jsi::Function function(jsi::Runtime &rt, const std::string &code) { 17 return eval(rt, ("(" + code + ")").c_str()).getObject(rt).getFunction(rt); 18 } 19 20 std::shared_ptr<jsi::Function> WorkletsCache::getFunction( 21 jsi::Runtime &rt, 22 std::shared_ptr<FrozenObject> frozenObj) { 23 long long workletHash = 24 ValueWrapper::asNumber(frozenObj->map["__workletHash"]->valueContainer); 25 if (worklets.count(workletHash) == 0) { 26 auto codeBuffer = std::make_shared<const jsi::StringBuffer>( 27 "(" + 28 ValueWrapper::asString(frozenObj->map["asString"]->valueContainer) + 29 ")"); 30 auto func = rt.evaluateJavaScript( 31 codeBuffer, 32 ValueWrapper::asString( 33 frozenObj->map["__location"]->valueContainer)) 34 .asObject(rt) 35 .asFunction(rt); 36 worklets[workletHash] = std::make_shared<jsi::Function>(std::move(func)); 37 } 38 return worklets[workletHash]; 39 } 40 41 } // namespace reanimated 42