Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (87345 => 87346)
--- trunk/Source/_javascript_Core/ChangeLog 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/ChangeLog 2011-05-26 01:12:46 UTC (rev 87346)
@@ -1,9 +1,5 @@
2011-05-25 Oliver Hunt <oli...@apple.com>
- Revert last change, something weird happened when I went to land.
-
-2011-05-25 Oliver Hunt <oli...@apple.com>
-
Reviewed by Geoffrey Garen.
Make RegExp GC allocated
Modified: trunk/Source/_javascript_Core/_javascript_Core.exp (87345 => 87346)
--- trunk/Source/_javascript_Core/_javascript_Core.exp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/_javascript_Core.exp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -137,7 +137,7 @@
__ZN3JSC12JSGlobalData6createENS_15ThreadStackTypeE
__ZN3JSC12JSGlobalDataD1Ev
__ZN3JSC12RegExpObject6s_infoE
-__ZN3JSC12RegExpObjectC1EPNS_14JSGlobalObjectEPNS_9StructureEN3WTF17NonNullPassRefPtrINS_6RegExpEEE
+__ZN3JSC12RegExpObjectC1EPNS_14JSGlobalObjectEPNS_9StructureEPNS_6RegExpE
__ZN3JSC12SamplingTool5setupEv
__ZN3JSC12SmallStrings17createEmptyStringEPNS_12JSGlobalDataE
__ZN3JSC12SmallStrings27createSingleCharacterStringEPNS_12JSGlobalDataEh
Modified: trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def (87345 => 87346)
--- trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def 2011-05-26 01:12:46 UTC (rev 87346)
@@ -18,7 +18,7 @@
??0MD5@WTF@@QAE@XZ
??0Mutex@WTF@@QAE@XZ
??0RefCountedLeakCounter@WTF@@QAE@PBD@Z
- ??0RegExpObject@JSC@@QAE@PAVJSGlobalObject@1@PAVStructure@1@V?$NonNullPassRefPtr@VRegExp@JSC@@@WTF@@@Z
+ ??0RegExpObject@JSC@@QAE@PAVJSGlobalObject@1@PAVStructure@1@PAVRegExp@1@JSC@@@WTF@@@Z
??0SHA1@WTF@@QAE@XZ
??0StringObject@JSC@@QAE@PAVExecState@1@PAVStructure@1@ABVUString@1@@Z
??0Structure@JSC@@AAE@AAVJSGlobalData@1@VJSValue@1@ABVTypeInfo@1@IPBUClassInfo@1@@Z
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -1470,8 +1470,13 @@
{
visitor.append(&m_globalObject);
visitor.append(&m_ownerExecutable);
- if (m_rareData)
+ if (m_rareData) {
m_rareData->m_evalCodeCache.visitAggregate(visitor);
+ size_t regExpCount = m_rareData->m_regexps.size();
+ WriteBarrier<RegExp>* regexps = m_rareData->m_regexps.data();
+ for (size_t i = 0; i < regExpCount; i++)
+ visitor.append(regexps + i);
+ }
visitor.appendValues(m_constantRegisters.data(), m_constantRegisters.size());
for (size_t i = 0; i < m_functionExprs.size(); ++i)
visitor.append(&m_functionExprs[i]);
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (87345 => 87346)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -36,7 +36,7 @@
#include "JSGlobalObject.h"
#include "JumpTable.h"
#include "Nodes.h"
-#include "RegExp.h"
+#include "RegExpObject.h"
#include "UString.h"
#include <wtf/FastAllocBase.h>
#include <wtf/PassOwnPtr.h>
@@ -451,7 +451,13 @@
}
FunctionExecutable* functionExpr(int index) { return m_functionExprs[index].get(); }
- unsigned addRegExp(PassRefPtr<RegExp> r) { createRareDataIfNecessary(); unsigned size = m_rareData->m_regexps.size(); m_rareData->m_regexps.append(r); return size; }
+ unsigned addRegExp(RegExp* r)
+ {
+ createRareDataIfNecessary();
+ unsigned size = m_rareData->m_regexps.size();
+ m_rareData->m_regexps.append(WriteBarrier<RegExp>(*m_globalData, ownerExecutable(), r));
+ return size;
+ }
RegExp* regexp(int index) const { ASSERT(m_rareData); return m_rareData->m_regexps[index].get(); }
JSGlobalObject* globalObject() { return m_globalObject.get(); }
@@ -555,7 +561,7 @@
Vector<HandlerInfo> m_exceptionHandlers;
// Rare Constants
- Vector<RefPtr<RegExp> > m_regexps;
+ Vector<WriteBarrier<RegExp> > m_regexps;
// Jump Tables
Vector<SimpleJumpTable> m_immediateSwitchJumpTables;
Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -966,7 +966,7 @@
return &m_constantPoolRegisters[index];
}
-unsigned BytecodeGenerator::addRegExp(PassRefPtr<RegExp> r)
+unsigned BytecodeGenerator::addRegExp(RegExp* r)
{
return m_codeBlock->addRegExp(r);
}
@@ -1592,7 +1592,7 @@
return dst;
}
-RegisterID* BytecodeGenerator::emitNewRegExp(RegisterID* dst, PassRefPtr<RegExp> regExp)
+RegisterID* BytecodeGenerator::emitNewRegExp(RegisterID* dst, RegExp* regExp)
{
emitOpcode(op_new_regexp);
instructions().append(dst->index());
Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h (87345 => 87346)
--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -291,7 +291,7 @@
RegisterID* emitLazyNewFunction(RegisterID* dst, FunctionBodyNode* body);
RegisterID* emitNewFunctionInternal(RegisterID* dst, unsigned index, bool shouldNullCheck);
RegisterID* emitNewFunctionExpression(RegisterID* dst, FuncExprNode* func);
- RegisterID* emitNewRegExp(RegisterID* dst, PassRefPtr<RegExp> regExp);
+ RegisterID* emitNewRegExp(RegisterID* dst, RegExp*);
RegisterID* emitMove(RegisterID* dst, RegisterID* src);
@@ -475,7 +475,7 @@
unsigned addConstant(const Identifier&);
RegisterID* addConstantValue(JSValue);
- unsigned addRegExp(PassRefPtr<RegExp>);
+ unsigned addRegExp(RegExp*);
FunctionExecutable* makeFunction(ExecState* exec, FunctionBodyNode* body)
{
Modified: trunk/Source/_javascript_Core/runtime/JSCell.h (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/JSCell.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/JSCell.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -71,6 +71,7 @@
friend class ScopeChainNode;
friend class Structure;
friend class StructureChain;
+ friend class RegExp;
enum CreatingEarlyCellTag { CreatingEarlyCell };
protected:
Modified: trunk/Source/_javascript_Core/runtime/JSGlobalData.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/JSGlobalData.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalData.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -52,6 +52,7 @@
#include "Nodes.h"
#include "Parser.h"
#include "RegExpCache.h"
+#include "RegExpObject.h"
#include "StrictEvalActivation.h"
#include <wtf/WTFThreadData.h>
#if ENABLE(REGEXP_TRACING)
@@ -219,6 +220,7 @@
programExecutableStructure.set(*this, ProgramExecutable::createStructure(*this, jsNull()));
functionExecutableStructure.set(*this, FunctionExecutable::createStructure(*this, jsNull()));
dummyMarkableCellStructure.set(*this, JSCell::createDummyStructure(*this));
+ regExpStructure.set(*this, RegExp::createStructure(*this, jsNull()));
structureChainStructure.set(*this, StructureChain::createStructure(*this, jsNull()));
#if ENABLE(JSC_ZOMBIES)
@@ -279,8 +281,9 @@
programExecutableStructure.clear();
functionExecutableStructure.clear();
dummyMarkableCellStructure.clear();
+ regExpStructure.clear();
structureChainStructure.clear();
-
+
#if ENABLE(JSC_ZOMBIES)
zombieStructure.clear();
#endif
@@ -446,7 +449,7 @@
}
#if ENABLE(REGEXP_TRACING)
-void JSGlobalData::addRegExpToTrace(PassRefPtr<RegExp> regExp)
+void JSGlobalData::addRegExpToTrace(RegExp* regExp)
{
m_rtTraceList->add(regExp);
}
Modified: trunk/Source/_javascript_Core/runtime/JSGlobalData.h (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/JSGlobalData.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalData.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -174,6 +174,7 @@
Strong<Structure> programExecutableStructure;
Strong<Structure> functionExecutableStructure;
Strong<Structure> dummyMarkableCellStructure;
+ Strong<Structure> regExpStructure;
Strong<Structure> structureChainStructure;
#if ENABLE(JSC_ZOMBIES)
Modified: trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -222,7 +222,9 @@
m_datePrototype.set(exec->globalData(), this, new (exec) DatePrototype(exec, this, DatePrototype::createStructure(exec->globalData(), m_objectPrototype.get())));
m_dateStructure.set(exec->globalData(), this, DateInstance::createStructure(exec->globalData(), m_datePrototype.get()));
- m_regExpPrototype.set(exec->globalData(), this, new (exec) RegExpPrototype(exec, this, RegExpPrototype::createStructure(exec->globalData(), m_objectPrototype.get())));
+ RegExp* emptyRegex = RegExp::create(&exec->globalData(), "", NoFlags);
+
+ m_regExpPrototype.set(exec->globalData(), this, new (exec) RegExpPrototype(exec, this, RegExpPrototype::createStructure(exec->globalData(), m_objectPrototype.get()), emptyRegex));
m_regExpStructure.set(exec->globalData(), this, RegExpObject::createStructure(exec->globalData(), m_regExpPrototype.get()));
m_methodCallDummy.set(exec->globalData(), this, constructEmptyObject(exec));
Modified: trunk/Source/_javascript_Core/runtime/RegExp.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExp.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExp.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -34,6 +34,8 @@
namespace JSC {
+const ClassInfo RegExp::s_info = { "RegExp", 0, 0, 0 };
+
RegExpFlags regExpFlags(const UString& string)
{
RegExpFlags flags = NoFlags;
@@ -73,8 +75,9 @@
OwnPtr<Yarr::BytecodePattern> m_regExpBytecode;
};
-inline RegExp::RegExp(JSGlobalData*, const UString& patternString, RegExpFlags flags)
- : m_state(NotCompiled)
+inline RegExp::RegExp(JSGlobalData* globalData, const UString& patternString, RegExpFlags flags)
+ : JSCell(*globalData, globalData->regExpStructure.get())
+ , m_state(NotCompiled)
, m_patternString(patternString)
, m_flags(flags)
, m_constructionError(0)
@@ -95,13 +98,13 @@
{
}
-PassRefPtr<RegExp> RegExp::create(JSGlobalData* globalData, const UString& patternString, RegExpFlags flags)
+RegExp* RegExp::create(JSGlobalData* globalData, const UString& patternString, RegExpFlags flags)
{
- RefPtr<RegExp> res = adoptRef(new RegExp(globalData, patternString, flags));
+ RegExp* res = new (globalData) RegExp(globalData, patternString, flags);
#if ENABLE(REGEXP_TRACING)
globalData->addRegExpToTrace(res);
#endif
- return res.release();
+ return res;
}
void RegExp::compile(JSGlobalData* globalData)
@@ -194,6 +197,10 @@
return -1;
}
+void RegExp::invalidateCode()
+{
+ m_representation.clear();
+}
#if ENABLE(YARR_JIT_DEBUG)
void RegExp::matchCompareWithInterpreter(const UString& s, int startOffset, int* offsetVector, int jitResult)
Modified: trunk/Source/_javascript_Core/runtime/RegExp.h (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExp.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExp.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -24,6 +24,7 @@
#include "UString.h"
#include "ExecutableAllocator.h"
+#include "Structure.h"
#include "RegExpKey.h"
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
@@ -35,9 +36,9 @@
RegExpFlags regExpFlags(const UString&);
- class RegExp : public RefCounted<RegExp> {
+ class RegExp : public JSCell {
public:
- static PassRefPtr<RegExp> create(JSGlobalData* globalData, const UString& pattern, RegExpFlags);
+ static RegExp* create(JSGlobalData*, const UString& pattern, RegExpFlags);
~RegExp();
bool global() const { return m_flags & FlagGlobal; }
@@ -52,10 +53,19 @@
int match(JSGlobalData&, const UString&, int startOffset, Vector<int, 32>* ovector = 0);
unsigned numSubpatterns() const { return m_numSubpatterns; }
+ void invalidateCode();
+
#if ENABLE(REGEXP_TRACING)
void printTraceData();
#endif
+ static Structure* createStructure(JSGlobalData& globalData, JSValue prototype)
+ {
+ return Structure::create(globalData, prototype, TypeInfo(LeafType, 0), 0, &s_info);
+ }
+
+ static JS_EXPORTDATA const ClassInfo s_info;
+
private:
RegExp(JSGlobalData* globalData, const UString& pattern, RegExpFlags);
Modified: trunk/Source/_javascript_Core/runtime/RegExpCache.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpCache.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpCache.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -28,31 +28,31 @@
#include "config.h"
#include "RegExpCache.h"
+#include "RegExpObject.h"
namespace JSC {
-PassRefPtr<RegExp> RegExpCache::lookupOrCreate(const UString& patternString, RegExpFlags flags)
+RegExp* RegExpCache::lookupOrCreate(const UString& patternString, RegExpFlags flags)
{
if (patternString.length() < maxCacheablePatternLength) {
- pair<RegExpCacheMap::iterator, bool> result = m_cacheMap.add(RegExpKey(flags, patternString), 0);
+ pair<RegExpCacheMap::iterator, bool> result = m_cacheMap.add(RegExpKey(flags, patternString), Strong<RegExp>());
if (!result.second)
- return result.first->second;
+ return result.first->second.get();
else
return create(patternString, flags, result.first);
}
return create(patternString, flags, m_cacheMap.end());
}
-PassRefPtr<RegExp> RegExpCache::create(const UString& patternString, RegExpFlags flags, RegExpCacheMap::iterator iterator)
+RegExp* RegExpCache::create(const UString& patternString, RegExpFlags flags, RegExpCacheMap::iterator iterator)
{
- RefPtr<RegExp> regExp = RegExp::create(m_globalData, patternString, flags);
-
+ RegExp* regExp = RegExp::create(m_globalData, patternString, flags);
if (patternString.length() >= maxCacheablePatternLength)
return regExp;
RegExpKey key = RegExpKey(flags, patternString);
iterator->first = key;
- iterator->second = regExp;
+ iterator->second.set(*m_globalData, regExp);
++m_nextKeyToEvict;
if (m_nextKeyToEvict == maxCacheableEntries) {
Modified: trunk/Source/_javascript_Core/runtime/RegExpCache.h (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpCache.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpCache.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -27,6 +27,7 @@
#include "RegExp.h"
#include "RegExpKey.h"
+#include "Strong.h"
#include "UString.h"
#include <wtf/FixedArray.h>
#include <wtf/HashMap.h>
@@ -38,11 +39,11 @@
class RegExpCache {
-typedef HashMap<RegExpKey, RefPtr<RegExp> > RegExpCacheMap;
+typedef HashMap<RegExpKey, Strong<RegExp> > RegExpCacheMap;
public:
- PassRefPtr<RegExp> lookupOrCreate(const UString& patternString, RegExpFlags);
- PassRefPtr<RegExp> create(const UString& patternString, RegExpFlags, RegExpCacheMap::iterator);
+ RegExp* lookupOrCreate(const UString& patternString, RegExpFlags);
+ RegExp* create(const UString& patternString, RegExpFlags, RegExpCacheMap::iterator);
RegExpCache(JSGlobalData* globalData);
private:
Modified: trunk/Source/_javascript_Core/runtime/RegExpConstructor.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpConstructor.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpConstructor.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -317,10 +317,10 @@
return throwError(exec, createSyntaxError(exec, "Invalid flags supplied to RegExp constructor."));
}
- RefPtr<RegExp> regExp = exec->globalData().regExpCache()->lookupOrCreate(pattern, flags);
+ RegExp* regExp = exec->globalData().regExpCache()->lookupOrCreate(pattern, flags);
if (!regExp->isValid())
return throwError(exec, createSyntaxError(exec, regExp->errorMessage()));
- return new (exec) RegExpObject(exec->lexicalGlobalObject(), globalObject->regExpStructure(), regExp.release());
+ return new (exec) RegExpObject(exec->lexicalGlobalObject(), globalObject->regExpStructure(), regExp);
}
static EncodedJSValue JSC_HOST_CALL constructWithRegExpConstructor(ExecState* exec)
Modified: trunk/Source/_javascript_Core/runtime/RegExpObject.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpObject.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpObject.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -61,9 +61,9 @@
@end
*/
-RegExpObject::RegExpObject(JSGlobalObject* globalObject, Structure* structure, NonNullPassRefPtr<RegExp> regExp)
+RegExpObject::RegExpObject(JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)
: JSObjectWithGlobalObject(globalObject, structure)
- , d(adoptPtr(new RegExpObjectData(regExp)))
+ , d(adoptPtr(new RegExpObjectData(globalObject->globalData(), this, regExp)))
{
ASSERT(inherits(&s_info));
}
@@ -78,6 +78,8 @@
COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
ASSERT(structure()->typeInfo().overridesVisitChildren());
Base::visitChildren(visitor);
+ if (d->regExp)
+ visitor.append(&d->regExp);
if (UNLIKELY(!d->lastIndex.get().isInt32()))
visitor.append(&d->lastIndex);
}
Modified: trunk/Source/_javascript_Core/runtime/RegExpObject.h (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpObject.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpObject.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -25,15 +25,15 @@
#include "RegExp.h"
namespace JSC {
-
+
class RegExpObject : public JSObjectWithGlobalObject {
public:
typedef JSObjectWithGlobalObject Base;
- RegExpObject(JSGlobalObject*, Structure*, NonNullPassRefPtr<RegExp>);
+ RegExpObject(JSGlobalObject*, Structure*, RegExp*);
virtual ~RegExpObject();
- void setRegExp(PassRefPtr<RegExp> r) { d->regExp = r; }
+ void setRegExp(JSGlobalData& globalData, RegExp* r) { d->regExp.set(globalData, this, r); }
RegExp* regExp() const { return d->regExp.get(); }
void setLastIndex(size_t lastIndex)
@@ -74,13 +74,13 @@
struct RegExpObjectData {
WTF_MAKE_FAST_ALLOCATED;
public:
- RegExpObjectData(NonNullPassRefPtr<RegExp> regExp)
- : regExp(regExp)
+ RegExpObjectData(JSGlobalData& globalData, RegExpObject* owner, RegExp* regExp)
+ : regExp(globalData, owner, regExp)
{
lastIndex.setWithoutWriteBarrier(jsNumber(0));
}
- RefPtr<RegExp> regExp;
+ WriteBarrier<RegExp> regExp;
WriteBarrier<Unknown> lastIndex;
};
#if COMPILER(MSVC)
Modified: trunk/Source/_javascript_Core/runtime/RegExpPrototype.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpPrototype.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpPrototype.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -62,8 +62,8 @@
ASSERT_CLASS_FITS_IN_CELL(RegExpPrototype);
-RegExpPrototype::RegExpPrototype(ExecState* exec, JSGlobalObject* globalObject, Structure* structure)
- : RegExpObject(globalObject, structure, RegExp::create(&exec->globalData(), "", NoFlags))
+RegExpPrototype::RegExpPrototype(ExecState*, JSGlobalObject* globalObject, Structure* structure, RegExp* regExp)
+ : RegExpObject(globalObject, structure, regExp)
{
}
@@ -101,7 +101,7 @@
if (!thisValue.inherits(&RegExpObject::s_info))
return throwVMTypeError(exec);
- RefPtr<RegExp> regExp;
+ RegExp* regExp;
JSValue arg0 = exec->argument(0);
JSValue arg1 = exec->argument(1);
@@ -128,7 +128,7 @@
if (!regExp->isValid())
return throwVMError(exec, createSyntaxError(exec, regExp->errorMessage()));
- asRegExpObject(thisValue)->setRegExp(regExp.release());
+ asRegExpObject(thisValue)->setRegExp(exec->globalData(), regExp);
asRegExpObject(thisValue)->setLastIndex(0);
return JSValue::encode(jsUndefined());
}
Modified: trunk/Source/_javascript_Core/runtime/RegExpPrototype.h (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/RegExpPrototype.h 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/RegExpPrototype.h 2011-05-26 01:12:46 UTC (rev 87346)
@@ -28,7 +28,7 @@
class RegExpPrototype : public RegExpObject {
public:
- RegExpPrototype(ExecState*, JSGlobalObject*, Structure*);
+ RegExpPrototype(ExecState*, JSGlobalObject*, Structure*, RegExp*);
static const ClassInfo s_info;
Modified: trunk/Source/_javascript_Core/runtime/StringPrototype.cpp (87345 => 87346)
--- trunk/Source/_javascript_Core/runtime/StringPrototype.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/_javascript_Core/runtime/StringPrototype.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -606,7 +606,7 @@
JSValue a0 = exec->argument(0);
- RefPtr<RegExp> reg;
+ RegExp* reg;
if (a0.inherits(&RegExpObject::s_info))
reg = asRegExpObject(a0)->regExp();
else {
@@ -620,7 +620,7 @@
RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
int pos;
int matchLength = 0;
- regExpConstructor->performMatch(*globalData, reg.get(), s, 0, pos, matchLength);
+ regExpConstructor->performMatch(*globalData, reg, s, 0, pos, matchLength);
if (!(reg->global())) {
// case without 'g' flag is handled like RegExp.prototype.exec
if (pos < 0)
@@ -633,7 +633,7 @@
while (pos >= 0) {
list.append(jsSubstring(exec, s, pos, matchLength));
pos += matchLength == 0 ? 1 : matchLength;
- regExpConstructor->performMatch(*globalData, reg.get(), s, pos, pos, matchLength);
+ regExpConstructor->performMatch(*globalData, reg, s, pos, pos, matchLength);
}
if (list.isEmpty()) {
// if there are no matches at all, it's important to return
@@ -655,7 +655,7 @@
JSValue a0 = exec->argument(0);
- RefPtr<RegExp> reg;
+ RegExp* reg;
if (a0.inherits(&RegExpObject::s_info))
reg = asRegExpObject(a0)->regExp();
else {
@@ -669,7 +669,7 @@
RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
int pos;
int matchLength = 0;
- regExpConstructor->performMatch(*globalData, reg.get(), s, 0, pos, matchLength);
+ regExpConstructor->performMatch(*globalData, reg, s, 0, pos, matchLength);
return JSValue::encode(jsNumber(pos));
}
Modified: trunk/Source/WebCore/ChangeLog (87345 => 87346)
--- trunk/Source/WebCore/ChangeLog 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/WebCore/ChangeLog 2011-05-26 01:12:46 UTC (rev 87346)
@@ -1,12 +1,3 @@
-2011-05-25 Oliver Hunt <oli...@apple.com>
-
- Revert last change, something weird happened when I went to land.
-
- * bindings/js/SerializedScriptValue.cpp:
- (WebCore::CloneDeserializer::readTerminal):
- * bridge/qt/qt_runtime.cpp:
- (JSC::Bindings::convertQVariantToValue):
-
2011-05-25 James Robinson <jam...@chromium.org>
Reviewed by Geoffrey Garen
Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp (87345 => 87346)
--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -1166,7 +1166,7 @@
return JSValue();
RegExpFlags reFlags = regExpFlags(flags->ustring());
ASSERT(reFlags != InvalidFlags);
- RefPtr<RegExp> regExp = RegExp::create(&m_exec->globalData(), pattern->ustring(), reFlags);
+ RegExp* regExp = RegExp::create(&m_exec->globalData(), pattern->ustring(), reFlags);
return new (m_exec) RegExpObject(m_exec->lexicalGlobalObject(), m_globalObject->regExpStructure(), regExp);
}
case ObjectReferenceTag: {
Modified: trunk/Source/WebCore/bridge/qt/qt_runtime.cpp (87345 => 87346)
--- trunk/Source/WebCore/bridge/qt/qt_runtime.cpp 2011-05-26 01:08:57 UTC (rev 87345)
+++ trunk/Source/WebCore/bridge/qt/qt_runtime.cpp 2011-05-26 01:12:46 UTC (rev 87346)
@@ -861,9 +861,9 @@
UString pattern((UChar*)re.pattern().utf16(), re.pattern().length());
RegExpFlags flags = (re.caseSensitivity() == Qt::CaseInsensitive) ? FlagIgnoreCase : NoFlags;
- RefPtr<JSC::RegExp> regExp = JSC::RegExp::create(&exec->globalData(), pattern, flags);
+ JSC::RegExp* regExp = JSC::RegExp::create(&exec->globalData(), pattern, flags);
if (regExp->isValid())
- return new (exec) RegExpObject(exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->regExpStructure(), regExp.release());
+ return new (exec) RegExpObject(exec->lexicalGlobalObject(), exec->lexicalGlobalObject()->regExpStructure(), regExp);
return jsNull();
}
}