Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 30c8a2c9c4a8874d97236588a3241ca247e8fe36
https://github.com/WebKit/WebKit/commit/30c8a2c9c4a8874d97236588a3241ca247e8fe36
Author: Michael Saboff <[email protected]>
Date: 2023-03-15 (Wed, 15 Mar 2023)
Changed paths:
M JSTests/stress/regexp-vflag-property-of-strings.js
M Source/JavaScriptCore/yarr/YarrErrorCode.cpp
M Source/JavaScriptCore/yarr/YarrErrorCode.h
M Source/JavaScriptCore/yarr/YarrParser.h
M Source/JavaScriptCore/yarr/YarrPattern.cpp
Log Message:
-----------
[JSC] Add more tests for RegExp V flag and fix issues found
https://bugs.webkit.org/show_bug.cgi?id=253915
rdar://106724836
Reviewed by Yusuke Suzuki.
Added over 40 tests for RegExp V flag, organizing the syntax error tests ahead
of the operational tests.
This change doesn't impact the results of the test262 RegExp V flag related
tests. Rather it fills in
the missing syntax checks from test262.
Almost all of the issues found with these new tests impact the
ClassSetParserDelegate processing.
These changes include:
* Saving and restoring the current parsing state when nesting class sets.
That change allowed
eliminating the nesting class level and using the size of the nested parse
state vector.
* Implicitly change the opcode type from Default to Union when we have a
construct that is only
allowed for the ClassUnion production. For example, a simple unnested
rangecl like a-z cannot appear
as part of a ClassIntersection or ClassSubtraction production. This is done
with the new method
switchFromDefaultOpToUnionOpIfNeeded().
* Added explicit state handling for set operands. This facilitates the proper
processing of
ClassSetOperands per the spec.
* Added syntax checking for the ClassSetSyntaxCharacter and
ClassSetReservedPunctuator rules
according to the spec.
* Renamed the CharacterClassConstructionState enum in ClassSetParserDelegate
to ClassSetConstructionState.
* Renamed doneAfterCharacterClassEnd() to nestedClassEnd() to match
nestedClassBegin().
Since the return value of parseClassSetEscape() wasn't used, changed the type
to void.
Updated CharacterClassConstructor::putChar(UChar32) with a new helper to handle
adding characters
as part of the right hand side of a intersection or subtraction set operation.
Added a new error, InvalidClassSetCharacter, and changed the spelling of all
the errors added with the
RegExp V flag initial checkin to have an initial lower case letter like all the
other RegExp error strings.
* JSTests/stress/regexp-vflag-property-of-strings.js:
(testRegExpSyntaxError):
* Source/JavaScriptCore/yarr/YarrErrorCode.cpp:
(JSC::Yarr::errorMessage):
(JSC::Yarr::errorToThrow):
* Source/JavaScriptCore/yarr/YarrErrorCode.h:
* Source/JavaScriptCore/yarr/YarrParser.h:
(JSC::Yarr::Parser::ClassSetParserDelegate::NestingState::NestingState):
(JSC::Yarr::Parser::ClassSetParserDelegate::ClassSetParserDelegate):
(JSC::Yarr::Parser::ClassSetParserDelegate::nestedClassBegin):
(JSC::Yarr::Parser::ClassSetParserDelegate::nestedClassEnd):
(JSC::Yarr::Parser::ClassSetParserDelegate::switchFromDefaultOpToUnionOpIfNeeded):
(JSC::Yarr::Parser::ClassSetParserDelegate::setSubtractOp):
(JSC::Yarr::Parser::ClassSetParserDelegate::setIntersectionOp):
(JSC::Yarr::Parser::ClassSetParserDelegate::flushCachedCharacterIfNeeded):
(JSC::Yarr::Parser::ClassSetParserDelegate::afterOperand):
(JSC::Yarr::Parser::ClassSetParserDelegate::canTakeSetOperand):
(JSC::Yarr::Parser::ClassSetParserDelegate::setProcessingEscape):
(JSC::Yarr::Parser::ClassSetParserDelegate::atomPatternCharacter):
(JSC::Yarr::Parser::ClassSetParserDelegate::atomBuiltInCharacterClass):
(JSC::Yarr::Parser::ClassSetParserDelegate::end):
(JSC::Yarr::Parser::isIdentityEscapeAnError):
(JSC::Yarr::Parser::parseClassSetEscape):
(JSC::Yarr::Parser::parseClassSet):
(JSC::Yarr::Parser::ClassSetParserDelegate::doneAfterCharacterClassEnd):
Deleted.
* Source/JavaScriptCore/yarr/YarrPattern.cpp:
(JSC::Yarr::CharacterClassConstructor::putChar):
(JSC::Yarr::CharacterClassConstructor::putCharNonUnion):
(JSC::Yarr::CharacterClassConstructor::isUnionSetOp):
Canonical link: https://commits.webkit.org/261714@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes