Start using driver, and switch to file IO.
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user