aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-04-15 18:39:37 +0630
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-04-15 18:39:37 +0630
commit1e7f1bdee91324613a1675642775d6ed32d7e94d (patch)
tree78733fc657c0bafbd959a7c05dbe9af3c3c1c633
parentba3525d53311dfc89610748ef3ce0a8d9e3756b9 (diff)
downloadovm-1e7f1bdee91324613a1675642775d6ed32d7e94d.tar.gz
ovm-1e7f1bdee91324613a1675642775d6ed32d7e94d.tar.bz2
ovm-1e7f1bdee91324613a1675642775d6ed32d7e94d.zip
Changed %const format in preprocesser now
Instead of %const(<name>) ... %end it will now be %const <name> ... %end i.e. the first symbol after %const will be considered the name of the constant similar to %use.
-rw-r--r--asm/lexer.cpp4
-rw-r--r--asm/preprocesser.cpp16
2 files changed, 4 insertions, 16 deletions
diff --git a/asm/lexer.cpp b/asm/lexer.cpp
index caa1327..991e551 100644
--- a/asm/lexer.cpp
+++ b/asm/lexer.cpp
@@ -25,7 +25,7 @@ static_assert(NUMBER_OF_OPCODES == 98, "ERROR: Lexer is out of date");
using std::string, std::string_view, std::pair, std::make_pair;
const auto VALID_SYMBOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV"
- "WXYZ0123456789-_.:()%#$",
+ "WXYZ0123456789-_.:%#$",
VALID_DIGIT = "0123456789", VALID_HEX = "0123456789abcdefABCDEF";
bool is_char_in_s(char c, const char *s)
@@ -52,7 +52,7 @@ pair<token_t, lerr_t> tokenise_symbol(string_view &source, size_t &column,
if (initial_match(sym, "%CONST"))
{
- t = token_t(token_type_t::PP_CONST, sym.substr(6));
+ t.type = token_type_t::PP_CONST;
}
else if (sym == "%USE")
{
diff --git a/asm/preprocesser.cpp b/asm/preprocesser.cpp
index 434a340..d68992c 100644
--- a/asm/preprocesser.cpp
+++ b/asm/preprocesser.cpp
@@ -81,20 +81,9 @@ pp_err_t preprocess_const_blocks(const vector<token_t *> &tokens,
if (t->type == token_type_t::PP_CONST)
{
string_view capture;
- if (t->content == "" && (i == tokens.size() - 1 ||
- tokens[i + 1]->type != token_type_t::SYMBOL))
- return ERR(pp_err_t{pp_err_type_t::EXPECTED_NAME});
- else if (t->content != "")
- capture = t->content;
- else
+ if (i + 1 >= tokens.size() || tokens[i + 1]->type != token_type_t::SYMBOL)
capture = tokens[++i]->content;
- // Check for brackets
- auto start = capture.find('(');
- auto end = capture.find(')');
- if (start == string::npos || end == string::npos)
- return ERR(pp_err_t{pp_err_type_t::EXPECTED_NAME});
-
++i;
size_t block_start = i, block_end = 0;
for (; i < tokens.size() && tokens[i]->type != token_type_t::PP_END; ++i)
@@ -105,8 +94,7 @@ pp_err_t preprocess_const_blocks(const vector<token_t *> &tokens,
block_end = i;
- blocks[capture.substr(start + 1, end - 1)] =
- const_t{block_start, block_end};
+ blocks[capture] = const_t{block_start, block_end};
}
}