mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 22:34:45 +00:00
Remove awkward split between header_sources and defs sources
This commit is contained in:
parent
ab8b70aacd
commit
6e67b77fa1
3 changed files with 5 additions and 62 deletions
|
@ -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"));
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue