Skip to content

Commit

Permalink
[TableGen] Refactor SequenceToOffsetTable class (llvm#104986)
Browse files Browse the repository at this point in the history
- Replace use of std::isalnum/ispunct with StringExtras version to avoid
possibly locale dependent behavior.
- Remove `static` from printChar (do its deduplicated when linking).
- Use range based for loops and structured bindings.
- No need to use `llvm::` for code in llvm namespace.
  • Loading branch information
jurahul authored Aug 23, 2024
1 parent 11d2de4 commit a968ae6
Showing 1 changed file with 12 additions and 15 deletions.
27 changes: 12 additions & 15 deletions llvm/utils/TableGen/Basic/SequenceToOffsetTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,20 @@
#ifndef LLVM_UTILS_TABLEGEN_BASIC_SEQUENCETOOFFSETTABLE_H
#define LLVM_UTILS_TABLEGEN_BASIC_SEQUENCETOOFFSETTABLE_H

#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cctype>
#include <functional>
#include <map>

namespace llvm {
extern llvm::cl::opt<bool> EmitLongStrLiterals;
extern cl::opt<bool> EmitLongStrLiterals;

static inline void printChar(raw_ostream &OS, char C) {
inline void printChar(raw_ostream &OS, char C) {
unsigned char UC(C);
if (isalnum(UC) || ispunct(UC)) {
if (isAlnum(UC) || isPunct(UC)) {
OS << '\'';
if (C == '\\' || C == '\'')
OS << '\\';
Expand Down Expand Up @@ -126,7 +126,7 @@ class SequenceToOffsetTable {
/// initializer, where each element is a C string literal terminated by
/// `\0`. Falls back to emitting a comma-separated integer list if
/// `EmitLongStrLiterals` is false
void emitStringLiteralDef(raw_ostream &OS, const llvm::Twine &Decl) const {
void emitStringLiteralDef(raw_ostream &OS, const Twine &Decl) const {
assert(Entries && "Call layout() before emitStringLiteralDef()");
if (!EmitLongStrLiterals) {
OS << Decl << " = {\n";
Expand All @@ -140,9 +140,9 @@ class SequenceToOffsetTable {
<< "#pragma GCC diagnostic ignored \"-Woverlength-strings\"\n"
<< "#endif\n"
<< Decl << " = {\n";
for (auto I : Seqs) {
OS << " /* " << I.second << " */ \"";
OS.write_escaped(I.first);
for (const auto &[Seq, Offset] : Seqs) {
OS << " /* " << Offset << " */ \"";
OS.write_escaped(Seq);
OS << "\\0\"\n";
}
OS << "};\n"
Expand All @@ -156,13 +156,10 @@ class SequenceToOffsetTable {
void emit(raw_ostream &OS, void (*Print)(raw_ostream &, ElemT),
const char *Term = "0") const {
assert((empty() || Entries) && "Call layout() before emit()");
for (typename SeqMap::const_iterator I = Seqs.begin(), E = Seqs.end();
I != E; ++I) {
OS << " /* " << I->second << " */ ";
for (typename SeqT::const_iterator SI = I->first.begin(),
SE = I->first.end();
SI != SE; ++SI) {
Print(OS, *SI);
for (const auto &[Seq, Offset] : Seqs) {
OS << " /* " << Offset << " */ ";
for (const ElemT &Element : Seq) {
Print(OS, Element);
OS << ", ";
}
OS << Term << ",\n";
Expand Down

0 comments on commit a968ae6

Please sign in to comment.