aboutsummaryrefslogtreecommitdiff
path: root/src/checker/entity.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2016-11-23 12:29:50 +0000
committerGinger Bill <bill@gingerbill.org>2016-11-23 12:29:50 +0000
commit4d30ef7eda0021f0cb827c7a218ef3afc6ce8b55 (patch)
tree9f31e2b07cf610300c1db3c511b84d9d2cc72d6b /src/checker/entity.cpp
parenta77c6b3e55c5857c9c0ba36baae2dbdcd7564cd4 (diff)
Change extensions .cpp to .c
Diffstat (limited to 'src/checker/entity.cpp')
-rw-r--r--src/checker/entity.cpp193
1 files changed, 0 insertions, 193 deletions
diff --git a/src/checker/entity.cpp b/src/checker/entity.cpp
deleted file mode 100644
index 98083e803..000000000
--- a/src/checker/entity.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-typedef struct Scope Scope;
-typedef struct Checker Checker;
-typedef struct Type Type;
-typedef enum BuiltinProcId BuiltinProcId;
-typedef enum ImplicitValueId ImplicitValueId;
-
-#define ENTITY_KINDS \
- ENTITY_KIND(Invalid) \
- ENTITY_KIND(Constant) \
- ENTITY_KIND(Variable) \
- ENTITY_KIND(TypeName) \
- ENTITY_KIND(Procedure) \
- ENTITY_KIND(Builtin) \
- ENTITY_KIND(ImportName) \
- ENTITY_KIND(Nil) \
- ENTITY_KIND(ImplicitValue) \
- ENTITY_KIND(Count)
-
-typedef enum EntityKind {
-#define ENTITY_KIND(k) GB_JOIN2(Entity_, k),
- ENTITY_KINDS
-#undef ENTITY_KIND
-} EntityKind;
-
-String const entity_strings[] = {
-#define ENTITY_KIND(k) {cast(u8 *)#k, gb_size_of(#k)-1},
- ENTITY_KINDS
-#undef ENTITY_KIND
-};
-
-typedef enum EntityFlag {
- EntityFlag_Visited = 1<<0,
- EntityFlag_Used = 1<<1,
- EntityFlag_Anonymous = 1<<2,
- EntityFlag_Field = 1<<3,
- EntityFlag_Param = 1<<4,
- EntityFlag_VectorElem = 1<<5,
-} EntityFlag;
-
-typedef struct Entity Entity;
-struct Entity {
- EntityKind kind;
- u32 flags;
- Token token;
- Scope * scope;
- Type * type;
- AstNode * identifier; // Can be NULL
-
- // TODO(bill): Cleanup how `using` works for entities
- Entity * using_parent;
- AstNode * using_expr;
-
- union {
- struct {
- ExactValue value;
- } Constant;
- struct {
- i32 field_index;
- i32 field_src_index;
- } Variable;
- i32 TypeName;
- i32 Procedure;
- struct {
- BuiltinProcId id;
- } Builtin;
- struct {
- String path;
- String name;
- Scope *scope;
- bool used;
- } ImportName;
- i32 Nil;
- struct {
- // TODO(bill): Should this be a user-level construct rather than compiler-level?
- ImplicitValueId id;
- Entity * backing;
- } ImplicitValue;
- };
-};
-
-bool is_entity_exported(Entity *e) {
- if (e->kind == Entity_ImportName) {
- return false;
- }
- // TODO(bill): Do I really want non-exported entities?
- // TODO(bill): If we do, what should be the rules?
- // if (e->token.string.len >= 1 &&
- // e->token.string.text[0] == '_') {
- // return false;
- // }
- return true;
-}
-
-
-Entity *alloc_entity(gbAllocator a, EntityKind kind, Scope *scope, Token token, Type *type) {
- Entity *entity = gb_alloc_item(a, Entity);
- entity->kind = kind;
- entity->scope = scope;
- entity->token = token;
- entity->type = type;
- return entity;
-}
-
-Entity *make_entity_variable(gbAllocator a, Scope *scope, Token token, Type *type) {
- Entity *entity = alloc_entity(a, Entity_Variable, scope, token, type);
- return entity;
-}
-
-Entity *make_entity_using_variable(gbAllocator a, Entity *parent, Token token, Type *type) {
- GB_ASSERT(parent != NULL);
- Entity *entity = alloc_entity(a, Entity_Variable, parent->scope, token, type);
- entity->using_parent = parent;
- entity->flags |= EntityFlag_Anonymous;
- return entity;
-}
-
-
-Entity *make_entity_constant(gbAllocator a, Scope *scope, Token token, Type *type, ExactValue value) {
- Entity *entity = alloc_entity(a, Entity_Constant, scope, token, type);
- entity->Constant.value = value;
- return entity;
-}
-
-Entity *make_entity_type_name(gbAllocator a, Scope *scope, Token token, Type *type) {
- Entity *entity = alloc_entity(a, Entity_TypeName, scope, token, type);
- return entity;
-}
-
-Entity *make_entity_param(gbAllocator a, Scope *scope, Token token, Type *type, bool anonymous) {
- Entity *entity = make_entity_variable(a, scope, token, type);
- entity->flags |= EntityFlag_Used;
- entity->flags |= EntityFlag_Anonymous*(anonymous != 0);
- entity->flags |= EntityFlag_Param;
- return entity;
-}
-
-Entity *make_entity_field(gbAllocator a, Scope *scope, Token token, Type *type, bool anonymous, i32 field_src_index) {
- Entity *entity = make_entity_variable(a, scope, token, type);
- entity->Variable.field_src_index = field_src_index;
- entity->Variable.field_index = field_src_index;
- entity->flags |= EntityFlag_Field;
- entity->flags |= EntityFlag_Anonymous*(anonymous != 0);
- return entity;
-}
-
-Entity *make_entity_vector_elem(gbAllocator a, Scope *scope, Token token, Type *type, i32 field_src_index) {
- Entity *entity = make_entity_variable(a, scope, token, type);
- entity->Variable.field_src_index = field_src_index;
- entity->Variable.field_index = field_src_index;
- entity->flags |= EntityFlag_Field;
- entity->flags |= EntityFlag_VectorElem;
- return entity;
-}
-
-Entity *make_entity_procedure(gbAllocator a, Scope *scope, Token token, Type *signature_type) {
- Entity *entity = alloc_entity(a, Entity_Procedure, scope, token, signature_type);
- return entity;
-}
-
-Entity *make_entity_builtin(gbAllocator a, Scope *scope, Token token, Type *type, BuiltinProcId id) {
- Entity *entity = alloc_entity(a, Entity_Builtin, scope, token, type);
- entity->Builtin.id = id;
- return entity;
-}
-
-Entity *make_entity_import_name(gbAllocator a, Scope *scope, Token token, Type *type,
- String path, String name, Scope *import_scope) {
- Entity *entity = alloc_entity(a, Entity_ImportName, scope, token, type);
- entity->ImportName.path = path;
- entity->ImportName.name = name;
- entity->ImportName.scope = import_scope;
- return entity;
-}
-
-Entity *make_entity_nil(gbAllocator a, String name, Type *type) {
- Token token = make_token_ident(name);
- Entity *entity = alloc_entity(a, Entity_Nil, NULL, token, type);
- return entity;
-}
-
-Entity *make_entity_implicit_value(gbAllocator a, String name, Type *type, ImplicitValueId id) {
- Token token = make_token_ident(name);
- Entity *entity = alloc_entity(a, Entity_ImplicitValue, NULL, token, type);
- entity->ImplicitValue.id = id;
- return entity;
-}
-
-
-Entity *make_entity_dummy_variable(gbAllocator a, Scope *file_scope, Token token) {
- token.string = str_lit("_");
- return make_entity_variable(a, file_scope, token, NULL);
-}
-