aboutsummaryrefslogtreecommitdiff
path: root/tools/edis
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2010-02-09 01:00:18 +0000
committerSean Callanan <scallanan@apple.com>2010-02-09 01:00:18 +0000
commitde5dac1c46226b61ce9921449dd9322b5ffcc41e (patch)
tree8a66ab854d6035d049698ab61562035885f20e83 /tools/edis
parent30d9a644d5b09bcf95b8b05ec559c778566265c3 (diff)
Fixed a problem where the enhanced disassembly
library was reporting inaccurate token IDs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95639 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/edis')
-rw-r--r--tools/edis/EDToken.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/edis/EDToken.cpp b/tools/edis/EDToken.cpp
index 6b67e624e8..9408305d4b 100644
--- a/tools/edis/EDToken.cpp
+++ b/tools/edis/EDToken.cpp
@@ -94,7 +94,8 @@ int EDToken::tokenize(std::vector<EDToken*> &tokens,
SmallVector<MCParsedAsmOperand*, 5> parsedOperands;
SmallVector<AsmToken, 10> asmTokens;
- disassembler.parseInst(parsedOperands, asmTokens, str);
+ if(disassembler.parseInst(parsedOperands, asmTokens, str))
+ return -1;
SmallVectorImpl<MCParsedAsmOperand*>::iterator operandIterator;
unsigned int operandIndex;
@@ -167,7 +168,12 @@ int EDToken::tokenize(std::vector<EDToken*> &tokens,
if(operandIterator != parsedOperands.end() &&
tokenLoc.getPointer() >=
(*operandIterator)->getStartLoc().getPointer()) {
- token->setOperandID(operandOrder[operandIndex]);
+ /// operandIndex == 0 means the operand is the instruction (which the
+ /// AsmParser treats as an operand but edis does not). We therefore skip
+ /// operandIndex == 0 and subtract 1 from all other operand indices.
+
+ if(operandIndex > 0)
+ token->setOperandID(operandOrder[operandIndex - 1]);
}
tokens.push_back(token);