| Index: src/Utils.h |
| =================================================================== |
| --- a/src/Utils.h |
| +++ b/src/Utils.h |
| @@ -22,20 +22,43 @@ |
| #include <cctype> |
| #include <functional> |
| #include <string> |
| #include <vector> |
| #include <v8.h> |
| #include "AdblockPlus/JsValue.h" |
| +#include "JsError.h" |
| + |
| namespace AdblockPlus |
| { |
| 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. |
| + */ |
| + template<class T> |
| + v8::Local<T> CheckedToLocal(v8::Isolate* isolate, |
| + v8::MaybeLocal<T>&& value, const v8::TryCatch& tryCatch, |
| + const char* filename, int line) |
| + { |
| + CheckTryCatch(isolate, tryCatch); |
| + if (value.IsEmpty()) |
| + throw AdblockPlus::JsError("Empty value at ", filename, line); |
| + return value.ToLocalChecked(); |
| + } |
| + |
| +#define CHECKED_TO_LOCAL(isolate, value, tryCatch) \ |
| + AdblockPlus::Utils::CheckedToLocal(isolate, value, tryCatch, __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::Local<v8::String> ToV8String(v8::Isolate* isolate, const std::string& str); |
| v8::Local<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> |