parent
							
								
									8628b19a3a
								
							
						
					
					
						commit
						c0f855ace7
					
				| 
						 | 
				
			
			@ -198,7 +198,8 @@ pub fn (t &Table) fn_type_signature(f &Fn) string {
 | 
			
		|||
	}
 | 
			
		||||
	if f.return_type != 0 && f.return_type != void_type {
 | 
			
		||||
		sym := t.get_type_symbol(f.return_type)
 | 
			
		||||
		sig += '__$sym.kind'
 | 
			
		||||
		opt := if f.return_type.has_flag(.optional) { 'option_' } else { '' }
 | 
			
		||||
		sig += '__$opt$sym.kind'
 | 
			
		||||
	}
 | 
			
		||||
	return sig
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +226,11 @@ pub fn (t &Table) fn_type_source_signature(f &Fn) string {
 | 
			
		|||
		sig += ' ?'
 | 
			
		||||
	} else if f.return_type != void_type {
 | 
			
		||||
		return_type_sym := t.get_type_symbol(f.return_type)
 | 
			
		||||
		sig += ' $return_type_sym.name'
 | 
			
		||||
		if f.return_type.has_flag(.optional) {
 | 
			
		||||
			sig += ' ?$return_type_sym.name'
 | 
			
		||||
		} else {
 | 
			
		||||
			sig += ' $return_type_sym.name'
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return sig
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -433,9 +433,15 @@ fn (mut g Gen) fn_decl_str(info ast.FnType) string {
 | 
			
		|||
		fn_str += util.strip_main_name(g.table.get_type_name(g.unwrap_generic(arg.typ)))
 | 
			
		||||
	}
 | 
			
		||||
	fn_str += ')'
 | 
			
		||||
	if info.func.return_type != ast.void_type {
 | 
			
		||||
	if info.func.return_type == ast.ovoid_type {
 | 
			
		||||
		fn_str += ' ?'
 | 
			
		||||
	} else if info.func.return_type != ast.void_type {
 | 
			
		||||
		x := util.strip_main_name(g.table.get_type_name(g.unwrap_generic(info.func.return_type)))
 | 
			
		||||
		fn_str += ' $x'
 | 
			
		||||
		if info.func.return_type.has_flag(.optional) {
 | 
			
		||||
			fn_str += ' ?$x'
 | 
			
		||||
		} else {
 | 
			
		||||
			fn_str += ' $x'
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return fn_str
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
struct Response {
 | 
			
		||||
	ret int
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub struct Route {
 | 
			
		||||
	handler     fn (mut App) Response
 | 
			
		||||
	middlewares []fn (mut app App) ?Response
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct App {
 | 
			
		||||
	routes []Route
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn check_auth(mut app App) ?Response {
 | 
			
		||||
	return none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn test_anon_fn_with_optional() {
 | 
			
		||||
	app := App{
 | 
			
		||||
		routes: [
 | 
			
		||||
			Route{
 | 
			
		||||
				middlewares: [
 | 
			
		||||
					check_auth,
 | 
			
		||||
				]
 | 
			
		||||
			},
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
	println(app)
 | 
			
		||||
	app_str := '$app'
 | 
			
		||||
	assert app_str.contains('handler: fn (mut App) Response')
 | 
			
		||||
	assert app_str.contains('middlewares: [fn (mut App) ?Response]')
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue