#include "config.h"
#include "YarrErrorCode.h"
#include "Error.h"
namespace JSC { namespace Yarr {
const char* errorMessage(ErrorCode error)
{
#define REGEXP_ERROR_PREFIX "Invalid regular expression: "
static const char* errorMessages[] = {
nullptr, REGEXP_ERROR_PREFIX "regular expression too large", REGEXP_ERROR_PREFIX "numbers out of order in {} quantifier", REGEXP_ERROR_PREFIX "nothing to repeat", REGEXP_ERROR_PREFIX "number too large in {} quantifier", REGEXP_ERROR_PREFIX "missing )", REGEXP_ERROR_PREFIX "unmatched parentheses", REGEXP_ERROR_PREFIX "unrecognized character after (?", REGEXP_ERROR_PREFIX "invalid group specifier name", REGEXP_ERROR_PREFIX "duplicate group specifier name", REGEXP_ERROR_PREFIX "missing terminating ] for character class", REGEXP_ERROR_PREFIX "range out of order in character class", REGEXP_ERROR_PREFIX "\\ at end of pattern", REGEXP_ERROR_PREFIX "invalid unicode {} escape", REGEXP_ERROR_PREFIX "invalid backreference for unicode pattern", REGEXP_ERROR_PREFIX "invalid escaped character for unicode pattern", REGEXP_ERROR_PREFIX "invalid property expression", REGEXP_ERROR_PREFIX "too many nested disjunctions", REGEXP_ERROR_PREFIX "pattern exceeds string length limits", REGEXP_ERROR_PREFIX "invalid flags" };
return errorMessages[static_cast<unsigned>(error)];
}
JSObject* errorToThrow(ExecState* exec, ErrorCode error)
{
switch (error) {
case ErrorCode::NoError:
ASSERT_NOT_REACHED();
return nullptr;
case ErrorCode::PatternTooLarge:
case ErrorCode::QuantifierOutOfOrder:
case ErrorCode::QuantifierWithoutAtom:
case ErrorCode::QuantifierTooLarge:
case ErrorCode::MissingParentheses:
case ErrorCode::ParenthesesUnmatched:
case ErrorCode::ParenthesesTypeInvalid:
case ErrorCode::InvalidGroupName:
case ErrorCode::DuplicateGroupName:
case ErrorCode::CharacterClassUnmatched:
case ErrorCode::CharacterClassOutOfOrder:
case ErrorCode::EscapeUnterminated:
case ErrorCode::InvalidUnicodeEscape:
case ErrorCode::InvalidBackreference:
case ErrorCode::InvalidIdentityEscape:
case ErrorCode::InvalidUnicodePropertyExpression:
case ErrorCode::OffsetTooLarge:
case ErrorCode::InvalidRegularExpressionFlags:
return createSyntaxError(exec, errorMessage(error));
case ErrorCode::TooManyDisjunctions:
return createOutOfMemoryError(exec, errorMessage(error));
}
ASSERT_NOT_REACHED();
return nullptr;
}
} }