Index: compiled/api.cpp |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/compiled/api.cpp |
@@ -0,0 +1,293 @@ |
+#include <exception> |
+ |
+#include <emscripten.h> |
+#include <emscripten/trace.h> |
+ |
+#include "Filter.h" |
+#include "InvalidFilter.h" |
+#include "ActiveFilter.h" |
+#include "RegExpFilter.h" |
+#include "ElemHideBase.h" |
+#include "CSSPropertyFilter.h" |
+#include "String.h" |
+ |
+#define DO_PRAGMA(pragma) _Pragma(#pragma) |
+#define INSERT_MESSAGE(m) DO_PRAGMA(comment(m)) |
+ |
+#define CLASS(name) \ |
+ extern "C"\ |
+ INSERT_MESSAGE(class name) |
+ |
+#define AUGMENTS(name) INSERT_MESSAGE(augments name) |
+#define CLASS_INIT(func) INSERT_MESSAGE(class_init func) |
+ |
+#define METHOD(name, impl) INSERT_MESSAGE(method name impl) |
+#define CLASS_METHOD(name, impl) INSERT_MESSAGE(class_method name impl) |
+#define STRING_ARG(pos) INSERT_MESSAGE(string_arg pos) |
+#define RETURNS_STRING INSERT_MESSAGE(string_result) |
+#define RETURNS_POINTER(cls) INSERT_MESSAGE(pointer_result cls) |
+ |
+#define READONLY_PROPERTY(name, getter) INSERT_MESSAGE(property name getter) |
+#define PROPERTY(name, getter, setter) INSERT_MESSAGE(property name getter setter) |
+#define READONLY_STRING_PROPERTY(name, getter) INSERT_MESSAGE(string_property name getter) |
+#define STRING_PROPERTY(name, getter, setter) INSERT_MESSAGE(string_property name getter setter) |
+#define STATIC_PROPERTY(name, value) INSERT_MESSAGE(static_property name value) |
+ |
+#define DIFFERENTIATOR(cls, func) INSERT_MESSAGE(differentiator cls func) |
+#define ASSOCIATE(value, cls) INSERT_MESSAGE(differentiator_mapping value cls) |
+ |
+#if defined(__EMSCRIPTEN_TRACING__) |
+struct InitTracing |
+{ |
+ InitTracing() |
+ { |
+ emscripten_trace_configure("http://127.0.0.1:5000/", "MyApplication"); |
+ } |
+ |
+ ~InitTracing() |
+ { |
+ emscripten_trace_close(); |
+ } |
+}; |
+ |
+InitTracing foo; |
+#endif |
+ |
+#define EXPOSE_FILTER_PROPERTY(class, type, name, getter, setter) \ |
+ type EMSCRIPTEN_KEEPALIVE class##_##getter(const FilterPtr& filter)\ |
+ {\ |
+ return std::dynamic_pointer_cast<class>(filter)->getter();\ |
+ }\ |
+ void EMSCRIPTEN_KEEPALIVE class##_##setter(\ |
+ const FilterPtr& filter, type value)\ |
+ {\ |
+ std::dynamic_pointer_cast<class>(filter)->setter(value);\ |
+ }\ |
+ PROPERTY(name, class##_##getter, class##_##setter) |
+ |
+#pragma clang diagnostic push |
+#pragma clang diagnostic ignored "-Wreturn-type-c-linkage" |
+ |
+extern "C" |
+{ |
+ size_t EMSCRIPTEN_KEEPALIVE GetSizeofString() |
+ { |
+ return sizeof(String); |
+ } |
+ |
+ void EMSCRIPTEN_KEEPALIVE InitString(String* str, String::value_type* data, |
+ String::size_type len) |
+ { |
+ // String is already allocated on stack, we merely need to call constructor. |
+ new (str) String(data, len); |
+ } |
+ |
+ void EMSCRIPTEN_KEEPALIVE DestroyString(String* str) |
+ { |
+ // Stack memory will be freed automatically, we need to call destructor |
+ // explicitly however. |
+ str->~String(); |
+ } |
+ |
+ String::size_type EMSCRIPTEN_KEEPALIVE GetStringLength(const String& str) |
+ { |
+ return str.length(); |
+ } |
+ |
+ const String::value_type* EMSCRIPTEN_KEEPALIVE GetStringData(const String& str) |
+ { |
+ return str.data(); |
+ } |
+ |
+ FilterPtr* EMSCRIPTEN_KEEPALIVE CreatePointer() |
+ { |
+ FilterPtr* result = new FilterPtr(); |
+ annotate_address(result, "FilterPtr"); |
+ return result; |
+ } |
+ |
+ void EMSCRIPTEN_KEEPALIVE DeletePointer(FilterPtr* ptr) |
+ { |
+ delete ptr; |
+ } |
+} |
+ |
+DIFFERENTIATOR(Filter, Filter_GetType) |
+ ASSOCIATE(1, InvalidFilter) |
+ ASSOCIATE(2, CommentFilter) |
+ ASSOCIATE(3, RegExpFilter) |
+ ASSOCIATE(4, WhitelistFilter) |
+ ASSOCIATE(5, ElemHideFilter) |
+ ASSOCIATE(6, ElemHideException) |
+ ASSOCIATE(7, CSSPropertyFilter) |
+ |
+CLASS(Filter) |
+{ |
+ String EMSCRIPTEN_KEEPALIVE Filter_GetText(const FilterPtr& filter) |
+ { |
+ return filter->GetText(); |
+ } |
+ READONLY_STRING_PROPERTY(text, Filter_GetText) |
+ |
+ Filter::Type EMSCRIPTEN_KEEPALIVE Filter_GetType(const FilterPtr& filter) |
+ { |
+ return filter->GetType(); |
+ } |
+ |
+ String EMSCRIPTEN_KEEPALIVE Filter_Serialize(const FilterPtr& filter) |
+ { |
+ return filter->Serialize(); |
+ } |
+ METHOD(serialize, Filter_Serialize) RETURNS_STRING |
+ |
+ FilterPtr EMSCRIPTEN_KEEPALIVE Filter_FromText(String& text) |
+ { |
+ return Filter::FromText(text); |
+ } |
+ CLASS_METHOD(fromText, Filter_FromText) STRING_ARG(0) RETURNS_POINTER(Filter) |
+ |
+ String EMSCRIPTEN_KEEPALIVE Filter_Normalize(String& text) |
+ { |
+ return Filter::Normalize(text); |
+ } |
+ CLASS_METHOD(normalize, Filter_Normalize) STRING_ARG(0) RETURNS_STRING |
+} |
+ |
+CLASS(InvalidFilter) |
+{ |
+ AUGMENTS(Filter) |
+ STATIC_PROPERTY(type, "invalid") |
+ |
+ String EMSCRIPTEN_KEEPALIVE InvalidFilter_GetReason(const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<InvalidFilter>(filter)->GetReason(); |
+ } |
+ READONLY_STRING_PROPERTY(reason, InvalidFilter_GetReason) |
+} |
+ |
+CLASS(CommentFilter) |
+{ |
+ AUGMENTS(Filter) |
+ STATIC_PROPERTY(type, "comment") |
+} |
+ |
+CLASS(ActiveFilter) |
+{ |
+ AUGMENTS(Filter) |
+ |
+ EXPOSE_FILTER_PROPERTY(ActiveFilter, bool, disabled, GetDisabled, SetDisabled); |
+ EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, hitCount, GetHitCount, SetHitCount); |
+ EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, lastHit, GetLastHit, SetLastHit); |
+ |
+ bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsActiveOnDomain( |
+ const FilterPtr& filter, String& domain, String& sitekey) |
+ { |
+ return std::dynamic_pointer_cast<ActiveFilter>(filter)->IsActiveOnDomain( |
+ domain, sitekey |
+ ); |
+ } |
+ METHOD(isActiveOnDomain, ActiveFilter_IsActiveOnDomain) STRING_ARG(0) STRING_ARG(1) |
+ |
+ bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsActiveOnlyOnDomain( |
+ const FilterPtr& filter, String& domain) |
+ { |
+ return std::dynamic_pointer_cast<ActiveFilter>(filter)->IsActiveOnlyOnDomain( |
+ domain |
+ ); |
+ } |
+ METHOD(isActiveOnlyOnDomain, ActiveFilter_IsActiveOnlyOnDomain) STRING_ARG(0) |
+ |
+ bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsGeneric(const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<ActiveFilter>(filter)->IsGeneric(); |
+ } |
+ METHOD(isGeneric, ActiveFilter_IsGeneric) |
+} |
+ |
+CLASS(RegExpFilter) |
+{ |
+ AUGMENTS(ActiveFilter) |
+ STATIC_PROPERTY(type, "blocking") |
+ |
+ bool EMSCRIPTEN_KEEPALIVE RegExpFilter_Matches(const FilterPtr& filter, |
+ String& location, int typeMask, String& docDomain, bool thirdParty, |
+ String& sitekey) |
+ { |
+ return std::dynamic_pointer_cast<RegExpFilter>(filter)->Matches( |
+ location, typeMask, docDomain, thirdParty, sitekey |
+ ); |
+ } |
+ METHOD(matches, RegExpFilter_Matches) STRING_ARG(0) STRING_ARG(2) STRING_ARG(4) |
+ |
+ void EMSCRIPTEN_KEEPALIVE RegExpFilter_InitJSTypes() |
+ { |
+ RegExpFilter::InitJSTypes(); |
+ } |
+ CLASS_INIT(RegExpFilter_InitJSTypes) |
+} |
+ |
+CLASS(WhitelistFilter) |
+{ |
+ AUGMENTS(RegExpFilter) |
+ STATIC_PROPERTY(type, "whitelist") |
+} |
+ |
+CLASS(ElemHideBase) |
+{ |
+ AUGMENTS(ActiveFilter) |
+ |
+ String EMSCRIPTEN_KEEPALIVE ElemHideBase_GetSelector( |
+ const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<ElemHideBase>(filter)->GetSelector(); |
+ } |
+ READONLY_STRING_PROPERTY(selector, ElemHideBase_GetSelector) |
+ |
+ String EMSCRIPTEN_KEEPALIVE ElemHideBase_GetSelectorDomain( |
+ const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<ElemHideBase>(filter)->GetSelectorDomain(); |
+ } |
+ READONLY_STRING_PROPERTY(selectorDomain, ElemHideBase_GetSelectorDomain) |
+} |
+ |
+CLASS(ElemHideFilter) |
+{ |
+ AUGMENTS(ElemHideBase) |
+ STATIC_PROPERTY(type, "elemhide") |
+} |
+ |
+CLASS(ElemHideException) |
+{ |
+ AUGMENTS(ElemHideBase) |
+ STATIC_PROPERTY(type, "elemhideexception") |
+} |
+ |
+CLASS(CSSPropertyFilter) |
+{ |
+ AUGMENTS(ElemHideBase) |
+ STATIC_PROPERTY(type, "cssproperty") |
+ |
+ String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetRegExpString( |
+ const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<CSSPropertyFilter>(filter)->GetRegExpString(); |
+ } |
+ READONLY_STRING_PROPERTY(regexpString, CSSPropertyFilter_GetRegExpString) |
+ |
+ String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetSelectorPrefix( |
+ const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<CSSPropertyFilter>(filter)->GetSelectorPrefix(); |
+ } |
+ READONLY_STRING_PROPERTY(selectorPrefix, CSSPropertyFilter_GetSelectorPrefix) |
+ |
+ String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetSelectorSuffix( |
+ const FilterPtr& filter) |
+ { |
+ return std::dynamic_pointer_cast<CSSPropertyFilter>(filter)->GetSelectorSuffix(); |
+ } |
+ READONLY_STRING_PROPERTY(selectorSuffix, CSSPropertyFilter_GetSelectorSuffix) |
+} |
+ |
+#pragma clang diagnostic pop |