Make expression parsing and error/warning reporting available through the

generic MCAsmParser interface.

llvm-svn: 77381
This commit is contained in:
Daniel Dunbar 2009-07-28 22:22:31 +00:00
parent 6adb6e07ce
commit c43267a472
2 changed files with 57 additions and 24 deletions

View File

@ -10,8 +10,13 @@
#ifndef LLVM_MC_MCASMPARSER_H #ifndef LLVM_MC_MCASMPARSER_H
#define LLVM_MC_MCASMPARSER_H #define LLVM_MC_MCASMPARSER_H
#include "llvm/Support/DataTypes.h"
namespace llvm { namespace llvm {
class MCAsmLexer; class MCAsmLexer;
class MCValue;
class SMLoc;
class Twine;
/// MCAsmParser - Generic assembler parser interface, for use by target specific /// MCAsmParser - Generic assembler parser interface, for use by target specific
/// assembly parsers. /// assembly parsers.
@ -25,6 +30,43 @@ public:
virtual ~MCAsmParser(); virtual ~MCAsmParser();
virtual MCAsmLexer &getLexer() = 0; virtual MCAsmLexer &getLexer() = 0;
/// Warning - Emit a warning at the location \arg L, with the message \arg
/// Msg.
virtual void Warning(SMLoc L, const Twine &Msg) = 0;
/// Warning - Emit an error at the location \arg L, with the message \arg
/// Msg.
///
/// \return The return value is always true, as an idiomatic convenience to
/// clients.
virtual bool Error(SMLoc L, const Twine &Msg) = 0;
/// ParseAbsoluteExpression - Parse an expression which must evaluate to an
/// absolute value.
///
/// @param Res - The value of the absolute expression. The result is undefined
/// on error.
/// @result - False on success.
virtual bool ParseAbsoluteExpression(int64_t &Res) = 0;
/// ParseRelocatableExpression - Parse an expression which must be
/// relocatable.
///
/// @param Res - The relocatable expression value. The result is undefined on
/// error.
/// @result - False on success.
virtual bool ParseRelocatableExpression(MCValue &Res) = 0;
/// ParseParenRelocatableExpression - Parse an expression which must be
/// relocatable, assuming that an initial '(' has already been consumed.
///
/// @param Res - The relocatable expression value. The result is undefined on
/// error.
/// @result - False on success.
///
/// @see ParseRelocatableExpression, ParseParenExpr.
virtual bool ParseParenRelocatableExpression(MCValue &Res) = 0;
}; };
} // End llvm namespace } // End llvm namespace

View File

@ -48,41 +48,32 @@ public:
TargetAsmParser &getTargetParser() const { return *TargetParser; } TargetAsmParser &getTargetParser() const { return *TargetParser; }
void setTargetParser(TargetAsmParser &P) { TargetParser = &P; } void setTargetParser(TargetAsmParser &P) { TargetParser = &P; }
/// @name MCAsmParser Interface
/// {
virtual MCAsmLexer &getLexer() { return Lexer; } virtual MCAsmLexer &getLexer() { return Lexer; }
virtual void Warning(SMLoc L, const Twine &Meg);
virtual bool Error(SMLoc L, const Twine &Msg);
virtual bool ParseExpression(AsmExpr *&Res);
virtual bool ParseAbsoluteExpression(int64_t &Res);
virtual bool ParseRelocatableExpression(MCValue &Res);
/// }
private: private:
bool ParseStatement(); bool ParseStatement();
void Warning(SMLoc L, const Twine &Msg);
bool Error(SMLoc L, const Twine &Msg);
bool TokError(const char *Msg); bool TokError(const char *Msg);
void EatToEndOfStatement(); void EatToEndOfStatement();
bool ParseAssignment(const StringRef &Name, bool IsDotSet); bool ParseAssignment(const StringRef &Name, bool IsDotSet);
/// ParseExpression - Parse a general assembly expression.
///
/// @param Res - The resulting expression. The pointer value is null on error.
/// @result - False on success.
bool ParseExpression(AsmExpr *&Res);
/// ParseAbsoluteExpression - Parse an expression which must evaluate to an
/// absolute value.
///
/// @param Res - The value of the absolute expression. The result is undefined
/// on error.
/// @result - False on success.
bool ParseAbsoluteExpression(int64_t &Res);
/// ParseRelocatableExpression - Parse an expression which must be
/// relocatable.
///
/// @param Res - The relocatable expression value. The result is undefined on
/// error.
/// @result - False on success.
bool ParseRelocatableExpression(MCValue &Res);
/// ParseParenRelocatableExpression - Parse an expression which must be /// ParseParenRelocatableExpression - Parse an expression which must be
/// relocatable, assuming that an initial '(' has already been consumed. /// relocatable, assuming that an initial '(' has already been consumed.
/// ///