summaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCParser/MasmParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/MCParser/MasmParser.cpp')
-rw-r--r--llvm/lib/MC/MCParser/MasmParser.cpp32
1 files changed, 13 insertions, 19 deletions
diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp
index f4684e64e862..3730c63b0423 100644
--- a/llvm/lib/MC/MCParser/MasmParser.cpp
+++ b/llvm/lib/MC/MCParser/MasmParser.cpp
@@ -1480,7 +1480,7 @@ bool MasmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc,
auto VarIt = Variables.find(SymbolName.lower());
if (VarIt != Variables.end())
SymbolName = VarIt->second.Name;
- Sym = getContext().getOrCreateSymbol(SymbolName);
+ Sym = getContext().parseSymbol(SymbolName);
}
// If this is an absolute variable reference, substitute it now to preserve
@@ -1965,7 +1965,7 @@ bool MasmParser::parseStatement(ParseStatementInfo &Info,
if (IDVal == "@@") {
Sym = Ctx.createDirectionalLocalSymbol(0);
} else {
- Sym = getContext().getOrCreateSymbol(IDVal);
+ Sym = getContext().parseSymbol(IDVal);
}
// End of Labels should be treated as end of line for lexing
@@ -3009,8 +3009,7 @@ bool MasmParser::parseDirectiveEquate(StringRef IDVal, StringRef Name,
return false;
}
- MCSymbol *Sym = getContext().getOrCreateSymbol(Var.Name);
-
+ auto *Sym = getContext().parseSymbol(Var.Name);
const MCConstantExpr *PrevValue =
Sym->isVariable()
? dyn_cast_or_null<MCConstantExpr>(Sym->getVariableValue())
@@ -3318,7 +3317,7 @@ bool MasmParser::parseDirectiveNamedValue(StringRef TypeName, unsigned Size,
StringRef Name, SMLoc NameLoc) {
if (StructInProgress.empty()) {
// Initialize named data value.
- MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
+ MCSymbol *Sym = getContext().parseSymbol(Name);
getStreamer().emitLabel(Sym);
unsigned Count;
if (emitIntegralValues(Size, &Count))
@@ -3509,7 +3508,7 @@ bool MasmParser::parseDirectiveNamedRealValue(StringRef TypeName,
SMLoc NameLoc) {
if (StructInProgress.empty()) {
// Initialize named data value.
- MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
+ MCSymbol *Sym = getContext().parseSymbol(Name);
getStreamer().emitLabel(Sym);
unsigned Count;
if (emitRealValues(Semantics, &Count))
@@ -4003,7 +4002,7 @@ bool MasmParser::parseDirectiveNamedStructValue(const StructInfo &Structure,
SMLoc DirLoc, StringRef Name) {
if (StructInProgress.empty()) {
// Initialize named data value.
- MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
+ MCSymbol *Sym = getContext().parseSymbol(Name);
getStreamer().emitLabel(Sym);
unsigned Count;
if (emitStructValues(Structure, &Count))
@@ -4504,9 +4503,9 @@ bool MasmParser::parseDirectivePurgeMacro(SMLoc DirectiveLoc) {
bool MasmParser::parseDirectiveExtern() {
// .extern is the default - but we still need to take any provided type info.
auto parseOp = [&]() -> bool {
- StringRef Name;
+ MCSymbol *Sym;
SMLoc NameLoc = getTok().getLoc();
- if (parseIdentifier(Name))
+ if (parseSymbol(Sym))
return Error(NameLoc, "expected name");
if (parseToken(AsmToken::Colon))
return true;
@@ -4519,10 +4518,9 @@ bool MasmParser::parseDirectiveExtern() {
AsmTypeInfo Type;
if (lookUpType(TypeName, Type))
return Error(TypeLoc, "unrecognized type");
- KnownType[Name.lower()] = Type;
+ KnownType[Sym->getName().lower()] = Type;
}
- MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
Sym->setExternal(true);
getStreamer().emitSymbolAttribute(Sym, MCSA_Extern);
@@ -4538,11 +4536,10 @@ bool MasmParser::parseDirectiveExtern() {
/// ::= { ".globl", ".weak", ... } [ identifier ( , identifier )* ]
bool MasmParser::parseDirectiveSymbolAttribute(MCSymbolAttr Attr) {
auto parseOp = [&]() -> bool {
- StringRef Name;
SMLoc Loc = getTok().getLoc();
- if (parseIdentifier(Name))
+ MCSymbol *Sym;
+ if (parseSymbol(Sym))
return Error(Loc, "expected identifier");
- MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
// Assembler local symbols don't make any sense here. Complain loudly.
if (Sym->isTemporary())
@@ -4565,13 +4562,10 @@ bool MasmParser::parseDirectiveComm(bool IsLocal) {
return true;
SMLoc IDLoc = getLexer().getLoc();
- StringRef Name;
- if (parseIdentifier(Name))
+ MCSymbol *Sym;
+ if (parseSymbol(Sym))
return TokError("expected identifier in directive");
- // Handle the identifier as the key symbol.
- MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
-
if (getLexer().isNot(AsmToken::Comma))
return TokError("unexpected token in directive");
Lex();