Skip to content

Commit f23d2c8

Browse files
committed
cgen: c2v variadic fixes
1 parent cec7e91 commit f23d2c8

File tree

4 files changed

+14
-11
lines changed

4 files changed

+14
-11
lines changed

cmd/v/v.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const (
3434
'shader',
3535
'symlink',
3636
'test',
37-
'test-all', /* runs most of the tests and other checking tools, that will be run by the CI */
37+
'test-all', // runs most of the tests and other checking tools, that will be run by the CI
3838
'test-cleancode',
3939
'test-fmt',
4040
'test-parser',

vlib/v/gen/c/assign.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ fn (mut g Gen) gen_assign_stmt(node ast.AssignStmt) {
154154
ret_styp := g.typ(val.decl.return_type)
155155
g.write('$ret_styp (*$ident.name) (')
156156
def_pos := g.definitions.len
157-
g.fn_args(val.decl.params, voidptr(0))
157+
g.fn_decl_params(val.decl.params, voidptr(0), false)
158158
g.definitions.go_back(g.definitions.len - def_pos)
159159
g.write(') = ')
160160
} else {
@@ -312,7 +312,7 @@ fn (mut g Gen) gen_assign_stmt(node ast.AssignStmt) {
312312
ret_styp := g.typ(func.func.return_type)
313313
g.write('$ret_styp (*${g.get_ternary_name(ident.name)}) (')
314314
def_pos := g.definitions.len
315-
g.fn_args(func.func.params, voidptr(0))
315+
g.fn_decl_params(func.func.params, voidptr(0), false)
316316
g.definitions.go_back(g.definitions.len - def_pos)
317317
g.write(')')
318318
} else {

vlib/v/gen/c/cgen.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6849,7 +6849,7 @@ static inline __shared__$interface_name ${shared_fn_name}(__shared__$cctype* x)
68496849
...params[0]
68506850
typ: st.set_nr_muls(1)
68516851
}
6852-
fargs, _, _ := g.fn_args(params, voidptr(0))
6852+
fargs, _, _ := g.fn_decl_params(params, voidptr(0), false)
68536853
mut parameter_name := g.out.cut_last(g.out.len - params_start_pos)
68546854

68556855
if st.is_ptr() {

vlib/v/gen/c/fn.v

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ fn (mut g Gen) gen_fn_decl(node &ast.FnDecl, skip bool) {
274274
g.write(fn_header)
275275
}
276276
arg_start_pos := g.out.len
277-
fargs, fargtypes, heap_promoted := g.fn_args(node.params, node.scope)
277+
fargs, fargtypes, heap_promoted := g.fn_decl_params(node.params, node.scope, node.is_variadic)
278278
if is_closure {
279279
mut s := '$cur_closure_ctx *$c.closure_ctx'
280280
if node.params.len > 0 {
@@ -537,16 +537,15 @@ fn (mut g Gen) write_defer_stmts_when_needed() {
537537
}
538538
}
539539

540-
// fn decl args
541-
fn (mut g Gen) fn_args(args []ast.Param, scope &ast.Scope) ([]string, []string, []bool) {
540+
fn (mut g Gen) fn_decl_params(params []ast.Param, scope &ast.Scope, is_variadic bool) ([]string, []string, []bool) {
542541
mut fargs := []string{}
543542
mut fargtypes := []string{}
544543
mut heap_promoted := []bool{}
545-
if args.len == 0 {
544+
if params.len == 0 {
546545
// in C, `()` is untyped, unlike `(void)`
547546
g.write('void')
548547
}
549-
for i, arg in args {
548+
for i, arg in params {
550549
mut caname := if arg.name == '_' { g.new_tmp_declaration_name() } else { c_name(arg.name) }
551550
typ := g.unwrap_generic(arg.typ)
552551
arg_type_sym := g.table.sym(typ)
@@ -556,7 +555,7 @@ fn (mut g Gen) fn_args(args []ast.Param, scope &ast.Scope) ([]string, []string,
556555
func := info.func
557556
g.write('${g.typ(func.return_type)} (*$caname)(')
558557
g.definitions.write_string('${g.typ(func.return_type)} (*$caname)(')
559-
g.fn_args(func.params, voidptr(0))
558+
g.fn_decl_params(func.params, voidptr(0), func.is_variadic)
560559
g.write(')')
561560
g.definitions.write_string(')')
562561
fargs << caname
@@ -586,11 +585,15 @@ fn (mut g Gen) fn_args(args []ast.Param, scope &ast.Scope) ([]string, []string,
586585
fargtypes << arg_type_name
587586
heap_promoted << heap_prom
588587
}
589-
if i < args.len - 1 {
588+
if i < params.len - 1 {
590589
g.write(', ')
591590
g.definitions.write_string(', ')
592591
}
593592
}
593+
if g.pref.translated && is_variadic {
594+
g.write(', ...')
595+
g.definitions.write_string(', ...')
596+
}
594597
return fargs, fargtypes, heap_promoted
595598
}
596599

0 commit comments

Comments
 (0)