Keep track of locations in definitions.

This commit is contained in:
Danila Fedorin 2020-09-09 14:19:46 -07:00
parent 350a630213
commit c648e20a02
2 changed files with 14 additions and 6 deletions

View File

@ -7,6 +7,7 @@
#include "llvm_context.hpp" #include "llvm_context.hpp"
#include "parsed_type.hpp" #include "parsed_type.hpp"
#include "type_env.hpp" #include "type_env.hpp"
#include "location.hh"
#include "global_scope.hpp" #include "global_scope.hpp"
struct ast; struct ast;
@ -27,6 +28,7 @@ struct definition_defn {
std::string name; std::string name;
std::vector<std::string> params; std::vector<std::string> params;
ast_ptr body; ast_ptr body;
yy::location loc;
type_env_ptr env; type_env_ptr env;
type_env_ptr var_env; type_env_ptr var_env;
@ -35,8 +37,12 @@ struct definition_defn {
type_ptr full_type; type_ptr full_type;
type_ptr return_type; type_ptr return_type;
definition_defn(std::string n, std::vector<std::string> p, ast_ptr b) definition_defn(
: name(std::move(n)), params(std::move(p)), body(std::move(b)) { std::string n,
std::vector<std::string> 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::string name;
std::vector<std::string> vars; std::vector<std::string> vars;
std::vector<constructor_ptr> constructors; std::vector<constructor_ptr> constructors;
yy::location loc;
type_env_ptr env; type_env_ptr env;
definition_data( definition_data(
std::string n, std::string n,
std::vector<std::string> vs, std::vector<std::string> vs,
std::vector<constructor_ptr> cs) std::vector<constructor_ptr> cs,
: name(std::move(n)), vars(std::move(vs)), constructors(std::move(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_types(type_env_ptr& env);
void insert_constructors() const; void insert_constructors() const;

View File

@ -75,7 +75,7 @@ definitions
defn defn
: DEFN LID lowercaseParams EQUAL OCURLY aAdd CCURLY : DEFN LID lowercaseParams EQUAL OCURLY aAdd CCURLY
{ $$ = definition_defn_ptr( { $$ = 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 lowercaseParams
@ -143,7 +143,7 @@ pattern
data data
: DATA UID lowercaseParams EQUAL OCURLY constructors CCURLY : 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 constructors