Index: src/Utils.h |
=================================================================== |
--- a/src/Utils.h |
+++ b/src/Utils.h |
@@ -33,17 +33,17 @@ |
{ |
namespace Utils |
{ |
void CheckTryCatch(v8::Isolate* isolate, const v8::TryCatch& tryCatch); |
/* |
* Check for exception and then that a MaybeLocal<> isn't empty, |
* and throw a JsError if it is, otherwise return the Local<> |
- * Call using the macro %CHECKED_MAYBE to get the location. |
+ * Call using the macro %CHECKED_TO_LOCAL to get the location. |
*/ |
template<class T> |
v8::Local<T> CheckedToLocal(v8::Isolate* isolate, |
v8::MaybeLocal<T>&& value, const v8::TryCatch* tryCatch, |
const char* filename, int line) |
{ |
if (tryCatch) |
CheckTryCatch(isolate, *tryCatch); |
@@ -53,16 +53,32 @@ |
} |
#define CHECKED_TO_LOCAL(isolate, value, tryCatch) \ |
AdblockPlus::Utils::CheckedToLocal(isolate, value, &tryCatch, __FILE__, __LINE__) |
#define CHECKED_TO_LOCAL_NOTHROW(isolate, value) \ |
AdblockPlus::Utils::CheckedToLocal(isolate, value, nullptr, __FILE__, __LINE__) |
+ /* |
+ * Check that a Maybe<> isn't empty, |
+ * and throw a JsError if it is, otherwise return the value |
+ * Call using the macro %CHECKED_TO_VALUE to get the location. |
+ */ |
+ template<class T> |
+ T CheckedToValue(v8::Maybe<T>&& value, const char* filename, int line) |
+ { |
+ if (value.IsNothing()) |
+ throw AdblockPlus::JsError("Empty value at ", filename, line); |
+ return value.FromJust(); |
+ } |
+ |
+#define CHECKED_TO_VALUE(value) \ |
+ AdblockPlus::Utils::CheckedToValue(value, __FILE__, __LINE__) |
+ |
std::string FromV8String(v8::Isolate* isolate, const v8::Local<v8::Value>& value); |
StringBuffer StringBufferFromV8String(v8::Isolate* isolate, const v8::Local<v8::Value>& value); |
v8::MaybeLocal<v8::String> ToV8String(v8::Isolate* isolate, const std::string& str); |
v8::MaybeLocal<v8::String> StringBufferToV8String(v8::Isolate* isolate, const StringBuffer& bytes); |
void ThrowExceptionInJS(v8::Isolate* isolate, const std::string& str); |
// Code for templated function has to be in a header file, can't be in .cpp |
template<class T> |