Skip to content

Commit 719d184

Browse files
committed
refactor: Store ExternLoaders in salsa
1 parent 77652ab commit 719d184

File tree

6 files changed

+170
-191
lines changed

6 files changed

+170
-191
lines changed

src/compiler_pipeline.rs

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ use std::{
1515

1616
#[cfg(feature = "serde")]
1717
use either::Either;
18-
use futures::prelude::*;
1918
use salsa::ParallelDatabase;
2019

2120
use 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

5150
macro_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

Comments
 (0)