Start using driver, and switch to file IO.

This commit is contained in:
2020-09-09 13:00:06 -07:00
parent 0e40c9e216
commit 308ec615b9
4 changed files with 80 additions and 17 deletions

View File

@@ -8,6 +8,7 @@
#include "parser.hpp"
#include "error.hpp"
#include "type.hpp"
#include "parse_driver.hpp"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/TargetSelect.h"
@@ -21,8 +22,6 @@ void yy::parser::error(const yy::location& loc, const std::string& msg) {
std::cout << "An error occured: " << msg << std::endl;
}
extern definition_group global_defs;
void typecheck_program(
definition_group& defs,
type_mgr& mgr, type_env_ptr& env) {
@@ -131,13 +130,17 @@ void gen_llvm(global_scope& scope) {
output_llvm(ctx, "program.o");
}
int main() {
yy::parser parser;
int main(int argc, char** argv) {
if(argc != 2) {
std::cout << "please enter a file to compile." << std::endl;
}
parse_driver driver(argv[1]);
driver.run_parse();
type_mgr mgr;
type_env_ptr env(new type_env);
parser.parse();
for(auto& def_defn : global_defs.defs_defn) {
for(auto& def_defn : driver.global_defs.defs_defn) {
std::cout << def_defn.second->name;
for(auto& param : def_defn.second->params) std::cout << " " << param;
std::cout << ":" << std::endl;
@@ -145,8 +148,8 @@ int main() {
def_defn.second->body->print(1, std::cout);
}
try {
typecheck_program(global_defs, mgr, env);
global_scope scope = translate_program(global_defs);
typecheck_program(driver.global_defs, mgr, env);
global_scope scope = translate_program(driver.global_defs);
scope.compile();
gen_llvm(scope);
} catch(unification_error& err) {