Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/JsValue.cpp

Issue 29661564: Template out V8 and prepare for other JS engine implementations
Patch Set: Created Jan. 10, 2018, 1:29 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/JsEngine.cpp ('k') | src/Platform.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/JsValue.cpp
===================================================================
--- a/src/JsValue.cpp
+++ b/src/JsValue.cpp
@@ -24,27 +24,27 @@
using namespace AdblockPlus;
-AdblockPlus::JsValue::JsValue(AdblockPlus::JsEnginePtr jsEngine,
+template <> JSVALUEV8::JsValueTemplate(AdblockPlus::JsEnginePtr jsEngine,
v8::Handle<v8::Value> value)
: jsEngine(jsEngine),
value(new v8::Global<v8::Value>(jsEngine->GetIsolate(), value))
{
}
-AdblockPlus::JsValue::JsValue(AdblockPlus::JsValue&& src)
+template <> JSVALUEV8::JsValueTemplate(JSVALUEV8&& src)
: jsEngine(src.jsEngine),
value(std::move(src.value))
{
}
-AdblockPlus::JsValue::JsValue(const JsValue& src)
+template <> JSVALUEV8::JsValueTemplate(const JSVALUEV8& src)
: jsEngine(src.jsEngine)
{
const JsContext context(*src.jsEngine);
value.reset(new v8::Global<v8::Value>(src.jsEngine->GetIsolate(), *src.value));
}
-AdblockPlus::JsValue::~JsValue()
+template <> JSVALUEV8::~JsValueTemplate()
{
if (value)
{
@@ -53,7 +53,7 @@
}
}
-JsValue& AdblockPlus::JsValue::operator=(const JsValue& src)
+template <> JSVALUEV8& JSVALUEV8::operator=(const JSVALUEV8& src)
{
const JsContext context(*src.jsEngine);
jsEngine = src.jsEngine;
@@ -62,7 +62,7 @@
return *this;
}
-JsValue& AdblockPlus::JsValue::operator=(JsValue&& src)
+template <> JSVALUEV8& AdblockPlus::JSVALUEV8::operator=(JSVALUEV8&& src)
{
jsEngine = std::move(src.jsEngine);
value = std::move(src.value);
@@ -70,82 +70,82 @@
return *this;
}
-bool AdblockPlus::JsValue::IsUndefined() const
+template <> bool AdblockPlus::JSVALUEV8::IsUndefined() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->IsUndefined();
}
-bool AdblockPlus::JsValue::IsNull() const
+template <> bool AdblockPlus::JSVALUEV8::IsNull() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->IsNull();
}
-bool AdblockPlus::JsValue::IsString() const
+template <> bool AdblockPlus::JSVALUEV8::IsString() const
{
const JsContext context(*jsEngine);
v8::Local<v8::Value> value = UnwrapValue();
return value->IsString() || value->IsStringObject();
}
-bool AdblockPlus::JsValue::IsNumber() const
+template <> bool AdblockPlus::JSVALUEV8::IsNumber() const
{
const JsContext context(*jsEngine);
v8::Local<v8::Value> value = UnwrapValue();
return value->IsNumber() || value->IsNumberObject();
}
-bool AdblockPlus::JsValue::IsBool() const
+template <> bool AdblockPlus::JSVALUEV8::IsBool() const
{
const JsContext context(*jsEngine);
v8::Local<v8::Value> value = UnwrapValue();
return value->IsBoolean() || value->IsBooleanObject();
}
-bool AdblockPlus::JsValue::IsObject() const
+template <> bool AdblockPlus::JSVALUEV8::IsObject() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->IsObject();
}
-bool AdblockPlus::JsValue::IsArray() const
+template <> bool AdblockPlus::JSVALUEV8::IsArray() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->IsArray();
}
-bool AdblockPlus::JsValue::IsFunction() const
+template <> bool AdblockPlus::JSVALUEV8::IsFunction() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->IsFunction();
}
-std::string AdblockPlus::JsValue::AsString() const
+template <> std::string AdblockPlus::JSVALUEV8::AsString() const
{
const JsContext context(*jsEngine);
return Utils::FromV8String(UnwrapValue());
}
-StringBuffer AdblockPlus::JsValue::AsStringBuffer() const
+template <> StringBuffer AdblockPlus::JSVALUEV8::AsStringBuffer() const
{
const JsContext context(*jsEngine);
return Utils::StringBufferFromV8String(UnwrapValue());
}
-int64_t AdblockPlus::JsValue::AsInt() const
+template <> int64_t AdblockPlus::JSVALUEV8::AsInt() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->IntegerValue();
}
-bool AdblockPlus::JsValue::AsBool() const
+template <> bool AdblockPlus::JSVALUEV8::AsBool() const
{
const JsContext context(*jsEngine);
return UnwrapValue()->BooleanValue();
}
-AdblockPlus::JsValueList AdblockPlus::JsValue::AsList() const
+template <> AdblockPlus::JsValueList AdblockPlus::JSVALUEV8::AsList() const
{
if (!IsArray())
throw std::runtime_error("Cannot convert a non-array to list");
@@ -162,7 +162,7 @@
return result;
}
-std::vector<std::string> AdblockPlus::JsValue::GetOwnPropertyNames() const
+template <> std::vector<std::string> AdblockPlus::JSVALUEV8::GetOwnPropertyNames() const
{
if (!IsObject())
throw std::runtime_error("Attempting to get propert list for a non-object");
@@ -177,7 +177,7 @@
}
-AdblockPlus::JsValue AdblockPlus::JsValue::GetProperty(const std::string& name) const
+template <> AdblockPlus::JsValue AdblockPlus::JSVALUEV8::GetProperty(const std::string& name) const
{
if (!IsObject())
throw std::runtime_error("Attempting to get property of a non-object");
@@ -188,7 +188,7 @@
return JsValue(jsEngine, obj->Get(property));
}
-void AdblockPlus::JsValue::SetProperty(const std::string& name, v8::Handle<v8::Value> val)
+template <> void AdblockPlus::JSVALUEV8::SetProperty(const std::string& name, v8::Handle<v8::Value> val)
{
if (!IsObject())
throw std::runtime_error("Attempting to set property on a non-object");
@@ -198,42 +198,42 @@
obj->Set(property, val);
}
-v8::Local<v8::Value> AdblockPlus::JsValue::UnwrapValue() const
+template <> JsEngineNamespaceImpl::LocalValue AdblockPlus::JSVALUEV8::UnwrapValue() const
{
return v8::Local<v8::Value>::New(jsEngine->GetIsolate(), *value);
}
-void AdblockPlus::JsValue::SetProperty(const std::string& name, const std::string& val)
+template <> void AdblockPlus::JSVALUEV8::SetProperty(const std::string& name, const std::string& val)
{
const JsContext context(*jsEngine);
SetProperty(name, Utils::ToV8String(jsEngine->GetIsolate(), val));
}
-void AdblockPlus::JsValue::SetStringBufferProperty(const std::string& name, const StringBuffer& val)
+template <> void AdblockPlus::JSVALUEV8::SetStringBufferProperty(const std::string& name, const StringBuffer& val)
{
const JsContext context(*jsEngine);
SetProperty(name, Utils::StringBufferToV8String(jsEngine->GetIsolate(), val));
}
-void AdblockPlus::JsValue::SetProperty(const std::string& name, int64_t val)
+template <> void AdblockPlus::JSVALUEV8::SetProperty(const std::string& name, int64_t val)
{
const JsContext context(*jsEngine);
SetProperty(name, v8::Number::New(jsEngine->GetIsolate(), val));
}
-void AdblockPlus::JsValue::SetProperty(const std::string& name, const JsValue& val)
+template <> void AdblockPlus::JSVALUEV8::SetProperty(const std::string& name, const JsValue& val)
{
const JsContext context(*jsEngine);
SetProperty(name, val.UnwrapValue());
}
-void AdblockPlus::JsValue::SetProperty(const std::string& name, bool val)
+template <> void AdblockPlus::JSVALUEV8::SetProperty(const std::string& name, bool val)
{
const JsContext context(*jsEngine);
SetProperty(name, v8::Boolean::New(jsEngine->GetIsolate(), val));
}
-std::string AdblockPlus::JsValue::GetClass() const
+template <> std::string AdblockPlus::JSVALUEV8::GetClass() const
{
if (!IsObject())
throw std::runtime_error("Cannot get constructor of a non-object");
@@ -243,17 +243,17 @@
return Utils::FromV8String(obj->GetConstructorName());
}
-JsValue JsValue::Call(const JsValueList& params) const
+template <> JsValue JSVALUEV8::Call(const JsValueList& params) const
{
const JsContext context(*jsEngine);
std::vector<v8::Handle<v8::Value>> argv;
for (const auto& param : params)
argv.push_back(param.UnwrapValue());
- return Call(argv, context.GetV8Context()->Global());
+ return Call(argv, context.GetJSEngineContext()->Global());
}
-JsValue JsValue::Call(const JsValueList& params, const JsValue& thisValue) const
+template <> JsValue JSVALUEV8::Call(const JsValueList& params, const JsValue& thisValue) const
{
const JsContext context(*jsEngine);
v8::Local<v8::Object> thisObj = v8::Local<v8::Object>::Cast(thisValue.UnwrapValue());
@@ -265,17 +265,17 @@
return Call(argv, thisObj);
}
-JsValue JsValue::Call(const JsValue& arg) const
+template <> JsValue JSVALUEV8::Call(const JsValue& arg) const
{
const JsContext context(*jsEngine);
std::vector<v8::Handle<v8::Value>> argv;
argv.push_back(arg.UnwrapValue());
- return Call(argv, context.GetV8Context()->Global());
+ return Call(argv, context.GetJSEngineContext()->Global());
}
-JsValue JsValue::Call(std::vector<v8::Handle<v8::Value>>& args, v8::Local<v8::Object> thisObj) const
+template <> JsValue JSVALUEV8::Call(std::vector<v8::Handle<v8::Value>>& args, v8::Local<v8::Object> thisObj) const
{
if (!IsFunction())
throw std::runtime_error("Attempting to call a non-function");
« no previous file with comments | « src/JsEngine.cpp ('k') | src/Platform.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld