mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: use 'if foo in [TypeA, TypeB]' in checker.v (#11494)
This commit is contained in:
parent
7d1776b84d
commit
09ded16e3d
@ -139,7 +139,7 @@ pub fn (mut c Checker) check(ast_file &ast.File) {
|
||||
}
|
||||
}
|
||||
for mut stmt in ast_file.stmts {
|
||||
if stmt is ast.ConstDecl || stmt is ast.ExprStmt {
|
||||
if stmt in [ast.ConstDecl, ast.ExprStmt] {
|
||||
c.expr_level = 0
|
||||
c.stmt(stmt)
|
||||
}
|
||||
@ -1971,8 +1971,7 @@ pub fn (mut c Checker) call_expr(mut node ast.CallExpr) ast.Type {
|
||||
if arg.typ != ast.string_type {
|
||||
continue
|
||||
}
|
||||
if arg.expr is ast.Ident || arg.expr is ast.StringLiteral
|
||||
|| arg.expr is ast.SelectorExpr {
|
||||
if arg.expr in [ast.Ident, ast.StringLiteral, ast.SelectorExpr] {
|
||||
// Simple expressions like variables, string literals, selector expressions
|
||||
// (`x.field`) can't result in allocations and don't need to be assigned to
|
||||
// temporary vars.
|
||||
@ -1982,8 +1981,8 @@ pub fn (mut c Checker) call_expr(mut node ast.CallExpr) ast.Type {
|
||||
node.args[i].is_tmp_autofree = true
|
||||
}
|
||||
// TODO copy pasta from above
|
||||
if node.receiver_type == ast.string_type && !(node.left is ast.Ident
|
||||
|| node.left is ast.StringLiteral || node.left is ast.SelectorExpr) {
|
||||
if node.receiver_type == ast.string_type
|
||||
&& node.left !in [ast.Ident, ast.StringLiteral, ast.SelectorExpr] {
|
||||
node.free_receiver = true
|
||||
}
|
||||
}
|
||||
@ -3882,8 +3881,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
|
||||
mut right_len := node.right.len
|
||||
mut right_type0 := ast.void_type
|
||||
for i, right in node.right {
|
||||
if right is ast.CallExpr || right is ast.IfExpr || right is ast.LockExpr
|
||||
|| right is ast.MatchExpr {
|
||||
if right in [ast.CallExpr, ast.IfExpr, ast.LockExpr, ast.MatchExpr] {
|
||||
right_type := c.expr(right)
|
||||
if i == 0 {
|
||||
right_type0 = right_type
|
||||
@ -3940,7 +3938,7 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
|
||||
is_blank_ident := left.is_blank_ident()
|
||||
mut left_type := ast.void_type
|
||||
if !is_decl && !is_blank_ident {
|
||||
if left is ast.Ident || left is ast.SelectorExpr {
|
||||
if left in [ast.Ident, ast.SelectorExpr] {
|
||||
c.prevent_sum_type_unwrapping_once = true
|
||||
}
|
||||
left_type = c.expr(left)
|
||||
@ -4942,8 +4940,7 @@ fn (mut c Checker) for_stmt(mut node ast.ForStmt) {
|
||||
if node.cond is ast.InfixExpr {
|
||||
infix := node.cond
|
||||
if infix.op == .key_is {
|
||||
if (infix.left is ast.Ident || infix.left is ast.SelectorExpr)
|
||||
&& infix.right is ast.TypeNode {
|
||||
if infix.left in [ast.Ident, ast.SelectorExpr] && infix.right is ast.TypeNode {
|
||||
is_variable := if mut infix.left is ast.Ident {
|
||||
infix.left.kind == .variable
|
||||
} else {
|
||||
@ -6698,8 +6695,7 @@ fn (mut c Checker) smartcast_if_conds(node ast.Expr, mut scope ast.Scope) {
|
||||
expr_str := c.table.type_to_str(expr_type)
|
||||
c.error('cannot use type `$expect_str` as type `$expr_str`', node.pos)
|
||||
}
|
||||
if (node.left is ast.Ident || node.left is ast.SelectorExpr)
|
||||
&& node.right is ast.TypeNode {
|
||||
if node.left in [ast.Ident, ast.SelectorExpr] && node.right is ast.TypeNode {
|
||||
is_variable := if mut node.left is ast.Ident {
|
||||
node.left.kind == .variable
|
||||
} else {
|
||||
@ -6984,7 +6980,7 @@ fn (mut c Checker) comp_if_branch(cond ast.Expr, pos token.Position) bool {
|
||||
// c.error('`$sym.name` is not an interface', cond.right.position())
|
||||
}
|
||||
return false
|
||||
} else if cond.left is ast.SelectorExpr || cond.left is ast.TypeNode {
|
||||
} else if cond.left in [ast.SelectorExpr, ast.TypeNode] {
|
||||
// `$if method.@type is string`
|
||||
c.expr(cond.left)
|
||||
return false
|
||||
@ -7148,7 +7144,7 @@ fn (c &Checker) has_return(stmts []ast.Stmt) ?bool {
|
||||
mut has_complexity := false
|
||||
for s in stmts {
|
||||
if s is ast.ExprStmt {
|
||||
if s.expr is ast.IfExpr || s.expr is ast.MatchExpr {
|
||||
if s.expr in [ast.IfExpr, ast.MatchExpr] {
|
||||
has_complexity = true
|
||||
break
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user