Left: | ||
Right: |
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-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 signature += 'd'; | 132 signature += 'd'; |
133 break; | 133 break; |
134 default: | 134 default: |
135 throw std::runtime_error("Unexpected function argument type"); | 135 throw std::runtime_error("Unexpected function argument type"); |
136 } | 136 } |
137 args.push_back(type); | 137 args.push_back(type); |
138 } | 138 } |
139 | 139 |
140 int nameLength = GetFunctionName(nullptr, function, signature.c_str()); | 140 int nameLength = GetFunctionName(nullptr, function, signature.c_str()); |
141 name.resize(nameLength); | 141 name.resize(nameLength); |
142 GetFunctionName(name.data(), function, signature.c_str()); | 142 GetFunctionName(name.data(), function, signature.c_str()); |
sergei
2017/05/08 09:16:29
if std::string::data() returns only a const pointe
Wladimir Palant
2017/05/08 10:17:18
Oh, so the C++ standard in its most recent iterati
| |
143 } | 143 } |
144 | 144 |
145 bool FunctionInfo::empty() const | 145 bool FunctionInfo::empty() const |
146 { | 146 { |
147 return name.size() == 0; | 147 return name.empty(); |
148 } | 148 } |
149 | 149 |
150 ClassInfo* find_class(TYPEID classID) | 150 ClassInfo* find_class(TYPEID classID) |
151 { | 151 { |
152 for (auto& classInfo : classes) | 152 for (auto& classInfo : classes) |
153 if (classInfo.id == classID) | 153 if (classInfo.id == classID) |
154 return &classInfo; | 154 return &classInfo; |
155 return nullptr; | 155 return nullptr; |
156 } | 156 } |
157 | 157 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
265 | 265 |
266 std::string generateCall(const FunctionInfo& call, | 266 std::string generateCall(const FunctionInfo& call, |
267 std::vector<std::string>& params) | 267 std::vector<std::string>& params) |
268 { | 268 { |
269 if (call.returnType == TypeCategory::DEPENDENT_STRING || | 269 if (call.returnType == TypeCategory::DEPENDENT_STRING || |
270 call.returnType == TypeCategory::OWNED_STRING) | 270 call.returnType == TypeCategory::OWNED_STRING) |
271 { | 271 { |
272 params.insert(params.begin(), "string"); | 272 params.insert(params.begin(), "string"); |
273 } | 273 } |
274 | 274 |
275 std::string call_str(call.name.data()); | 275 std::string call_str(call.name); |
276 call_str += "("; | 276 call_str += "("; |
277 for (int i = 0; i < params.size(); i++) | 277 for (int i = 0; i < params.size(); i++) |
278 { | 278 { |
279 if (i > 0) | 279 if (i > 0) |
280 call_str += ", "; | 280 call_str += ", "; |
281 call_str += params[i]; | 281 call_str += params[i]; |
282 } | 282 } |
283 call_str += ")"; | 283 call_str += ")"; |
284 | 284 |
285 switch (call.returnType) | 285 switch (call.returnType) |
(...skipping 23 matching lines...) Expand all Loading... | |
309 return " var result = readString(" + call_str + ");\n"; | 309 return " var result = readString(" + call_str + ");\n"; |
310 case TypeCategory::CLASS_PTR: | 310 case TypeCategory::CLASS_PTR: |
311 { | 311 { |
312 std::string result; | 312 std::string result; |
313 result += " var result = " + call_str + ";\n"; | 313 result += " var result = " + call_str + ";\n"; |
314 result += " if (result)\n"; | 314 result += " if (result)\n"; |
315 result += " {\n"; | 315 result += " {\n"; |
316 | 316 |
317 const ClassInfo* cls = find_class(call.pointerType); | 317 const ClassInfo* cls = find_class(call.pointerType); |
318 if (!cls) | 318 if (!cls) |
319 throw std::runtime_error("Function " + std::string(call.name.data()) + " returns pointer to unknown class"); | 319 throw std::runtime_error("Function " + call.name + " returns pointer t o unknown class"); |
320 | 320 |
321 auto offset = cls->subclass_differentiator.offset; | 321 auto offset = cls->subclass_differentiator.offset; |
322 if (offset == SIZE_MAX) | 322 if (offset == SIZE_MAX) |
323 result += " result = exports." + cls->name + "(result);\n"; | 323 result += " result = exports." + cls->name + "(result);\n"; |
324 else | 324 else |
325 result += " result = exports." + cls->name + ".fromPointer(result); \n"; | 325 result += " result = exports." + cls->name + ".fromPointer(result); \n"; |
326 | 326 |
327 result += " }\n"; | 327 result += " }\n"; |
328 result += " else\n"; | 328 result += " else\n"; |
329 result += " result = null;\n"; | 329 result += " result = null;\n"; |
330 return result; | 330 return result; |
331 } | 331 } |
332 default: | 332 default: |
333 throw std::runtime_error("Unexpected return type for " + std::string(cal l.name.data())); | 333 throw std::runtime_error("Unexpected return type for " + call.name); |
334 } | 334 } |
335 } | 335 } |
336 | 336 |
337 std::string wrapCall(const FunctionInfo& call, bool isFunction) | 337 std::string wrapCall(const FunctionInfo& call, bool isFunction) |
338 { | 338 { |
339 bool hasStringArgs = false; | 339 bool hasStringArgs = false; |
340 std::vector<std::string> params; | 340 std::vector<std::string> params; |
341 std::string prefix; | 341 std::string prefix; |
342 | 342 |
343 if (isFunction) | 343 if (isFunction) |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
499 | 499 |
500 void printBindings() | 500 void printBindings() |
501 { | 501 { |
502 bindings_internal::printHelpers(); | 502 bindings_internal::printHelpers(); |
503 | 503 |
504 for (const auto& item : classes) | 504 for (const auto& item : classes) |
505 bindings_internal::printClass(item); | 505 bindings_internal::printClass(item); |
506 for (const auto& item : namespaces) | 506 for (const auto& item : namespaces) |
507 bindings_internal::printNamespace(item); | 507 bindings_internal::printNamespace(item); |
508 } | 508 } |
LEFT | RIGHT |