Browse Source

Remove `auto_cast` procedure field flag
Fixes #2285

gingerBill 2 years ago
parent
commit
2dca39b557
7 changed files with 7 additions and 35 deletions
  1. 2 2
      core/runtime/core_builtin_soa.odin
  2. 1 9
      src/check_expr.cpp
  3. 1 16
      src/check_type.cpp
  4. 0 1
      src/docs_writer.cpp
  5. 1 1
      src/entity.cpp
  6. 0 4
      src/parser.cpp
  7. 2 2
      src/parser.hpp

+ 2 - 2
core/runtime/core_builtin_soa.odin

@@ -150,14 +150,14 @@ make_soa_dynamic_array :: proc($T: typeid/#soa[dynamic]$E, allocator := context.
 }
 
 @builtin
-make_soa_dynamic_array_len :: proc($T: typeid/#soa[dynamic]$E, auto_cast length: int, allocator := context.allocator, loc := #caller_location) -> (array: T) {
+make_soa_dynamic_array_len :: proc($T: typeid/#soa[dynamic]$E, #any_int length: int, allocator := context.allocator, loc := #caller_location) -> (array: T) {
 	context.allocator = allocator
 	resize_soa(&array, length, loc)
 	return
 }
 
 @builtin
-make_soa_dynamic_array_len_cap :: proc($T: typeid/#soa[dynamic]$E, auto_cast length, capacity: int, allocator := context.allocator, loc := #caller_location) -> (array: T) {
+make_soa_dynamic_array_len_cap :: proc($T: typeid/#soa[dynamic]$E, #any_int length, capacity: int, allocator := context.allocator, loc := #caller_location) -> (array: T) {
 	context.allocator = allocator
 	if reserve_soa(&array, capacity, loc) {
 		resize_soa(&array, length, loc)

+ 1 - 9
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 ");
 		}

+ 1 - 16
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);

+ 0 - 1
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;   }

+ 1 - 1
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,

+ 0 - 4
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) {

+ 2 - 2
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,
 };