markused: fix V compiler panics with -skip-unused, for code using generics
parent
5607cfbd32
commit
9b8cf1ad37
|
@ -141,6 +141,9 @@ pub fn (mut w Walker) stmt(node ast.Stmt) {
|
||||||
w.table.used_maps++
|
w.table.used_maps++
|
||||||
}
|
}
|
||||||
if node.kind == .struct_ {
|
if node.kind == .struct_ {
|
||||||
|
if node.cond_type == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
// the .next() method of the struct will be used for iteration:
|
// the .next() method of the struct will be used for iteration:
|
||||||
cond_type_sym := w.table.sym(node.cond_type)
|
cond_type_sym := w.table.sym(node.cond_type)
|
||||||
if next_fn := cond_type_sym.find_method('next') {
|
if next_fn := cond_type_sym.find_method('next') {
|
||||||
|
@ -275,6 +278,9 @@ fn (mut w Walker) expr(node ast.Expr) {
|
||||||
w.expr(node.left)
|
w.expr(node.left)
|
||||||
w.expr(node.index)
|
w.expr(node.index)
|
||||||
w.or_block(node.or_expr)
|
w.or_block(node.or_expr)
|
||||||
|
if node.left_type == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
sym := w.table.final_sym(node.left_type)
|
sym := w.table.final_sym(node.left_type)
|
||||||
if sym.kind == .map {
|
if sym.kind == .map {
|
||||||
w.table.used_maps++
|
w.table.used_maps++
|
||||||
|
@ -293,6 +299,9 @@ fn (mut w Walker) expr(node ast.Expr) {
|
||||||
w.fn_decl(mut &ast.FnDecl(opmethod.source_fn))
|
w.fn_decl(mut &ast.FnDecl(opmethod.source_fn))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if node.right_type == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
right_sym := w.table.sym(node.right_type)
|
right_sym := w.table.sym(node.right_type)
|
||||||
if node.op in [.not_in, .key_in] && right_sym.kind == .map {
|
if node.op in [.not_in, .key_in] && right_sym.kind == .map {
|
||||||
w.table.used_maps++
|
w.table.used_maps++
|
||||||
|
@ -375,6 +384,9 @@ fn (mut w Walker) expr(node ast.Expr) {
|
||||||
w.expr(node.where_expr)
|
w.expr(node.where_expr)
|
||||||
}
|
}
|
||||||
ast.StructInit {
|
ast.StructInit {
|
||||||
|
if node.typ == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
sym := w.table.sym(node.typ)
|
sym := w.table.sym(node.typ)
|
||||||
if sym.kind == .struct_ {
|
if sym.kind == .struct_ {
|
||||||
info := sym.info as ast.Struct
|
info := sym.info as ast.Struct
|
||||||
|
@ -382,12 +394,14 @@ fn (mut w Walker) expr(node ast.Expr) {
|
||||||
if ifield.has_default_expr {
|
if ifield.has_default_expr {
|
||||||
w.expr(ifield.default_expr)
|
w.expr(ifield.default_expr)
|
||||||
}
|
}
|
||||||
|
if ifield.typ != 0 {
|
||||||
fsym := w.table.sym(ifield.typ)
|
fsym := w.table.sym(ifield.typ)
|
||||||
if fsym.kind == .map {
|
if fsym.kind == .map {
|
||||||
w.table.used_maps++
|
w.table.used_maps++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if node.has_update_expr {
|
if node.has_update_expr {
|
||||||
w.expr(node.update_expr)
|
w.expr(node.update_expr)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue