class Instruction;
class Constant;
class GlobalValue;
+ class MetadataBase;
class MDString;
class MDNode;
struct ValID;
std::map<unsigned, std::pair<PATypeHolder, LocTy> > ForwardRefTypeIDs;
std::vector<PATypeHolder> NumberedTypes;
/// MetadataCache - This map keeps track of parsed metadata constants.
- std::map<unsigned, Constant *> MetadataCache;
+ std::map<unsigned, MetadataBase *> MetadataCache;
+ std::map<unsigned, std::pair<MetadataBase *, LocTy> > ForwardRefMDNodes;
+
struct UpRefRecord {
/// Loc - This is the location of the upref.
LocTy Loc;
std::map<unsigned, std::pair<GlobalValue*, LocTy> > ForwardRefValIDs;
std::vector<GlobalValue*> NumberedVals;
public:
- LLParser(MemoryBuffer *F, ParseError &Err, Module *m) :
- Context(m->getContext()), Lex(F, Err), M(m) {}
+ LLParser(MemoryBuffer *F, SourceMgr &SM, SMDiagnostic &Err, Module *m) :
+ Context(m->getContext()), Lex(F, SM, Err, m->getContext()), M(m) {}
bool Run();
+ LLVMContext& getContext() { return Context; }
+
private:
bool Error(LocTy L, const std::string &Msg) const {
bool HasLinkage, unsigned Visibility);
bool ParseAlias(const std::string &Name, LocTy Loc, unsigned Visibility);
bool ParseStandaloneMetadata();
+ bool ParseMDString(MetadataBase *&S);
+ bool ParseMDNode(MetadataBase *&N);
// Type Parsing.
bool ParseType(PATypeHolder &Result, bool AllowVoid = false);