1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

compiler: emit Option_ typedef for fn args and struct fields

This commit is contained in:
ʇʞʌp 2019-11-19 13:58:31 -08:00 committed by Alexander Medvednikov
parent 5536eb581c
commit 26fb7e0821
2 changed files with 11 additions and 2 deletions

View File

@ -368,10 +368,15 @@ fn (p mut Parser) fn_decl() {
p.check(.lcbr)
//p.fgen_nl()
}
// Register ?option type
if typ.starts_with('Option_') {
// Register ?option type for return value and args
if typ.starts_with('Option_') {
p.cgen.typedefs << 'typedef Option $typ;'
}
for arg in f.args {
if arg.typ.starts_with('Option_') {
p.cgen.typedefs << 'typedef Option $arg.typ;'
}
}
// Register function
f.typ = typ
str_args := f.str_args(p.table)

View File

@ -196,6 +196,10 @@ fn (p mut Parser) struct_decl() {
if field_type == name {
p.error_with_token_index( 'cannot embed struct `$name` in itself (field `$field_name`)', field_name_token_idx)
}
// Register ?option type
if field_type.starts_with('Option_') {
p.gen_typedef('typedef Option $field_type;')
}
p.check_and_register_used_imported_type(field_type)
is_atomic := p.tok == .key_atomic
if is_atomic {