1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

cgen: use *char in all functions with *char args to avoid warnings

This commit is contained in:
Alexander Medvednikov
2019-09-15 15:57:17 +03:00
parent 35f927e64e
commit 48c05b5a45
4 changed files with 35 additions and 27 deletions

View File

@ -746,14 +746,17 @@ fn (p mut Parser) fn_args(f mut Fn) {
// foo *(1, 2, 3, mut bar)*
fn (p mut Parser) fn_call_args(f mut Fn) &Fn {
// p.gen('(')
// println('fn_call_args() name=$f.name args.len=$f.args.len')
// C func. # of args is not known
// if f.name.starts_with('c_') {
p.check(.lpar)
if f.is_c {
for p.tok != .rpar {
p.bool_expression()
ph := p.cgen.add_placeholder()
typ := p.bool_expression()
// Cast V byteptr to C char* (byte is unsigned in V, that led to C warnings)
if typ == 'byte*' {
p.cgen.set_placeholder(ph, '(char*)')
}
if p.tok == .comma {
p.gen(', ')
p.check(.comma)

View File

@ -3171,6 +3171,7 @@ fn (p mut Parser) switch_statement() {
}
p.cgen.start_tmp()
typ := p.bool_expression()
is_str := typ == 'string'
expr := p.cgen.end_tmp()
p.check(.lcbr)
mut i := 0
@ -3198,13 +3199,16 @@ fn (p mut Parser) switch_statement() {
mut got_comma := false
for {
if got_comma {
p.gen(') || ')
if is_str {
p.gen(')')
}
p.gen(' || ')
}
if typ == 'string' {
p.gen('string_eq($expr, ')
}
else {
p.gen('($expr == ')
p.gen('$expr == ')
}
if p.tok == .key_case || p.tok == .key_default {
p.check(p.tok)
@ -3222,7 +3226,10 @@ fn (p mut Parser) switch_statement() {
else {
p.check(.arrow)
}
p.gen(')) {')
if is_str {
p.gen(')')
}
p.gen(') {')
p.genln('/* case */')
p.statements()
all_cases_return = all_cases_return && p.returns