Separate errors to own header-file
This commit is contained in:
parent
85644457d0
commit
5706a81098
@ -1,6 +1,7 @@
|
||||
#include "codegen.h"
|
||||
#include "ast.h"
|
||||
#include "types.h"
|
||||
#include "errors.h"
|
||||
|
||||
#include <llvm/IR/Module.h>
|
||||
#include <llvm/IR/Verifier.h>
|
||||
@ -53,7 +54,7 @@ namespace AST {
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw codegen::Error("Value " + this->m_name + " not found", this->m_meta);
|
||||
throw CompileError("Value " + this->m_name + " not found", this->m_meta);
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,11 +88,11 @@ namespace AST {
|
||||
std::make_shared<types::FundamentalType>(types::FundamentalTypeKind::Bool),
|
||||
};
|
||||
default:
|
||||
throw codegen::Error("invalid binop", this->m_meta);
|
||||
throw CompileError("invalid binop", this->m_meta);
|
||||
}
|
||||
}
|
||||
catch (std::runtime_error& error) {
|
||||
throw codegen::Error(error.what(), this->m_meta);
|
||||
throw CompileError(error.what(), this->m_meta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -11,13 +11,6 @@
|
||||
#include "tokens.h"
|
||||
|
||||
namespace codegen {
|
||||
class Error : public std::runtime_error {
|
||||
public:
|
||||
token::Metadata m_meta;
|
||||
Error(std::string text, token::Metadata meta)
|
||||
: std::runtime_error{ text }, m_meta{ meta } {}
|
||||
};
|
||||
|
||||
struct StackValue {
|
||||
llvm::Value* value = nullptr;
|
||||
std::shared_ptr<types::Type> ty = nullptr;
|
||||
|
||||
15
src/errors.h
Normal file
15
src/errors.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef ERRORS_H
|
||||
#define ERRORS_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "tokens.h"
|
||||
|
||||
class CompileError : public std::runtime_error {
|
||||
public:
|
||||
token::Metadata m_meta;
|
||||
CompileError(std::string text, token::Metadata meta)
|
||||
: std::runtime_error{ text }, m_meta{ meta } {}
|
||||
};
|
||||
|
||||
#endif
|
||||
@ -19,6 +19,7 @@
|
||||
|
||||
#include "tokens.h"
|
||||
#include "parsing.h"
|
||||
#include "errors.h"
|
||||
|
||||
std::string read_file(std::string_view filepath) {
|
||||
std::ifstream input{ std::string{filepath} };
|
||||
@ -103,7 +104,7 @@ std::optional<CompileOutput> compile(std::string_view in_filename) {
|
||||
tls->codegen(builder, scope);
|
||||
}
|
||||
}
|
||||
catch (codegen::Error& error) {
|
||||
catch (CompileError& error) {
|
||||
std::cerr << "FATAL: " << error.what() << std::endl;
|
||||
std::cerr << " at " << error.m_meta.start.line + 1 << ":" << error.m_meta.start.col + 1;
|
||||
std::cerr << " to " << error.m_meta.end.line + 1 << ":" << error.m_meta.end.col + 1 << std::endl;
|
||||
|
||||
18
src/typechecker.h
Normal file
18
src/typechecker.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef TYPECHECK_H
|
||||
#define TYPECHECK_H
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace typecheck {
|
||||
struct Scope {
|
||||
std::map<std::string, types::Type> symbols;
|
||||
};
|
||||
|
||||
struct State {
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user