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.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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue