From: Mark Thom Date: Tue, 11 Sep 2018 02:51:34 +0000 (-0600) Subject: move compile_listing body to dedicated function X-Git-Tag: v0.8.110~386 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=79da405d3871a3c09aca32df82d68b5d387dad41;p=scryer-prolog.git move compile_listing body to dedicated function --- diff --git a/src/prolog/compile.rs b/src/prolog/compile.rs index c6c3c369..9c6183ff 100644 --- a/src/prolog/compile.rs +++ b/src/prolog/compile.rs @@ -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, submodule: &Module, indices: &mut MachineCodeIndices) @@ -258,31 +289,7 @@ fn compile_listing(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)); diff --git a/src/prolog/toplevel.rs b/src/prolog/toplevel.rs index b07d8559..c731d2e0 100644 --- a/src/prolog/toplevel.rs +++ b/src/prolog/toplevel.rs @@ -658,7 +658,6 @@ pub fn parse_term(term: Term, mut indices: MachineCodeIndices) -> Result { parser: Parser, rel_worker: RelationWorker, - pub source_mod: ClauseName, pub results: Vec<(Predicate, VecDeque)> } @@ -667,7 +666,6 @@ impl TopLevelBatchWorker { { TopLevelBatchWorker { parser: Parser::new(inner, atom_tbl, flags), rel_worker: RelationWorker::new(), - source_mod: clause_name!("user"), results: vec![] } }