static JSGlueGlobalObject* getThreadGlobalObject() { pthread_once(&globalObjectKeyOnce, initializeGlobalObjectKey); JSGlueGlobalObject* globalObject = static_cast<JSGlueGlobalObject*>(pthread_getspecific(globalObjectKey)); if (!globalObject) { globalObject = new (getThreadGlobalData()) JSGlueGlobalObject(JSGlueGlobalObject::createStructure(jsNull())); gcProtect(globalObject); pthread_setspecific(globalObjectKey, globalObject); } return globalObject; }
void List::append(ValueImp *v) { ListImp *imp = static_cast<ListImp *>(_impBase); int i = imp->size++; #if DUMP_STATISTICS if (imp->size > listSizeHighWaterMark) listSizeHighWaterMark = imp->size; #endif if (imp->valueRefCount > 0) { #if !USE_CONSERVATIVE_GC v->ref(); #endif #if USE_CONSERVATIVE_GC | TEST_CONSERVATIVE_GC gcProtect(v); #endif } if (i < inlineValuesSize) { imp->values[i] = v; return; } if (i >= imp->capacity) { int newCapacity = i * 2; ValueImp **newOverflow = new ValueImp * [newCapacity - inlineValuesSize]; ValueImp **oldOverflow = imp->overflow; int oldOverflowSize = i - inlineValuesSize; for (int j = 0; j != oldOverflowSize; j++) newOverflow[j] = oldOverflow[j]; delete [] oldOverflow; imp->overflow = newOverflow; imp->capacity = newCapacity; } imp->overflow[i - inlineValuesSize] = v; }
void VM::addRegExpToTrace(RegExp* regExp) { gcProtect(regExp); m_rtTraceList->add(regExp); }