nany
message.h
1 #pragma once
2 #include "libnanyc.h"
3 #include <yuni/core/string.h>
4 #include <yuni/core/noncopyable.h>
5 #include <yuni/thread/mutex.h>
6 #include "levels.h"
7 #include "nany/nany.h"
8 #include <iosfwd>
9 #include <memory>
10 
11 
12 namespace ny { struct Atom; }
13 
14 
15 namespace ny {
16 namespace Logs {
17 
18 
19 struct Message final: Yuni::NonCopyable<Message> {
20  Message(Level level)
21  : level(level) {
22  }
23 
25  Message& createEntry(Level level);
26 
27  void appendEntry(const std::shared_ptr<Message>& message);
28 
29  void print(nyconsole_t&, bool unify = false);
30 
31  bool isClassifiedAsError() const {
32  return static_cast<uint>(level) > static_cast<uint>(Level::warning);
33  }
34 
35 
36 public:
38  Level level = Level::error;
40  Yuni::ShortString16 section;
42  YString prefix;
44  YString message;
45 
47  std::vector<std::shared_ptr<Message>> entries;
48 
52  struct Origin final {
54  struct Location final {
56  void resetFromAtom(const ny::Atom&);
57 
59  YString target;
61  YString filename;
62 
64  struct {
66  uint line = 0;
68  uint offset = 0;
70  uint offsetEnd = 0;
71  }
72  pos;
73  }
74  location;
75  }
76  origins;
77 
79  bool hasErrors = false;
80  mutable yuni::Mutex m_mutex;
81 
82 }; // struct Message
83 
84 
85 } // namespace Logs
86 } // namespace ny
YString filename
Current filename.
Definition: message.h:61
void resetFromAtom(const ny::Atom &)
Reset the location from a given atom.
Definition: message.cpp:209
Level level
Error level.
Definition: message.h:38
Definition: nany.h:325
YString prefix
prefix to highlight
Definition: message.h:42
uint offset
Current offset (1-based, otherwise disabled)
Definition: message.h:68
Definition: ast.cpp:6
uint line
Current line (1-based, otherwise disabled)
Definition: message.h:66
bool hasErrors
Flag to remember if some errors or warning have occured or not.
Definition: message.h:79
Yuni::ShortString16 section
Section.
Definition: message.h:40
YString target
Current target.
Definition: message.h:59
std::vector< std::shared_ptr< Message > > entries
Sub-entries.
Definition: message.h:47
Definition of a single class or function.
Definition: atom.h:37
Definition: message.h:52
struct ny::Logs::Message::Origin::Location::@34 pos
Current position.
Current filename (if any)
Definition: message.h:54
Definition: message.h:19
uint offsetEnd
Current offset (1-based, otherwise disabled)
Definition: message.h:70
Message & createEntry(Level level)
Create a new sub-entry.
Definition: message.cpp:179
YString message
The message itself.
Definition: message.h:44