diff --git a/code/compiler/13/definition.hpp b/code/compiler/13/definition.hpp index 44828d3..a8a6ebc 100644 --- a/code/compiler/13/definition.hpp +++ b/code/compiler/13/definition.hpp @@ -7,6 +7,7 @@ #include "llvm_context.hpp" #include "parsed_type.hpp" #include "type_env.hpp" +#include "location.hh" #include "global_scope.hpp" struct ast; @@ -27,6 +28,7 @@ struct definition_defn { std::string name; std::vector params; ast_ptr body; + yy::location loc; type_env_ptr env; type_env_ptr var_env; @@ -35,8 +37,12 @@ struct definition_defn { type_ptr full_type; type_ptr return_type; - definition_defn(std::string n, std::vector p, ast_ptr b) - : name(std::move(n)), params(std::move(p)), body(std::move(b)) { + definition_defn( + std::string n, + std::vector p, + ast_ptr b, + yy::location l = yy::location()) + : name(std::move(n)), params(std::move(p)), body(std::move(b)), loc(std::move(l)) { } @@ -53,14 +59,16 @@ struct definition_data { std::string name; std::vector vars; std::vector constructors; + yy::location loc; type_env_ptr env; definition_data( std::string n, std::vector vs, - std::vector cs) - : name(std::move(n)), vars(std::move(vs)), constructors(std::move(cs)) {} + std::vector cs, + yy::location l = yy::location()) + : name(std::move(n)), vars(std::move(vs)), constructors(std::move(cs)), loc(std::move(l)) {} void insert_types(type_env_ptr& env); void insert_constructors() const; diff --git a/code/compiler/13/parser.y b/code/compiler/13/parser.y index 3fefb28..93fabce 100644 --- a/code/compiler/13/parser.y +++ b/code/compiler/13/parser.y @@ -75,7 +75,7 @@ definitions defn : DEFN LID lowercaseParams EQUAL OCURLY aAdd CCURLY { $$ = definition_defn_ptr( - new definition_defn(std::move($2), std::move($3), std::move($6))); } + new definition_defn(std::move($2), std::move($3), std::move($6), @$)); } ; lowercaseParams @@ -143,7 +143,7 @@ pattern data : DATA UID lowercaseParams EQUAL OCURLY constructors CCURLY - { $$ = definition_data_ptr(new definition_data(std::move($2), std::move($3), std::move($6))); } + { $$ = definition_data_ptr(new definition_data(std::move($2), std::move($3), std::move($6), @$)); } ; constructors