1*9880d681SAndroid Build Coastguard Worker //===- TableGenBackend.cpp - Utilities for TableGen Backends ----*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file provides useful services for TableGen backends...
11*9880d681SAndroid Build Coastguard Worker //
12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker #include "llvm/TableGen/TableGenBackend.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/Twine.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/raw_ostream.h"
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker using namespace llvm;
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker const size_t MAX_LINE_LEN = 80U;
21*9880d681SAndroid Build Coastguard Worker
printLine(raw_ostream & OS,const Twine & Prefix,char Fill,StringRef Suffix)22*9880d681SAndroid Build Coastguard Worker static void printLine(raw_ostream &OS, const Twine &Prefix, char Fill,
23*9880d681SAndroid Build Coastguard Worker StringRef Suffix) {
24*9880d681SAndroid Build Coastguard Worker size_t Pos = (size_t)OS.tell();
25*9880d681SAndroid Build Coastguard Worker assert((Prefix.str().size() + Suffix.size() <= MAX_LINE_LEN) &&
26*9880d681SAndroid Build Coastguard Worker "header line exceeds max limit");
27*9880d681SAndroid Build Coastguard Worker OS << Prefix;
28*9880d681SAndroid Build Coastguard Worker for (size_t i = (size_t)OS.tell() - Pos, e = MAX_LINE_LEN - Suffix.size();
29*9880d681SAndroid Build Coastguard Worker i < e; ++i)
30*9880d681SAndroid Build Coastguard Worker OS << Fill;
31*9880d681SAndroid Build Coastguard Worker OS << Suffix << '\n';
32*9880d681SAndroid Build Coastguard Worker }
33*9880d681SAndroid Build Coastguard Worker
emitSourceFileHeader(StringRef Desc,raw_ostream & OS)34*9880d681SAndroid Build Coastguard Worker void llvm::emitSourceFileHeader(StringRef Desc, raw_ostream &OS) {
35*9880d681SAndroid Build Coastguard Worker printLine(OS, "/*===- TableGen'erated file ", '-', "*- C++ -*-===*\\");
36*9880d681SAndroid Build Coastguard Worker StringRef Prefix("|* ");
37*9880d681SAndroid Build Coastguard Worker StringRef Suffix(" *|");
38*9880d681SAndroid Build Coastguard Worker printLine(OS, Prefix, ' ', Suffix);
39*9880d681SAndroid Build Coastguard Worker size_t PSLen = Prefix.size() + Suffix.size();
40*9880d681SAndroid Build Coastguard Worker assert(PSLen < MAX_LINE_LEN);
41*9880d681SAndroid Build Coastguard Worker size_t Pos = 0U;
42*9880d681SAndroid Build Coastguard Worker do {
43*9880d681SAndroid Build Coastguard Worker size_t Length = std::min(Desc.size() - Pos, MAX_LINE_LEN - PSLen);
44*9880d681SAndroid Build Coastguard Worker printLine(OS, Prefix + Desc.substr(Pos, Length), ' ', Suffix);
45*9880d681SAndroid Build Coastguard Worker Pos += Length;
46*9880d681SAndroid Build Coastguard Worker } while (Pos < Desc.size());
47*9880d681SAndroid Build Coastguard Worker printLine(OS, Prefix, ' ', Suffix);
48*9880d681SAndroid Build Coastguard Worker printLine(OS, Prefix + "Automatically generated file, do not edit!", ' ',
49*9880d681SAndroid Build Coastguard Worker Suffix);
50*9880d681SAndroid Build Coastguard Worker printLine(OS, Prefix, ' ', Suffix);
51*9880d681SAndroid Build Coastguard Worker printLine(OS, "\\*===", '-', "===*/");
52*9880d681SAndroid Build Coastguard Worker OS << '\n';
53*9880d681SAndroid Build Coastguard Worker }
54