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

Side by Side Diff: compiled/bindings/generator.h

Issue 29532626: Issue 5603 - Support references in parameters of exported functions (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore
Patch Set: Created Aug. 31, 2017, 12:36 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
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
(...skipping 26 matching lines...) Expand all
37 { 37 {
38 UNKNOWN, 38 UNKNOWN,
39 VOID, 39 VOID,
40 INT, 40 INT,
41 INT64, 41 INT64,
42 FLOAT, 42 FLOAT,
43 DOUBLE, 43 DOUBLE,
44 DEPENDENT_STRING, 44 DEPENDENT_STRING,
45 OWNED_STRING, 45 OWNED_STRING,
46 STRING_REF, 46 STRING_REF,
47 CLASS_PTR 47 CLASS_PTR,
48 CLASS_REF
48 }; 49 };
49 50
50 template<typename T> 51 template<typename T>
51 struct TypeInfo 52 struct TypeInfo
52 { 53 {
53 /* 54 /*
54 * Since TypeInfo is a templated type, in practice the compiler will define 55 * Since TypeInfo is a templated type, in practice the compiler will define
55 * a new type for each possible template parameter value. We use that fact 56 * a new type for each possible template parameter value. We use that fact
56 * to generate type identifiers: each of these TypeInfo types has a 57 * to generate type identifiers: each of these TypeInfo types has a
57 * different s_typeIDHelper member, so we use a pointer to that static 58 * different s_typeIDHelper member, so we use a pointer to that static
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 90
90 if (std::is_same<String&, T>() || std::is_same<const String&, T>() || 91 if (std::is_same<String&, T>() || std::is_same<const String&, T>() ||
91 std::is_same<DependentString&, T>()) 92 std::is_same<DependentString&, T>())
92 { 93 {
93 return TypeCategory::STRING_REF; 94 return TypeCategory::STRING_REF;
94 } 95 }
95 96
96 if (std::is_pointer<T>() && std::is_class<typename std::remove_pointer<T>: :type>()) 97 if (std::is_pointer<T>() && std::is_class<typename std::remove_pointer<T>: :type>())
97 return TypeCategory::CLASS_PTR; 98 return TypeCategory::CLASS_PTR;
98 99
100 if (std::is_reference<T>() && std::is_class<typename std::remove_reference <T>::type>())
101 return TypeCategory::CLASS_REF;
102
99 return TypeCategory::UNKNOWN; 103 return TypeCategory::UNKNOWN;
100 } 104 }
101 105
102 constexpr TYPEID pointer_type() const 106 constexpr TYPEID pointer_type() const
103 { 107 {
104 if (std::is_pointer<T>()) 108 if (std::is_pointer<T>())
105 return TypeInfo<typename std::remove_pointer<T>::type>(); 109 return TypeInfo<typename std::remove_pointer<T>::type>();
106 else 110 else
107 return nullptr; 111 return nullptr;
108 } 112 }
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 template<typename ReturnType, typename... Args> 333 template<typename ReturnType, typename... Args>
330 const singleton& function(const char* name, ReturnType (ClassType::*method)(Ar gs...) const) const 334 const singleton& function(const char* name, ReturnType (ClassType::*method)(Ar gs...) const) const
331 { 335 {
332 bindings_internal::register_method( 336 bindings_internal::register_method(
333 bindings_internal::TypeInfo<ClassType>(), name, method); 337 bindings_internal::TypeInfo<ClassType>(), name, method);
334 return *this; 338 return *this;
335 } 339 }
336 }; 340 };
337 341
338 void printBindings(); 342 void printBindings();
OLDNEW

Powered by Google App Engine
This is Rietveld