fix optional struct field assignment

pull/3142/head
Alexander Medvednikov 2019-12-17 00:36:28 +03:00
parent 54707ff81d
commit 560d1383d1
2 changed files with 15 additions and 3 deletions

View File

@ -1441,7 +1441,7 @@ fn ($v.name mut $v.typ) ${p.cur_fn.name}(...) {
expr := p.cgen.cur_line[pos..]
left := p.cgen.cur_line[..pos]
typ := expr_type.replace('Option_', '')
p.cgen.resetln(left + 'opt_ok($expr, sizeof($typ))')
p.cgen.resetln(left + 'opt_ok(($typ[]){ $expr }, sizeof($typ))')
}
else if expr_type.starts_with('Option_') &&
p.assigned_type == expr_type['Option_'.len..] && p.tok == .key_orelse

View File

@ -73,7 +73,7 @@ fn test_opt_default() {
fn foo_ok() ?int {
return 777
}
}
fn foo_str() ?string {
return 'something'
@ -81,7 +81,7 @@ fn foo_str() ?string {
fn test_q() {
//assert foo_ok()? == true
}
}
struct Person {
mut:
@ -112,3 +112,15 @@ fn test_field_or() {
}
assert mytitle == 'default'
}
struct Thing {
mut:
opt ?int
}
fn test_opt_field() {
mut t := Thing{}
t.opt = 5
val := t.opt or { return }
assert val == 5
}