Generates llvm assembly code for additions :-)
[ozulis.git] / src / compiler.cc
blobaabd477a72b7f79e9eb694f4fc8d9e9cbdf45ba5
1 #include <iostream>
2 #include <algorithm>
3 #include <boost/foreach.hpp>
5 #include <core/assert.hh>
6 #include <ast/ast.hh>
7 #include <ast/ascii-visitor.hh>
8 #include <ast/llvm-generator-visitor.hh>
9 #include <ast/type-checker-visitor.hh>
10 #include <ast/simplify-visitor.hh>
11 #include <ast/scope-builder-visitor.hh>
12 #include <lang/parser-factory.hh>
13 #include <compiler.hh>
14 #include <task.hh>
15 #include <parse-task.hh>
17 Compiler::Compiler()
18 : tasks_(),
19 astDump_(false)
23 Compiler::~Compiler()
27 void
28 Compiler::addTask(Task * task)
30 assert(task);
31 tasks_.push_back(task);
34 void
35 Compiler::compile()
37 sort(tasks_.begin(), tasks_.end());
38 BOOST_FOREACH(Task * task, tasks_)
40 assert(task);
41 task->accept(*this);
45 void
46 Compiler::work(Task & task)
48 assert(false);
51 void
52 Compiler::work(ParseTask & task)
54 ast::File * file = lang::ParserFactory::parseFile(task.filename);
55 file->path = task.filename;
56 if (astDump_) {
57 ast::AsciiVisitor v;
58 file->accept(v);
61 ast::ScopeBuilderVisitor sbv;
62 file->accept(sbv);
64 ast::TypeCheckerVisitor tcv;
65 file->accept(tcv);
67 ast::SimplifyVisitor sv;
68 file->accept(sv);
69 if (astDump_) {
70 ast::AsciiVisitor v;
71 file->accept(v);
74 ast::LLVMGeneratorVisitor lgv(std::cout);
75 file->accept(lgv);