| LEFT | RIGHT | 
|   1 /* |   1 /* | 
|   2  * This file is part of Adblock Plus <https://adblockplus.org/>, |   2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
|   3  * Copyright (C) 2006-present eyeo GmbH |   3  * Copyright (C) 2006-present eyeo GmbH | 
|   4  * |   4  * | 
|   5  * Adblock Plus is free software: you can redistribute it and/or modify |   5  * Adblock Plus is free software: you can redistribute it and/or modify | 
|   6  * it under the terms of the GNU General Public License version 3 as |   6  * it under the terms of the GNU General Public License version 3 as | 
|   7  * published by the Free Software Foundation. |   7  * published by the Free Software Foundation. | 
|   8  * |   8  * | 
|   9  * Adblock Plus is distributed in the hope that it will be useful, |   9  * Adblock Plus is distributed in the hope that it will be useful, | 
|  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  12  * GNU General Public License for more details. |  12  * GNU General Public License for more details. | 
|  13  * |  13  * | 
|  14  * You should have received a copy of the GNU General Public License |  14  * You should have received a copy of the GNU General Public License | 
|  15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. |  15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
|  16  */ |  16  */ | 
|  17  |  17  | 
|  18 #include "JsError.h" |  18 #include "JsError.h" | 
|  19  |  19  | 
|  20 using namespace AdblockPlus; |  20 using namespace AdblockPlus; | 
|  21  |  21  | 
|  22 JsError::JsError(v8::Isolate* isolate, const v8::Local<v8::Value>& exception, |  22 JsError::JsError(v8::Isolate* isolate, const v8::Local<v8::Value>& exception, | 
|  23     const v8::Local<v8::Message>& message) |  23     const v8::Local<v8::Message>& message) | 
|  24   : std::runtime_error(ExceptionToString(isolate, exception, message)) |  24   : std::runtime_error(ExceptionToString(isolate, exception, message)) | 
|  25 { |  25 { | 
|  26 } |  26 } | 
|  27  |  27  | 
|  28 std::string JsError::ExceptionToString(v8::Isolate* isolate, |  28 std::string JsError::ExceptionToString(v8::Isolate* isolate, const v8::Local<v8:
    :Value>& exception, | 
|  29   const v8::Local<v8::Value>& exception, |  | 
|  30   const v8::Local<v8::Message>& message) |  29   const v8::Local<v8::Message>& message) | 
|  31 { |  30 { | 
|  32   std::stringstream error; |  31   std::stringstream error; | 
|  33   error << *v8::String::Utf8Value(isolate, exception); |  32   error << *v8::String::Utf8Value(isolate, exception); | 
|  34   if (!message.IsEmpty()) |  33   if (!message.IsEmpty()) | 
|  35   { |  34   { | 
|  36     error << " at "; |  35     error << " at "; | 
|  37     error << *v8::String::Utf8Value(isolate, message->GetScriptResourceName()); |  36     error << *v8::String::Utf8Value(isolate, message->GetScriptResourceName()); | 
|  38     error << ":"; |  37     error << ":"; | 
|  39     auto lineNumber = message->GetLineNumber(isolate->GetCurrentContext()); |  38     auto maybeLineNumber = message->GetLineNumber(isolate->GetCurrentContext()); | 
|  40     if (lineNumber.IsJust()) |  39     int lineNumber = 0; | 
|  41       error << lineNumber.FromJust(); |  40     if (maybeLineNumber.To(&lineNumber)) | 
 |  41       error << lineNumber; | 
|  42     else |  42     else | 
|  43       error << "<unknown>"; |  43       error << "unknown line"; | 
|  44   } |  44   } | 
|  45   return error.str(); |  45   return error.str(); | 
|  46 } |  46 } | 
|  47  |  47  | 
|  48 JsValueError::JsValueError(v8::Isolate* isolate, const char* filename, int line) |  48 JsError::JsError(const char* message, const char* filename, int line) | 
|  49   : std::runtime_error(ErrorToString(filename, line)) |  49   : std::runtime_error(ErrorToString(message, filename, line)) | 
|  50 { |  50 { | 
|  51 } |  51 } | 
|  52  |  52  | 
|  53 std::string JsValueError::ErrorToString(const char* filename, int line) |  53 std::string JsError::ErrorToString(const char* message, const char* filename, in
    t line) | 
|  54 { |  54 { | 
|  55   std::stringstream error; |  55   std::stringstream error; | 
|  56   error << "Empty value at "; |  56   error << message; | 
|  57   error << filename; |  57   error << filename; | 
|  58   error << ":"; |  58   error << ":"; | 
|  59   error << line; |  59   error << line; | 
|  60   return error.str(); |  60   return error.str(); | 
|  61 } |  61 } | 
| LEFT | RIGHT |