summaryrefslogtreecommitdiff
path: root/src/eval/module.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval/module.rs')
-rw-r--r--src/eval/module.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/eval/module.rs b/src/eval/module.rs
new file mode 100644
index 00000000..478c76b7
--- /dev/null
+++ b/src/eval/module.rs
@@ -0,0 +1,20 @@
+use super::{Scope, Template};
+use crate::source::{SourceId, SourceStore};
+
+/// An evaluated module, ready for importing or layouting.
+#[derive(Debug, Clone)]
+pub struct Module {
+ /// The top-level definitions that were bound in this module.
+ pub scope: Scope,
+ /// The module's layoutable contents.
+ pub template: Template,
+ /// The source file revisions this module depends on.
+ pub deps: Vec<(SourceId, usize)>,
+}
+
+impl Module {
+ /// Whether the module is still valid for the given sources.
+ pub fn valid(&self, sources: &SourceStore) -> bool {
+ self.deps.iter().all(|&(id, rev)| rev == sources.get(id).rev())
+ }
+}