mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
vfmt: fn args fixes
This commit is contained in:
parent
569b32bd1e
commit
67bdc2c7a9
@ -142,7 +142,7 @@ fn (p mut Parser) mark_var_changed(v Var) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) mark_arg_moved(v Var) {
|
fn (p mut Parser) mark_arg_moved(v Var) {
|
||||||
for i,arg in p.cur_fn.args {
|
for i, arg in p.cur_fn.args {
|
||||||
if arg.name == v.name {
|
if arg.name == v.name {
|
||||||
// println('setting f $p.cur_fn.name arg $arg.name to is_mut')
|
// println('setting f $p.cur_fn.name arg $arg.name to is_mut')
|
||||||
p.cur_fn.args[i].is_moved = true
|
p.cur_fn.args[i].is_moved = true
|
||||||
@ -677,7 +677,7 @@ fn (p mut Parser) async_fn_call(f Fn, method_ph int, receiver_var, receiver_type
|
|||||||
// wrapper(arg_struct * arg) { fn("arg->a, arg->b"); }
|
// wrapper(arg_struct * arg) { fn("arg->a, arg->b"); }
|
||||||
mut str_args := ''
|
mut str_args := ''
|
||||||
mut did_gen_something := false
|
mut did_gen_something := false
|
||||||
for i,arg in f.args {
|
for i, arg in f.args {
|
||||||
arg_struct += '$arg.typ $arg.name ;' // Add another field (arg) to the tmp struct definition
|
arg_struct += '$arg.typ $arg.name ;' // Add another field (arg) to the tmp struct definition
|
||||||
str_args += 'arg $dot_ptr $arg.name'
|
str_args += 'arg $dot_ptr $arg.name'
|
||||||
if i == 0 && f.is_method {
|
if i == 0 && f.is_method {
|
||||||
@ -801,7 +801,7 @@ fn (p mut Parser) fn_call(f mut Fn, method_ph int, receiver_var, receiver_type s
|
|||||||
if t.cat == .interface_ {
|
if t.cat == .interface_ {
|
||||||
// Find the index of the method
|
// Find the index of the method
|
||||||
mut idx := 0
|
mut idx := 0
|
||||||
for i,method in t.methods {
|
for i, method in t.methods {
|
||||||
if method.name == f.name {
|
if method.name == f.name {
|
||||||
idx = i
|
idx = i
|
||||||
}
|
}
|
||||||
@ -1008,7 +1008,7 @@ fn (p mut Parser) fn_call_args(f mut Fn) {
|
|||||||
p.cgen.resetln(p.cgen.cur_line.replace('v_panic (', 'panic_debug ($p.scanner.line_nr, tos3("$file_path"), tos3("$mod_name"), tos2((byte *)"$fn_name"), '))
|
p.cgen.resetln(p.cgen.cur_line.replace('v_panic (', 'panic_debug ($p.scanner.line_nr, tos3("$file_path"), tos3("$mod_name"), tos2((byte *)"$fn_name"), '))
|
||||||
}
|
}
|
||||||
mut saved_args := []string
|
mut saved_args := []string
|
||||||
for i,arg in f.args {
|
for i, arg in f.args {
|
||||||
// Receiver is the first arg
|
// Receiver is the first arg
|
||||||
// Skip the receiver, because it was already generated in the expression
|
// Skip the receiver, because it was already generated in the expression
|
||||||
if i == 0 && f.is_method {
|
if i == 0 && f.is_method {
|
||||||
@ -1374,7 +1374,7 @@ fn replace_generic_type(gen_type string, ti &TypeInst) string {
|
|||||||
// replace return type & param types for a given generic function using TypeInst
|
// replace return type & param types for a given generic function using TypeInst
|
||||||
fn replace_generic_type_params(f mut Fn, ti &TypeInst) {
|
fn replace_generic_type_params(f mut Fn, ti &TypeInst) {
|
||||||
mut args := []Var
|
mut args := []Var
|
||||||
for i,_ in f.args {
|
for i, _ in f.args {
|
||||||
mut arg := f.args[i]
|
mut arg := f.args[i]
|
||||||
arg.typ = replace_generic_type(arg.typ, ti)
|
arg.typ = replace_generic_type(arg.typ, ti)
|
||||||
args << arg
|
args << arg
|
||||||
@ -1474,7 +1474,7 @@ fn (p mut Parser) register_multi_return_stuct(types []string) string {
|
|||||||
name: typ
|
name: typ
|
||||||
mod: p.mod
|
mod: p.mod
|
||||||
})
|
})
|
||||||
for i,t in typ.replace('_V_MulRet_', '').replace('_PTR_', '*').split('_V_') {
|
for i, t in typ.replace('_V_MulRet_', '').replace('_PTR_', '*').split('_V_') {
|
||||||
p.table.add_field(typ, 'var_$i', t, false, '', .public)
|
p.table.add_field(typ, 'var_$i', t, false, '', .public)
|
||||||
}
|
}
|
||||||
p.cgen.typedefs << 'typedef struct $typ $typ;'
|
p.cgen.typedefs << 'typedef struct $typ $typ;'
|
||||||
@ -1543,7 +1543,7 @@ fn (p mut Parser) dispatch_generic_fn_instance(f mut Fn, ti &TypeInst) {
|
|||||||
fn (f &Fn) typ_str() string {
|
fn (f &Fn) typ_str() string {
|
||||||
mut sb := strings.new_builder(50)
|
mut sb := strings.new_builder(50)
|
||||||
sb.write('fn (')
|
sb.write('fn (')
|
||||||
for i,arg in f.args {
|
for i, arg in f.args {
|
||||||
sb.write(arg.typ)
|
sb.write(arg.typ)
|
||||||
if i < f.args.len - 1 {
|
if i < f.args.len - 1 {
|
||||||
sb.write(',')
|
sb.write(',')
|
||||||
@ -1559,7 +1559,7 @@ fn (f &Fn) typ_str() string {
|
|||||||
// f.args => "int a, string b"
|
// f.args => "int a, string b"
|
||||||
fn (f &Fn) str_args(table &Table) string {
|
fn (f &Fn) str_args(table &Table) string {
|
||||||
mut s := ''
|
mut s := ''
|
||||||
for i,arg in f.args {
|
for i, arg in f.args {
|
||||||
// Interfaces are a special case. We need to pass the object + pointers
|
// Interfaces are a special case. We need to pass the object + pointers
|
||||||
// to all methods:
|
// to all methods:
|
||||||
// fn handle(r Runner) { =>
|
// fn handle(r Runner) { =>
|
||||||
@ -1640,7 +1640,7 @@ pub fn (f &Fn) v_fn_name() string {
|
|||||||
pub fn (f &Fn) str_for_error() string {
|
pub fn (f &Fn) str_for_error() string {
|
||||||
// Build the args for the error
|
// Build the args for the error
|
||||||
mut s := ''
|
mut s := ''
|
||||||
for i,a in f.args {
|
for i, a in f.args {
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
if f.is_method {
|
if f.is_method {
|
||||||
s += a.typ + '.' + f.name + '('
|
s += a.typ + '.' + f.name + '('
|
||||||
|
@ -61,6 +61,7 @@ fn (p mut Parser) for_st() {
|
|||||||
*/
|
*/
|
||||||
i := p.check_name()
|
i := p.check_name()
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
|
p.fspace()
|
||||||
val := p.check_name()
|
val := p.check_name()
|
||||||
if i == '_' && val == '_' {
|
if i == '_' && val == '_' {
|
||||||
p.error('no new variables on the left side of `in`')
|
p.error('no new variables on the left side of `in`')
|
||||||
|
@ -27,6 +27,7 @@ fn (p mut Parser) get_type2() Type{
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
|
p.fspace()
|
||||||
}
|
}
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
// p.inside_tuple = false
|
// p.inside_tuple = false
|
||||||
|
@ -323,7 +323,7 @@ pub fn (p &Parser) save_state() ParserState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (p mut Parser) restore_state(state ParserState,scanner bool,cgen bool) {
|
pub fn (p mut Parser) restore_state(state ParserState, scanner bool, cgen bool) {
|
||||||
if scanner {
|
if scanner {
|
||||||
p.scanner.line_nr = state.scanner_line_nr
|
p.scanner.line_nr = state.scanner_line_nr
|
||||||
p.scanner.text = state.scanner_text
|
p.scanner.text = state.scanner_text
|
||||||
@ -345,7 +345,7 @@ pub fn (p mut Parser) restore_state(state ParserState,scanner bool,cgen bool) {
|
|||||||
p.lit = state.lit
|
p.lit = state.lit
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) clear_state(scanner bool,cgen bool) {
|
fn (p mut Parser) clear_state(scanner bool, cgen bool) {
|
||||||
if scanner {
|
if scanner {
|
||||||
p.scanner.line_nr = 0
|
p.scanner.line_nr = 0
|
||||||
p.scanner.text = ''
|
p.scanner.text = ''
|
||||||
@ -372,7 +372,7 @@ pub fn (p mut Parser) add_text(text string) {
|
|||||||
p.scan_tokens()
|
p.scan_tokens()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) statements_from_text(text string,rcbr bool) {
|
fn (p mut Parser) statements_from_text(text string, rcbr bool) {
|
||||||
saved_state := p.save_state()
|
saved_state := p.save_state()
|
||||||
p.clear_state(true, false)
|
p.clear_state(true, false)
|
||||||
p.add_text(text)
|
p.add_text(text)
|
||||||
@ -711,7 +711,7 @@ fn (p mut Parser) const_decl() {
|
|||||||
// Check to see if this constant exists, and is void. If so, try and get the type again:
|
// Check to see if this constant exists, and is void. If so, try and get the type again:
|
||||||
if my_const:=p.v.table.find_const(name){
|
if my_const:=p.v.table.find_const(name){
|
||||||
if my_const.typ == 'void' {
|
if my_const.typ == 'void' {
|
||||||
for i,v in p.v.table.consts {
|
for i, v in p.v.table.consts {
|
||||||
if v.name == name {
|
if v.name == name {
|
||||||
p.v.table.consts[i].typ = typ
|
p.v.table.consts[i].typ = typ
|
||||||
break
|
break
|
||||||
@ -1413,7 +1413,7 @@ fn (p mut Parser) statement(add_semi bool) string {
|
|||||||
}
|
}
|
||||||
// is_map: are we in map assignment? (m[key] = val) if yes, dont generate '='
|
// is_map: are we in map assignment? (m[key] = val) if yes, dont generate '='
|
||||||
// this can be `user = ...` or `user.field = ...`, in both cases `v` is `user`
|
// this can be `user = ...` or `user.field = ...`, in both cases `v` is `user`
|
||||||
fn (p mut Parser) assign_statement(v Var,ph int,is_map bool) {
|
fn (p mut Parser) assign_statement(v Var, ph int, is_map bool) {
|
||||||
errtok := p.cur_tok_index()
|
errtok := p.cur_tok_index()
|
||||||
is_vid := p.fileis('vid') // TODO remove
|
is_vid := p.fileis('vid') // TODO remove
|
||||||
tok := p.tok
|
tok := p.tok
|
||||||
@ -1593,7 +1593,7 @@ fn (p mut Parser) var_decl() {
|
|||||||
mr_fn := p.cgen.cur_line.find_between('=', '(').trim_space()
|
mr_fn := p.cgen.cur_line.find_between('=', '(').trim_space()
|
||||||
p.error_with_token_index('assignment mismatch: ${var_names.len} variables but `$mr_fn` returns $var_types.len values', var_token_idxs.last())
|
p.error_with_token_index('assignment mismatch: ${var_names.len} variables but `$mr_fn` returns $var_types.len values', var_token_idxs.last())
|
||||||
}
|
}
|
||||||
for i,var_name in var_names {
|
for i, var_name in var_names {
|
||||||
var_token_idx := var_token_idxs[i]
|
var_token_idx := var_token_idxs[i]
|
||||||
var_is_mut := var_mut[i]
|
var_is_mut := var_mut[i]
|
||||||
var_type := var_types[i]
|
var_type := var_types[i]
|
||||||
@ -1669,7 +1669,7 @@ fn (p mut Parser) var_decl() {
|
|||||||
p.is_empty_c_struct_init = false
|
p.is_empty_c_struct_init = false
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) get_struct_type(name_ string,is_c bool,is_ptr bool) string {
|
fn (p mut Parser) get_struct_type(name_ string, is_c bool, is_ptr bool) string {
|
||||||
mut name := name_
|
mut name := name_
|
||||||
if is_ptr {
|
if is_ptr {
|
||||||
name += '*' // `&User{}` => type `User*`
|
name += '*' // `&User{}` => type `User*`
|
||||||
@ -1681,7 +1681,7 @@ fn (p mut Parser) get_struct_type(name_ string,is_c bool,is_ptr bool) string {
|
|||||||
return p.struct_init(name)
|
return p.struct_init(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) get_var_type(name string,is_ptr bool,deref_nr int) string {
|
fn (p mut Parser) get_var_type(name string, is_ptr bool, deref_nr int) string {
|
||||||
v := p.find_var_check_new_var(name) or {
|
v := p.find_var_check_new_var(name) or {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
@ -1732,7 +1732,7 @@ fn (p mut Parser) get_var_type(name string,is_ptr bool,deref_nr int) string {
|
|||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) get_const_type(name string,is_ptr bool) string {
|
fn (p mut Parser) get_const_type(name string, is_ptr bool) string {
|
||||||
c := p.table.find_const(name) or {
|
c := p.table.find_const(name) or {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
@ -1775,7 +1775,7 @@ fn (p mut Parser) get_c_func_type(name string) string {
|
|||||||
return cfn.typ
|
return cfn.typ
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) undefined_error(name string,orig_name string) {
|
fn (p mut Parser) undefined_error(name string, orig_name string) {
|
||||||
name_dotted := mod_gen_name_rev(name.replace('__', '.'))
|
name_dotted := mod_gen_name_rev(name.replace('__', '.'))
|
||||||
// check for misspelled function / variable / module / type
|
// check for misspelled function / variable / module / type
|
||||||
suggested := p.identify_typo(name)
|
suggested := p.identify_typo(name)
|
||||||
@ -1887,7 +1887,7 @@ fn (p mut Parser) var_expr(v Var) string {
|
|||||||
|
|
||||||
// user.name => `str_typ` is `User`
|
// user.name => `str_typ` is `User`
|
||||||
// user.company.name => `str_typ` is `Company`
|
// user.company.name => `str_typ` is `Company`
|
||||||
fn (p mut Parser) dot(str_typ_ string,method_ph int) string {
|
fn (p mut Parser) dot(str_typ_ string, method_ph int) string {
|
||||||
// if p.fileis('orm_test') {
|
// if p.fileis('orm_test') {
|
||||||
// println('ORM dot $str_typ')
|
// println('ORM dot $str_typ')
|
||||||
// }
|
// }
|
||||||
@ -2067,7 +2067,7 @@ fn get_index_type(typ string) IndexType {
|
|||||||
return .noindex
|
return .noindex
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) index_expr(typ_ string,fn_ph int) string {
|
fn (p mut Parser) index_expr(typ_ string, fn_ph int) string {
|
||||||
mut typ := typ_
|
mut typ := typ_
|
||||||
// a[0]
|
// a[0]
|
||||||
v := p.expr_var
|
v := p.expr_var
|
||||||
@ -2685,7 +2685,7 @@ fn (p mut Parser) return_st() {
|
|||||||
expr_type = types.join(',')
|
expr_type = types.join(',')
|
||||||
cur_fn_typ_chk = cur_fn_typ_chk.replace('_V_MulRet_', '').replace('_PTR_', '*').replace('_V_', ',')
|
cur_fn_typ_chk = cur_fn_typ_chk.replace('_V_MulRet_', '').replace('_PTR_', '*').replace('_V_', ',')
|
||||||
mut ret_fields := ''
|
mut ret_fields := ''
|
||||||
for ret_val_idx,ret_val in mr_values {
|
for ret_val_idx, ret_val in mr_values {
|
||||||
if ret_val_idx > 0 {
|
if ret_val_idx > 0 {
|
||||||
ret_fields += ','
|
ret_fields += ','
|
||||||
}
|
}
|
||||||
@ -2937,7 +2937,7 @@ fn (p mut Parser) check_unused_imports() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
mut output := ''
|
mut output := ''
|
||||||
for alias,mod in p.import_table.imports {
|
for alias, mod in p.import_table.imports {
|
||||||
if !p.import_table.is_used_import(alias) {
|
if !p.import_table.is_used_import(alias) {
|
||||||
mod_alias := if alias == mod {alias}else {'$alias ($mod)'}
|
mod_alias := if alias == mod {alias}else {'$alias ($mod)'}
|
||||||
output += '\n * $mod_alias'
|
output += '\n * $mod_alias'
|
||||||
|
Loading…
Reference in New Issue
Block a user