[llvm-commits] [llvm] r94237 - /llvm/trunk/include/llvm/Target/TargetAsmLexer.h

Sean Callanan scallanan at apple.com
Fri Jan 22 14:35:01 PST 2010


Author: spyffe
Date: Fri Jan 22 16:35:01 2010
New Revision: 94237

URL: http://llvm.org/viewvc/llvm-project?rev=94237&view=rev
Log:
Filled out the skeleton of the TargetAsmLexer to behave
exactly like an MCAsmLexer.  (The difference is that the
TargetAsmLexer knows how to handle target-specific stuff
like registers, whereas the MCAsmLexer is fully generic.)

Modified:
    llvm/trunk/include/llvm/Target/TargetAsmLexer.h

Modified: llvm/trunk/include/llvm/Target/TargetAsmLexer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmLexer.h?rev=94237&r1=94236&r2=94237&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmLexer.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmLexer.h Fri Jan 22 16:35:01 2010
@@ -10,16 +10,32 @@
 #ifndef LLVM_TARGET_TARGETASMLEXER_H
 #define LLVM_TARGET_TARGETASMLEXER_H
 
+#include "llvm/MC/MCParser/MCAsmLexer.h"
+
 namespace llvm {
 class Target;
   
 /// TargetAsmLexer - Generic interface to target specific assembly lexers.
 class TargetAsmLexer {
+  /// The current token
+  AsmToken CurTok;
+  
+  /// The location and description of the current error
+  SMLoc ErrLoc;
+  std::string Err;
+  
   TargetAsmLexer(const TargetAsmLexer &);   // DO NOT IMPLEMENT
   void operator=(const TargetAsmLexer &);  // DO NOT IMPLEMENT
 protected: // Can only create subclasses.
   TargetAsmLexer(const Target &);
   
+  virtual AsmToken LexToken() = 0;
+  
+  void SetError(const SMLoc &errLoc, const std::string &err) {
+    ErrLoc = errLoc;
+    Err = err;
+  }
+  
   /// TheTarget - The Target that this machine was created for.
   const Target &TheTarget;
   
@@ -28,7 +44,34 @@
   
   const Target &getTarget() const { return TheTarget; }
   
+  /// Lex - Consume the next token from the input stream and return it.
+  const AsmToken &Lex() {
+    return CurTok = LexToken();
+  }
+  
+  /// getTok - Get the current (last) lexed token.
+  const AsmToken &getTok() {
+    return CurTok;
+  }
+  
+  /// getErrLoc - Get the current error location
+  const SMLoc &getErrLoc() {
+    return ErrLoc;
+  }
+  
+  /// getErr - Get the current error string
+  const std::string &getErr() {
+    return Err;
+  }
+  
+  /// getKind - Get the kind of current token.
+  AsmToken::TokenKind getKind() const { return CurTok.getKind(); }
+  
+  /// is - Check if the current token has kind \arg K.
+  bool is(AsmToken::TokenKind K) const { return CurTok.is(K); }
   
+  /// isNot - Check if the current token has kind \arg K.
+  bool isNot(AsmToken::TokenKind K) const { return CurTok.isNot(K); }
 };
 
 } // End llvm namespace





More information about the llvm-commits mailing list