From 1f19f0f31dace5d145fecbe1f0f3fea4fb9ae813 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 15 Jan 2010 19:06:59 +0000 Subject: [PATCH] give X86Operand a ctor and start passing SMLoc's into it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93532 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/AsmParser/X86AsmParser.cpp | 24 ++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/Target/X86/AsmParser/X86AsmParser.cpp b/lib/Target/X86/AsmParser/X86AsmParser.cpp index dcf4f8360f1..8ccfc8f1dcb 100644 --- a/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -74,7 +74,7 @@ namespace { /// X86Operand - Instances of this class represent a parsed X86 machine /// instruction. struct X86Operand : public MCParsedAsmOperand { - enum { + enum KindTy { Token, Register, Immediate, @@ -106,6 +106,14 @@ struct X86Operand : public MCParsedAsmOperand { } Mem; }; + X86Operand(KindTy K, SMLoc Start = SMLoc(), SMLoc End = SMLoc()) + : Kind(K), StartLoc(Start), EndLoc(End) {} + + /// getStartLoc - Get the location of the first token of this operand. + SMLoc getStartLoc() const { return StartLoc; } + /// getEndLoc - Get the location of the last token of this operand. + SMLoc getEndLoc() const { return EndLoc; } + StringRef getToken() const { assert(Kind == Token && "Invalid access!"); return StringRef(Tok.Data, Tok.Length); @@ -194,25 +202,20 @@ struct X86Operand : public MCParsedAsmOperand { } static X86Operand *CreateToken(StringRef Str) { - X86Operand *Res = new X86Operand(); - Res->Kind = Token; + X86Operand *Res = new X86Operand(Token); Res->Tok.Data = Str.data(); Res->Tok.Length = Str.size(); return Res; } static X86Operand *CreateReg(unsigned RegNo, SMLoc StartLoc, SMLoc EndLoc) { - X86Operand *Res = new X86Operand(); - Res->Kind = Register; + X86Operand *Res = new X86Operand(Register, StartLoc, EndLoc); Res->Reg.RegNo = RegNo; - Res->StartLoc = StartLoc; - Res->EndLoc = EndLoc; return Res; } static X86Operand *CreateImm(const MCExpr *Val) { - X86Operand *Res = new X86Operand(); - Res->Kind = Immediate; + X86Operand *Res = new X86Operand(Immediate); Res->Imm.Val = Val; return Res; } @@ -226,8 +229,7 @@ struct X86Operand : public MCParsedAsmOperand { // The scale should always be one of {1,2,4,8}. assert(((Scale == 1 || Scale == 2 || Scale == 4 || Scale == 8)) && "Invalid scale!"); - X86Operand *Res = new X86Operand(); - Res->Kind = Memory; + X86Operand *Res = new X86Operand(Memory); Res->Mem.SegReg = SegReg; Res->Mem.Disp = Disp; Res->Mem.BaseReg = BaseReg; -- 2.34.1