]> Repositorios git - scryer-prolog.git/commitdiff
copy operator exports to impromptu modules (#307)
authorMark Thom <[email protected]>
Tue, 14 Apr 2020 07:03:49 +0000 (01:03 -0600)
committerMark Thom <[email protected]>
Tue, 14 Apr 2020 07:03:49 +0000 (01:03 -0600)
src/prolog/machine/compile.rs
src/prolog/machine/modules.rs

index aeaff98b7cb176b8fa696856f07fa19e987e6745..3e059ffa066d39932f3c06d26b246cc58b56d794 100644 (file)
@@ -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 =
index 00a258bee0a9cf3b713ff0a50c60773c0cbdd3c9..4c54d39b4b7bf09e36f763542cf0376c5d3decb4 100644 (file)
@@ -166,7 +166,7 @@ pub trait SubModuleUser {
                                     }
                                 }
                             }
-                        }                    
+                        }
                         _ => {}
                     };
                 },
@@ -202,7 +202,7 @@ pub trait SubModuleUser {
         _: &Module,
         _: &Vec<ModuleExport>,
     ) -> 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<User: SubModuleUser>(
             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,
-                );                
+                );
             }
         }
     }