From 141a7fe22bc1e24e7947ae8c74b176860bbc1910 Mon Sep 17 00:00:00 2001 From: Rangi Date: Mon, 25 May 2026 14:02:41 -0400 Subject: [PATCH] Add `assume` checks for expected `Token` types, like `RPNValue` has for `RPNCommand`s --- src/asm/lexer.cpp | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/asm/lexer.cpp b/src/asm/lexer.cpp index 4e329ee6..050a206f 100644 --- a/src/asm/lexer.cpp +++ b/src/asm/lexer.cpp @@ -49,11 +49,31 @@ struct Token { int type; std::variant value; - Token() : type(T_(NUMBER)), value(std::monostate{}) {} - Token(int type_) : type(type_), value(std::monostate{}) {} - Token(int type_, uint32_t value_) : type(type_), value(value_) {} - Token(int type_, std::string const &value_) : type(type_), value(std::move(value_)) {} - Token(int type_, std::string &&value_) : type(type_), value(std::move(value_)) {} + Token() : type(T_(NUMBER)), value(std::monostate{}) { + assume( + type != T_(NUMBER) && type != T_(STRING) && type != T_(CHARACTER) && type != T_(SYMBOL) + && type != T_(LABEL) && type != T_(LOCAL) && type != T_(ANON) && type != T_(QMACRO) + ); + } + Token(int type_) : type(type_), value(std::monostate{}) { + assume( + type != T_(NUMBER) && type != T_(STRING) && type != T_(CHARACTER) && type != T_(SYMBOL) + && type != T_(LABEL) && type != T_(LOCAL) && type != T_(ANON) && type != T_(QMACRO) + ); + } + Token(int type_, uint32_t value_) : type(type_), value(value_) { assume(type == T_(NUMBER)); } + Token(int type_, std::string const &value_) : type(type_), value(std::move(value_)) { + assume( + type == T_(STRING) || type == T_(CHARACTER) || type == T_(SYMBOL) || type == T_(LABEL) + || type == T_(LOCAL) || type == T_(ANON) || type == T_(QMACRO) + ); + } + Token(int type_, std::string &&value_) : type(type_), value(std::move(value_)) { + assume( + type == T_(STRING) || type == T_(CHARACTER) || type == T_(SYMBOL) || type == T_(LABEL) + || type == T_(LOCAL) || type == T_(ANON) || type == T_(QMACRO) + ); + } }; // This map lists all RGBASM keywords which `yylex_NORMAL` lexes as identifiers.