@@ -15,12 +15,11 @@ use std::{
1515
1616#[ cfg( feature = "serde" ) ]
1717use either:: Either ;
18- use futures:: prelude:: * ;
1918use salsa:: ParallelDatabase ;
2019
2120use crate :: {
2221 base:: {
23- ast:: { self , RootExpr , OwnedExpr , SpannedExpr , Typed } ,
22+ ast:: { self , OwnedExpr , RootExpr , SpannedExpr , Typed } ,
2423 error:: { Errors , InFile } ,
2524 fnv:: FnvMap ,
2625 metadata:: Metadata ,
@@ -49,7 +48,7 @@ fn call<T, U>(v: T, f: impl FnOnce(T) -> U) -> U {
4948}
5049
5150macro_rules! join_result {
52- ( $result: expr, $f : expr, $join: expr $( , ) ?) => { {
51+ ( $result: expr, |$f_arg : pat| $f_body : expr, $join: expr $( , ) ?) => { {
5352 let mut first_error = None ;
5453 let mut x = match $result {
5554 Ok ( x) => x,
@@ -59,8 +58,9 @@ macro_rules! join_result {
5958 }
6059 Err ( ( None , err) ) => return Err ( ( None , err) ) ,
6160 } ;
62- let result = call( & mut x, $f)
63- . await
61+
62+ let $f_arg = & mut x;
63+ let result = $f_body
6464 . map( |_| ( ) )
6565 . map_err( |( value, err) | ( value. map( |_| ( ) ) , err) ) ;
6666 if let Err ( ( value, err) ) = result {
@@ -159,12 +159,10 @@ impl<'s> MacroExpandable for &'s str {
159159 parse_expr( compiler, thread. global_env( ) . type_cache( ) , file, self )
160160 . map_err( |( x, err) | ( x, err. into( ) ) ) ,
161161 |expr| {
162- async move {
163- expr. expand_macro( compiler, thread, file, expr_str)
164- . map_ok( |_| ( ) )
165- . map_err( |( opt, err) | ( opt. map( |_| ( ) ) , err) )
166- . await
167- }
162+ expr. expand_macro( compiler, thread, file, expr_str)
163+ . await
164+ . map( |_| ( ) )
165+ . map_err( |( opt, err) | ( opt. map( |_| ( ) ) , err) )
168166 } ,
169167 |expr| MacroValue { expr } ,
170168 )
@@ -290,7 +288,8 @@ where
290288 expr: expr. borrow_mut( ) ,
291289 }
292290 . rename( compiler, thread, file, expr_str)
293- . map_ok( |_| ( ) )
291+ . await
292+ . map( |_| ( ) )
294293 . map_err( |( opt, err) | ( opt. map( |_| ( ) ) , err) )
295294 } ,
296295 |MacroValue { expr } | Renamed { expr } ,
@@ -999,23 +998,19 @@ where
999998 let closure = vm. global_env ( ) . new_global_thunk ( & vm, module) ?;
1000999
10011000 let vm1 = vm. clone ( ) ;
1002- vm1. call_thunk_top ( & closure)
1003- . map_ok ( move |value| ExecuteValue {
1004- id : module_id,
1005- expr,
1006- typ,
1007- value,
1008- metadata,
1009- } )
1010- . map_err ( Error :: from)
1011- . and_then ( move |v| async move {
1012- if run_io {
1013- crate :: compiler_pipeline:: run_io ( vm, v) . await
1014- } else {
1015- Ok ( v)
1016- }
1017- } )
1018- . await
1001+ let value = vm1. call_thunk_top ( & closure) . await . map_err ( Error :: from) ?;
1002+ let v = ExecuteValue {
1003+ id : module_id,
1004+ expr,
1005+ typ,
1006+ value,
1007+ metadata,
1008+ } ;
1009+ if run_io {
1010+ crate :: compiler_pipeline:: run_io ( vm, v) . await
1011+ } else {
1012+ Ok ( v)
1013+ }
10191014 }
10201015
10211016 async fn load_script < T > (
@@ -1106,15 +1101,15 @@ where
11061101 let metadata = module. metadata ;
11071102 let closure = vm. global_env ( ) . new_global_thunk ( & vm, module. module ) ?;
11081103 vm. call_thunk_top ( & closure)
1109- . map_ok ( move |value| ExecuteValue {
1104+ . await
1105+ . map ( move |value| ExecuteValue {
11101106 id : module_id,
11111107 expr : ( ) ,
11121108 typ : typ,
11131109 metadata,
11141110 value,
11151111 } )
11161112 . map_err ( Error :: from)
1117- . await
11181113 }
11191114
11201115 async fn load_script < T > (
@@ -1213,7 +1208,8 @@ where
12131208
12141209 let vm1 = vm. clone ( ) ;
12151210 vm1. execute_io_top ( value. get_variant ( ) )
1216- . map_ok ( move |value| {
1211+ . await
1212+ . map ( move |value| {
12171213 // The type of the new value will be `a` instead of `IO a`
12181214 let actual = resolve:: remove_aliases_cow ( & vm. get_env ( ) , & mut NullInterner , & typ) ;
12191215 let actual = match * * actual {
@@ -1229,7 +1225,6 @@ where
12291225 }
12301226 } )
12311227 . map_err ( Error :: from)
1232- . await
12331228 } else {
12341229 Ok ( v)
12351230 }
0 commit comments