]> git.saurik.com Git - apple/javascriptcore.git/blame - parser/ParserError.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / parser / ParserError.h
CommitLineData
93a37866
A
1/*
2 * Copyright (C) 2013 Apple Inc. All Rights Reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef ParserError_h
27#define ParserError_h
28
29#include "Error.h"
81345200 30#include "ErrorHandlingScope.h"
93a37866
A
31#include "ExceptionHelpers.h"
32#include "ParserTokens.h"
33#include <wtf/text/WTFString.h>
34
35namespace JSC {
36
ed1e77d3
A
37class ParserError {
38public:
93a37866
A
39 enum SyntaxErrorType {
40 SyntaxErrorNone,
41 SyntaxErrorIrrecoverable,
42 SyntaxErrorUnterminatedLiteral,
43 SyntaxErrorRecoverable
44 };
45
46 enum ErrorType {
47 ErrorNone,
48 StackOverflow,
49 EvalError,
50 OutOfMemory,
51 SyntaxError
52 };
53
93a37866
A
54 ParserError()
55 : m_type(ErrorNone)
56 , m_syntaxErrorType(SyntaxErrorNone)
93a37866
A
57 {
58 }
59
60 explicit ParserError(ErrorType type)
61 : m_type(type)
62 , m_syntaxErrorType(SyntaxErrorNone)
93a37866
A
63 {
64 }
65
66 ParserError(ErrorType type, SyntaxErrorType syntaxError, JSToken token)
ed1e77d3
A
67 : m_token(token)
68 , m_type(type)
93a37866 69 , m_syntaxErrorType(syntaxError)
93a37866
A
70 {
71 }
72
ed1e77d3
A
73 ParserError(ErrorType type, SyntaxErrorType syntaxError, JSToken token, const String& msg, int line)
74 : m_token(token)
93a37866
A
75 , m_message(msg)
76 , m_line(line)
ed1e77d3
A
77 , m_type(type)
78 , m_syntaxErrorType(syntaxError)
93a37866
A
79 {
80 }
81
ed1e77d3
A
82 bool isValid() const { return m_type != ErrorNone; }
83 SyntaxErrorType syntaxErrorType() const { return m_syntaxErrorType; }
84 const JSToken& token() const { return m_token; }
85 const String& message() const { return m_message; }
86 int line() const { return m_line; }
87
88 JSObject* toErrorObject(
89 JSGlobalObject* globalObject, const SourceCode& source,
90 int overrideLineNumber = -1)
93a37866 91 {
ed1e77d3 92 ExecState* exec = globalObject->globalExec();
93a37866
A
93 switch (m_type) {
94 case ErrorNone:
ed1e77d3 95 return nullptr;
93a37866 96 case SyntaxError:
ed1e77d3
A
97 return addErrorInfo(
98 exec,
99 createSyntaxError(exec, m_message),
100 overrideLineNumber == -1 ? m_line : overrideLineNumber, source);
93a37866 101 case EvalError:
ed1e77d3 102 return createSyntaxError(exec, m_message);
81345200
A
103 case StackOverflow: {
104 ErrorHandlingScope errorScope(globalObject->vm());
ed1e77d3 105 return createStackOverflowError(exec);
81345200 106 }
93a37866 107 case OutOfMemory:
ed1e77d3 108 return createOutOfMemoryError(exec);
93a37866
A
109 }
110 CRASH();
ed1e77d3 111 return nullptr;
93a37866 112 }
ed1e77d3
A
113
114private:
115 JSToken m_token;
116 String m_message;
117 int m_line { -1 };
118 ErrorType m_type;
119 SyntaxErrorType m_syntaxErrorType;
93a37866
A
120};
121
122} // namespace JSC
123
124#endif // ParserError_h