Skip to content

Commit 2abbbcc

Browse files
committed
checker: allow int <=> enum usage in c2v'ed code
1 parent 6c40781 commit 2abbbcc

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

vlib/v/checker/checker.v

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2456,7 +2456,7 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
24562456
typ := c.check_expr_opt_call(call_arg.expr, c.expr(call_arg.expr))
24572457
call_expr.args[i].typ = typ
24582458
typ_sym := c.table.get_type_symbol(typ)
2459-
arg_typ_sym := c.table.get_type_symbol(param.typ)
2459+
param_typ_sym := c.table.get_type_symbol(param.typ)
24602460
if func.is_variadic && typ.has_flag(.variadic) && call_expr.args.len - 1 > i {
24612461
c.error('when forwarding a variadic variable, it must be the final argument',
24622462
call_arg.pos)
@@ -2490,12 +2490,12 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
24902490
c.fail_if_unreadable(call_arg.expr, typ, 'argument')
24912491
}
24922492
}
2493-
mut final_arg_sym := arg_typ_sym
2494-
if func.is_variadic && arg_typ_sym.info is ast.Array {
2495-
final_arg_sym = c.table.get_type_symbol(arg_typ_sym.array_info().elem_type)
2493+
mut final_param_sym := param_typ_sym
2494+
if func.is_variadic && param_typ_sym.info is ast.Array {
2495+
final_param_sym = c.table.get_type_symbol(param_typ_sym.array_info().elem_type)
24962496
}
24972497
// Handle expected interface
2498-
if final_arg_sym.kind == .interface_ {
2498+
if final_param_sym.kind == .interface_ {
24992499
c.type_implements(typ, param.typ, call_arg.expr.position())
25002500
continue
25012501
}
@@ -2506,12 +2506,21 @@ pub fn (mut c Checker) fn_call(mut call_expr ast.CallExpr) ast.Type {
25062506
// if arg_typ_sym.kind == .string && typ_sym.has_method('str') {
25072507
// continue
25082508
// }
2509-
if typ_sym.kind == .void && arg_typ_sym.kind == .string {
2509+
if typ_sym.kind == .void && param_typ_sym.kind == .string {
25102510
continue
25112511
}
25122512
if func.generic_names.len > 0 {
25132513
continue
25142514
}
2515+
if c.pref.translated {
2516+
// Allow enums to be used as ints and vice versa in translated code
2517+
if param.typ == ast.int_type && typ_sym.kind == .enum_ {
2518+
continue
2519+
}
2520+
if typ == ast.int_type && param_typ_sym.kind == .enum_ {
2521+
continue
2522+
}
2523+
}
25152524
c.error('$err.msg in argument ${i + 1} to `$fn_name`', call_arg.pos)
25162525
}
25172526
// Warn about automatic (de)referencing, which will be removed soon.

0 commit comments

Comments
 (0)