================ @@ -0,0 +1,43 @@ +//===--- DesignatedInitializers.h -------------------------------*- 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 +/// This file provides utilities for designated initializers. +/// +//===----------------------------------------------------------------------===// + +#include "clang/AST/Expr.h" +#include "clang/Basic/SourceLocation.h" +#include "llvm/ADT/DenseMap.h" + +namespace clang::tooling { + +/// Get designators describing the elements of a (syntactic) init list. +/// +/// Given for example the type +/// +/// struct S { int i, j; }; +/// +/// and the definition +/// +/// S s{1, 2}; +/// +/// calling `getDesignators` for the initializer list expression `{1, 2}` +/// would produce the map `{loc(1): ".i", loc(2): ".j"}`. +/// +/// It does not produce designators for any explicitly-written nested lists, +/// e.g. `{1, .j=2}` would only return `{loc(1): ".i"}`. +/// +/// It also considers structs with fields of record types like +/// `struct T { S s; };`. In this case, there would be designators of the +/// form +/// `.s.i` and `.s.j` in the returned map. +llvm::DenseMap<clang::SourceLocation, std::string> +getDesignators(const clang::InitListExpr *Syn); ---------------- SimplyDanny wrote:
Do you have a comment on the location? Is it okay to have it in `clang/Tooling`? https://github.com/llvm/llvm-project/pull/80541 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits