compiler: emit Option_ typedef for fn args and struct fields
parent
5536eb581c
commit
26fb7e0821
|
@ -368,10 +368,15 @@ fn (p mut Parser) fn_decl() {
|
||||||
p.check(.lcbr)
|
p.check(.lcbr)
|
||||||
//p.fgen_nl()
|
//p.fgen_nl()
|
||||||
}
|
}
|
||||||
// Register ?option type
|
// Register ?option type for return value and args
|
||||||
if typ.starts_with('Option_') {
|
if typ.starts_with('Option_') {
|
||||||
p.cgen.typedefs << 'typedef Option $typ;'
|
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
|
// Register function
|
||||||
f.typ = typ
|
f.typ = typ
|
||||||
str_args := f.str_args(p.table)
|
str_args := f.str_args(p.table)
|
||||||
|
|
|
@ -196,6 +196,10 @@ fn (p mut Parser) struct_decl() {
|
||||||
if field_type == name {
|
if field_type == name {
|
||||||
p.error_with_token_index( 'cannot embed struct `$name` in itself (field `$field_name`)', field_name_token_idx)
|
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)
|
p.check_and_register_used_imported_type(field_type)
|
||||||
is_atomic := p.tok == .key_atomic
|
is_atomic := p.tok == .key_atomic
|
||||||
if is_atomic {
|
if is_atomic {
|
||||||
|
|
Loading…
Reference in New Issue