mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
[MIR] Add test case for translation of closure calls.
This commit is contained in:
parent
7d357190ff
commit
e281509dce
@ -94,10 +94,9 @@ fn test8() -> isize {
|
||||
}
|
||||
|
||||
#[rustc_mir]
|
||||
fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
||||
// This call goes through the Fn implementation for &Fn provided in
|
||||
// core::ops::impls. It expands to a static Fn::call() that calls the
|
||||
// Fn::call() implemenation of the object shim underneath.
|
||||
fn test_closure<F>(f: &F, x: i32, y: i32) -> i32
|
||||
where F: Fn(i32, i32) -> i32
|
||||
{
|
||||
f(x, y)
|
||||
}
|
||||
|
||||
@ -106,6 +105,14 @@ fn test_fn_object(f: &Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
||||
f(x, y)
|
||||
}
|
||||
|
||||
#[rustc_mir]
|
||||
fn test_fn_impl(f: &&Fn(i32, i32) -> i32, x: i32, y: i32) -> i32 {
|
||||
// This call goes through the Fn implementation for &Fn provided in
|
||||
// core::ops::impls. It expands to a static Fn::call() that calls the
|
||||
// Fn::call() implemenation of the object shim underneath.
|
||||
f(x, y)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(test1(1, (2, 3), &[4, 5, 6]), (1, (2, 3), &[4, 5, 6][..]));
|
||||
assert_eq!(test2(98), 98);
|
||||
@ -117,7 +124,9 @@ fn main() {
|
||||
assert_eq!(test7(), 1);
|
||||
assert_eq!(test8(), 2);
|
||||
|
||||
let function_object = (&|x: i32, y: i32| { x + y }) as &Fn(i32, i32) -> i32;
|
||||
assert_eq!(test_fn_object(function_object, 100, 1), 101);
|
||||
assert_eq!(test_fn_impl(&function_object, 100, 2), 102);
|
||||
let closure = |x: i32, y: i32| { x + y };
|
||||
assert_eq!(test_closure(&closure, 100, 1), 101);
|
||||
let function_object = &closure as &Fn(i32, i32) -> i32;
|
||||
assert_eq!(test_fn_object(function_object, 100, 2), 102);
|
||||
assert_eq!(test_fn_impl(&function_object, 100, 3), 103);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user