/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #pragma once #include #include #include "plugin.hxx" /** * Common code for checking if the address of a function was taken. */ namespace loplugin { template class FunctionAddress : public Base { public: explicit FunctionAddress( const InstantiationData& data ) : Base(data) {} bool TraverseCallExpr(CallExpr * expr) { auto const saved = callee_; callee_ = expr->getCallee(); auto const ret = Base::TraverseCallExpr(expr); callee_ = saved; return ret; } bool TraverseCXXOperatorCallExpr(CXXOperatorCallExpr * expr) { auto const saved = callee_; callee_ = expr->getCallee(); auto const ret = Base::TraverseCXXOperatorCallExpr(expr); callee_ = saved; return ret; } bool TraverseCXXMemberCallExpr(CXXMemberCallExpr * expr) { auto const saved = callee_; callee_ = expr->getCallee(); auto const ret = Base::TraverseCXXMemberCallExpr(expr); callee_ = saved; return ret; } bool TraverseCUDAKernelCallExpr(CUDAKernelCallExpr * expr) { auto const saved = callee_; callee_ = expr->getCallee(); auto const ret = Base::TraverseCUDAKernelCallExpr(expr); callee_ = saved; return ret; } bool TraverseUserDefinedLiteral(UserDefinedLiteral * expr) { auto const saved = callee_; callee_ = expr->getCallee(); auto const ret = Base::TraverseUserDefinedLiteral(expr); callee_ = saved; return ret; } bool VisitImplicitCastExpr(ImplicitCastExpr const * expr) { if (expr == callee_) { return true; } if (this->ignoreLocation(expr)) { return true; } if (expr->getCastKind() != CK_FunctionToPointerDecay) { return true; } auto const dre = dyn_cast( expr->getSubExpr()->IgnoreParens()); if (dre == nullptr) { return true; } auto const fd = dyn_cast(dre->getDecl()); if (fd == nullptr) { return true; } ignoredFunctions_.insert(fd->getCanonicalDecl()); return true; } bool VisitUnaryOperator(UnaryOperator * expr) { if (expr->getOpcode() != UO_AddrOf) { return Base::VisitUnaryOperator(expr); } if (this->ignoreLocation(expr)) { return true; } auto const dre = dyn_cast( expr->getSubExpr()->IgnoreParenImpCasts()); if (dre == nullptr) { return true; } auto const fd = dyn_cast(dre->getDecl()); if (fd == nullptr) { return true; } ignoredFunctions_.insert(fd->getCanonicalDecl()); return true; } protected: std::unordered_set const & getFunctionsWithAddressTaken() { return ignoredFunctions_; } private: std::unordered_set ignoredFunctions_; Expr const * callee_ = nullptr; }; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ stro/suse/suse-3.6'>distro/suse/suse-3.6 LibreOffice 界面翻译代码仓库文档基金会
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2019-10-09 19:05:28 +0200
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2019-10-09 19:05:28 +0200
commitbb2591d62928e3f47fe12a81883311f1e5caa39d (patch)
treeff693125b2b9fe0d41bcfe217b0f38d808a29a31
parentc1894cfe4c2f406ec16f3c4e7e89b9af279e905c (diff)
update translations for master
and force-fix errors using pocheck Change-Id: Id874b535ebb3ffff16d16b2f55043caa7a477f7f