+ if (jsClass->m_staticFunctions) {
+ staticFunctions = std::make_unique<OpaqueJSClassStaticFunctionsTable>();
+ OpaqueJSClassStaticFunctionsTable::const_iterator end = jsClass->m_staticFunctions->end();
+ for (OpaqueJSClassStaticFunctionsTable::const_iterator it = jsClass->m_staticFunctions->begin(); it != end; ++it) {
+ ASSERT(!it->key->isAtomic());
+ staticFunctions->add(it->key->isolatedCopy(), std::make_unique<StaticFunctionEntry>(it->value->callAsFunction, it->value->attributes));
+ }
+ }
+}
+
+OpaqueJSClassContextData& OpaqueJSClass::contextData(ExecState* exec)
+{
+ std::unique_ptr<OpaqueJSClassContextData>& contextData = exec->lexicalGlobalObject()->opaqueJSClassData().add(this, nullptr).iterator->value;
+ if (!contextData)
+ contextData = std::make_unique<OpaqueJSClassContextData>(exec->vm(), this);
+ return *contextData;
+}
+
+String OpaqueJSClass::className()
+{
+ // Make a deep copy, so that the caller has no chance to put the original into AtomicStringTable.
+ return m_className.isolatedCopy();
+}
+
+OpaqueJSClassStaticValuesTable* OpaqueJSClass::staticValues(JSC::ExecState* exec)
+{
+ return contextData(exec).staticValues.get();
+}
+
+OpaqueJSClassStaticFunctionsTable* OpaqueJSClass::staticFunctions(JSC::ExecState* exec)
+{
+ return contextData(exec).staticFunctions.get();