From 082c6a9e64310e8aaa830d43e0bccd0a275fa395 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Tue, 14 Apr 2020 01:03:49 -0600 Subject: [PATCH] copy operator exports to impromptu modules (#307) --- src/prolog/machine/compile.rs | 11 +++++++++++ src/prolog/machine/modules.rs | 14 +++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/prolog/machine/compile.rs b/src/prolog/machine/compile.rs index aeaff98b..3e059ffa 100644 --- a/src/prolog/machine/compile.rs +++ b/src/prolog/machine/compile.rs @@ -1279,6 +1279,17 @@ fn compile_work_impl( .filter(|(name, _)| name.owning_module().as_str() != "builtins") .map(ModuleExport::PredicateKey) .collect(); + + module.module_decl.exports.extend( + indices.op_dir.iter() + .map(|((name, _), OpDirValue (shared_op_desc, _))| + ModuleExport::OpDecl(OpDecl( + shared_op_desc.prec(), + shared_op_desc.assoc(), + name.clone(), + )) + ) + ); } let mut clause_code_generator = diff --git a/src/prolog/machine/modules.rs b/src/prolog/machine/modules.rs index 00a258be..4c54d39b 100644 --- a/src/prolog/machine/modules.rs +++ b/src/prolog/machine/modules.rs @@ -166,7 +166,7 @@ pub trait SubModuleUser { } } } - } + } _ => {} }; }, @@ -202,7 +202,7 @@ pub trait SubModuleUser { _: &Module, _: &Vec, ) -> Result<(), SessionError>; - + fn use_module( &mut self, _: &mut CodeRepo, @@ -232,7 +232,7 @@ where if !user.import_decl(name.clone(), arity, submodule) { let submodule_name = submodule.module_decl.name.clone(); - + return Err(SessionError::ModuleDoesNotContainExport( submodule_name, (name, arity) @@ -250,12 +250,12 @@ where let op_dir = user.op_dir(); let prec = op_decl.0; - + op_decl.insert_into_op_dir( submodule.module_decl.name.clone(), op_dir, prec, - ); + ); } } } @@ -282,12 +282,12 @@ pub fn use_module( ModuleExport::OpDecl(op_decl) => { let op_dir = user.op_dir(); let prec = op_decl.0; - + op_decl.insert_into_op_dir( submodule.module_decl.name.clone(), op_dir, prec, - ); + ); } } } -- 2.54.0