mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-27 14:32:21 +00:00
Factor out metadata parsing into a separate function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108343 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9fe2c67045
commit
834480374b
lib/AsmParser
@ -2022,33 +2022,8 @@ bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
|
||||
ID.StrVal = Lex.getStrVal();
|
||||
ID.Kind = ValID::t_LocalName;
|
||||
break;
|
||||
case lltok::exclaim: // !{...} MDNode, !"foo" MDString
|
||||
Lex.Lex();
|
||||
|
||||
if (EatIfPresent(lltok::lbrace)) {
|
||||
SmallVector<Value*, 16> Elts;
|
||||
if (ParseMDNodeVector(Elts, PFS) ||
|
||||
ParseToken(lltok::rbrace, "expected end of metadata node"))
|
||||
return true;
|
||||
|
||||
ID.MDNodeVal = MDNode::get(Context, Elts.data(), Elts.size());
|
||||
ID.Kind = ValID::t_MDNode;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Standalone metadata reference
|
||||
// !{ ..., !42, ... }
|
||||
if (Lex.getKind() == lltok::APSInt) {
|
||||
if (ParseMDNodeID(ID.MDNodeVal)) return true;
|
||||
ID.Kind = ValID::t_MDNode;
|
||||
return false;
|
||||
}
|
||||
|
||||
// MDString:
|
||||
// ::= '!' STRINGCONSTANT
|
||||
if (ParseMDString(ID.MDStringVal)) return true;
|
||||
ID.Kind = ValID::t_MDString;
|
||||
return false;
|
||||
case lltok::exclaim: // !42, !{...}, or !"foo"
|
||||
return ParseMetadataValue(ID, PFS);
|
||||
case lltok::APSInt:
|
||||
ID.APSIntVal = Lex.getAPSIntVal();
|
||||
ID.Kind = ValID::t_APSInt;
|
||||
@ -2529,6 +2504,42 @@ bool LLParser::ParseGlobalValueVector(SmallVectorImpl<Constant*> &Elts) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseMetadataValue
|
||||
/// ::= !42
|
||||
/// ::= !{...}
|
||||
/// ::= !"string"
|
||||
bool LLParser::ParseMetadataValue(ValID &ID, PerFunctionState *PFS) {
|
||||
assert(Lex.getKind() == lltok::exclaim);
|
||||
Lex.Lex();
|
||||
|
||||
// MDNode:
|
||||
// !{ ... }
|
||||
if (EatIfPresent(lltok::lbrace)) {
|
||||
SmallVector<Value*, 16> Elts;
|
||||
if (ParseMDNodeVector(Elts, PFS) ||
|
||||
ParseToken(lltok::rbrace, "expected end of metadata node"))
|
||||
return true;
|
||||
|
||||
ID.MDNodeVal = MDNode::get(Context, Elts.data(), Elts.size());
|
||||
ID.Kind = ValID::t_MDNode;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Standalone metadata reference
|
||||
// !42
|
||||
if (Lex.getKind() == lltok::APSInt) {
|
||||
if (ParseMDNodeID(ID.MDNodeVal)) return true;
|
||||
ID.Kind = ValID::t_MDNode;
|
||||
return false;
|
||||
}
|
||||
|
||||
// MDString:
|
||||
// ::= '!' STRINGCONSTANT
|
||||
if (ParseMDString(ID.MDStringVal)) return true;
|
||||
ID.Kind = ValID::t_MDString;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Function Parsing.
|
||||
|
@ -308,6 +308,7 @@ namespace llvm {
|
||||
bool ParseGlobalValue(const Type *Ty, Constant *&V);
|
||||
bool ParseGlobalTypeAndValue(Constant *&V);
|
||||
bool ParseGlobalValueVector(SmallVectorImpl<Constant*> &Elts);
|
||||
bool ParseMetadataValue(ValID &ID, PerFunctionState *PFS);
|
||||
bool ParseMDNodeVector(SmallVectorImpl<Value*> &, PerFunctionState *PFS);
|
||||
|
||||
// Function Parsing.
|
||||
|
Loading…
x
Reference in New Issue
Block a user