aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-03-04 09:25:02 +0000
committergingerBill <bill@gingerbill.org>2018-03-04 09:25:02 +0000
commit584dffea1420b1e2ce98922f8dd5cf63e5fb8872 (patch)
treee06a3a30fe31a90c2fcb77eb0fa4667d138f86ff /src/check_type.cpp
parent41b6d215bb381ecb4190acd8cbde481442b7ab85 (diff)
Remove dead code; fix referencing of a type assertion in a selector expression
Diffstat (limited to 'src/check_type.cpp')
-rw-r--r--src/check_type.cpp61
1 files changed, 13 insertions, 48 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp
index e5bb4a9cc..ae6be323f 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -210,41 +210,6 @@ void check_struct_fields(Checker *c, AstNode *node, Array<Entity *> *fields, Arr
}
-// TODO(bill): Cleanup struct field reordering
-// TODO(bill): Inline sorting procedure?
-GB_COMPARE_PROC(cmp_reorder_struct_fields) {
- // Rule:
- // 'using' over non-'using'
- // Biggest to smallest alignment
- // if same alignment: biggest to smallest size
- // if same size: order by source order
- Entity *x = *(Entity **)a;
- Entity *y = *(Entity **)b;
- GB_ASSERT(x != nullptr);
- GB_ASSERT(y != nullptr);
- GB_ASSERT(x->kind == Entity_Variable);
- GB_ASSERT(y->kind == Entity_Variable);
- bool xu = (x->flags & EntityFlag_Using) != 0;
- bool yu = (y->flags & EntityFlag_Using) != 0;
- i64 xa = type_align_of(heap_allocator(), x->type);
- i64 ya = type_align_of(heap_allocator(), y->type);
- i64 xs = type_size_of(heap_allocator(), x->type);
- i64 ys = type_size_of(heap_allocator(), y->type);
-
- if (xu != yu) {
- return xu ? -1 : +1;
- }
-
- if (xa != ya) {
- return xa > ya ? -1 : xa < ya;
- }
- if (xs != ys) {
- return xs > ys ? -1 : xs < ys;
- }
- i32 diff = x->Variable.field_index - y->Variable.field_index;
- return diff < 0 ? -1 : diff > 0;
-}
-
Entity *make_names_field_for_struct(Checker *c, Scope *scope) {
Entity *e = make_entity_field(c->allocator, scope,
make_token_ident(str_lit("names")), t_string_slice, false, 0);
@@ -428,12 +393,12 @@ void check_struct_type(Checker *c, Type *struct_type, AstNode *node, Array<Opera
if (type_expr->TypeType.specialization != nullptr) {
AstNode *s = type_expr->TypeType.specialization;
specialization = check_type(c, s);
- if (false && !is_type_polymorphic_struct(specialization)) {
- gbString str = type_to_string(specialization);
- defer (gb_string_free(str));
- error(s, "Expected a polymorphic struct, got %s", str);
- specialization = nullptr;
- }
+ // if (!is_type_polymorphic_struct(specialization)) {
+ // gbString str = type_to_string(specialization);
+ // defer (gb_string_free(str));
+ // error(s, "Expected a polymorphic struct, got %s", str);
+ // specialization = nullptr;
+ // }
}
type = make_type_generic(c->allocator, c->context.scope, 0, str_lit(""), specialization);
} else {
@@ -1667,7 +1632,7 @@ bool check_procedure_type(Checker *c, Type *type, AstNode *proc_type_node, Array
type->Proc.results = results;
type->Proc.result_count = cast(i32)result_count;
type->Proc.variadic = variadic;
- type->Proc.variadic_index = variadic_index;
+ type->Proc.variadic_index = cast(i32)variadic_index;
type->Proc.calling_convention = cc;
type->Proc.is_polymorphic = pt->generic;
type->Proc.specialization_count = specialization_count;
@@ -1936,12 +1901,12 @@ bool check_type_internal(Checker *c, AstNode *e, Type **type, Type *named_type)
AstNode *s = pt->specialization;
specific = check_type(c, s);
- if (false && !is_type_polymorphic_struct(specific)) {
- gbString str = type_to_string(specific);
- error(s, "Expected a polymorphic struct, got %s", str);
- gb_string_free(str);
- specific = nullptr;
- }
+ // if (!is_type_polymorphic_struct(specific)) {
+ // gbString str = type_to_string(specific);
+ // error(s, "Expected a polymorphic struct, got %s", str);
+ // gb_string_free(str);
+ // specific = nullptr;
+ // }
}
Type *t = make_type_generic(c->allocator, c->context.scope, 0, token.string, specific);
if (c->context.allow_polymorphic_types) {