From: Mark Thom Date: Tue, 14 Apr 2020 07:03:49 +0000 (-0600) Subject: copy operator exports to impromptu modules (#307) X-Git-Tag: v0.8.123~164 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=082c6a9e64310e8aaa830d43e0bccd0a275fa395;p=scryer-prolog.git copy operator exports to impromptu modules (#307) --- 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, - ); + ); } } }