aboutsummaryrefslogtreecommitdiff
path: root/src/checker.hpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-05-28 15:57:53 +0100
committergingerBill <bill@gingerbill.org>2018-05-28 15:57:53 +0100
commit642aa0bc4b47752d4ea52f97dec3d478470b597e (patch)
tree12a086696c6dc2948ee169bacb4bb7fa50c4af99 /src/checker.hpp
parent45b3067068a95f3440c4caab63525e3fd6722d00 (diff)
Refactor: use CheckerContext rather than Checker in type checking part
Diffstat (limited to 'src/checker.hpp')
-rw-r--r--src/checker.hpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/checker.hpp b/src/checker.hpp
index 8d580ca97..b7fc2fc78 100644
--- a/src/checker.hpp
+++ b/src/checker.hpp
@@ -31,16 +31,19 @@ struct TypeAndValue {
// ExprInfo stores information used for "untyped" expressions
-struct ExprInfo : TypeAndValue {
+struct ExprInfo {
+ AddressingMode mode;
+ Type * type;
+ ExactValue value;
bool is_lhs; // Debug info
};
gb_inline ExprInfo make_expr_info(AddressingMode mode, Type *type, ExactValue value, bool is_lhs) {
ExprInfo ei = {};
- ei.is_lhs = is_lhs;
ei.mode = mode;
ei.type = type;
ei.value = value;
+ ei.is_lhs = is_lhs;
return ei;
}
@@ -289,6 +292,7 @@ struct CheckerContext {
DeclInfo * curr_proc_decl;
Type * curr_proc_sig;
ForeignContext foreign_context;
+ gbAllocator allocator;
CheckerTypePath *type_path;
isize type_level; // TODO(bill): Actually handle correctly
@@ -337,7 +341,7 @@ struct Checker {
gbAllocator allocator;
- CheckerContext context;
+ CheckerContext init_ctx;
bool done_preload;
};
@@ -379,20 +383,20 @@ void check_set_expr_info (CheckerInfo *i, AstNode *expr, ExprInfo info)
void check_remove_expr_info (CheckerInfo *i, AstNode *expr);
void add_untyped (CheckerInfo *i, AstNode *expression, bool lhs, AddressingMode mode, Type *basic_type, ExactValue value);
void add_type_and_value (CheckerInfo *i, AstNode *expression, AddressingMode mode, Type *type, ExactValue value);
-void add_entity_use (Checker *c, AstNode *identifier, Entity *entity);
-void add_implicit_entity (Checker *c, AstNode *node, Entity *e);
-void add_entity_and_decl_info(Checker *c, AstNode *identifier, Entity *e, DeclInfo *d);
-void add_type_info_type (Checker *c, Type *t);
+void add_entity_use (CheckerContext *c, AstNode *identifier, Entity *entity);
+void add_implicit_entity (CheckerContext *c, AstNode *node, Entity *e);
+void add_entity_and_decl_info(CheckerContext *c, AstNode *identifier, Entity *e, DeclInfo *d);
+void add_type_info_type (CheckerContext *c, Type *t);
-void check_add_import_decl(Checker *c, AstNodeImportDecl *id);
+void check_add_import_decl(CheckerContext *c, AstNodeImportDecl *id);
// void check_add_export_decl(Checker *c, AstNodeExportDecl *ed);
-void check_add_foreign_import_decl(Checker *c, AstNode *decl);
+void check_add_foreign_import_decl(CheckerContext *c, AstNode *decl);
-bool check_arity_match(Checker *c, AstNodeValueDecl *vd, bool is_global = false);
-void check_collect_entities(Checker *c, Array<AstNode *> nodes);
-void check_collect_entities_from_when_stmt(Checker *c, AstNodeWhenStmt *ws);
-void check_delayed_file_import_entity(Checker *c, AstNode *decl);
+bool check_arity_match(CheckerContext *c, AstNodeValueDecl *vd, bool is_global = false);
+void check_collect_entities(CheckerContext *c, Array<AstNode *> nodes);
+void check_collect_entities_from_when_stmt(CheckerContext *c, AstNodeWhenStmt *ws);
+void check_delayed_file_import_entity(CheckerContext *c, AstNode *decl);
struct AttributeContext {
String link_name;
@@ -408,13 +412,13 @@ AttributeContext make_attribute_context(String link_prefix) {
return ac;
}
-#define DECL_ATTRIBUTE_PROC(_name) bool _name(Checker *c, AstNode *elem, String name, ExactValue value, AttributeContext *ac)
+#define DECL_ATTRIBUTE_PROC(_name) bool _name(CheckerContext *c, AstNode *elem, String name, ExactValue value, AttributeContext *ac)
typedef DECL_ATTRIBUTE_PROC(DeclAttributeProc);
-void check_decl_attributes(Checker *c, Array<AstNode *> attributes, DeclAttributeProc *proc, AttributeContext *ac);
+void check_decl_attributes(CheckerContext *c, Array<AstNode *> attributes, DeclAttributeProc *proc, AttributeContext *ac);
CheckerTypePath *new_checker_type_path();
void destroy_checker_type_path(CheckerTypePath *tp);
-void check_type_path_push(Checker *c, Entity *e);
-Entity *check_type_path_pop (Checker *c);
+void check_type_path_push(CheckerContext *c, Entity *e);
+Entity *check_type_path_pop (CheckerContext *c);