picceler
Loading...
Searching...
No Matches
error.h
Go to the documentation of this file.
1#pragma once
2
3#include <expected>
4#include <string>
5#include <format>
6
7namespace picceler {
8
10class Location {
11public:
12 Location() : _line(0), _column(0) {}
13 explicit Location(std::pair<size_t, size_t> line_column) : _line(line_column.first), _column(line_column.second) {}
14 explicit Location(size_t line, size_t column) : _line(line), _column(column) {}
15
16 size_t line() const { return _line; }
17 size_t column() const { return _column; }
18
19private:
20 size_t _line = 0;
21 size_t _column = 0;
22};
23
28
29 CompileError() : _message("Empty message! If this isn't a test, debug this."), _location() {}
30 explicit CompileError(std::string string, Location location = {})
31 : _message(std::move(string)), _location(location) {}
32
33 CompileError(const CompileError &) = default;
35
36 CompileError &operator=(const CompileError &) = default;
38
39 std::string _message;
41
42 // const std::string &message() const { return _message; }
43 size_t line() const { return _location.line(); }
44 size_t column() const { return _location.column(); }
45
46 std::string message() const {
47 if (_location.line() == 0 && _location.column() == 0) {
48 return std::format("CompilerError: {}", _message);
49 }
50
51 return std::format("[line {}:{}] CompilerError: {}", _location.line(), _location.column(), _message);
52 }
53};
54
59template <typename T> using Result = std::expected<T, CompileError>;
60
61} // namespace picceler
Struct to hold location information.
Definition error.h:10
size_t column() const
Definition error.h:17
Location(std::pair< size_t, size_t > line_column)
Definition error.h:13
Location(size_t line, size_t column)
Definition error.h:14
size_t line() const
Definition error.h:16
Location()
Definition error.h:12
Definition ast.h:11
std::expected< T, CompileError > Result
A type alias for the result of a compilation operation.
Definition error.h:59
CompileError & operator=(CompileError &&)=default
std::string _message
Definition error.h:39
CompileError & operator=(const CompileError &)=default
size_t column() const
Definition error.h:44
size_t line() const
Definition error.h:43
Location _location
Definition error.h:40
CompileError()
Definition error.h:29
std::string message() const
Definition error.h:46
CompileError(CompileError &&)=default
CompileError(const CompileError &)=default
CompileError(std::string string, Location location={})
Definition error.h:30