fmt: array_init(); parser: fn_redefinition_error()
parent
620fc962d7
commit
f7153ca4fa
|
@ -492,43 +492,7 @@ fn (mut f Fmt) expr(node ast.Expr) {
|
||||||
f.fn_decl(it.decl)
|
f.fn_decl(it.decl)
|
||||||
}
|
}
|
||||||
ast.ArrayInit {
|
ast.ArrayInit {
|
||||||
if it.exprs.len == 0 && it.typ != 0 && it.typ != table.void_type {
|
f.array_init(it)
|
||||||
// `x := []string`
|
|
||||||
f.write(f.type_to_str(it.typ))
|
|
||||||
} else {
|
|
||||||
// `[1,2,3]`
|
|
||||||
// type_sym := f.table.get_type_symbol(it.typ)
|
|
||||||
f.write('[')
|
|
||||||
mut inc_indent := false
|
|
||||||
mut last_line_nr := node.position().line_nr // to have the same newlines between array elements
|
|
||||||
for i, expr in it.exprs {
|
|
||||||
line_nr := expr.position().line_nr
|
|
||||||
if last_line_nr < line_nr {
|
|
||||||
if !inc_indent {
|
|
||||||
f.indent++
|
|
||||||
inc_indent = true
|
|
||||||
}
|
|
||||||
f.writeln('')
|
|
||||||
}
|
|
||||||
is_new_line := last_line_nr < line_nr || f.wrap_long_line()
|
|
||||||
if !is_new_line && i > 0 {
|
|
||||||
f.write(' ')
|
|
||||||
}
|
|
||||||
f.expr(expr)
|
|
||||||
if i == it.exprs.len - 1 {
|
|
||||||
if is_new_line {
|
|
||||||
f.writeln('')
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
f.write(',')
|
|
||||||
}
|
|
||||||
last_line_nr = line_nr
|
|
||||||
}
|
|
||||||
if inc_indent {
|
|
||||||
f.indent--
|
|
||||||
}
|
|
||||||
f.write(']')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ast.AsCast {
|
ast.AsCast {
|
||||||
type_str := f.type_to_str(it.typ)
|
type_str := f.type_to_str(it.typ)
|
||||||
|
@ -1020,3 +984,43 @@ fn expr_is_single_line(expr ast.Expr) bool {
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (mut f Fmt) array_init(it ast.ArrayInit) {
|
||||||
|
if it.exprs.len == 0 && it.typ != 0 && it.typ != table.void_type {
|
||||||
|
// `x := []string`
|
||||||
|
f.write(f.type_to_str(it.typ))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// `[1,2,3]`
|
||||||
|
// type_sym := f.table.get_type_symbol(it.typ)
|
||||||
|
f.write('[')
|
||||||
|
mut inc_indent := false
|
||||||
|
mut last_line_nr := it.pos.line_nr // to have the same newlines between array elements
|
||||||
|
for i, expr in it.exprs {
|
||||||
|
line_nr := expr.position().line_nr
|
||||||
|
if last_line_nr < line_nr {
|
||||||
|
if !inc_indent {
|
||||||
|
f.indent++
|
||||||
|
inc_indent = true
|
||||||
|
}
|
||||||
|
f.writeln('')
|
||||||
|
}
|
||||||
|
is_new_line := last_line_nr < line_nr || f.wrap_long_line()
|
||||||
|
if !is_new_line && i > 0 {
|
||||||
|
f.write(' ')
|
||||||
|
}
|
||||||
|
f.expr(expr)
|
||||||
|
if i == it.exprs.len - 1 {
|
||||||
|
if is_new_line {
|
||||||
|
f.writeln('')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
f.write(',')
|
||||||
|
}
|
||||||
|
last_line_nr = line_nr
|
||||||
|
}
|
||||||
|
if inc_indent {
|
||||||
|
f.indent--
|
||||||
|
}
|
||||||
|
f.write(']')
|
||||||
|
}
|
||||||
|
|
|
@ -193,7 +193,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
||||||
name = p.prepend_mod(name)
|
name = p.prepend_mod(name)
|
||||||
}
|
}
|
||||||
if _ := p.table.find_fn(name) {
|
if _ := p.table.find_fn(name) {
|
||||||
p.error('redefinition of function `$name`')
|
p.fn_redefinition_error(name)
|
||||||
}
|
}
|
||||||
p.table.register_fn(table.Fn{
|
p.table.register_fn(table.Fn{
|
||||||
name: name
|
name: name
|
||||||
|
@ -364,6 +364,17 @@ fn (mut p Parser) fn_args() ([]table.Arg, bool) {
|
||||||
return args, is_variadic
|
return args, is_variadic
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p Parser) fileis(s string) bool {
|
fn (p &Parser) fileis(s string) bool {
|
||||||
return p.file_name.contains(s)
|
return p.file_name.contains(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (mut p Parser) fn_redefinition_error(name string) {
|
||||||
|
// Find where this function was already declared
|
||||||
|
// TODO
|
||||||
|
/*
|
||||||
|
for file in p.ast_files {
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
p.error('redefinition of function `$name`')
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue