LLVM 24.0.0git
YAMLRemarkParser.h
Go to the documentation of this file.
1//===-- YAMLRemarkParser.h - Parser for YAML remarks ------------*- C++/-*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file provides the impementation of the YAML remark parser.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_REMARKS_YAML_REMARK_PARSER_H
14#define LLVM_REMARKS_YAML_REMARK_PARSER_H
15
16#include "llvm/Remarks/Remark.h"
19#include "llvm/Support/Error.h"
24#include <optional>
25#include <string>
26
27namespace llvm {
28namespace remarks {
29
30class YAMLParseError : public ErrorInfo<YAMLParseError> {
31public:
32 static char ID;
33
34 YAMLParseError(StringRef Message, SourceMgr &SM, yaml::Stream &Stream,
36
37 YAMLParseError(StringRef Message) : Message(std::string(Message)) {}
38
39 void log(raw_ostream &OS) const override { OS << Message; }
40 std::error_code convertToErrorCode() const override {
42 }
43
44private:
45 std::string Message;
46};
47
48/// Regular YAML to Remark parser.
50 /// Last error message that can come from the YAML parser diagnostics.
51 /// We need this for catching errors in the constructor.
52 std::string LastErrorMessage;
53 /// Source manager for better error messages.
55 /// Stream for yaml parsing.
57 /// Iterator in the YAML stream.
59 /// If we parse remark metadata in separate mode, we need to open a new file
60 /// and parse that.
61 std::unique_ptr<MemoryBuffer> SeparateBuf;
62 /// Storage for block scalar values, which live in the YAML document that
63 /// next() frees.
65
67
69
70 static bool classof(const RemarkParser *P) {
71 return P->ParserFormat == Format::YAML;
72 }
73
74protected:
75 /// Create a YAMLParseError error from an existing error generated by the YAML
76 /// parser.
77 /// If there is no error, this returns Success.
78 Error error();
79 /// Create a YAMLParseError error referencing a specific node.
81 /// Parse a YAML remark to a remarks::Remark object.
83 /// Parse the type of a remark to an enum type.
85 /// Parse one key to a string.
87 /// Parse one value to a string.
89 /// Parse one value to an unsigned.
91 /// Parse a debug location.
93 /// Parse an argument.
95};
96
98 StringRef Buf,
99 std::optional<StringRef> ExternalFilePrependPath = std::nullopt);
100
101} // end namespace remarks
102} // end namespace llvm
103
104#endif /* LLVM_REMARKS_YAML_REMARK_PARSER_H */
This file defines the BumpPtrAllocator interface.
#define P(N)
Base class for user error types.
Definition Error.h:354
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
Tagged union holding either a T or a Error.
Definition Error.h:485
This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling.
Definition SourceMgr.h:34
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
void log(raw_ostream &OS) const override
Print an error message to an output stream.
std::error_code convertToErrorCode() const override
Convert this error to a std::error_code.
YAMLParseError(StringRef Message)
YAMLParseError(StringRef Message, SourceMgr &SM, yaml::Stream &Stream, yaml::Node &Node)
A YAML Stream is a sequence of Documents.
Definition YAMLParser.h:538
A key and value pair.
Definition YAMLParser.h:292
Represents a YAML map created from either a block map for a flow map.
Definition YAMLParser.h:421
Abstract base class for all Nodes.
Definition YAMLParser.h:121
This class represents a YAML stream potentially containing multiple documents.
Definition YAMLParser.h:88
Iterator abstraction for Documents over a Stream.
Definition YAMLParser.h:595
Expected< std::unique_ptr< YAMLRemarkParser > > createYAMLParserFromMeta(StringRef Buf, std::optional< StringRef > ExternalFilePrependPath=std::nullopt)
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
Definition Error.cpp:94
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
Definition Allocator.h:391
Implement std::hash so that hash_code can be used in STL containers.
Definition BitVector.h:878
RemarkParser(Format ParserFormat)
A remark type used for both emission and parsing.
Definition Remark.h:107
yaml::document_iterator YAMLIt
Iterator in the YAML stream.
Error error()
Create a YAMLParseError error from an existing error generated by the YAML parser.
Expected< unsigned > parseUnsigned(yaml::KeyValueNode &Node)
Parse one value to an unsigned.
yaml::Stream Stream
Stream for yaml parsing.
std::unique_ptr< MemoryBuffer > SeparateBuf
If we parse remark metadata in separate mode, we need to open a new file and parse that.
Expected< RemarkLocation > parseDebugLoc(yaml::KeyValueNode &Node)
Parse a debug location.
virtual Expected< StringRef > parseStr(yaml::KeyValueNode &Node)
Parse one value to a string.
Expected< StringRef > parseKey(yaml::KeyValueNode &Node)
Parse one key to a string.
BumpPtrAllocator Alloc
Storage for block scalar values, which live in the YAML document that next() frees.
Expected< Argument > parseArg(yaml::Node &Node)
Parse an argument.
Expected< std::unique_ptr< Remark > > parseRemark(yaml::Document &Remark)
Parse a YAML remark to a remarks::Remark object.
static bool classof(const RemarkParser *P)
Expected< std::unique_ptr< Remark > > next() override
If no error occurs, this returns a valid Remark object.
SourceMgr SM
Source manager for better error messages.
std::string LastErrorMessage
Last error message that can come from the YAML parser diagnostics.
Expected< Type > parseType(yaml::MappingNode &Node)
Parse the type of a remark to an enum type.