diff options
| -rw-r--r-- | llvm/include/llvm/Support/DebugLoc.h | 5 | ||||
| -rw-r--r-- | llvm/lib/VMCore/DebugLoc.cpp | 15 | 
2 files changed, 19 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/DebugLoc.h b/llvm/include/llvm/Support/DebugLoc.h index 3b8365efcee..300d7401cec 100644 --- a/llvm/include/llvm/Support/DebugLoc.h +++ b/llvm/include/llvm/Support/DebugLoc.h @@ -40,6 +40,9 @@ namespace llvm {      static NewDebugLoc get(unsigned Line, unsigned Col,                             MDNode *Scope, MDNode *InlinedAt); +    /// getFromDILocation - Translate the DILocation quad into a NewDebugLoc. +    static NewDebugLoc getFromDILocation(MDNode *N); +          /// isUnknown - Return true if this is an unknown location.      bool isUnknown() const { return ScopeIdx == 0; } @@ -96,7 +99,7 @@ namespace llvm {      bool operator!=(const DebugLoc &DL) const { return !(*this == DL); }    }; -    /// DebugLocTracker - This class tracks debug location information. +  /// DebugLocTracker - This class tracks debug location information.    ///    struct DebugLocTracker {      /// DebugLocations - A vector of unique DebugLocTuple's. diff --git a/llvm/lib/VMCore/DebugLoc.cpp b/llvm/lib/VMCore/DebugLoc.cpp index 0fcbf2653aa..d9f533a9d60 100644 --- a/llvm/lib/VMCore/DebugLoc.cpp +++ b/llvm/lib/VMCore/DebugLoc.cpp @@ -111,6 +111,21 @@ MDNode *NewDebugLoc::getAsMDNode(const LLVMContext &Ctx) const {    return MDNode::get(Ctx2, &Elts[0], 4);  } +/// getFromDILocation - Translate the DILocation quad into a NewDebugLoc. +NewDebugLoc NewDebugLoc::getFromDILocation(MDNode *N) { +  if (N == 0 || N->getNumOperands() != 4) return NewDebugLoc(); +   +  MDNode *Scope = dyn_cast_or_null<MDNode>(N->getOperand(2)); +  if (Scope == 0) return NewDebugLoc(); +   +  unsigned LineNo = 0, ColNo = 0; +  if (ConstantInt *Line = dyn_cast_or_null<ConstantInt>(N->getOperand(0))) +    LineNo = Line->getZExtValue(); +  if (ConstantInt *Col = dyn_cast_or_null<ConstantInt>(N->getOperand(1))) +    ColNo = Col->getZExtValue(); +   +  return get(LineNo, ColNo, Scope, dyn_cast_or_null<MDNode>(N->getOperand(3))); +}  //===----------------------------------------------------------------------===//  // LLVMContextImpl Implementation  | 

