MCLabel.h revision c5252da873d547a19069eaf9030fec203f128f66
1//===- MCLabel.h - Machine Code Directional Local Labels --------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the declaration of the MCLabel class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_MC_MCLABEL_H
15#define LLVM_MC_MCLABEL_H
16
17#include "llvm/Support/Compiler.h"
18
19namespace llvm {
20  class MCContext;
21  class raw_ostream;
22
23  /// MCLabel - Instances of this class represent a label name in the MC file,
24  /// and MCLabel are created and unique'd by the MCContext class.  MCLabel
25  /// should only be constructed for valid instances in the object file.
26  class MCLabel {
27    // Instance - the instance number of this Directional Local Label
28    unsigned Instance;
29
30  private:  // MCContext creates and uniques these.
31    friend class MCContext;
32    MCLabel(unsigned instance)
33      : Instance(instance) {}
34
35    MCLabel(const MCLabel&) LLVM_DELETED_FUNCTION;
36    void operator=(const MCLabel&) LLVM_DELETED_FUNCTION;
37  public:
38    /// getInstance - Get the current instance of this Directional Local Label.
39    unsigned getInstance() const { return Instance; }
40
41    /// incInstance - Increment the current instance of this Directional Local
42    /// Label.
43    unsigned incInstance() { return ++Instance; }
44
45    /// print - Print the value to the stream \p OS.
46    void print(raw_ostream &OS) const;
47
48    /// dump - Print the value to stderr.
49    void dump() const;
50  };
51
52  inline raw_ostream &operator<<(raw_ostream &OS, const MCLabel &Label) {
53    Label.print(OS);
54    return OS;
55  }
56} // end namespace llvm
57
58#endif
59