| 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_WITH_TRY_CATCH(isolate, value, tryCatch) \ |
| AdblockPlus::Utils::CheckedToLocal((isolate), (value), &(tryCatch), __FILE__, __LINE__) |
| #define CHECKED_TO_LOCAL(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> |