From 6d11fdcd18546cdd9bafd1f81b61ecc328654dd6 Mon Sep 17 00:00:00 2001 From: J Henry Waugh Date: Tue, 11 Aug 2020 19:05:52 -0500 Subject: [PATCH] codegen: replace downcast_clone with more efficient mem::take --- codegen/src/function.rs | 19 +++++++++---------- codegen/src/module.rs | 8 ++++---- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/codegen/src/function.rs b/codegen/src/function.rs index 7b28eeeb..ae50e45a 100644 --- a/codegen/src/function.rs +++ b/codegen/src/function.rs @@ -356,16 +356,15 @@ impl ExportedFn { &syn::Type::Path(ref p) if p.path == str_type_path => { is_str_ref = true; quote_spanned!(arg_type.span()=> - args[#i] - .downcast_clone::() - .unwrap()) + std::mem::take(args[#i]) + .clone().cast::()) } _ => panic!("internal error: why wasn't this found earlier!?"), }, _ => { is_str_ref = false; quote_spanned!(arg_type.span()=> - args[#i].downcast_clone::<#arg_type>().unwrap()) + std::mem::take(args[#i]).clone().cast::<#arg_type>()) } }; @@ -768,7 +767,7 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 1usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); Ok(Dynamic::from(do_something(arg0))) } @@ -808,7 +807,7 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 1usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); Ok(Dynamic::from(do_something(arg0))) } @@ -845,8 +844,8 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 2usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); - let arg1 = args[1usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); + let arg1 = std::mem::take(args[1usize]).clone().cast::(); Ok(Dynamic::from(add_together(arg0, arg1))) } @@ -891,7 +890,7 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 2usize), Position::none()))); } - let arg1 = args[1usize].downcast_clone::().unwrap(); + let arg1 = std::mem::take(args[1usize]).clone().cast::(); let arg0: &mut _ = &mut args[0usize].write_lock::().unwrap(); Ok(Dynamic::from(increment(arg0, arg1))) } @@ -938,7 +937,7 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 1usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); Ok(Dynamic::from(special_print(&arg0))) } diff --git a/codegen/src/module.rs b/codegen/src/module.rs index 9db6a3cd..256ca062 100644 --- a/codegen/src/module.rs +++ b/codegen/src/module.rs @@ -371,7 +371,7 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 1usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); Ok(Dynamic::from(add_one_to(arg0))) } @@ -433,8 +433,8 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 2usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); - let arg1 = args[1usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); + let arg1 = std::mem::take(args[1usize]).clone().cast::(); Ok(Dynamic::from(add_together(arg0, arg1))) } @@ -605,7 +605,7 @@ mod generate_tests { format!("wrong arg count: {} != {}", args.len(), 1usize), Position::none()))); } - let arg0 = args[0usize].downcast_clone::().unwrap(); + let arg0 = std::mem::take(args[0usize]).clone().cast::(); Ok(Dynamic::from(print_out_to(&arg0))) }