match: shadow variable instead of `it`

pull/4461/head
Alexander Medvednikov 2020-04-17 19:24:07 +02:00
parent c27a10b956
commit c4b7d7cab3
2 changed files with 22 additions and 3 deletions

View File

@ -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
} }
} }

View File

@ -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
} }