summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/bytecode/HandlerInfo.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-05-24 08:28:08 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-05-24 08:28:08 +0000
commita4e969f4965059196ca948db781e52f7cfebf19e (patch)
tree6ca352808c8fdc52006a0f33f6ae3c593b23867d /Source/JavaScriptCore/bytecode/HandlerInfo.h
parent41386e9cb918eed93b3f13648cbef387e371e451 (diff)
downloadWebKitGtk-tarball-a4e969f4965059196ca948db781e52f7cfebf19e.tar.gz
webkitgtk-2.12.3webkitgtk-2.12.3
Diffstat (limited to 'Source/JavaScriptCore/bytecode/HandlerInfo.h')
-rw-r--r--Source/JavaScriptCore/bytecode/HandlerInfo.h60
1 files changed, 57 insertions, 3 deletions
diff --git a/Source/JavaScriptCore/bytecode/HandlerInfo.h b/Source/JavaScriptCore/bytecode/HandlerInfo.h
index 8396c9607..acdda08ed 100644
--- a/Source/JavaScriptCore/bytecode/HandlerInfo.h
+++ b/Source/JavaScriptCore/bytecode/HandlerInfo.h
@@ -27,16 +27,70 @@
#define HandlerInfo_h
#include "CodeLocation.h"
-#include <wtf/Platform.h>
namespace JSC {
-struct HandlerInfo {
+enum class HandlerType {
+ Illegal = 0,
+ Catch = 1,
+ Finally = 2,
+ SynthesizedFinally = 3
+};
+
+struct HandlerInfoBase {
+ HandlerType type() const { return static_cast<HandlerType>(typeBits); }
+ void setType(HandlerType type) { typeBits = static_cast<uint32_t>(type); }
+
+ const char* typeName()
+ {
+ switch (type()) {
+ case HandlerType::Catch:
+ return "catch";
+ case HandlerType::Finally:
+ return "finally";
+ case HandlerType::SynthesizedFinally:
+ return "synthesized finally";
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ return nullptr;
+ }
+
+ bool isCatchHandler() const { return type() == HandlerType::Catch; }
+
uint32_t start;
uint32_t end;
uint32_t target;
- uint32_t scopeDepth;
+ uint32_t typeBits : 2; // HandlerType
+};
+
+struct UnlinkedHandlerInfo : public HandlerInfoBase {
+ UnlinkedHandlerInfo(uint32_t start, uint32_t end, uint32_t target, HandlerType handlerType)
+ {
+ this->start = start;
+ this->end = end;
+ this->target = target;
+ setType(handlerType);
+ ASSERT(type() == handlerType);
+ }
+};
+
+struct HandlerInfo : public HandlerInfoBase {
+ void initialize(const UnlinkedHandlerInfo& unlinkedInfo)
+ {
+ start = unlinkedInfo.start;
+ end = unlinkedInfo.end;
+ target = unlinkedInfo.target;
+ typeBits = unlinkedInfo.typeBits;
+ }
+
#if ENABLE(JIT)
+ void initialize(const UnlinkedHandlerInfo& unlinkedInfo, CodeLocationLabel label)
+ {
+ initialize(unlinkedInfo);
+ nativeCode = label;
+ }
+
CodeLocationLabel nativeCode;
#endif
};