| //===- lib/MC/MCValue.cpp - MCValue implementation ------------------------===// | 
 | // | 
 | // 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 | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include "llvm/MC/MCValue.h" | 
 | #include "llvm/Config/llvm-config.h" | 
 | #include "llvm/MC/MCExpr.h" | 
 | #include "llvm/Support/Debug.h" | 
 | #include "llvm/Support/ErrorHandling.h" | 
 | #include "llvm/Support/raw_ostream.h" | 
 |  | 
 | using namespace llvm; | 
 |  | 
 | void MCValue::print(raw_ostream &OS) const { | 
 |   if (isAbsolute()) { | 
 |     OS << getConstant(); | 
 |     return; | 
 |   } | 
 |  | 
 |   // FIXME: prints as a number, which isn't ideal. But the meaning will be | 
 |   // target-specific anyway. | 
 |   if (getRefKind()) | 
 |     OS << ':' << getRefKind() <<  ':'; | 
 |  | 
 |   OS << *getSymA(); | 
 |  | 
 |   if (getSymB()) { | 
 |     OS << " - "; | 
 |     OS << *getSymB(); | 
 |   } | 
 |  | 
 |   if (getConstant()) | 
 |     OS << " + " << getConstant(); | 
 | } | 
 |  | 
 | #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) | 
 | LLVM_DUMP_METHOD void MCValue::dump() const { | 
 |   print(dbgs()); | 
 | } | 
 | #endif | 
 |  | 
 | MCSymbolRefExpr::VariantKind MCValue::getAccessVariant() const { | 
 |   const MCSymbolRefExpr *B = getSymB(); | 
 |   if (B) { | 
 |     if (B->getKind() != MCSymbolRefExpr::VK_None) | 
 |       llvm_unreachable("unsupported"); | 
 |   } | 
 |  | 
 |   const MCSymbolRefExpr *A = getSymA(); | 
 |   if (!A) | 
 |     return MCSymbolRefExpr::VK_None; | 
 |  | 
 |   return A->getKind(); | 
 | } |