mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-09-24 04:11:50 -04:00
Remove potential sources of UB
This commit is contained in:
parent
55c72ecb29
commit
86e40f5b6b
@ -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)
|
||||||
{
|
return Float{ static_cast<float>(buffer) };
|
||||||
if ((*tmp == '.'))
|
|
||||||
return Float{ static_cast<float>(buffer) };
|
|
||||||
}
|
|
||||||
|
|
||||||
return Integer{ static_cast<int>(buffer) };
|
return Integer{ static_cast<int>(buffer) };
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user