From 062ed1227849f9954427c8e13c0b720b68c78f63 Mon Sep 17 00:00:00 2001
From: Aryadev Chavali <aryadev@aryadevchavali.com>
Date: Mon, 15 Apr 2024 04:37:43 +0630
Subject: Rewrote preprocesser API

This C++ rewrite allows me to rewrite the actual API of the system.
In particular, I'm no longer restricting myself to just using enums
then figuring out a way to get proper error logging later down the
line (through tracking tokens in the buffer internally, for example).

Instead I can now design error structures which hold references to the
token they occurred on as well as possible lexical errors (if they're
a FILE_LEXICAL_ERROR which occurs due to the ~%USE~ macro).  This
means it's a lot easier to write error logging now at the top level.
---
 asm/preprocesser.hpp | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

(limited to 'asm')

diff --git a/asm/preprocesser.hpp b/asm/preprocesser.hpp
index 9d733dd..a1d8a31 100644
--- a/asm/preprocesser.hpp
+++ b/asm/preprocesser.hpp
@@ -12,11 +12,12 @@
 #ifndef PREPROCESSER_HPP
 #define PREPROCESSER_HPP
 
+#include <ostream>
 #include <tuple>
 
 #include "./lexer.hpp"
 
-enum pp_err_t
+enum pp_err_type_t
 {
   OK = 0,
   EXPECTED_NAME,
@@ -27,13 +28,30 @@ enum pp_err_t
   UNKNOWN_NAME,
 };
 
-std::pair<std::vector<token_t>, pp_err_t>
-preprocesser(const std::vector<token_t> &);
+struct pp_err_t
+{
+  const token_t *reference;
+  pp_err_type_t type;
+  lerr_t lerr;
+
+  pp_err_t(pp_err_type_t);
+  pp_err_t(pp_err_type_t, const token_t *);
+  pp_err_t(pp_err_type_t, const token_t *, lerr_t);
+};
+
+std::ostream &operator<<(std::ostream &, pp_err_t &);
+
+std::pair<std::vector<token_t *>, pp_err_t>
+preprocesser(std::vector<token_t *> &);
+
+std::pair<std::vector<token_t *>, pp_err_t>
+preprocess_const_blocks(std::vector<token_t *> &);
 
-std::pair<std::vector<token_t>, pp_err_t>
-preprocess_macro_blocks(const std::vector<token_t> &);
+std::pair<std::vector<token_t *>, pp_err_t>
+preprocess_use_blocks(std::vector<token_t *> &);
 
-std::pair<std::vector<token_t>, pp_err_t>
-preprocess_use_blocks(const std::vector<token_t> &);
+// TODO: Implement this
+std::pair<std::vector<token_t *>, pp_err_t>
+preprocess_macro_blocks(std::vector<token_t *> &);
 
 #endif
-- 
cgit v1.2.3-13-gbd6f