diff --git a/cli/src/repl/gen.rs b/cli/src/repl/gen.rs index f36672a455..775345182f 100644 --- a/cli/src/repl/gen.rs +++ b/cli/src/repl/gen.rs @@ -2,6 +2,7 @@ use crate::repl::eval; use bumpalo::Bump; use inkwell::context::Context; use roc_build::link::module_to_dylib; +use roc_build::program::FunctionIterator; use roc_collections::all::{MutMap, MutSet}; use roc_fmt::annotation::Formattable; use roc_fmt::annotation::{Newlines, Parens}; @@ -111,6 +112,15 @@ pub fn gen_and_eval(src: &[u8], target: Triple, opt_level: OptLevel) -> Result { +pub struct FunctionIterator<'ctx> { next: Option>, } impl<'ctx> FunctionIterator<'ctx> { - fn from_module(module: &inkwell::module::Module<'ctx>) -> Self { + pub fn from_module(module: &inkwell::module::Module<'ctx>) -> Self { Self { next: module.get_first_function(), } diff --git a/compiler/gen/tests/helpers/eval.rs b/compiler/gen/tests/helpers/eval.rs index 95959224dd..bbe6888c78 100644 --- a/compiler/gen/tests/helpers/eval.rs +++ b/compiler/gen/tests/helpers/eval.rs @@ -1,5 +1,6 @@ use libloading::Library; use roc_build::link::module_to_dylib; +use roc_build::program::FunctionIterator; use roc_collections::all::{MutMap, MutSet}; fn promote_expr_to_module(src: &str) -> String { @@ -154,6 +155,15 @@ pub fn helper<'a>( let (dibuilder, compile_unit) = roc_gen::llvm::build::Env::new_debug_info(module); + // mark our zig-defined builtins as internal + use inkwell::module::Linkage; + for function in FunctionIterator::from_module(module) { + let name = function.get_name().to_str().unwrap(); + if name.starts_with("roc_builtins") { + function.set_linkage(Linkage::Internal); + } + } + // Compile and add all the Procs before adding main let env = roc_gen::llvm::build::Env { arena: &arena,