diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2024-04-15 04:46:11 +0630 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2024-04-15 04:55:51 +0630 |
commit | 81efc9006d9ebcb0587d1d4d5ee7a1b9d2996026 (patch) | |
tree | 99169cc5970fbdb4d7360547f94a302287736b3b /asm/preprocesser.cpp | |
parent | 929e5a3d0dddf425f800e6479756005736c47e7b (diff) | |
download | ovm-81efc9006d9ebcb0587d1d4d5ee7a1b9d2996026.tar.gz ovm-81efc9006d9ebcb0587d1d4d5ee7a1b9d2996026.tar.bz2 ovm-81efc9006d9ebcb0587d1d4d5ee7a1b9d2996026.zip |
Implement printing of pp_err_t
Another great thing for C++: the ability to tell it how to print
structures the way I want. In C it's either:
1) Write a function to print the structure out (preferably to a file
pointer)
2) Write a function to return a string (allocated on the heap) which
represents it
Both are not fun to write, whereas it's much easier to write this.
Diffstat (limited to 'asm/preprocesser.cpp')
-rw-r--r-- | asm/preprocesser.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/asm/preprocesser.cpp b/asm/preprocesser.cpp index e87a505..31cf6a7 100644 --- a/asm/preprocesser.cpp +++ b/asm/preprocesser.cpp @@ -63,6 +63,31 @@ preprocess_use_blocks(vector<token_t *> tokens) return VAL(new_tokens); } + +std::ostream &operator<<(std::ostream &os, pp_err_t &err) +{ + os << "PREPROCESSING_"; + switch (err.type) + { + case OK: + return os << "OK"; + case EXPECTED_NAME: + return os << "EXPECTED_NAME"; + case EXPECTED_STRING: + return os << "EXPECTED_STRING"; + case EXPECTED_END: + return os << "EXPECTED_END"; + case FILE_NONEXISTENT: + return os << "FILE_NONEXISTENT"; + case FILE_PARSE_ERROR: + return os << "FILE_PARSE_ERROR -> \n\t[" << err.reference->content + << "]: " << lerr_as_cstr(err.lerr); + case UNKNOWN_NAME: + return os << "UNKNOWN_NAME"; + } + return os; +} + pp_err_t::pp_err_t(pp_err_type_t e) : reference{nullptr}, type{e}, lerr{lerr_t::OK} {} |