Skip to content

Commit e9f115b

Browse files
bors[bot]Marwes
andauthored
Merge #835
835: refactor: Store ExternLoaders in salsa r=Marwes a=Marwes One less thing that is untracked by salsa. Co-authored-by: Markus Westerlind <[email protected]>
2 parents 77652ab + c59e8f2 commit e9f115b

File tree

17 files changed

+487
-550
lines changed

17 files changed

+487
-550
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.rs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
1-
extern crate gluon_base;
2-
extern crate itertools;
3-
extern crate walkdir;
1+
use std::{
2+
env,
3+
fs::File,
4+
io::{Read, Write},
5+
path::Path,
6+
};
47

5-
use std::env;
6-
use std::fs::File;
7-
use std::io::{Read, Write};
8-
use std::path::Path;
9-
10-
use itertools::Itertools;
11-
12-
use walkdir::WalkDir;
8+
use {itertools::Itertools, walkdir::WalkDir};
139

1410
use gluon_base::filename_to_module;
1511

1612
#[cfg(feature = "test")]
1713
mod gen_skeptic {
18-
extern crate little_skeptic as skeptic;
19-
extern crate walkdir;
14+
use little_skeptic as skeptic;
2015

21-
use std::env;
22-
use std::fs::{self, File};
23-
use std::io::prelude::*;
24-
use std::path::{Path, PathBuf};
16+
use std::{
17+
env,
18+
fs::{self, File},
19+
io::Read,
20+
path::{Path, PathBuf},
21+
};
2522

2623
/// skeptic templates look for `rust` after the opening code fences so writing
2724
/// ```f#,rust
@@ -64,14 +61,12 @@ return;
6461
File::open(file)
6562
.and_then(|mut raw_file| raw_file.read_to_end(&mut contents))
6663
.unwrap();
67-
File::create(&out_file_name)
68-
.and_then(|mut out_file| out_file.write_all(&contents))
69-
.unwrap();
64+
fs::write(&out_file_name, contents).unwrap();
7065
out_file_name.to_str().expect("UTF-8 string").into()
7166
}
7267

7368
pub fn generate() {
74-
let test_locations: Vec<_> = self::walkdir::WalkDir::new("book/src")
69+
let test_locations: Vec<_> = walkdir::WalkDir::new("book/src")
7570
.into_iter()
7671
.filter_map(|e| {
7772
let e = e.unwrap();

doc/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ impl DocCollector<'_> {
549549
);
550550

551551
let (expr, typ) = thread.typecheck_str(&name, &content, None)?;
552-
let (meta, _) = metadata(&thread.get_database(), &expr.expr());
552+
let (meta, _) = metadata(&thread.get_database().as_env(), &expr.expr());
553553

554554
create_dir_all(out_path.join(module_path.parent().unwrap_or(Path::new(""))))?;
555555

repl/src/repl.rs

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ use crate::vm::{
2020
IO,
2121
},
2222
internal::ValuePrinter,
23-
thread::{ActiveThread, RootedValue, Thread, ThreadInternal},
23+
thread::{ActiveThread, RootedValue, Thread},
2424
{self, Error as VMError, Result as VMResult},
2525
};
2626

2727
use gluon::{
2828
compiler_pipeline::{Executable, ExecuteValue},
2929
import::add_extern_module,
30+
query::CompilerDatabase,
3031
Error as GluonError, Result as GluonResult, RootedThread, ThreadExt,
3132
};
3233

@@ -436,6 +437,9 @@ async fn eval_line_(vm: RootedThread, line: &str) -> gluon::Result<()> {
436437
let ExecuteValue { value, typ, .. } = (&mut eval_expr)
437438
.run_expr(&mut module_compiler, vm.clone(), "line", line, None)
438439
.await?;
440+
441+
drop(db);
442+
439443
if is_let_binding {
440444
let mut expr = eval_expr.expr();
441445
let mut last_bind = None;
@@ -448,7 +452,13 @@ async fn eval_line_(vm: RootedThread, line: &str) -> gluon::Result<()> {
448452
_ => break,
449453
}
450454
}
451-
set_globals(&vm, &last_bind.unwrap().name, &typ, &value.as_ref())?;
455+
set_globals(
456+
&vm,
457+
&mut vm.get_database_mut(),
458+
&last_bind.unwrap().name,
459+
&typ,
460+
&value.as_ref(),
461+
)?;
452462
}
453463
let vm = value.vm();
454464
let env = vm.get_env();
@@ -464,33 +474,34 @@ async fn eval_line_(vm: RootedThread, line: &str) -> gluon::Result<()> {
464474

465475
fn set_globals(
466476
vm: &Thread,
477+
db: &mut CompilerDatabase,
467478
pattern: &SpannedPattern<Symbol>,
468479
typ: &ArcType,
469480
value: &RootedValue<&Thread>,
470481
) -> GluonResult<()> {
471482
match pattern.value {
472483
Pattern::Ident(ref id) => {
473-
vm.set_global(
474-
Symbol::from(format!("@{}", id.name.declared_name())),
484+
db.set_global(
485+
id.name.declared_name(),
475486
typ.clone(),
476487
Default::default(),
477488
value.get_value(),
478-
)?;
489+
);
479490
Ok(())
480491
}
481492
Pattern::Tuple { ref elems, .. } => {
482493
let iter = elems
483494
.iter()
484495
.zip(crate::vm::dynamic::field_iter(&value, typ, vm));
485496
for (elem_pattern, (elem_value, elem_type)) in iter {
486-
set_globals(vm, elem_pattern, &elem_type, &elem_value)?;
497+
set_globals(vm, db, elem_pattern, &elem_type, &elem_value)?;
487498
}
488499
Ok(())
489500
}
490501
Pattern::Record { ref fields, .. } => {
491502
let resolved_type = {
492503
let mut type_cache = vm.global_env().type_cache();
493-
let env = vm.get_env();
504+
let env = db.as_env();
494505
resolve::remove_aliases_cow(&env, &mut type_cache, typ)
495506
};
496507

@@ -517,26 +528,26 @@ fn set_globals(
517528
.clone();
518529
match pattern_value {
519530
Some(ref sub_pattern) => {
520-
set_globals(vm, sub_pattern, &field_type, &field_value)?
531+
set_globals(vm, db, sub_pattern, &field_type, &field_value)?
521532
}
522-
None => vm.set_global(
523-
Symbol::from(format!("@{}", name.value.declared_name())),
533+
None => db.set_global(
534+
name.value.declared_name(),
524535
field_type.to_owned(),
525536
Default::default(),
526537
field_value.get_value(),
527-
)?,
538+
),
528539
}
529540
}
530541
Ok(())
531542
}
532543
Pattern::As(ref id, ref pattern) => {
533-
vm.set_global(
534-
Symbol::from(format!("@{}", id.value.declared_name())),
544+
db.set_global(
545+
id.value.declared_name(),
535546
typ.clone(),
536547
Default::default(),
537548
value.get_value(),
538-
)?;
539-
set_globals(vm, pattern, typ, value)
549+
);
550+
set_globals(vm, db, pattern, typ, value)
540551
}
541552
Pattern::Constructor(..) | Pattern::Literal(_) | Pattern::Error => {
542553
Err(VMError::Message("The repl cannot bind variables from this pattern".into()).into())

0 commit comments

Comments
 (0)