Remove awkward split between header_sources and defs sources

This commit is contained in:
Joshua Warner 2022-01-13 18:51:46 -08:00
parent ab8b70aacd
commit 6e67b77fa1
3 changed files with 5 additions and 62 deletions

View file

@ -31,7 +31,6 @@ const LLVM_VERSION: &str = "12";
pub fn report_problems_monomorphized(loaded: &mut MonomorphizedModule) -> usize { pub fn report_problems_monomorphized(loaded: &mut MonomorphizedModule) -> usize {
report_problems_help( report_problems_help(
loaded.total_problems(), loaded.total_problems(),
&loaded.header_sources,
&loaded.sources, &loaded.sources,
&loaded.interns, &loaded.interns,
&mut loaded.can_problems, &mut loaded.can_problems,
@ -43,7 +42,6 @@ pub fn report_problems_monomorphized(loaded: &mut MonomorphizedModule) -> usize
pub fn report_problems_typechecked(loaded: &mut LoadedModule) -> usize { pub fn report_problems_typechecked(loaded: &mut LoadedModule) -> usize {
report_problems_help( report_problems_help(
loaded.total_problems(), loaded.total_problems(),
&loaded.header_sources,
&loaded.sources, &loaded.sources,
&loaded.interns, &loaded.interns,
&mut loaded.can_problems, &mut loaded.can_problems,
@ -54,7 +52,6 @@ pub fn report_problems_typechecked(loaded: &mut LoadedModule) -> usize {
fn report_problems_help( fn report_problems_help(
total_problems: usize, total_problems: usize,
header_sources: &MutMap<ModuleId, (PathBuf, Box<str>)>,
sources: &MutMap<ModuleId, (PathBuf, Box<str>)>, sources: &MutMap<ModuleId, (PathBuf, Box<str>)>,
interns: &Interns, interns: &Interns,
can_problems: &mut MutMap<ModuleId, Vec<roc_problem::can::Problem>>, can_problems: &mut MutMap<ModuleId, Vec<roc_problem::can::Problem>>,
@ -75,12 +72,7 @@ fn report_problems_help(
for (home, (module_path, src)) in sources.iter() { for (home, (module_path, src)) in sources.iter() {
let mut src_lines: Vec<&str> = Vec::new(); let mut src_lines: Vec<&str> = Vec::new();
if let Some((_, header_src)) = header_sources.get(home) {
src_lines.extend(header_src.split('\n'));
src_lines.extend(src.split('\n').skip(1));
} else {
src_lines.extend(src.split('\n')); src_lines.extend(src.split('\n'));
}
let lines = LineInfo::new(&src_lines.join("\n")); let lines = LineInfo::new(&src_lines.join("\n"));

View file

@ -366,7 +366,6 @@ struct ModuleCache<'a> {
mono_problems: MutMap<ModuleId, Vec<roc_mono::ir::MonoProblem>>, mono_problems: MutMap<ModuleId, Vec<roc_mono::ir::MonoProblem>>,
sources: MutMap<ModuleId, (PathBuf, &'a str)>, sources: MutMap<ModuleId, (PathBuf, &'a str)>,
header_sources: MutMap<ModuleId, (PathBuf, &'a str)>,
} }
fn start_phase<'a>( fn start_phase<'a>(
@ -625,7 +624,6 @@ pub struct LoadedModule {
pub dep_idents: MutMap<ModuleId, IdentIds>, pub dep_idents: MutMap<ModuleId, IdentIds>,
pub exposed_aliases: MutMap<Symbol, Alias>, pub exposed_aliases: MutMap<Symbol, Alias>,
pub exposed_values: Vec<Symbol>, pub exposed_values: Vec<Symbol>,
pub header_sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>, pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub timings: MutMap<ModuleId, ModuleTiming>, pub timings: MutMap<ModuleId, ModuleTiming>,
pub documentation: MutMap<ModuleId, ModuleDocumentation>, pub documentation: MutMap<ModuleId, ModuleDocumentation>,
@ -672,7 +670,6 @@ struct ModuleHeader<'a> {
package_qualified_imported_modules: MutSet<PackageQualified<'a, ModuleId>>, package_qualified_imported_modules: MutSet<PackageQualified<'a, ModuleId>>,
exposes: Vec<Symbol>, exposes: Vec<Symbol>,
exposed_imports: MutMap<Ident, (Symbol, Region)>, exposed_imports: MutMap<Ident, (Symbol, Region)>,
header_src: &'a str,
parse_state: roc_parse::state::State<'a>, parse_state: roc_parse::state::State<'a>,
module_timing: ModuleTiming, module_timing: ModuleTiming,
} }
@ -740,7 +737,6 @@ pub struct MonomorphizedModule<'a> {
pub procedures: MutMap<(Symbol, ProcLayout<'a>), Proc<'a>>, pub procedures: MutMap<(Symbol, ProcLayout<'a>), Proc<'a>>,
pub entry_point: EntryPoint<'a>, pub entry_point: EntryPoint<'a>,
pub exposed_to_host: MutMap<Symbol, Variable>, pub exposed_to_host: MutMap<Symbol, Variable>,
pub header_sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>, pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub timings: MutMap<ModuleId, ModuleTiming>, pub timings: MutMap<ModuleId, ModuleTiming>,
} }
@ -1739,11 +1735,6 @@ fn update<'a>(
.exposed_symbols_by_module .exposed_symbols_by_module
.insert(home, exposed_symbols); .insert(home, exposed_symbols);
state
.module_cache
.header_sources
.insert(home, (header.module_path.clone(), header.header_src));
state state
.module_cache .module_cache
.imports .imports
@ -2198,7 +2189,6 @@ fn finish_specialization(
type_problems, type_problems,
can_problems, can_problems,
sources, sources,
header_sources,
.. ..
} = module_cache; } = module_cache;
@ -2207,11 +2197,6 @@ fn finish_specialization(
.map(|(id, (path, src))| (id, (path, src.into()))) .map(|(id, (path, src))| (id, (path, src.into())))
.collect(); .collect();
let header_sources: MutMap<ModuleId, (PathBuf, Box<str>)> = header_sources
.into_iter()
.map(|(id, (path, src))| (id, (path, src.into())))
.collect();
let path_to_platform = { let path_to_platform = {
use PlatformPath::*; use PlatformPath::*;
let package_name = match platform_path { let package_name = match platform_path {
@ -2274,7 +2259,6 @@ fn finish_specialization(
procedures, procedures,
entry_point, entry_point,
sources, sources,
header_sources,
timings: state.timings, timings: state.timings,
}) })
} }
@ -2305,13 +2289,6 @@ fn finish(
.map(|(id, (path, src))| (id, (path, src.into()))) .map(|(id, (path, src))| (id, (path, src.into())))
.collect(); .collect();
let header_sources = state
.module_cache
.header_sources
.into_iter()
.map(|(id, (path, src))| (id, (path, src.into())))
.collect();
LoadedModule { LoadedModule {
module_id: state.root_id, module_id: state.root_id,
interns, interns,
@ -2323,7 +2300,6 @@ fn finish(
exposed_aliases: exposed_aliases_by_symbol, exposed_aliases: exposed_aliases_by_symbol,
exposed_values, exposed_values,
exposed_to_host: exposed_vars_by_symbol.into_iter().collect(), exposed_to_host: exposed_vars_by_symbol.into_iter().collect(),
header_sources,
sources, sources,
timings: state.timings, timings: state.timings,
documentation, documentation,
@ -2379,10 +2355,6 @@ fn load_pkg_config<'a>(
))) )))
} }
Ok((ast::Module::Platform { header }, parser_state)) => { Ok((ast::Module::Platform { header }, parser_state)) => {
let delta = bytes.len() - parser_state.bytes().len();
let chomped = &bytes[..delta];
let header_src = unsafe { std::str::from_utf8_unchecked(chomped) };
// make a Package-Config module that ultimately exposes `main` to the host // make a Package-Config module that ultimately exposes `main` to the host
let pkg_config_module_msg = fabricate_pkg_config_module( let pkg_config_module_msg = fabricate_pkg_config_module(
arena, arena,
@ -2393,7 +2365,6 @@ fn load_pkg_config<'a>(
module_ids.clone(), module_ids.clone(),
ident_ids_by_module.clone(), ident_ids_by_module.clone(),
&header, &header,
header_src,
pkg_module_timing, pkg_module_timing,
) )
.1; .1;
@ -2530,11 +2501,6 @@ fn parse_header<'a>(
match parsed { match parsed {
Ok((ast::Module::Interface { header }, parse_state)) => { Ok((ast::Module::Interface { header }, parse_state)) => {
let header_src = unsafe {
let chomped = src_bytes.len() - parse_state.bytes().len();
std::str::from_utf8_unchecked(&src_bytes[..chomped])
};
let info = HeaderInfo { let info = HeaderInfo {
loc_name: Loc { loc_name: Loc {
region: header.name.region, region: header.name.region,
@ -2543,7 +2509,6 @@ fn parse_header<'a>(
filename, filename,
is_root_module, is_root_module,
opt_shorthand, opt_shorthand,
header_src,
packages: &[], packages: &[],
exposes: unspace(arena, header.exposes.items), exposes: unspace(arena, header.exposes.items),
imports: unspace(arena, header.imports.items), imports: unspace(arena, header.imports.items),
@ -2562,11 +2527,6 @@ fn parse_header<'a>(
let mut pkg_config_dir = filename.clone(); let mut pkg_config_dir = filename.clone();
pkg_config_dir.pop(); pkg_config_dir.pop();
let header_src = unsafe {
let chomped = src_bytes.len() - parse_state.bytes().len();
std::str::from_utf8_unchecked(&src_bytes[..chomped])
};
let packages = unspace(arena, header.packages.items); let packages = unspace(arena, header.packages.items);
let info = HeaderInfo { let info = HeaderInfo {
@ -2577,7 +2537,6 @@ fn parse_header<'a>(
filename, filename,
is_root_module, is_root_module,
opt_shorthand, opt_shorthand,
header_src,
packages, packages,
exposes: unspace(arena, header.provides.items), exposes: unspace(arena, header.provides.items),
imports: unspace(arena, header.imports.items), imports: unspace(arena, header.imports.items),
@ -2736,7 +2695,6 @@ struct HeaderInfo<'a> {
filename: PathBuf, filename: PathBuf,
is_root_module: bool, is_root_module: bool,
opt_shorthand: Option<&'a str>, opt_shorthand: Option<&'a str>,
header_src: &'a str,
packages: &'a [Loc<PackageEntry<'a>>], packages: &'a [Loc<PackageEntry<'a>>],
exposes: &'a [Loc<ExposedName<'a>>], exposes: &'a [Loc<ExposedName<'a>>],
imports: &'a [Loc<ImportsEntry<'a>>], imports: &'a [Loc<ImportsEntry<'a>>],
@ -2762,7 +2720,6 @@ fn send_header<'a>(
exposes, exposes,
imports, imports,
to_platform, to_platform,
header_src,
} = info; } = info;
let declared_name: ModuleName = match &loc_name.value { let declared_name: ModuleName = match &loc_name.value {
@ -2932,7 +2889,6 @@ fn send_header<'a>(
package_qualified_imported_modules, package_qualified_imported_modules,
deps_by_name, deps_by_name,
exposes: exposed, exposes: exposed,
header_src,
parse_state, parse_state,
exposed_imports: scope, exposed_imports: scope,
module_timing, module_timing,
@ -2947,7 +2903,6 @@ struct PlatformHeaderInfo<'a> {
filename: PathBuf, filename: PathBuf,
is_root_module: bool, is_root_module: bool,
shorthand: &'a str, shorthand: &'a str,
header_src: &'a str,
app_module_id: ModuleId, app_module_id: ModuleId,
packages: &'a [Loc<PackageEntry<'a>>], packages: &'a [Loc<PackageEntry<'a>>],
provides: &'a [Loc<ExposedName<'a>>], provides: &'a [Loc<ExposedName<'a>>],
@ -2968,7 +2923,6 @@ fn send_header_two<'a>(
filename, filename,
shorthand, shorthand,
is_root_module, is_root_module,
header_src,
app_module_id, app_module_id,
packages, packages,
provides, provides,
@ -3162,7 +3116,6 @@ fn send_header_two<'a>(
package_qualified_imported_modules, package_qualified_imported_modules,
deps_by_name, deps_by_name,
exposes: exposed, exposes: exposed,
header_src,
parse_state, parse_state,
exposed_imports: scope, exposed_imports: scope,
module_timing, module_timing,
@ -3310,14 +3263,12 @@ fn fabricate_pkg_config_module<'a>(
module_ids: Arc<Mutex<PackageModuleIds<'a>>>, module_ids: Arc<Mutex<PackageModuleIds<'a>>>,
ident_ids_by_module: Arc<Mutex<MutMap<ModuleId, IdentIds>>>, ident_ids_by_module: Arc<Mutex<MutMap<ModuleId, IdentIds>>>,
header: &PlatformHeader<'a>, header: &PlatformHeader<'a>,
header_src: &'a str,
module_timing: ModuleTiming, module_timing: ModuleTiming,
) -> (ModuleId, Msg<'a>) { ) -> (ModuleId, Msg<'a>) {
let info = PlatformHeaderInfo { let info = PlatformHeaderInfo {
filename, filename,
is_root_module: false, is_root_module: false,
shorthand, shorthand,
header_src,
app_module_id, app_module_id,
packages: &[], packages: &[],
provides: unspace(arena, header.provides.items), provides: unspace(arena, header.provides.items),
@ -3703,7 +3654,7 @@ where
fn parse<'a>(arena: &'a Bump, header: ModuleHeader<'a>) -> Result<Msg<'a>, LoadingProblem<'a>> { fn parse<'a>(arena: &'a Bump, header: ModuleHeader<'a>) -> Result<Msg<'a>, LoadingProblem<'a>> {
let mut module_timing = header.module_timing; let mut module_timing = header.module_timing;
let parse_start = SystemTime::now(); let parse_start = SystemTime::now();
let source = header.parse_state.bytes(); let source = header.parse_state.original_bytes();
let parse_state = header.parse_state; let parse_state = header.parse_state;
let parsed_defs = match module_defs().parse(arena, parse_state) { let parsed_defs = match module_defs().parse(arena, parse_state) {
Ok((_, success, _state)) => success, Ok((_, success, _state)) => success,

View file

@ -34,7 +34,7 @@ impl<'a> State<'a> {
self.original_bytes self.original_bytes
} }
pub fn bytes(&self) -> &'a [u8] { pub(crate) fn bytes(&self) -> &'a [u8] {
&self.original_bytes[self.offset..] &self.original_bytes[self.offset..]
} }
@ -43,7 +43,7 @@ impl<'a> State<'a> {
} }
#[must_use] #[must_use]
pub fn advance(&self, offset: usize) -> State<'a> { pub(crate) fn advance(&self, offset: usize) -> State<'a> {
let mut state = self.clone(); let mut state = self.clone();
debug_assert!(!state.bytes()[..offset].iter().any(|b| *b == b'\n')); debug_assert!(!state.bytes()[..offset].iter().any(|b| *b == b'\n'));
state.offset += offset; state.offset += offset;
@ -51,7 +51,7 @@ impl<'a> State<'a> {
} }
#[must_use] #[must_use]
pub fn advance_newline(&self) -> State<'a> { pub(crate) fn advance_newline(&self) -> State<'a> {
let mut state = self.clone(); let mut state = self.clone();
state.offset += 1; state.offset += 1;
state.line_start = state.pos(); state.line_start = state.pos();