aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-16 12:06:03 +0000
committergingerBill <bill@gingerbill.org>2023-01-16 12:06:03 +0000
commit2dca39b55716d84e760d3a33b9754c18d7f6f1cc (patch)
tree685a8a85f7c023cff913d29e49ecff6e6a551380 /src
parentb55fa268bf156ff72551868d84f45b579e2025b2 (diff)
Remove `auto_cast` procedure field flag
Fixes #2285
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp10
-rw-r--r--src/check_type.cpp17
-rw-r--r--src/docs_writer.cpp1
-rw-r--r--src/entity.cpp2
-rw-r--r--src/parser.cpp4
-rw-r--r--src/parser.hpp4
6 files changed, 5 insertions, 33 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 6c3e731f8..608eb879b 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -5321,9 +5321,7 @@ gb_internal CALL_ARGUMENT_CHECKER(check_call_arguments_internal) {
i64 s = 0;
if (!check_is_assignable_to_with_score(c, &o, t, &s, param_is_variadic)) {
bool ok = false;
- if (e->flags & EntityFlag_AutoCast) {
- ok = check_is_castable_to(c, &o, t);
- } else if (e->flags & EntityFlag_AnyInt) {
+ if (e->flags & EntityFlag_AnyInt) {
if (is_type_integer(t)) {
ok = check_is_castable_to(c, &o, t);
}
@@ -5592,9 +5590,6 @@ gb_internal CALL_ARGUMENT_CHECKER(check_named_call_arguments) {
i64 s = 0;
if (!check_is_assignable_to_with_score(c, o, e->type, &s, param_is_variadic)) {
bool ok = false;
- if (e->flags & EntityFlag_AutoCast) {
- ok = check_is_castable_to(c, o, e->type);
- }
if (ok) {
s = assign_score_function(MAXIMUM_TYPE_DISTANCE);
} else {
@@ -10243,9 +10238,6 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan
if (f->flags&FieldFlag_c_vararg) {
str = gb_string_appendc(str, "#c_vararg ");
}
- if (f->flags&FieldFlag_auto_cast) {
- str = gb_string_appendc(str, "auto_cast ");
- }
if (f->flags&FieldFlag_any_int) {
str = gb_string_appendc(str, "#any_int ");
}
diff --git a/src/check_type.cpp b/src/check_type.cpp
index 0bd9af15f..ad746514e 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -1619,10 +1619,6 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
}
}
- if (p->flags&FieldFlag_auto_cast) {
- error(name, "'auto_cast' can only be applied to variable fields");
- p->flags &= ~FieldFlag_auto_cast;
- }
if (p->flags&FieldFlag_const) {
error(name, "'#const' can only be applied to variable fields");
p->flags &= ~FieldFlag_const;
@@ -1681,11 +1677,7 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
}
if (type != t_invalid && !check_is_assignable_to(ctx, &op, type)) {
bool ok = true;
- if (p->flags&FieldFlag_auto_cast) {
- if (!check_is_castable_to(ctx, &op, type)) {
- ok = false;
- }
- } else if (p->flags&FieldFlag_any_int) {
+ if (p->flags&FieldFlag_any_int) {
if ((!is_type_integer(op.type) && !is_type_enum(op.type)) || (!is_type_integer(type) && !is_type_enum(type))) {
ok = false;
} else if (!check_is_castable_to(ctx, &op, type)) {
@@ -1731,10 +1723,6 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
error(name, "'#no_alias' can only be applied to non constant values");
p->flags &= ~FieldFlag_no_alias; // Remove the flag
}
- if (p->flags&FieldFlag_auto_cast) {
- error(name, "'auto_cast' can only be applied to variable fields");
- p->flags &= ~FieldFlag_auto_cast;
- }
if (p->flags&FieldFlag_any_int) {
error(name, "'#any_int' can only be applied to variable fields");
p->flags &= ~FieldFlag_any_int;
@@ -1765,9 +1753,6 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para
if (p->flags&FieldFlag_no_alias) {
param->flags |= EntityFlag_NoAlias;
}
- if (p->flags&FieldFlag_auto_cast) {
- param->flags |= EntityFlag_AutoCast;
- }
if (p->flags&FieldFlag_any_int) {
if (!is_type_integer(param->type) && !is_type_enum(param->type)) {
gbString str = type_to_string(param->type);
diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp
index cb7fa0e1e..814769f57 100644
--- a/src/docs_writer.cpp
+++ b/src/docs_writer.cpp
@@ -859,7 +859,6 @@ gb_internal OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e)
if (e->flags & EntityFlag_Param) {
if (e->flags & EntityFlag_Using) { flags |= OdinDocEntityFlag_Param_Using; }
if (e->flags & EntityFlag_ConstInput) { flags |= OdinDocEntityFlag_Param_Const; }
- if (e->flags & EntityFlag_AutoCast) { flags |= OdinDocEntityFlag_Param_AutoCast; }
if (e->flags & EntityFlag_Ellipsis) { flags |= OdinDocEntityFlag_Param_Ellipsis; }
if (e->flags & EntityFlag_NoAlias) { flags |= OdinDocEntityFlag_Param_NoAlias; }
if (e->flags & EntityFlag_AnyInt) { flags |= OdinDocEntityFlag_Param_AnyInt; }
diff --git a/src/entity.cpp b/src/entity.cpp
index b92ba825f..4b0a6a3c8 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -61,7 +61,7 @@ enum EntityFlag : u64 {
EntityFlag_ProcBodyChecked = 1ull<<21,
EntityFlag_CVarArg = 1ull<<22,
- EntityFlag_AutoCast = 1ull<<23,
+
EntityFlag_AnyInt = 1ull<<24,
EntityFlag_Disabled = 1ull<<25,
diff --git a/src/parser.cpp b/src/parser.cpp
index c26ca3dcb..b364d01cf 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -3524,7 +3524,6 @@ struct ParseFieldPrefixMapping {
gb_global ParseFieldPrefixMapping parse_field_prefix_mappings[] = {
{str_lit("using"), Token_using, FieldFlag_using},
- {str_lit("auto_cast"), Token_auto_cast, FieldFlag_auto_cast},
{str_lit("no_alias"), Token_Hash, FieldFlag_no_alias},
{str_lit("c_vararg"), Token_Hash, FieldFlag_c_vararg},
{str_lit("const"), Token_Hash, FieldFlag_const},
@@ -3542,9 +3541,6 @@ gb_internal FieldFlag is_token_field_prefix(AstFile *f) {
case Token_using:
return FieldFlag_using;
- case Token_auto_cast:
- return FieldFlag_auto_cast;
-
case Token_Hash:
advance_token(f);
switch (f->curr_token.kind) {
diff --git a/src/parser.hpp b/src/parser.hpp
index 6782a9248..552e9bfb5 100644
--- a/src/parser.hpp
+++ b/src/parser.hpp
@@ -312,7 +312,7 @@ enum FieldFlag : u32 {
FieldFlag_using = 1<<1,
FieldFlag_no_alias = 1<<2,
FieldFlag_c_vararg = 1<<3,
- FieldFlag_auto_cast = 1<<4,
+
FieldFlag_const = 1<<5,
FieldFlag_any_int = 1<<6,
FieldFlag_subtype = 1<<7,
@@ -327,7 +327,7 @@ enum FieldFlag : u32 {
FieldFlag_Invalid = 1u<<31,
// Parameter List Restrictions
- FieldFlag_Signature = FieldFlag_ellipsis|FieldFlag_using|FieldFlag_no_alias|FieldFlag_c_vararg|FieldFlag_auto_cast|FieldFlag_const|FieldFlag_any_int|FieldFlag_by_ptr,
+ FieldFlag_Signature = FieldFlag_ellipsis|FieldFlag_using|FieldFlag_no_alias|FieldFlag_c_vararg|FieldFlag_const|FieldFlag_any_int|FieldFlag_by_ptr,
FieldFlag_Struct = FieldFlag_using|FieldFlag_subtype|FieldFlag_Tags,
};