//===- DirectiveEmitter.h - Directive Language Emitter ----------*- 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 // //===----------------------------------------------------------------------===// // // DirectiveEmitter uses the descriptions of directives and clauses to construct // common code declarations to be used in Frontends. // //===----------------------------------------------------------------------===// #ifndef LLVM_TABLEGEN_DIRECTIVEEMITTER_H #define LLVM_TABLEGEN_DIRECTIVEEMITTER_H #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/TableGen/Record.h" #include <algorithm> #include <string> #include <vector> namespace llvm { // Wrapper class that contains DirectiveLanguage's information defined in // DirectiveBase.td and provides helper methods for accessing it. class DirectiveLanguage { … }; // Note: In all the classes below, allow implicit construction from Record *, // to allow writing code like: // for (const Directive D : getDirectives()) { // // instead of: // // for (const Record *R : getDirectives()) { // Directive D(R); // Base record class used for Directive and Clause class defined in // DirectiveBase.td. class BaseRecord { … }; // Wrapper class that contains a Directive's information defined in // DirectiveBase.td and provides helper methods for accessing it. class Directive : public BaseRecord { … }; // Wrapper class that contains Clause's information defined in DirectiveBase.td // and provides helper methods for accessing it. class Clause : public BaseRecord { … }; // Wrapper class that contains VersionedClause's information defined in // DirectiveBase.td and provides helper methods for accessing it. class VersionedClause { … }; class ClauseVal : public BaseRecord { … }; } // namespace llvm #endif // LLVM_TABLEGEN_DIRECTIVEEMITTER_H