aboutsummaryrefslogtreecommitdiff
path: root/asm/lexer.cpp
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-04-15 04:42:24 +0630
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-04-15 04:42:24 +0630
commitf01d64b5f4d26611c90394f7b26ff219c4696c33 (patch)
treed7cf80be4721f7a5b0874fe88f87076850a0df3a /asm/lexer.cpp
parent062ed1227849f9954427c8e13c0b720b68c78f63 (diff)
downloadovm-f01d64b5f4d26611c90394f7b26ff219c4696c33.tar.gz
ovm-f01d64b5f4d26611c90394f7b26ff219c4696c33.tar.bz2
ovm-f01d64b5f4d26611c90394f7b26ff219c4696c33.zip
lexer now produces a vector of heap allocated tokens
This removes the problem of possibly expensive copies occurring due to working with tokens produced from the lexer (that C++ just... does): now we hold pointers where the copy operator is a lot easier to use. I want expensive stuff to be done by me and for a reason: I want to be holding the shotgun.
Diffstat (limited to 'asm/lexer.cpp')
-rw-r--r--asm/lexer.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/asm/lexer.cpp b/asm/lexer.cpp
index d6c9883..a8d0828 100644
--- a/asm/lexer.cpp
+++ b/asm/lexer.cpp
@@ -310,7 +310,7 @@ token_t tokenise_literal_string(string_view &source, size_t &column, size_t end)
return token;
}
-lerr_t tokenise_buffer(string_view source, std::vector<token_t> &tokens)
+lerr_t tokenise_buffer(string_view source, std::vector<token_t *> &tokens)
{
size_t column = 0, line = 1;
while (source.size() > 0)
@@ -393,8 +393,9 @@ lerr_t tokenise_buffer(string_view source, std::vector<token_t> &tokens)
}
if (is_token)
{
- t.line = line;
- tokens.push_back(t);
+ t.line = line;
+ token_t *acc = new token_t(t);
+ tokens.push_back(acc);
}
}
return lerr_t::OK;