|  | @@ -43,7 +43,7 @@ typedef void* yyscan_t;
 | 
	
		
			
				|  |  |  #include <cstdio>
 | 
	
		
			
				|  |  |  #include "Ast.h"
 | 
	
		
			
				|  |  |  #include "ErrorReporting.h"
 | 
	
		
			
				|  |  | -#include "syntax.h"
 | 
	
		
			
				|  |  | +#include "syntax.hpp"
 | 
	
		
			
				|  |  |  #include "lexer.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  using namespace qlow::ast;
 | 
	
	
		
			
				|  | @@ -52,7 +52,8 @@ using namespace qlow::ast;
 | 
	
		
			
				|  |  |  //extern int qlow_parser_lex();
 | 
	
		
			
				|  |  |  //void yy_pop_state();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -int qlow_parser_error(qlow::CodePosition* loc, yyscan_t scan, const char* msg)
 | 
	
		
			
				|  |  | +int qlow_parser_error(qlow::CodePosition* loc, yyscan_t scan,
 | 
	
		
			
				|  |  | +    std::vector<std::unique_ptr<qlow::ast::AstObject>>& results, const char* msg)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      //throw msg;
 | 
	
		
			
				|  |  |      //printf("error happened: %s\n", msg);
 | 
	
	
		
			
				|  | @@ -85,6 +86,7 @@ while (0)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  %lex-param   { yyscan_t scanner }
 | 
	
		
			
				|  |  |  %parse-param { yyscan_t scanner }
 | 
	
		
			
				|  |  | +%parse-param { std::vector<std::unique_ptr<qlow::ast::AstObject>>& results }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  %define api.prefix {qlow_parser_}
 | 
	
	
		
			
				|  | @@ -185,7 +187,7 @@ while (0)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  %destructor { } <token>
 | 
	
		
			
				|  |  |  //%destructor { if ($$) delete $$ } <op>
 | 
	
		
			
				|  |  | -%destructor { } <topLevel> // don't delete everything ;)
 | 
	
		
			
				|  |  | +//%destructor { } <topLevel> // don't delete everything ;)
 | 
	
		
			
				|  |  |  %destructor { if ($$) delete $$; } <*>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  %left ASSIGN
 | 
	
	
		
			
				|  | @@ -206,35 +208,35 @@ while (0)
 | 
	
		
			
				|  |  |  /* list of class definitions */
 | 
	
		
			
				|  |  |  topLevel:
 | 
	
		
			
				|  |  |      /* empty */ {
 | 
	
		
			
				|  |  | -       parsedClasses = std::make_unique<std::vector<std::unique_ptr<qlow::ast::AstObject>>>();
 | 
	
		
			
				|  |  | +       $$ = &results;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      |
 | 
	
		
			
				|  |  |      topLevel classDefinition {
 | 
	
		
			
				|  |  | -        parsedClasses->push_back(std::move(std::unique_ptr<qlow::ast::Class>($2)));
 | 
	
		
			
				|  |  | +        $$->push_back(std::move(std::unique_ptr<qlow::ast::Class>($2)));
 | 
	
		
			
				|  |  |          $2 = nullptr;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      |
 | 
	
		
			
				|  |  |      topLevel methodDefinition {
 | 
	
		
			
				|  |  | -        parsedClasses->push_back(std::move(std::unique_ptr<qlow::ast::MethodDefinition>($2)));
 | 
	
		
			
				|  |  | +        $$->push_back(std::move(std::unique_ptr<qlow::ast::MethodDefinition>($2)));
 | 
	
		
			
				|  |  |          $2 = nullptr;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      |
 | 
	
		
			
				|  |  |      topLevel externMethodDeclaration {
 | 
	
		
			
				|  |  | -        parsedClasses->push_back(std::move(std::unique_ptr<qlow::ast::MethodDefinition>($2)));
 | 
	
		
			
				|  |  | +        $$->push_back(std::move(std::unique_ptr<qlow::ast::MethodDefinition>($2)));
 | 
	
		
			
				|  |  |          $2 = nullptr;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      |
 | 
	
		
			
				|  |  |      topLevel error methodDefinition {
 | 
	
		
			
				|  |  |          reportError(qlow::SyntaxError(@2));
 | 
	
		
			
				|  |  |          yyerrok;
 | 
	
		
			
				|  |  | -        parsedClasses->push_back(std::move(std::unique_ptr<qlow::ast::MethodDefinition>($3)));
 | 
	
		
			
				|  |  | +        $$->push_back(std::move(std::unique_ptr<qlow::ast::MethodDefinition>($3)));
 | 
	
		
			
				|  |  |          $3 = nullptr;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      |
 | 
	
		
			
				|  |  |      topLevel error classDefinition {
 | 
	
		
			
				|  |  |          reportError(qlow::SyntaxError(@2));
 | 
	
		
			
				|  |  |          yyerrok;
 | 
	
		
			
				|  |  | -        parsedClasses->push_back(std::move(std::unique_ptr<qlow::ast::Class>($3)));
 | 
	
		
			
				|  |  | +        $$->push_back(std::move(std::unique_ptr<qlow::ast::Class>($3)));
 | 
	
		
			
				|  |  |          $3 = nullptr;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 |