diff options
author | vitalyisaev <vitalyisaev@yandex-team.com> | 2023-06-29 10:00:50 +0300 |
---|---|---|
committer | vitalyisaev <vitalyisaev@yandex-team.com> | 2023-06-29 10:00:50 +0300 |
commit | 6ffe9e53658409f212834330e13564e4952558f6 (patch) | |
tree | 85b1e00183517648b228aafa7c8fb07f5276f419 /contrib/libs/clang16/lib/AST/ASTConcept.cpp | |
parent | 726057070f9c5a91fc10fde0d5024913d10f1ab9 (diff) | |
download | ydb-6ffe9e53658409f212834330e13564e4952558f6.tar.gz |
YQ Connector: support managed ClickHouse
Со стороны dqrun можно обратиться к инстансу коннектора, который работает на streaming стенде, и извлечь данные из облачного CH.
Diffstat (limited to 'contrib/libs/clang16/lib/AST/ASTConcept.cpp')
-rw-r--r-- | contrib/libs/clang16/lib/AST/ASTConcept.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/contrib/libs/clang16/lib/AST/ASTConcept.cpp b/contrib/libs/clang16/lib/AST/ASTConcept.cpp new file mode 100644 index 0000000000..8f2d945721 --- /dev/null +++ b/contrib/libs/clang16/lib/AST/ASTConcept.cpp @@ -0,0 +1,91 @@ +//===--- ASTConcept.cpp - Concepts Related AST Data Structures --*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief This file defines AST data structures related to concepts. +/// +//===----------------------------------------------------------------------===// + +#include "clang/AST/ASTConcept.h" +#include "clang/AST/ASTContext.h" +#include "clang/AST/Decl.h" +#include "clang/AST/TemplateBase.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/FoldingSet.h" +using namespace clang; + +namespace { +void CreatUnsatisfiedConstraintRecord( + const ASTContext &C, const UnsatisfiedConstraintRecord &Detail, + UnsatisfiedConstraintRecord *TrailingObject) { + if (Detail.second.is<Expr *>()) + new (TrailingObject) UnsatisfiedConstraintRecord{ + Detail.first, + UnsatisfiedConstraintRecord::second_type(Detail.second.get<Expr *>())}; + else { + auto &SubstitutionDiagnostic = + *Detail.second.get<std::pair<SourceLocation, StringRef> *>(); + unsigned MessageSize = SubstitutionDiagnostic.second.size(); + char *Mem = new (C) char[MessageSize]; + memcpy(Mem, SubstitutionDiagnostic.second.data(), MessageSize); + auto *NewSubstDiag = new (C) std::pair<SourceLocation, StringRef>( + SubstitutionDiagnostic.first, StringRef(Mem, MessageSize)); + new (TrailingObject) UnsatisfiedConstraintRecord{ + Detail.first, UnsatisfiedConstraintRecord::second_type(NewSubstDiag)}; + } +} +} // namespace + +ASTConstraintSatisfaction::ASTConstraintSatisfaction( + const ASTContext &C, const ConstraintSatisfaction &Satisfaction) + : NumRecords{Satisfaction.Details.size()}, + IsSatisfied{Satisfaction.IsSatisfied}, ContainsErrors{ + Satisfaction.ContainsErrors} { + for (unsigned I = 0; I < NumRecords; ++I) + CreatUnsatisfiedConstraintRecord( + C, Satisfaction.Details[I], + getTrailingObjects<UnsatisfiedConstraintRecord>() + I); +} + +ASTConstraintSatisfaction::ASTConstraintSatisfaction( + const ASTContext &C, const ASTConstraintSatisfaction &Satisfaction) + : NumRecords{Satisfaction.NumRecords}, + IsSatisfied{Satisfaction.IsSatisfied}, + ContainsErrors{Satisfaction.ContainsErrors} { + for (unsigned I = 0; I < NumRecords; ++I) + CreatUnsatisfiedConstraintRecord( + C, *(Satisfaction.begin() + I), + getTrailingObjects<UnsatisfiedConstraintRecord>() + I); +} + +ASTConstraintSatisfaction * +ASTConstraintSatisfaction::Create(const ASTContext &C, + const ConstraintSatisfaction &Satisfaction) { + std::size_t size = + totalSizeToAlloc<UnsatisfiedConstraintRecord>( + Satisfaction.Details.size()); + void *Mem = C.Allocate(size, alignof(ASTConstraintSatisfaction)); + return new (Mem) ASTConstraintSatisfaction(C, Satisfaction); +} + +ASTConstraintSatisfaction *ASTConstraintSatisfaction::Rebuild( + const ASTContext &C, const ASTConstraintSatisfaction &Satisfaction) { + std::size_t size = + totalSizeToAlloc<UnsatisfiedConstraintRecord>(Satisfaction.NumRecords); + void *Mem = C.Allocate(size, alignof(ASTConstraintSatisfaction)); + return new (Mem) ASTConstraintSatisfaction(C, Satisfaction); +} + +void ConstraintSatisfaction::Profile( + llvm::FoldingSetNodeID &ID, const ASTContext &C, + const NamedDecl *ConstraintOwner, ArrayRef<TemplateArgument> TemplateArgs) { + ID.AddPointer(ConstraintOwner); + ID.AddInteger(TemplateArgs.size()); + for (auto &Arg : TemplateArgs) + Arg.Profile(ID, C); +} |