From: Duncan P. N. Exon Smith Date: Wed, 13 May 2015 21:41:14 +0000 (+0000) Subject: MC: clang-format MCSymbol.h, NFC X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=da645e31a7c949deb51d58bacb6faab89c50c998;p=oota-llvm.git MC: clang-format MCSymbol.h, NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237297 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCSymbol.h b/include/llvm/MC/MCSymbol.h index 413945d0bfb..270359c6307 100644 --- a/include/llvm/MC/MCSymbol.h +++ b/include/llvm/MC/MCSymbol.h @@ -19,166 +19,154 @@ #include "llvm/Support/Compiler.h" namespace llvm { - class MCExpr; - class MCSection; - class MCContext; - class raw_ostream; - - /// MCSymbol - Instances of this class represent a symbol name in the MC file, - /// and MCSymbols are created and uniqued by the MCContext class. MCSymbols - /// should only be constructed with valid names for the object file. - /// - /// If the symbol is defined/emitted into the current translation unit, the - /// Section member is set to indicate what section it lives in. Otherwise, if - /// it is a reference to an external entity, it has a null section. - class MCSymbol { - // Special sentinal value for the absolute pseudo section. - // - // FIXME: Use a PointerInt wrapper for this? - static const MCSection *AbsolutePseudoSection; - - /// Name - The name of the symbol. The referred-to string data is actually - /// held by the StringMap that lives in MCContext. - StringRef Name; - - /// Section - The section the symbol is defined in. This is null for - /// undefined symbols, and the special AbsolutePseudoSection value for - /// absolute symbols. If this is a variable symbol, this caches the - /// variable value's section. - mutable const MCSection *Section; - - /// Value - If non-null, the value for a variable symbol. - const MCExpr *Value; - - /// IsTemporary - True if this is an assembler temporary label, which - /// typically does not survive in the .o file's symbol table. Usually - /// "Lfoo" or ".foo". - unsigned IsTemporary : 1; - - /// \brief True if this symbol can be redefined. - unsigned IsRedefinable : 1; - - /// IsUsed - True if this symbol has been used. - mutable unsigned IsUsed : 1; - - private: // MCContext creates and uniques these. - friend class MCExpr; - friend class MCContext; - MCSymbol(StringRef name, bool isTemporary) - : Name(name), Section(nullptr), Value(nullptr), - IsTemporary(isTemporary), IsRedefinable(false), IsUsed(false) {} - - MCSymbol(const MCSymbol&) = delete; - void operator=(const MCSymbol&) = delete; - const MCSection *getSectionPtr() const { - if (Section || !Value) - return Section; - return Section = Value->FindAssociatedSection(); - } - - public: - /// getName - Get the symbol name. - StringRef getName() const { return Name; } - - /// \name Accessors - /// @{ - - /// isTemporary - Check if this is an assembler temporary symbol. - bool isTemporary() const { return IsTemporary; } - - /// isUsed - Check if this is used. - bool isUsed() const { return IsUsed; } - void setUsed(bool Value) const { IsUsed = Value; } - - /// \brief Check if this symbol is redefinable. - bool isRedefinable() const { return IsRedefinable; } - /// \brief Mark this symbol as redefinable. - void setRedefinable(bool Value) { IsRedefinable = Value; } - /// \brief Prepare this symbol to be redefined. - void redefineIfPossible() { - if (IsRedefinable) { - Value = nullptr; - Section = nullptr; - IsRedefinable = false; - } - } +class MCExpr; +class MCSection; +class MCContext; +class raw_ostream; + +/// MCSymbol - Instances of this class represent a symbol name in the MC file, +/// and MCSymbols are created and uniqued by the MCContext class. MCSymbols +/// should only be constructed with valid names for the object file. +/// +/// If the symbol is defined/emitted into the current translation unit, the +/// Section member is set to indicate what section it lives in. Otherwise, if +/// it is a reference to an external entity, it has a null section. +class MCSymbol { + // Special sentinal value for the absolute pseudo section. + // + // FIXME: Use a PointerInt wrapper for this? + static const MCSection *AbsolutePseudoSection; + + /// Name - The name of the symbol. The referred-to string data is actually + /// held by the StringMap that lives in MCContext. + StringRef Name; + + /// Section - The section the symbol is defined in. This is null for + /// undefined symbols, and the special AbsolutePseudoSection value for + /// absolute symbols. If this is a variable symbol, this caches the + /// variable value's section. + mutable const MCSection *Section; + + /// Value - If non-null, the value for a variable symbol. + const MCExpr *Value; + + /// IsTemporary - True if this is an assembler temporary label, which + /// typically does not survive in the .o file's symbol table. Usually + /// "Lfoo" or ".foo". + unsigned IsTemporary : 1; + + /// \brief True if this symbol can be redefined. + unsigned IsRedefinable : 1; + + /// IsUsed - True if this symbol has been used. + mutable unsigned IsUsed : 1; + +private: // MCContext creates and uniques these. + friend class MCExpr; + friend class MCContext; + MCSymbol(StringRef name, bool isTemporary) + : Name(name), Section(nullptr), Value(nullptr), IsTemporary(isTemporary), + IsRedefinable(false), IsUsed(false) {} + + MCSymbol(const MCSymbol &) = delete; + void operator=(const MCSymbol &) = delete; + const MCSection *getSectionPtr() const { + if (Section || !Value) + return Section; + return Section = Value->FindAssociatedSection(); + } - /// @} - /// \name Associated Sections - /// @{ +public: + /// getName - Get the symbol name. + StringRef getName() const { return Name; } - /// isDefined - Check if this symbol is defined (i.e., it has an address). - /// - /// Defined symbols are either absolute or in some section. - bool isDefined() const { - return getSectionPtr() != nullptr; - } + /// \name Accessors + /// @{ - /// isInSection - Check if this symbol is defined in some section (i.e., it - /// is defined but not absolute). - bool isInSection() const { - return isDefined() && !isAbsolute(); - } + /// isTemporary - Check if this is an assembler temporary symbol. + bool isTemporary() const { return IsTemporary; } - /// isUndefined - Check if this symbol undefined (i.e., implicitly defined). - bool isUndefined() const { - return !isDefined(); - } + /// isUsed - Check if this is used. + bool isUsed() const { return IsUsed; } + void setUsed(bool Value) const { IsUsed = Value; } - /// isAbsolute - Check if this is an absolute symbol. - bool isAbsolute() const { - return getSectionPtr() == AbsolutePseudoSection; + /// \brief Check if this symbol is redefinable. + bool isRedefinable() const { return IsRedefinable; } + /// \brief Mark this symbol as redefinable. + void setRedefinable(bool Value) { IsRedefinable = Value; } + /// \brief Prepare this symbol to be redefined. + void redefineIfPossible() { + if (IsRedefinable) { + Value = nullptr; + Section = nullptr; + IsRedefinable = false; } + } - /// getSection - Get the section associated with a defined, non-absolute - /// symbol. - const MCSection &getSection() const { - assert(isInSection() && "Invalid accessor!"); - return *getSectionPtr(); - } + /// @} + /// \name Associated Sections + /// @{ - /// setSection - Mark the symbol as defined in the section \p S. - void setSection(const MCSection &S) { - assert(!isVariable() && "Cannot set section of variable"); - Section = &S; - } + /// isDefined - Check if this symbol is defined (i.e., it has an address). + /// + /// Defined symbols are either absolute or in some section. + bool isDefined() const { return getSectionPtr() != nullptr; } - /// setUndefined - Mark the symbol as undefined. - void setUndefined() { - Section = nullptr; - } + /// isInSection - Check if this symbol is defined in some section (i.e., it + /// is defined but not absolute). + bool isInSection() const { return isDefined() && !isAbsolute(); } - /// @} - /// \name Variable Symbols - /// @{ + /// isUndefined - Check if this symbol undefined (i.e., implicitly defined). + bool isUndefined() const { return !isDefined(); } - /// isVariable - Check if this is a variable symbol. - bool isVariable() const { - return Value != nullptr; - } + /// isAbsolute - Check if this is an absolute symbol. + bool isAbsolute() const { return getSectionPtr() == AbsolutePseudoSection; } - /// getVariableValue() - Get the value for variable symbols. - const MCExpr *getVariableValue() const { - assert(isVariable() && "Invalid accessor!"); - IsUsed = true; - return Value; - } + /// getSection - Get the section associated with a defined, non-absolute + /// symbol. + const MCSection &getSection() const { + assert(isInSection() && "Invalid accessor!"); + return *getSectionPtr(); + } - void setVariableValue(const MCExpr *Value); + /// setSection - Mark the symbol as defined in the section \p S. + void setSection(const MCSection &S) { + assert(!isVariable() && "Cannot set section of variable"); + Section = &S; + } - /// @} + /// setUndefined - Mark the symbol as undefined. + void setUndefined() { Section = nullptr; } - /// print - Print the value to the stream \p OS. - void print(raw_ostream &OS) const; + /// @} + /// \name Variable Symbols + /// @{ - /// dump - Print the value to stderr. - void dump() const; - }; + /// isVariable - Check if this is a variable symbol. + bool isVariable() const { return Value != nullptr; } - inline raw_ostream &operator<<(raw_ostream &OS, const MCSymbol &Sym) { - Sym.print(OS); - return OS; + /// getVariableValue() - Get the value for variable symbols. + const MCExpr *getVariableValue() const { + assert(isVariable() && "Invalid accessor!"); + IsUsed = true; + return Value; } + + void setVariableValue(const MCExpr *Value); + + /// @} + + /// print - Print the value to the stream \p OS. + void print(raw_ostream &OS) const; + + /// dump - Print the value to stderr. + void dump() const; +}; + +inline raw_ostream &operator<<(raw_ostream &OS, const MCSymbol &Sym) { + Sym.print(OS); + return OS; +} } // end namespace llvm #endif