aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-23 12:04:19 +0100
committergingerBill <bill@gingerbill.org>2022-05-23 12:04:19 +0100
commit3ec70c5517062f3d35822253b2072df696b0c55f (patch)
tree12e5377283b627e246f77e19fed33220b06c0830 /src
parentd9f293b2818b30ebe2d29180aa62c3ce432c4582 (diff)
Merge functionality of `#maybe` with the standard 'union' functionality
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp1
-rw-r--r--src/docs_writer.cpp1
-rw-r--r--src/llvm_backend_type.cpp5
-rw-r--r--src/parser.cpp1
-rw-r--r--src/parser.hpp2
-rw-r--r--src/types.cpp19
6 files changed, 11 insertions, 18 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 013d22913..b911771b1 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -10063,7 +10063,6 @@ gbString write_expr_to_string(gbString str, Ast *node, bool shorthand) {
str = gb_string_appendc(str, ") ");
}
switch (st->kind) {
- case UnionType_maybe: str = gb_string_appendc(str, "#maybe "); break;
case UnionType_no_nil: str = gb_string_appendc(str, "#no_nil "); break;
case UnionType_shared_nil: str = gb_string_appendc(str, "#shared_nil "); break;
}
diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp
index 0ad10ac49..2f531a45c 100644
--- a/src/docs_writer.cpp
+++ b/src/docs_writer.cpp
@@ -620,7 +620,6 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) {
doc_type.kind = OdinDocType_Union;
if (type->Union.is_polymorphic) { doc_type.flags |= OdinDocTypeFlag_Union_polymorphic; }
switch (type->Union.kind) {
- case UnionType_maybe: doc_type.flags |= OdinDocTypeFlag_Union_maybe; break;
case UnionType_no_nil: doc_type.flags |= OdinDocTypeFlag_Union_no_nil; break;
case UnionType_shared_nil: doc_type.flags |= OdinDocTypeFlag_Union_shared_nil; break;
}
diff --git a/src/llvm_backend_type.cpp b/src/llvm_backend_type.cpp
index 7d73956e8..2e7b2788a 100644
--- a/src/llvm_backend_type.cpp
+++ b/src/llvm_backend_type.cpp
@@ -641,7 +641,7 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da
tag = lb_const_ptr_cast(m, variant_ptr, t_type_info_union_ptr);
{
- LLVMValueRef vals[8] = {};
+ LLVMValueRef vals[7] = {};
isize variant_count = gb_max(0, t->Union.variants.count);
lbValue memory_types = lb_type_info_member_types_offset(p, variant_count);
@@ -676,8 +676,7 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da
vals[4] = lb_const_bool(m, t_bool, t->Union.custom_align != 0).value;
vals[5] = lb_const_bool(m, t_bool, t->Union.kind == UnionType_no_nil).value;
- vals[6] = lb_const_bool(m, t_bool, t->Union.kind == UnionType_maybe).value;
- vals[7] = lb_const_bool(m, t_bool, t->Union.kind == UnionType_shared_nil).value;
+ vals[6] = lb_const_bool(m, t_bool, t->Union.kind == UnionType_shared_nil).value;
for (isize i = 0; i < gb_count_of(vals); i++) {
if (vals[i] == nullptr) {
diff --git a/src/parser.cpp b/src/parser.cpp
index ab947774b..d19e249e5 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -2529,6 +2529,7 @@ Ast *parse_operand(AstFile *f, bool lhs) {
if (maybe) {
union_kind = UnionType_maybe;
+ syntax_error(f->curr_token, "#maybe functionality has now been merged with standard 'union' functionality");
} else if (no_nil) {
union_kind = UnionType_no_nil;
} else if (shared_nil) {
diff --git a/src/parser.hpp b/src/parser.hpp
index 698ed7623..dc294b6ce 100644
--- a/src/parser.hpp
+++ b/src/parser.hpp
@@ -332,7 +332,7 @@ char const *inline_asm_dialect_strings[InlineAsmDialect_COUNT] = {
enum UnionTypeKind : u8 {
UnionType_Normal = 0,
- UnionType_maybe = 1,
+ UnionType_maybe = 1, // removed
UnionType_no_nil = 2,
UnionType_shared_nil = 3,
};
diff --git a/src/types.cpp b/src/types.cpp
index b4dc17256..c79b8e652 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -1685,11 +1685,9 @@ bool is_type_map(Type *t) {
bool is_type_union_maybe_pointer(Type *t) {
t = base_type(t);
- if (t->kind == Type_Union && t->Union.kind == UnionType_maybe) {
- if (t->Union.variants.count == 1) {
- Type *v = t->Union.variants[0];
- return is_type_pointer(v) || is_type_multi_pointer(v);
- }
+ if (t->kind == Type_Union && t->Union.variants.count == 1) {
+ Type *v = t->Union.variants[0];
+ return is_type_internally_pointer_like(v);
}
return false;
}
@@ -1697,12 +1695,10 @@ bool is_type_union_maybe_pointer(Type *t) {
bool is_type_union_maybe_pointer_original_alignment(Type *t) {
t = base_type(t);
- if (t->kind == Type_Union && t->Union.kind == UnionType_maybe) {
- if (t->Union.variants.count == 1) {
- Type *v = t->Union.variants[0];
- if (is_type_pointer(v) || is_type_multi_pointer(v)) {
- return type_align_of(v) == type_align_of(t);
- }
+ if (t->kind == Type_Union && t->Union.variants.count == 1) {
+ Type *v = t->Union.variants[0];
+ if (is_type_internally_pointer_like(v)) {
+ return type_align_of(v) == type_align_of(t);
}
}
return false;
@@ -4054,7 +4050,6 @@ gbString write_type_to_string(gbString str, Type *type, bool shorthand=false) {
case Type_Union:
str = gb_string_appendc(str, "union");
switch (type->Union.kind) {
- case UnionType_maybe: str = gb_string_appendc(str, " #maybe"); break;
case UnionType_no_nil: str = gb_string_appendc(str, " #no_nil"); break;
case UnionType_shared_nil: str = gb_string_appendc(str, " #shared_nil"); break;
}