Add assume checks for expected Token types, like RPNValue has for RPNCommands

This commit is contained in:
Rangi
2026-05-25 14:02:41 -04:00
parent 43ffc89bb4
commit 141a7fe22b
+25 -5
View File
@@ -49,11 +49,31 @@ struct Token {
int type;
std::variant<std::monostate, uint32_t, std::string> 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.