mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
match: shadow variable instead of it
This commit is contained in:
@@ -124,6 +124,26 @@ fn (var p Parser) match_expr() ast.MatchExpr {
|
|||||||
p.parse_type()
|
p.parse_type()
|
||||||
}
|
}
|
||||||
is_sum_type = true
|
is_sum_type = true
|
||||||
|
// Make sure a variable used for the sum type match
|
||||||
|
var var_name := ''
|
||||||
|
match cond {
|
||||||
|
ast.Ident {
|
||||||
|
var_name = it.name
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// p.error('only variables can be used in sum types matches')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if var_name != '' {
|
||||||
|
// Register a shadow variable with the actual type
|
||||||
|
// (this replaces the old `it`)
|
||||||
|
// TODO doesn't work right now
|
||||||
|
p.scope.register(var_name, ast.Var{
|
||||||
|
name: var_name
|
||||||
|
typ: table.type_to_ptr(typ)
|
||||||
|
})
|
||||||
|
// println(var_name)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Expression match
|
// Expression match
|
||||||
for {
|
for {
|
||||||
@@ -172,4 +192,3 @@ fn (var p Parser) match_expr() ast.MatchExpr {
|
|||||||
is_mut: is_mut
|
is_mut: is_mut
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ fn handle(e Expr) string {
|
|||||||
match e {
|
match e {
|
||||||
IntegerLiteral {
|
IntegerLiteral {
|
||||||
assert it.val == '12'
|
assert it.val == '12'
|
||||||
// assert e.val == '12'
|
// assert e.val == '12' // TODO
|
||||||
return 'int'
|
return 'int'
|
||||||
}
|
}
|
||||||
IfExpr {
|
IfExpr {
|
||||||
@@ -31,5 +31,5 @@ fn test_expr() {
|
|||||||
val: '12'
|
val: '12'
|
||||||
}
|
}
|
||||||
assert handle(expr) == 'int'
|
assert handle(expr) == 'int'
|
||||||
// assert expr is IntegerLiteral
|
// assert expr is IntegerLiteral // TODO
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user