diff --git a/grammar/grammar.y b/grammar/grammar.y index c9e31ad..b3bbc89 100644 --- a/grammar/grammar.y +++ b/grammar/grammar.y @@ -30,14 +30,12 @@ #include "AST/ValueList.h" #include "AST/VariableDefinition.h" -#include "llvm/Module.h" - } %name scullyParser %token_type {Token*} -%extra_argument{llvm::Module* mod} +%extra_argument{CodeGenVisitor* cv} // whitespace and comments %type T_WHITESPACE {int} @@ -57,8 +55,8 @@ } %type program {int} -program ::= fundef(F). { PrintVisitor* pv = new PrintVisitor; F->accept(pv); delete pv; } -program ::= expr(E). { PrintVisitor* pv = new PrintVisitor; E->accept(pv); delete pv; } +program ::= fundef(F). { PrintVisitor* pv = new PrintVisitor; F->accept(pv); F->accept(cv); delete pv; } +program ::= expr(E). { PrintVisitor* pv = new PrintVisitor; E->accept(pv); E->accept(cv); delete pv; } %type fundef {FunctionDefinition*} fundef(A) ::= type(T) T_IDENTIFIER(ID) T_LPAREN params(P) T_RPAREN T_BEGIN statements(S) T_END. diff --git a/src/test.cpp b/src/test.cpp index fd14f11..2145161 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -6,6 +6,8 @@ #include "Token.h" +#include "AST/CodeGenVisitor.h" + #include "llvm/DerivedTypes.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/JIT.h" @@ -103,6 +105,7 @@ int main() { fpm->doInitialization(); + CodeGenVisitor* cv = new CodeGenVisitor(); void* parser = scullyParserAlloc(malloc); @@ -124,7 +127,7 @@ int main() { std::string s(results.start, results.end); if (results.id != T_WHITESPACE) { std::cout << "Id: " << results.id << ", Token: " << s << std::endl; - scullyParser(parser, results.id, new Token(s), module); + scullyParser(parser, results.id, new Token(s), cv); } } while (results.id != 0);