mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-10 02:08:38 +09:00
Issue #2008 - Implement missing s parameter parsing and align case with spec.
This does 2 things. First, it adds parsing of the 's' parameter parsing to DOM object construction of regexes Second, it corrects the DOM property to be `dotAll` instead of `dotall` For consistency's sake, all function names and calls were renamed with the finalized casing. This resolves #2008
This commit is contained in:
parent
800090d0c0
commit
05389eb41f
6 changed files with 21 additions and 13 deletions
|
|
@ -665,7 +665,7 @@ js::regexp_multiline(JSContext* cx, unsigned argc, JS::Value* vp)
|
|||
|
||||
// ES 2018 dotAll
|
||||
MOZ_ALWAYS_INLINE bool
|
||||
regexp_dotall_impl(JSContext* cx, const CallArgs& args)
|
||||
regexp_dotAll_impl(JSContext* cx, const CallArgs& args)
|
||||
{
|
||||
MOZ_ASSERT(IsRegExpInstanceOrPrototype(args.thisv()));
|
||||
|
||||
|
|
@ -675,15 +675,15 @@ regexp_dotall_impl(JSContext* cx, const CallArgs& args)
|
|||
}
|
||||
|
||||
Rooted<RegExpObject*> reObj(cx, &args.thisv().toObject().as<RegExpObject>());
|
||||
args.rval().setBoolean(reObj->dotall());
|
||||
args.rval().setBoolean(reObj->dotAll());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
js::regexp_dotall(JSContext* cx, unsigned argc, JS::Value* vp)
|
||||
js::regexp_dotAll(JSContext* cx, unsigned argc, JS::Value* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
return CallNonGenericMethod<IsRegExpInstanceOrPrototype, regexp_dotall_impl>(cx, args);
|
||||
return CallNonGenericMethod<IsRegExpInstanceOrPrototype, regexp_dotAll_impl>(cx, args);
|
||||
}
|
||||
|
||||
// ES 2017 draft rev32 21.2.5.10.
|
||||
|
|
@ -781,7 +781,7 @@ const JSPropertySpec js::regexp_properties[] = {
|
|||
JS_PSG("source", regexp_source, 0),
|
||||
JS_PSG("sticky", regexp_sticky, 0),
|
||||
JS_PSG("unicode", regexp_unicode, 0),
|
||||
JS_PSG("dotall", regexp_dotall, 0),
|
||||
JS_PSG("dotAll", regexp_dotAll, 0),
|
||||
JS_PS_END
|
||||
};
|
||||
|
||||
|
|
@ -1667,10 +1667,10 @@ js::RegExpPrototypeOptimizableRaw(JSContext* cx, JSObject* proto)
|
|||
return false;
|
||||
|
||||
JSNative dotAllGetter;
|
||||
if (!GetOwnNativeGetterPure(cx, proto, NameToId(cx->names().dotall), &dotAllGetter))
|
||||
if (!GetOwnNativeGetterPure(cx, proto, NameToId(cx->names().dotAll), &dotAllGetter))
|
||||
return false;
|
||||
|
||||
if (dotAllGetter != regexp_dotall)
|
||||
if (dotAllGetter != regexp_dotAll)
|
||||
return false;
|
||||
|
||||
// Check if @@match, @@search, and exec are own data properties,
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ regexp_sticky(JSContext* cx, unsigned argc, JS::Value* vp);
|
|||
extern MOZ_MUST_USE bool
|
||||
regexp_unicode(JSContext* cx, unsigned argc, JS::Value* vp);
|
||||
extern MOZ_MUST_USE bool
|
||||
regexp_dotall(JSContext* cx, unsigned argc, JS::Value* vp);
|
||||
regexp_dotAll(JSContext* cx, unsigned argc, JS::Value* vp);
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ function RegExpFlagsGetter() {
|
|||
result += "y";
|
||||
|
||||
// ES2018
|
||||
if (R.dotall)
|
||||
if (R.dotAll)
|
||||
result += "s";
|
||||
|
||||
// Step 19.
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@
|
|||
macro(displayURL, displayURL, "displayURL") \
|
||||
macro(do, do_, "do") \
|
||||
macro(done, done, "done") \
|
||||
macro(dotall, dotall, "dotall") \
|
||||
macro(dotAll, dotAll, "dotAll") \
|
||||
macro(dotGenerator, dotGenerator, ".generator") \
|
||||
macro(dotThis, dotThis, ".this") \
|
||||
macro(each, each, "each") \
|
||||
|
|
|
|||
|
|
@ -167,6 +167,10 @@ RegExpObject::isOriginalFlagGetter(JSNative native, RegExpFlag* mask)
|
|||
*mask = UnicodeFlag;
|
||||
return true;
|
||||
}
|
||||
if (native == regexp_dotAll) {
|
||||
*mask = DotAllFlag;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1016,7 +1020,7 @@ RegExpShared::compile(JSContext* cx, HandleAtom pattern, HandleLinearString inpu
|
|||
irregexp::RegExpCompileData data;
|
||||
if (!irregexp::ParsePattern(dummyTokenStream, cx->tempLifoAlloc(), pattern,
|
||||
multiline(), mode == MatchOnly, unicode(), ignoreCase(),
|
||||
global(), sticky(), dotall(), &data))
|
||||
global(), sticky(), dotAll(), &data))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1468,6 +1472,10 @@ ParseRegExpFlags(const CharT* chars, size_t length, RegExpFlag* flagsOut, char16
|
|||
if (!HandleRegExpFlag(MultilineFlag, flagsOut))
|
||||
return false;
|
||||
break;
|
||||
case 's':
|
||||
if (!HandleRegExpFlag(DotAllFlag, flagsOut))
|
||||
return false;
|
||||
break;
|
||||
case 'y':
|
||||
if (!HandleRegExpFlag(StickyFlag, flagsOut))
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ class RegExpShared
|
|||
bool multiline() const { return flags & MultilineFlag; }
|
||||
bool sticky() const { return flags & StickyFlag; }
|
||||
bool unicode() const { return flags & UnicodeFlag; }
|
||||
bool dotall() const { return flags & DotAllFlag; }
|
||||
bool dotAll() const { return flags & DotAllFlag; }
|
||||
|
||||
bool isCompiled(CompilationMode mode, bool latin1,
|
||||
ForceByteCodeEnum force = DontForceByteCode) const {
|
||||
|
|
@ -482,7 +482,7 @@ class RegExpObject : public NativeObject
|
|||
bool multiline() const { return getFlags() & MultilineFlag; }
|
||||
bool sticky() const { return getFlags() & StickyFlag; }
|
||||
bool unicode() const { return getFlags() & UnicodeFlag; }
|
||||
bool dotall() const { return getFlags() & DotAllFlag; }
|
||||
bool dotAll() const { return getFlags() & DotAllFlag; }
|
||||
|
||||
static bool isOriginalFlagGetter(JSNative native, RegExpFlag* mask);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue