Bug 829997 - Pass MutableHandleValue to static RegExp getters; r=sfink

This commit is contained in:
Ms2ger 2013-02-07 09:13:08 +01:00
Родитель 9dd59cd1a1
Коммит 354efa4550
3 изменённых файлов: 47 добавлений и 46 удалений

Просмотреть файл

@ -413,23 +413,23 @@ static JSFunctionSpec regexp_methods[] = {
code; \
}
DEFINE_STATIC_GETTER(static_input_getter, return res->createPendingInput(cx, vp.address()))
DEFINE_STATIC_GETTER(static_multiline_getter, vp.set(BOOLEAN_TO_JSVAL(res->multiline()));
DEFINE_STATIC_GETTER(static_input_getter, return res->createPendingInput(cx, vp))
DEFINE_STATIC_GETTER(static_multiline_getter, vp.setBoolean(res->multiline());
return true)
DEFINE_STATIC_GETTER(static_lastMatch_getter, return res->createLastMatch(cx, vp.address()))
DEFINE_STATIC_GETTER(static_lastParen_getter, return res->createLastParen(cx, vp.address()))
DEFINE_STATIC_GETTER(static_leftContext_getter, return res->createLeftContext(cx, vp.address()))
DEFINE_STATIC_GETTER(static_rightContext_getter, return res->createRightContext(cx, vp.address()))
DEFINE_STATIC_GETTER(static_lastMatch_getter, return res->createLastMatch(cx, vp))
DEFINE_STATIC_GETTER(static_lastParen_getter, return res->createLastParen(cx, vp))
DEFINE_STATIC_GETTER(static_leftContext_getter, return res->createLeftContext(cx, vp))
DEFINE_STATIC_GETTER(static_rightContext_getter, return res->createRightContext(cx, vp))
DEFINE_STATIC_GETTER(static_paren1_getter, return res->createParen(cx, 1, vp.address()))
DEFINE_STATIC_GETTER(static_paren2_getter, return res->createParen(cx, 2, vp.address()))
DEFINE_STATIC_GETTER(static_paren3_getter, return res->createParen(cx, 3, vp.address()))
DEFINE_STATIC_GETTER(static_paren4_getter, return res->createParen(cx, 4, vp.address()))
DEFINE_STATIC_GETTER(static_paren5_getter, return res->createParen(cx, 5, vp.address()))
DEFINE_STATIC_GETTER(static_paren6_getter, return res->createParen(cx, 6, vp.address()))
DEFINE_STATIC_GETTER(static_paren7_getter, return res->createParen(cx, 7, vp.address()))
DEFINE_STATIC_GETTER(static_paren8_getter, return res->createParen(cx, 8, vp.address()))
DEFINE_STATIC_GETTER(static_paren9_getter, return res->createParen(cx, 9, vp.address()))
DEFINE_STATIC_GETTER(static_paren1_getter, return res->createParen(cx, 1, vp))
DEFINE_STATIC_GETTER(static_paren2_getter, return res->createParen(cx, 2, vp))
DEFINE_STATIC_GETTER(static_paren3_getter, return res->createParen(cx, 3, vp))
DEFINE_STATIC_GETTER(static_paren4_getter, return res->createParen(cx, 4, vp))
DEFINE_STATIC_GETTER(static_paren5_getter, return res->createParen(cx, 5, vp))
DEFINE_STATIC_GETTER(static_paren6_getter, return res->createParen(cx, 6, vp))
DEFINE_STATIC_GETTER(static_paren7_getter, return res->createParen(cx, 7, vp))
DEFINE_STATIC_GETTER(static_paren8_getter, return res->createParen(cx, 8, vp))
DEFINE_STATIC_GETTER(static_paren9_getter, return res->createParen(cx, 9, vp))
#define DEFINE_STATIC_SETTER(name, code) \
static JSBool \

Просмотреть файл

@ -1829,7 +1829,7 @@ MatchCallback(JSContext *cx, RegExpStatics *res, size_t count, void *p)
RootedObject obj(cx, arrayobj);
RootedValue v(cx);
return res->createLastMatch(cx, v.address()) && JSObject::defineElement(cx, obj, count, v);
return res->createLastMatch(cx, &v) && JSObject::defineElement(cx, obj, count, v);
}
JSBool
@ -2017,7 +2017,7 @@ FindReplaceLength(JSContext *cx, RegExpStatics *res, ReplaceData &rdata, size_t
JS_ASSERT(!rdata.elembase->getOps()->getProperty);
RootedValue match(cx);
if (!res->createLastMatch(cx, match.address()))
if (!res->createLastMatch(cx, &match))
return false;
JSString *str = match.toString();
@ -2071,11 +2071,11 @@ FindReplaceLength(JSContext *cx, RegExpStatics *res, ReplaceData &rdata, size_t
/* Push $&, $1, $2, ... */
unsigned argi = 0;
if (!res->createLastMatch(cx, &args[argi++]))
if (!res->createLastMatch(cx, args.handleAt(argi++)))
return false;
for (size_t i = 0; i < res->getMatches().parenCount(); ++i) {
if (!res->createParen(cx, i + 1, &args[argi++]))
if (!res->createParen(cx, i + 1, args.handleAt(argi++)))
return false;
}

Просмотреть файл

@ -73,8 +73,8 @@ class RegExpStatics
* If so, construct a string for it and place it in |*out|.
* If not, place undefined in |*out|.
*/
bool makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum, Value *out);
bool createDependent(JSContext *cx, size_t start, size_t end, Value *out);
bool makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum, MutableHandleValue out);
bool createDependent(JSContext *cx, size_t start, size_t end, MutableHandleValue out);
void markFlagsSet(JSContext *cx);
@ -133,12 +133,12 @@ class RegExpStatics
/* Value creators. */
bool createPendingInput(JSContext *cx, Value *out);
bool createLastMatch(JSContext *cx, Value *out);
bool createLastParen(JSContext *cx, Value *out);
bool createParen(JSContext *cx, size_t pairNum, Value *out);
bool createLeftContext(JSContext *cx, Value *out);
bool createRightContext(JSContext *cx, Value *out);
bool createPendingInput(JSContext *cx, MutableHandleValue out);
bool createLastMatch(JSContext *cx, MutableHandleValue out);
bool createLastParen(JSContext *cx, MutableHandleValue out);
bool createParen(JSContext *cx, size_t pairNum, MutableHandleValue out);
bool createLeftContext(JSContext *cx, MutableHandleValue out);
bool createRightContext(JSContext *cx, MutableHandleValue out);
/* Infallible substring creators. */
@ -204,30 +204,31 @@ SizeOfRegExpStaticsData(const JSObject *obj, JSMallocSizeOfFun mallocSizeOf)
}
inline bool
RegExpStatics::createDependent(JSContext *cx, size_t start, size_t end, Value *out)
RegExpStatics::createDependent(JSContext *cx, size_t start, size_t end, MutableHandleValue out)
{
/* Private function: caller must perform lazy evaluation. */
JS_ASSERT(!pendingLazyEvaluation);
JS_ASSERT(start <= end);
JS_ASSERT(end <= matchesInput->length());
JSString *str = js_NewDependentString(cx, matchesInput, start, end - start);
UnrootedString str = js_NewDependentString(cx, matchesInput, start, end - start);
if (!str)
return false;
*out = StringValue(str);
out.setString(str);
return true;
}
inline bool
RegExpStatics::createPendingInput(JSContext *cx, Value *out)
RegExpStatics::createPendingInput(JSContext *cx, MutableHandleValue out)
{
/* Lazy evaluation need not be resolved to return the input. */
out->setString(pendingInput ? pendingInput.get() : cx->runtime->emptyString);
out.setString(pendingInput ? pendingInput.get() : cx->runtime->emptyString);
return true;
}
inline bool
RegExpStatics::makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum, Value *out)
RegExpStatics::makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum,
MutableHandleValue out)
{
/* Private function: caller must perform lazy evaluation. */
JS_ASSERT(!pendingLazyEvaluation);
@ -238,7 +239,7 @@ RegExpStatics::makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum,
if (matches.empty() || checkPair >= matches.pairCount() ||
(checkWhich ? matches[checkPair].limit : matches[checkPair].start) < 0)
{
out->setString(cx->runtime->emptyString);
out.setString(cx->runtime->emptyString);
return true;
}
const MatchPair &pair = matches[pairNum];
@ -246,7 +247,7 @@ RegExpStatics::makeMatch(JSContext *cx, size_t checkValidIndex, size_t pairNum,
}
inline bool
RegExpStatics::createLastMatch(JSContext *cx, Value *out)
RegExpStatics::createLastMatch(JSContext *cx, MutableHandleValue out)
{
if (!executeLazy(cx))
return false;
@ -254,18 +255,18 @@ RegExpStatics::createLastMatch(JSContext *cx, Value *out)
}
inline bool
RegExpStatics::createLastParen(JSContext *cx, Value *out)
RegExpStatics::createLastParen(JSContext *cx, MutableHandleValue out)
{
if (!executeLazy(cx))
return false;
if (matches.empty() || matches.pairCount() == 1) {
out->setString(cx->runtime->emptyString);
out.setString(cx->runtime->emptyString);
return true;
}
const MatchPair &pair = matches[matches.pairCount() - 1];
if (pair.start == -1) {
out->setString(cx->runtime->emptyString);
out.setString(cx->runtime->emptyString);
return true;
}
JS_ASSERT(pair.start >= 0 && pair.limit >= 0);
@ -274,48 +275,48 @@ RegExpStatics::createLastParen(JSContext *cx, Value *out)
}
inline bool
RegExpStatics::createParen(JSContext *cx, size_t pairNum, Value *out)
RegExpStatics::createParen(JSContext *cx, size_t pairNum, MutableHandleValue out)
{
JS_ASSERT(pairNum >= 1);
if (!executeLazy(cx))
return false;
if (matches.empty() || pairNum >= matches.pairCount()) {
out->setString(cx->runtime->emptyString);
out.setString(cx->runtime->emptyString);
return true;
}
return makeMatch(cx, pairNum * 2, pairNum, out);
}
inline bool
RegExpStatics::createLeftContext(JSContext *cx, Value *out)
RegExpStatics::createLeftContext(JSContext *cx, MutableHandleValue out)
{
if (!executeLazy(cx))
return false;
if (matches.empty()) {
out->setString(cx->runtime->emptyString);
out.setString(cx->runtime->emptyString);
return true;
}
if (matches[0].start < 0) {
*out = UndefinedValue();
out.setUndefined();
return true;
}
return createDependent(cx, 0, matches[0].start, out);
}
inline bool
RegExpStatics::createRightContext(JSContext *cx, Value *out)
RegExpStatics::createRightContext(JSContext *cx, MutableHandleValue out)
{
if (!executeLazy(cx))
return false;
if (matches.empty()) {
out->setString(cx->runtime->emptyString);
out.setString(cx->runtime->emptyString);
return true;
}
if (matches[0].limit < 0) {
*out = UndefinedValue();
out.setUndefined();
return true;
}
return createDependent(cx, matches[0].limit, matchesInput->length(), out);