summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/Error.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/runtime/Error.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/runtime/Error.h')
-rw-r--r--Source/JavaScriptCore/runtime/Error.h235
1 files changed, 136 insertions, 99 deletions
diff --git a/Source/JavaScriptCore/runtime/Error.h b/Source/JavaScriptCore/runtime/Error.h
index bec5dd756..aae660ce1 100644
--- a/Source/JavaScriptCore/runtime/Error.h
+++ b/Source/JavaScriptCore/runtime/Error.h
@@ -20,112 +20,149 @@
*
*/
-#ifndef Error_h
-#define Error_h
+#pragma once
+#include "ErrorInstance.h"
#include "InternalFunction.h"
-#include "Interpreter.h"
#include "JSObject.h"
+#include "ThrowScope.h"
#include <stdint.h>
+
namespace JSC {
- class ExecState;
- class VM;
- class JSGlobalObject;
- class JSObject;
- class SourceCode;
- class Structure;
-
- // Methods to create a range of internal errors.
- JSObject* createError(JSGlobalObject*, const String&);
- JSObject* createEvalError(JSGlobalObject*, const String&);
- JSObject* createRangeError(JSGlobalObject*, const String&);
- JSObject* createReferenceError(JSGlobalObject*, const String&);
- JSObject* createSyntaxError(JSGlobalObject*, const String&);
- JSObject* createTypeError(JSGlobalObject*, const String&);
- JSObject* createNotEnoughArgumentsError(JSGlobalObject*);
- JSObject* createURIError(JSGlobalObject*, const String&);
- // ExecState wrappers.
- JS_EXPORT_PRIVATE JSObject* createError(ExecState*, const String&);
- JSObject* createEvalError(ExecState*, const String&);
- JS_EXPORT_PRIVATE JSObject* createRangeError(ExecState*, const String&);
- JS_EXPORT_PRIVATE JSObject* createReferenceError(ExecState*, const String&);
- JS_EXPORT_PRIVATE JSObject* createSyntaxError(ExecState*, const String&);
- JS_EXPORT_PRIVATE JSObject* createTypeError(ExecState*, const String&);
- JS_EXPORT_PRIVATE JSObject* createNotEnoughArgumentsError(ExecState*);
- JSObject* createURIError(ExecState*, const String&);
-
- // Methods to add
- bool hasErrorInfo(ExecState*, JSObject* error);
- // ExecState wrappers.
- JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&);
-
- // Methods to throw Errors.
-
- // Convenience wrappers, create an throw an exception with a default message.
- JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*);
- JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*);
-
- // Convenience wrappers, wrap result as an EncodedJSValue.
- inline EncodedJSValue throwVMError(ExecState* exec, JSValue error) { return JSValue::encode(exec->vm().throwException(exec, error)); }
- inline EncodedJSValue throwVMTypeError(ExecState* exec) { return JSValue::encode(throwTypeError(exec)); }
-
- class StrictModeTypeErrorFunction : public InternalFunction {
- private:
- StrictModeTypeErrorFunction(VM& vm, Structure* structure, const String& message)
- : InternalFunction(vm, structure)
- , m_message(message)
- {
- }
-
- static void destroy(JSCell*);
-
- public:
- typedef InternalFunction Base;
-
- static StrictModeTypeErrorFunction* create(VM& vm, Structure* structure, const String& message)
- {
- StrictModeTypeErrorFunction* function = new (NotNull, allocateCell<StrictModeTypeErrorFunction>(vm.heap)) StrictModeTypeErrorFunction(vm, structure, message);
- function->finishCreation(vm, String());
- return function;
- }
-
- static EncodedJSValue JSC_HOST_CALL constructThrowTypeError(ExecState* exec)
- {
- throwTypeError(exec, static_cast<StrictModeTypeErrorFunction*>(exec->callee())->m_message);
- return JSValue::encode(jsNull());
- }
-
- static ConstructType getConstructData(JSCell*, ConstructData& constructData)
- {
- constructData.native.function = constructThrowTypeError;
- return ConstructTypeHost;
- }
-
- static EncodedJSValue JSC_HOST_CALL callThrowTypeError(ExecState* exec)
- {
- throwTypeError(exec, static_cast<StrictModeTypeErrorFunction*>(exec->callee())->m_message);
- return JSValue::encode(jsNull());
- }
-
- static CallType getCallData(JSCell*, CallData& callData)
- {
- callData.native.function = callThrowTypeError;
- return CallTypeHost;
- }
-
- DECLARE_INFO;
-
- static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
- {
- return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
- }
-
- private:
- String m_message;
- };
+class ExecState;
+class VM;
+class JSGlobalObject;
+class JSObject;
+class SourceCode;
+class Structure;
+
+enum class ErrorType : uint8_t {
+ Error,
+ EvalError,
+ RangeError,
+ ReferenceError,
+ SyntaxError,
+ TypeError,
+ URIError,
+};
+
+// ExecState wrappers.
+JSObject* createError(ExecState*, const String&, ErrorInstance::SourceAppender);
+JSObject* createEvalError(ExecState*, const String&, ErrorInstance::SourceAppender);
+JSObject* createRangeError(ExecState*, const String&, ErrorInstance::SourceAppender);
+JSObject* createReferenceError(ExecState*, const String&, ErrorInstance::SourceAppender);
+JSObject* createSyntaxError(ExecState*, const String&, ErrorInstance::SourceAppender);
+JSObject* createTypeError(ExecState*, const String&, ErrorInstance::SourceAppender, RuntimeType);
+JSObject* createNotEnoughArgumentsError(ExecState*, ErrorInstance::SourceAppender);
+JSObject* createURIError(ExecState*, const String&, ErrorInstance::SourceAppender);
+
+
+JS_EXPORT_PRIVATE JSObject* createError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createEvalError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createRangeError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createReferenceError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createSyntaxError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createTypeError(ExecState*);
+JS_EXPORT_PRIVATE JSObject* createTypeError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createNotEnoughArgumentsError(ExecState*);
+JS_EXPORT_PRIVATE JSObject* createURIError(ExecState*, const String&);
+JS_EXPORT_PRIVATE JSObject* createOutOfMemoryError(ExecState*);
+
+JS_EXPORT_PRIVATE JSObject* createError(ExecState*, ErrorType, const String&);
+
+
+bool addErrorInfoAndGetBytecodeOffset(ExecState*, VM&, JSObject*, bool, CallFrame*&, unsigned* = nullptr);
+
+JS_EXPORT_PRIVATE void addErrorInfo(ExecState*, JSObject*, bool);
+JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&);
+
+// Methods to throw Errors.
+
+// Convenience wrappers, create an throw an exception with a default message.
+JS_EXPORT_PRIVATE JSObject* throwConstructorCannotBeCalledAsFunctionTypeError(ExecState*, ThrowScope&, const char* constructorName);
+JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&);
+JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&, ASCIILiteral errorMessage);
+JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&, const String& errorMessage);
+JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*, ThrowScope&);
+JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*, ThrowScope&, const String& errorMessage);
+inline JSObject* throwRangeError(ExecState* state, ThrowScope& scope, const String& errorMessage) { return throwException(state, scope, createRangeError(state, errorMessage)); }
+
+// Convenience wrappers, wrap result as an EncodedJSValue.
+inline void throwVMError(ExecState* exec, ThrowScope& scope, Exception* exception) { throwException(exec, scope, exception); }
+inline EncodedJSValue throwVMError(ExecState* exec, ThrowScope& scope, JSValue error) { return JSValue::encode(throwException(exec, scope, error)); }
+inline EncodedJSValue throwVMError(ExecState* exec, ThrowScope& scope, const char* errorMessage) { return JSValue::encode(throwException(exec, scope, createError(exec, ASCIILiteral(errorMessage)))); }
+inline EncodedJSValue throwVMTypeError(ExecState* exec, ThrowScope& scope) { return JSValue::encode(throwTypeError(exec, scope)); }
+inline EncodedJSValue throwVMTypeError(ExecState* exec, ThrowScope& scope, ASCIILiteral errorMessage) { return JSValue::encode(throwTypeError(exec, scope, errorMessage)); }
+inline EncodedJSValue throwVMTypeError(ExecState* exec, ThrowScope& scope, const String& errorMessage) { return JSValue::encode(throwTypeError(exec, scope, errorMessage)); }
+inline EncodedJSValue throwVMRangeError(ExecState* state, ThrowScope& scope, const String& errorMessage) { return JSValue::encode(throwRangeError(state, scope, errorMessage)); }
+
+class StrictModeTypeErrorFunction : public InternalFunction {
+private:
+ StrictModeTypeErrorFunction(VM& vm, Structure* structure, const String& message)
+ : InternalFunction(vm, structure)
+ , m_message(message)
+ {
+ }
+
+ static void destroy(JSCell*);
+
+public:
+ typedef InternalFunction Base;
+
+ static StrictModeTypeErrorFunction* create(VM& vm, Structure* structure, const String& message)
+ {
+ StrictModeTypeErrorFunction* function = new (NotNull, allocateCell<StrictModeTypeErrorFunction>(vm.heap)) StrictModeTypeErrorFunction(vm, structure, message);
+ function->finishCreation(vm, String());
+ return function;
+ }
+
+ static EncodedJSValue JSC_HOST_CALL constructThrowTypeError(ExecState* exec)
+ {
+ VM& vm = exec->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ throwTypeError(exec, scope, static_cast<StrictModeTypeErrorFunction*>(exec->jsCallee())->m_message);
+ return JSValue::encode(jsNull());
+ }
+
+ static ConstructType getConstructData(JSCell*, ConstructData& constructData)
+ {
+ constructData.native.function = constructThrowTypeError;
+ return ConstructType::Host;
+ }
+
+ static EncodedJSValue JSC_HOST_CALL callThrowTypeError(ExecState* exec)
+ {
+ VM& vm = exec->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+ throwTypeError(exec, scope, static_cast<StrictModeTypeErrorFunction*>(exec->jsCallee())->m_message);
+ return JSValue::encode(jsNull());
+ }
+
+ static CallType getCallData(JSCell*, CallData& callData)
+ {
+ callData.native.function = callThrowTypeError;
+ return CallType::Host;
+ }
+
+ DECLARE_INFO;
+
+ static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
+ {
+ return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
+ }
+
+private:
+ String m_message;
+};
} // namespace JSC
-#endif // Error_h
+namespace WTF {
+
+class PrintStream;
+
+void printInternal(PrintStream&, JSC::ErrorType);
+
+} // namespace WTF