diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/runtime/Error.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/runtime/Error.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/Error.h | 235 |
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 |