]> git.saurik.com Git - apple/javascriptcore.git/blob - parser/ParserError.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / parser / ParserError.h
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"
30 #include "ErrorHandlingScope.h"
31 #include "ExceptionHelpers.h"
32 #include "ParserTokens.h"
33 #include <wtf/text/WTFString.h>
34
35 namespace JSC {
36
37 class ParserError {
38 public:
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
54 ParserError()
55 : m_type(ErrorNone)
56 , m_syntaxErrorType(SyntaxErrorNone)
57 {
58 }
59
60 explicit ParserError(ErrorType type)
61 : m_type(type)
62 , m_syntaxErrorType(SyntaxErrorNone)
63 {
64 }
65
66 ParserError(ErrorType type, SyntaxErrorType syntaxError, JSToken token)
67 : m_token(token)
68 , m_type(type)
69 , m_syntaxErrorType(syntaxError)
70 {
71 }
72
73 ParserError(ErrorType type, SyntaxErrorType syntaxError, JSToken token, const String& msg, int line)
74 : m_token(token)
75 , m_message(msg)
76 , m_line(line)
77 , m_type(type)
78 , m_syntaxErrorType(syntaxError)
79 {
80 }
81
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)
91 {
92 ExecState* exec = globalObject->globalExec();
93 switch (m_type) {
94 case ErrorNone:
95 return nullptr;
96 case SyntaxError:
97 return addErrorInfo(
98 exec,
99 createSyntaxError(exec, m_message),
100 overrideLineNumber == -1 ? m_line : overrideLineNumber, source);
101 case EvalError:
102 return createSyntaxError(exec, m_message);
103 case StackOverflow: {
104 ErrorHandlingScope errorScope(globalObject->vm());
105 return createStackOverflowError(exec);
106 }
107 case OutOfMemory:
108 return createOutOfMemoryError(exec);
109 }
110 CRASH();
111 return nullptr;
112 }
113
114 private:
115 JSToken m_token;
116 String m_message;
117 int m_line { -1 };
118 ErrorType m_type;
119 SyntaxErrorType m_syntaxErrorType;
120 };
121
122 } // namespace JSC
123
124 #endif // ParserError_h