]> git.saurik.com Git - apple/javascriptcore.git/blame - parser/ParserError.h
JavaScriptCore-1218.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"
30#include "ExceptionHelpers.h"
31#include "ParserTokens.h"
32#include <wtf/text/WTFString.h>
33
34namespace JSC {
35
36struct ParserError {
37 enum SyntaxErrorType {
38 SyntaxErrorNone,
39 SyntaxErrorIrrecoverable,
40 SyntaxErrorUnterminatedLiteral,
41 SyntaxErrorRecoverable
42 };
43
44 enum ErrorType {
45 ErrorNone,
46 StackOverflow,
47 EvalError,
48 OutOfMemory,
49 SyntaxError
50 };
51
52 ErrorType m_type;
53 SyntaxErrorType m_syntaxErrorType;
54 JSToken m_token;
55 String m_message;
56 int m_line;
57 ParserError()
58 : m_type(ErrorNone)
59 , m_syntaxErrorType(SyntaxErrorNone)
60 , m_line(-1)
61 {
62 }
63
64 explicit ParserError(ErrorType type)
65 : m_type(type)
66 , m_syntaxErrorType(SyntaxErrorNone)
67 , m_line(-1)
68 {
69 }
70
71 ParserError(ErrorType type, SyntaxErrorType syntaxError, JSToken token)
72 : m_type(type)
73 , m_syntaxErrorType(syntaxError)
74 , m_token(token)
75 , m_line(-1)
76 {
77 }
78
79 ParserError(ErrorType type, SyntaxErrorType syntaxError, JSToken token, String msg, int line)
80 : m_type(type)
81 , m_syntaxErrorType(syntaxError)
82 , m_token(token)
83 , m_message(msg)
84 , m_line(line)
85 {
86 }
87
88 JSObject* toErrorObject(JSGlobalObject* globalObject, const SourceCode& source)
89 {
90 switch (m_type) {
91 case ErrorNone:
92 return 0;
93 case SyntaxError:
94 return addErrorInfo(globalObject->globalExec(), createSyntaxError(globalObject, m_message), m_line, source);
95 case EvalError:
96 return createSyntaxError(globalObject, m_message);
97 case StackOverflow:
98 return createStackOverflowError(globalObject);
99 case OutOfMemory:
100 return createOutOfMemoryError(globalObject);
101 }
102 CRASH();
103 return createOutOfMemoryError(globalObject); // Appease Qt bot
104 }
105#undef GET_ERROR_CODE
106};
107
108} // namespace JSC
109
110#endif // ParserError_h