Remove potential sources of UB

This commit is contained in:
Evil Eye 2025-08-16 14:01:21 +02:00
parent 55c72ecb29
commit 86e40f5b6b
2 changed files with 8 additions and 14 deletions

View File

@ -1,7 +1,7 @@
#include "lexer.hpp" #include "lexer.hpp"
#include <cctype> #include <cctype>
#include <cstdlib> #include <charconv>
#include <format> #include <format>
namespace Fx namespace Fx
@ -132,7 +132,7 @@ namespace Fx
mColumn++; mColumn++;
} }
char Lexer::head() unsigned char Lexer::head()
{ {
return *mHead; return *mHead;
} }
@ -289,21 +289,15 @@ namespace Fx
Token Lexer::scanNumber() Token Lexer::scanNumber()
{ {
double buffer; double buffer;
const auto [endPtr, ec] = std::from_chars(mHead, mTail, buffer);
char* endPtr; if (ec != std::errc())
buffer = std::strtod(mHead, &endPtr);
if (endPtr == nullptr)
error("critical error while parsing number"); error("critical error while parsing number");
const char* tmp = mHead; std::string_view literal(mHead, endPtr);
mHead = endPtr; mHead = endPtr;
for (; tmp != endPtr; ++tmp) if (literal.find('.') != std::string_view::npos)
{
if ((*tmp == '.'))
return Float{ static_cast<float>(buffer) }; return Float{ static_cast<float>(buffer) };
}
return Integer{ static_cast<int>(buffer) }; return Integer{ static_cast<int>(buffer) };
} }

View File

@ -51,7 +51,7 @@ namespace Fx
private: private:
void drop(); void drop();
void advance(); void advance();
char head(); unsigned char head();
bool peekChar(char c); bool peekChar(char c);
Token scanToken(); Token scanToken();