]> Repositorios git - scryer-prolog.git/commitdiff
move compile_listing body to dedicated function
authorMark Thom <[email protected]>
Tue, 11 Sep 2018 02:51:34 +0000 (20:51 -0600)
committerMark Thom <[email protected]>
Tue, 11 Sep 2018 02:51:34 +0000 (20:51 -0600)
src/prolog/compile.rs
src/prolog/toplevel.rs

index c6c3c3696b191c150701c6d6769b73d97dc7db2f..9c6183ff4d43717b3bbe4c4e0934c5b08411c0d7 100644 (file)
@@ -230,6 +230,37 @@ impl<'a> ListingCompiler<'a> {
     fn add_non_counted_bt_flag(&mut self, name: ClauseName, arity: usize) {
         self.non_counted_bt_preds.insert((name, arity));
     }
+
+    fn process_decl(&mut self, decl: Declaration, indices: &mut MachineCodeIndices)
+                    -> Result<(), SessionError>
+    {
+        match decl {
+            Declaration::NonCountedBacktracking(name, arity) =>
+                Ok(self.add_non_counted_bt_flag(name, arity)),
+            Declaration::Op(op_decl) =>
+                op_decl.submit(self.get_module_name(), &mut indices.op_dir),
+            Declaration::UseModule(name) =>
+                if let Some(ref submodule) = self.wam.get_module(name.clone()) {
+                    Ok(use_module(&mut self.module, submodule, indices))
+                } else {
+                    Err(SessionError::ModuleNotFound)
+                },
+            Declaration::UseQualifiedModule(name, exports) =>
+                if let Some(ref submodule) = self.wam.get_module(name.clone()) {
+                    Ok(use_qualified_module(&mut self.module, submodule, &exports, indices))
+                } else {
+                    Err(SessionError::ModuleNotFound)
+                },
+            Declaration::Module(module_decl) =>
+                if self.module.is_none() {
+                    // worker.source_mod = module_decl.name.clone();
+                    self.module = Some(Module::new(module_decl));
+                    Ok(())
+                } else {
+                    Err(SessionError::from(ParserError::InvalidModuleDecl))
+                }
+        }
+    }
 }
 
 fn use_module(module: &mut Option<Module>, submodule: &Module, indices: &mut MachineCodeIndices)
@@ -258,31 +289,7 @@ fn compile_listing<R: Read>(wam: &mut Machine, src: R, mut indices: MachineCodeI
     let mut compiler = ListingCompiler::new(wam);
 
     while let Some(decl) = try_eval_session!(worker.consume(&mut indices)) {
-        match decl {
-            Declaration::NonCountedBacktracking(name, arity) =>
-                compiler.add_non_counted_bt_flag(name, arity),
-            Declaration::Op(op_decl) =>
-                try_eval_session!(op_decl.submit(compiler.get_module_name(), &mut indices.op_dir)),
-            Declaration::UseModule(name) =>
-                if let Some(ref submodule) = compiler.wam.get_module(name.clone()) {
-                    use_module(&mut compiler.module, submodule, &mut indices);
-                } else {
-                    return EvalSession::from(SessionError::ModuleNotFound);
-                },
-            Declaration::UseQualifiedModule(name, exports) =>
-                if let Some(ref submodule) = compiler.wam.get_module(name.clone()) {
-                    use_qualified_module(&mut compiler.module, submodule, &exports, &mut indices);
-                } else {
-                    return EvalSession::from(SessionError::ModuleNotFound);
-                },
-            Declaration::Module(module_decl) =>
-                if compiler.module.is_none() {
-                    worker.source_mod = module_decl.name.clone();
-                    compiler.module = Some(Module::new(module_decl));
-                } else {
-                    return EvalSession::from(ParserError::InvalidModuleDecl);
-                }
-        }
+        try_eval_session!(compiler.process_decl(decl, &mut indices));
     }
 
     let code = try_eval_session!(compiler.generate_code(worker.results, &mut indices.code_dir));
index b07d85597ab46a0c46318c7154bee76d1d3864d7..c731d2e0d3f3caea0d2d8672104b33cee5c6f4db 100644 (file)
@@ -658,7 +658,6 @@ pub fn parse_term(term: Term, mut indices: MachineCodeIndices) -> Result<TopLeve
 pub struct TopLevelBatchWorker<R: Read> {
     parser: Parser<R>,
     rel_worker: RelationWorker,
-    pub source_mod: ClauseName,
     pub results: Vec<(Predicate, VecDeque<TopLevel>)>
 }
 
@@ -667,7 +666,6 @@ impl<R: Read> TopLevelBatchWorker<R> {
     {
         TopLevelBatchWorker { parser: Parser::new(inner, atom_tbl, flags),
                               rel_worker: RelationWorker::new(),
-                              source_mod: clause_name!("user"),
                               results: vec![] }
     }