stop passing stdlib (use lazy_static)

This commit is contained in:
Folkert 2022-03-22 19:53:02 +01:00
parent f25afe4629
commit d8fa2b8d92
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
12 changed files with 14 additions and 89 deletions

View file

@ -11,7 +11,6 @@ pub fn load_module(src_file: &Path) -> LoadedModule {
let loaded = roc_load::file::load_and_typecheck( let loaded = roc_load::file::load_and_typecheck(
&arena, &arena,
src_file.to_path_buf(), src_file.to_path_buf(),
arena.alloc(roc_builtins::std::standard_stdlib()),
src_file.parent().unwrap_or_else(|| { src_file.parent().unwrap_or_else(|| {
panic!( panic!(
"src_file {:?} did not have a parent directory but I need to have one.", "src_file {:?} did not have a parent directory but I need to have one.",

View file

@ -62,13 +62,9 @@ pub fn build_file<'a>(
// Step 1: compile the app and generate the .o file // Step 1: compile the app and generate the .o file
let subs_by_module = Default::default(); let subs_by_module = Default::default();
// Release builds use uniqueness optimizations
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let loaded = roc_load::file::load_and_monomorphize( let loaded = roc_load::file::load_and_monomorphize(
arena, arena,
roc_file_path.clone(), roc_file_path.clone(),
stdlib,
src_dir.as_path(), src_dir.as_path(),
subs_by_module, subs_by_module,
target_info, target_info,
@ -367,13 +363,9 @@ pub fn check_file(
// Step 1: compile the app and generate the .o file // Step 1: compile the app and generate the .o file
let subs_by_module = Default::default(); let subs_by_module = Default::default();
// Release builds use uniqueness optimizations
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let mut loaded = roc_load::file::load_and_typecheck( let mut loaded = roc_load::file::load_and_typecheck(
arena, arena,
roc_file_path, roc_file_path,
stdlib,
src_dir.as_path(), src_dir.as_path(),
subs_by_module, subs_by_module,
target_info, target_info,

View file

@ -247,11 +247,7 @@ pub fn build_app<'a>() -> App<'a> {
} }
pub fn docs(files: Vec<PathBuf>) { pub fn docs(files: Vec<PathBuf>) {
roc_docs::generate_docs_html( roc_docs::generate_docs_html(files, Path::new("./generated-docs"))
files,
roc_builtins::std::standard_stdlib(),
Path::new("./generated-docs"),
)
} }
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq)]

View file

@ -4,7 +4,7 @@ use crossbeam::channel::{bounded, Sender};
use crossbeam::deque::{Injector, Stealer, Worker}; use crossbeam::deque::{Injector, Stealer, Worker};
use crossbeam::thread; use crossbeam::thread;
use parking_lot::Mutex; use parking_lot::Mutex;
use roc_builtins::std::{borrow_stdlib, StdLib}; use roc_builtins::std::borrow_stdlib;
use roc_can::constraint::{Constraint as ConstraintSoa, Constraints}; use roc_can::constraint::{Constraint as ConstraintSoa, Constraints};
use roc_can::def::Declaration; use roc_can::def::Declaration;
use roc_can::module::{canonicalize_module_defs, Module}; use roc_can::module::{canonicalize_module_defs, Module};
@ -811,7 +811,6 @@ fn enqueue_task<'a>(
pub fn load_and_typecheck<'a>( pub fn load_and_typecheck<'a>(
arena: &'a Bump, arena: &'a Bump,
filename: PathBuf, filename: PathBuf,
stdlib: &'a StdLib,
src_dir: &Path, src_dir: &Path,
exposed_types: ExposedByModule, exposed_types: ExposedByModule,
target_info: TargetInfo, target_info: TargetInfo,
@ -823,7 +822,6 @@ pub fn load_and_typecheck<'a>(
match load( match load(
arena, arena,
load_start, load_start,
stdlib,
src_dir, src_dir,
exposed_types, exposed_types,
Phase::SolveTypes, Phase::SolveTypes,
@ -838,7 +836,6 @@ pub fn load_and_typecheck<'a>(
pub fn load_and_monomorphize<'a>( pub fn load_and_monomorphize<'a>(
arena: &'a Bump, arena: &'a Bump,
filename: PathBuf, filename: PathBuf,
stdlib: &'a StdLib,
src_dir: &Path, src_dir: &Path,
exposed_types: ExposedByModule, exposed_types: ExposedByModule,
target_info: TargetInfo, target_info: TargetInfo,
@ -850,7 +847,6 @@ pub fn load_and_monomorphize<'a>(
match load( match load(
arena, arena,
load_start, load_start,
stdlib,
src_dir, src_dir,
exposed_types, exposed_types,
Phase::MakeSpecializations, Phase::MakeSpecializations,
@ -866,7 +862,6 @@ pub fn load_and_monomorphize_from_str<'a>(
arena: &'a Bump, arena: &'a Bump,
filename: PathBuf, filename: PathBuf,
src: &'a str, src: &'a str,
stdlib: &'a StdLib,
src_dir: &Path, src_dir: &Path,
exposed_types: ExposedByModule, exposed_types: ExposedByModule,
target_info: TargetInfo, target_info: TargetInfo,
@ -878,7 +873,6 @@ pub fn load_and_monomorphize_from_str<'a>(
match load( match load(
arena, arena,
load_start, load_start,
stdlib,
src_dir, src_dir,
exposed_types, exposed_types,
Phase::MakeSpecializations, Phase::MakeSpecializations,
@ -1032,7 +1026,6 @@ enum LoadResult<'a> {
fn load<'a>( fn load<'a>(
arena: &'a Bump, arena: &'a Bump,
load_start: LoadStart<'a>, load_start: LoadStart<'a>,
_stdlib: &'a StdLib,
src_dir: &Path, src_dir: &Path,
exposed_types: ExposedByModule, exposed_types: ExposedByModule,
goal_phase: Phase, goal_phase: Phase,

View file

@ -107,8 +107,6 @@ mod test_load {
use std::io::Write; use std::io::Write;
use tempfile::tempdir; use tempfile::tempdir;
let stdlib = roc_builtins::std::standard_stdlib();
let mut file_handles: Vec<_> = Vec::new(); let mut file_handles: Vec<_> = Vec::new();
// create a temporary directory // create a temporary directory
@ -142,7 +140,6 @@ mod test_load {
roc_load::file::load_and_typecheck( roc_load::file::load_and_typecheck(
arena, arena,
full_file_path, full_file_path,
arena.alloc(stdlib),
dir.path(), dir.path(),
Default::default(), Default::default(),
TARGET_INFO, TARGET_INFO,
@ -165,7 +162,6 @@ mod test_load {
let loaded = roc_load::file::load_and_typecheck( let loaded = roc_load::file::load_and_typecheck(
&arena, &arena,
filename, filename,
arena.alloc(roc_builtins::std::standard_stdlib()),
src_dir.as_path(), src_dir.as_path(),
subs_by_module, subs_by_module,
TARGET_INFO, TARGET_INFO,
@ -330,7 +326,6 @@ mod test_load {
let loaded = roc_load::file::load_and_typecheck( let loaded = roc_load::file::load_and_typecheck(
&arena, &arena,
filename, filename,
arena.alloc(roc_builtins::std::standard_stdlib()),
src_dir.as_path(), src_dir.as_path(),
subs_by_module, subs_by_module,
TARGET_INFO, TARGET_INFO,

View file

@ -32,9 +32,6 @@ mod solve_expr {
let arena = &Bump::new(); let arena = &Bump::new();
// let stdlib = roc_builtins::unique::uniq_stdlib();
let stdlib = roc_builtins::std::standard_stdlib();
let module_src; let module_src;
let temp; let temp;
if src.starts_with("app") { if src.starts_with("app") {
@ -58,7 +55,6 @@ mod solve_expr {
let result = roc_load::file::load_and_typecheck( let result = roc_load::file::load_and_typecheck(
arena, arena,
full_file_path, full_file_path,
&stdlib,
dir.path(), dir.path(),
exposed_types, exposed_types,
roc_target::TargetInfo::default_x86_64(), roc_target::TargetInfo::default_x86_64(),

View file

@ -26,7 +26,6 @@ fn promote_expr_to_module(src: &str) -> String {
pub fn helper( pub fn helper(
arena: &bumpalo::Bump, arena: &bumpalo::Bump,
src: &str, src: &str,
stdlib: roc_builtins::std::StdLib,
_leak: bool, _leak: bool,
lazy_literals: bool, lazy_literals: bool,
) -> (String, Vec<roc_problem::can::Problem>, Library) { ) -> (String, Vec<roc_problem::can::Problem>, Library) {
@ -52,7 +51,6 @@ pub fn helper(
arena, arena,
filename, filename,
module_src, module_src,
&stdlib,
src_dir, src_dir,
Default::default(), Default::default(),
roc_target::TargetInfo::default_x86_64(), roc_target::TargetInfo::default_x86_64(),
@ -239,11 +237,10 @@ macro_rules! assert_evals_to {
($src:expr, $expected:expr, $ty:ty, $transform:expr, $leak:expr, $lazy_literals:expr) => { ($src:expr, $expected:expr, $ty:ty, $transform:expr, $leak:expr, $lazy_literals:expr) => {
use bumpalo::Bump; use bumpalo::Bump;
use roc_gen_dev::run_jit_function_raw; use roc_gen_dev::run_jit_function_raw;
let stdlib = roc_builtins::std::standard_stdlib();
let arena = Bump::new(); let arena = Bump::new();
let (main_fn_name, errors, lib) = let (main_fn_name, errors, lib) =
$crate::helpers::dev::helper(&arena, $src, stdlib, $leak, $lazy_literals); $crate::helpers::dev::helper(&arena, $src, $leak, $lazy_literals);
let transform = |success| { let transform = |success| {
let expected = $expected; let expected = $expected;

View file

@ -26,7 +26,6 @@ fn promote_expr_to_module(src: &str) -> String {
fn create_llvm_module<'a>( fn create_llvm_module<'a>(
arena: &'a bumpalo::Bump, arena: &'a bumpalo::Bump,
src: &str, src: &str,
stdlib: &'a roc_builtins::std::StdLib,
is_gen_test: bool, is_gen_test: bool,
ignore_problems: bool, ignore_problems: bool,
context: &'a inkwell::context::Context, context: &'a inkwell::context::Context,
@ -55,7 +54,6 @@ fn create_llvm_module<'a>(
arena, arena,
filename, filename,
module_src, module_src,
stdlib,
src_dir, src_dir,
Default::default(), Default::default(),
target_info, target_info,
@ -260,7 +258,6 @@ fn create_llvm_module<'a>(
pub fn helper<'a>( pub fn helper<'a>(
arena: &'a bumpalo::Bump, arena: &'a bumpalo::Bump,
src: &str, src: &str,
stdlib: &'a roc_builtins::std::StdLib,
is_gen_test: bool, is_gen_test: bool,
ignore_problems: bool, ignore_problems: bool,
context: &'a inkwell::context::Context, context: &'a inkwell::context::Context,
@ -276,7 +273,6 @@ pub fn helper<'a>(
let (main_fn_name, delayed_errors, module) = create_llvm_module( let (main_fn_name, delayed_errors, module) = create_llvm_module(
arena, arena,
src, src,
stdlib,
is_gen_test, is_gen_test,
ignore_problems, ignore_problems,
context, context,
@ -305,7 +301,6 @@ fn wasm32_target_tripple() -> Triple {
pub fn helper_wasm<'a>( pub fn helper_wasm<'a>(
arena: &'a bumpalo::Bump, arena: &'a bumpalo::Bump,
src: &str, src: &str,
stdlib: &'a roc_builtins::std::StdLib,
_is_gen_test: bool, _is_gen_test: bool,
ignore_problems: bool, ignore_problems: bool,
context: &'a inkwell::context::Context, context: &'a inkwell::context::Context,
@ -322,7 +317,6 @@ pub fn helper_wasm<'a>(
let (_main_fn_name, _delayed_errors, llvm_module) = create_llvm_module( let (_main_fn_name, _delayed_errors, llvm_module) = create_llvm_module(
arena, arena,
src, src,
stdlib,
is_gen_test, is_gen_test,
ignore_problems, ignore_problems,
context, context,
@ -464,18 +458,9 @@ where
let arena = bumpalo::Bump::new(); let arena = bumpalo::Bump::new();
let context = inkwell::context::Context::create(); let context = inkwell::context::Context::create();
// NOTE the stdlib must be in the arena; just taking a reference will segfault
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let is_gen_test = true; let is_gen_test = true;
let instance = crate::helpers::llvm::helper_wasm( let instance =
&arena, crate::helpers::llvm::helper_wasm(&arena, src, is_gen_test, ignore_problems, &context);
src,
stdlib,
is_gen_test,
ignore_problems,
&context,
);
let memory = instance.exports.get_memory("memory").unwrap(); let memory = instance.exports.get_memory("memory").unwrap();
@ -538,18 +523,9 @@ macro_rules! assert_llvm_evals_to {
let arena = Bump::new(); let arena = Bump::new();
let context = Context::create(); let context = Context::create();
// NOTE the stdlib must be in the arena; just taking a reference will segfault
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let is_gen_test = true; let is_gen_test = true;
let (main_fn_name, errors, lib) = $crate::helpers::llvm::helper( let (main_fn_name, errors, lib) =
&arena, $crate::helpers::llvm::helper(&arena, $src, is_gen_test, $ignore_problems, &context);
$src,
stdlib,
is_gen_test,
$ignore_problems,
&context,
);
let transform = |success| { let transform = |success| {
let expected = $expected; let expected = $expected;
@ -615,12 +591,9 @@ macro_rules! assert_expect_failed {
let arena = Bump::new(); let arena = Bump::new();
let context = Context::create(); let context = Context::create();
// NOTE the stdlib must be in the arena; just taking a reference will segfault
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let is_gen_test = true; let is_gen_test = true;
let (main_fn_name, errors, lib) = let (main_fn_name, errors, lib) =
$crate::helpers::llvm::helper(&arena, $src, stdlib, is_gen_test, false, &context); $crate::helpers::llvm::helper(&arena, $src, is_gen_test, false, &context);
let transform = |success| { let transform = |success| {
let expected = $expected; let expected = $expected;

View file

@ -37,13 +37,12 @@ fn promote_expr_to_module(src: &str) -> String {
pub fn compile_and_load<'a, T: Wasm32Result>( pub fn compile_and_load<'a, T: Wasm32Result>(
arena: &'a bumpalo::Bump, arena: &'a bumpalo::Bump,
src: &str, src: &str,
stdlib: &'a roc_builtins::std::StdLib,
_test_wrapper_type_info: PhantomData<T>, _test_wrapper_type_info: PhantomData<T>,
) -> wasmer::Instance { ) -> wasmer::Instance {
let platform_bytes = load_platform_and_builtins(); let platform_bytes = load_platform_and_builtins();
let compiled_bytes = let compiled_bytes =
compile_roc_to_wasm_bytes(arena, stdlib, &platform_bytes, src, _test_wrapper_type_info); compile_roc_to_wasm_bytes(arena, &platform_bytes, src, _test_wrapper_type_info);
if DEBUG_LOG_SETTINGS.keep_test_binary { if DEBUG_LOG_SETTINGS.keep_test_binary {
let build_dir_hash = src_hash(src); let build_dir_hash = src_hash(src);
@ -67,7 +66,6 @@ fn src_hash(src: &str) -> u64 {
fn compile_roc_to_wasm_bytes<'a, T: Wasm32Result>( fn compile_roc_to_wasm_bytes<'a, T: Wasm32Result>(
arena: &'a bumpalo::Bump, arena: &'a bumpalo::Bump,
stdlib: &'a roc_builtins::std::StdLib,
preload_bytes: &[u8], preload_bytes: &[u8],
src: &str, src: &str,
_test_wrapper_type_info: PhantomData<T>, _test_wrapper_type_info: PhantomData<T>,
@ -90,7 +88,6 @@ fn compile_roc_to_wasm_bytes<'a, T: Wasm32Result>(
arena, arena,
filename, filename,
module_src, module_src,
stdlib,
src_dir, src_dir,
Default::default(), Default::default(),
roc_target::TargetInfo::default_wasm32(), roc_target::TargetInfo::default_wasm32(),
@ -183,10 +180,7 @@ where
{ {
let arena = bumpalo::Bump::new(); let arena = bumpalo::Bump::new();
// NOTE the stdlib must be in the arena; just taking a reference will segfault let instance = crate::helpers::wasm::compile_and_load(&arena, src, phantom);
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let instance = crate::helpers::wasm::compile_and_load(&arena, src, stdlib, phantom);
let memory = instance.exports.get_memory(MEMORY_NAME).unwrap(); let memory = instance.exports.get_memory(MEMORY_NAME).unwrap();
@ -256,10 +250,7 @@ where
{ {
let arena = bumpalo::Bump::new(); let arena = bumpalo::Bump::new();
// NOTE the stdlib must be in the arena; just taking a reference will segfault let instance = crate::helpers::wasm::compile_and_load(&arena, src, phantom);
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let instance = crate::helpers::wasm::compile_and_load(&arena, src, stdlib, phantom);
let memory = instance.exports.get_memory(MEMORY_NAME).unwrap(); let memory = instance.exports.get_memory(MEMORY_NAME).unwrap();

View file

@ -80,8 +80,6 @@ fn compiles_to_ir(test_name: &str, src: &str) {
let arena = &Bump::new(); let arena = &Bump::new();
// let stdlib = roc_builtins::unique::uniq_stdlib();
let stdlib = roc_builtins::std::standard_stdlib();
let filename = PathBuf::from("Test.roc"); let filename = PathBuf::from("Test.roc");
let src_dir = Path::new("fake/test/path"); let src_dir = Path::new("fake/test/path");
@ -100,7 +98,6 @@ fn compiles_to_ir(test_name: &str, src: &str) {
arena, arena,
filename, filename,
module_src, module_src,
&stdlib,
src_dir, src_dir,
Default::default(), Default::default(),
TARGET_INFO, TARGET_INFO,

View file

@ -3,7 +3,6 @@ extern crate roc_load;
use bumpalo::Bump; use bumpalo::Bump;
use docs_error::{DocsError, DocsResult}; use docs_error::{DocsError, DocsResult};
use html::mark_node_to_html; use html::mark_node_to_html;
use roc_builtins::std::StdLib;
use roc_can::scope::Scope; use roc_can::scope::Scope;
use roc_code_markup::markup::nodes::MarkupNode; use roc_code_markup::markup::nodes::MarkupNode;
use roc_code_markup::slow_pool::SlowPool; use roc_code_markup::slow_pool::SlowPool;
@ -23,8 +22,8 @@ use std::path::{Path, PathBuf};
mod docs_error; mod docs_error;
mod html; mod html;
pub fn generate_docs_html(filenames: Vec<PathBuf>, std_lib: StdLib, build_dir: &Path) { pub fn generate_docs_html(filenames: Vec<PathBuf>, build_dir: &Path) {
let loaded_modules = load_modules_for_files(filenames, std_lib); let loaded_modules = load_modules_for_files(filenames);
// //
// TODO: get info from a file like "elm.json" // TODO: get info from a file like "elm.json"
@ -411,7 +410,7 @@ fn render_sidebar<'a, I: Iterator<Item = (Vec<String>, &'a ModuleDocumentation)>
buf buf
} }
pub fn load_modules_for_files(filenames: Vec<PathBuf>, std_lib: StdLib) -> Vec<LoadedModule> { pub fn load_modules_for_files(filenames: Vec<PathBuf>) -> Vec<LoadedModule> {
let arena = Bump::new(); let arena = Bump::new();
let mut modules = vec![]; let mut modules = vec![];
@ -422,7 +421,6 @@ pub fn load_modules_for_files(filenames: Vec<PathBuf>, std_lib: StdLib) -> Vec<L
match roc_load::file::load_and_typecheck( match roc_load::file::load_and_typecheck(
&arena, &arena,
filename, filename,
&std_lib,
src_dir.as_path(), src_dir.as_path(),
Default::default(), Default::default(),
roc_target::TargetInfo::default_x86_64(), // This is just type-checking for docs, so "target" doesn't matter roc_target::TargetInfo::default_x86_64(), // This is just type-checking for docs, so "target" doesn't matter

View file

@ -47,7 +47,6 @@ pub fn compile_to_mono<'a>(
target_info: TargetInfo, target_info: TargetInfo,
palette: Palette, palette: Palette,
) -> Result<MonomorphizedModule<'a>, Vec<String>> { ) -> Result<MonomorphizedModule<'a>, Vec<String>> {
let stdlib = arena.alloc(roc_builtins::std::standard_stdlib());
let filename = PathBuf::from("REPL.roc"); let filename = PathBuf::from("REPL.roc");
let src_dir = Path::new("fake/test/path"); let src_dir = Path::new("fake/test/path");
@ -58,7 +57,6 @@ pub fn compile_to_mono<'a>(
arena, arena,
filename, filename,
module_src, module_src,
stdlib,
src_dir, src_dir,
exposed_types, exposed_types,
target_info, target_info,