Global: Make SeekOrigin an enum class

Makes the enumeration strongly typed and also allows forward declaring
the enumeration type as well.
This commit is contained in:
Lioncash 2019-09-14 09:22:14 -04:00
parent 2392dde366
commit 9bde23011f
2 changed files with 7 additions and 4 deletions

View File

@ -629,7 +629,7 @@ class ATDNAEmitVisitor : public clang::RecursiveASTVisitor<ATDNAEmitVisitor> {
} else if (!tsDecl->getName().compare("Seek")) {
size_t idx = 0;
std::string offsetExprStr;
llvm::APSInt direction(64, 0);
llvm::APSInt direction(64, false);
const clang::Expr* directionExpr = nullptr;
bool bad = false;
for (const clang::TemplateArgument& arg : *tsType) {
@ -649,8 +649,11 @@ class ATDNAEmitVisitor : public clang::RecursiveASTVisitor<ATDNAEmitVisitor> {
offsetExprStr = offsetLiteral.toString(10);
}
} else {
directionExpr = expr;
if (!expr->isIntegerConstantExpr(direction, context)) {
clang::APValue result;
if (expr->isCXX11ConstantExpr(context, &result)) {
directionExpr = expr;
direction = result.getInt();
} else {
clang::DiagnosticBuilder diag = context.getDiagnostics().Report(expr->getExprLoc(), AthenaError);
diag.AddString("Unable to use non-constant direction expression in Athena");
diag.AddSourceRange(clang::CharSourceRange(expr->getSourceRange(), true));

View File

@ -123,7 +123,7 @@ namespace athena {
namespace error {
enum class Level { Message, Warning, Error, Fatal };
}
enum SeekOrigin { Begin, Current, End };
enum class SeekOrigin { Begin, Current, End };
enum Endian { Little, Big };