diff --git a/compiler/load/src/file.rs b/compiler/load/src/file.rs index 2a4bd23738..11c30c2dc7 100644 --- a/compiler/load/src/file.rs +++ b/compiler/load/src/file.rs @@ -2642,7 +2642,7 @@ fn parse_header<'a>( opt_shorthand, header_src, packages, - exposes: header.provides.into_bump_slice(), + exposes: header.provides.items, imports: header.imports.items, to_platform: Some(header.to.value.clone()), }; @@ -3410,7 +3410,7 @@ fn fabricate_pkg_config_module<'a>( module_timing: ModuleTiming, ) -> (ModuleId, Msg<'a>) { let provides: &'a [Located>] = - header.provides.clone().into_bump_slice(); + header.provides.items; let info = PlatformHeaderInfo { filename, diff --git a/compiler/parse/src/header.rs b/compiler/parse/src/header.rs index d0c76d22c5..37475ebce1 100644 --- a/compiler/parse/src/header.rs +++ b/compiler/parse/src/header.rs @@ -83,7 +83,7 @@ pub struct AppHeader<'a> { pub name: Loc>, pub packages: Collection<'a, Loc>>, pub imports: Collection<'a, Loc>>, - pub provides: Vec<'a, Loc>>, + pub provides: Collection<'a, Loc>>, pub to: Loc>, // Potential comments and newlines - these will typically all be empty. @@ -148,7 +148,7 @@ pub struct PlatformHeader<'a> { pub exposes: Vec<'a, Loc>>>, pub packages: Collection<'a, Loc>>, pub imports: Collection<'a, Loc>>, - pub provides: Vec<'a, Loc>>, + pub provides: Collection<'a, Loc>>, pub effects: Effects<'a>, // Potential comments and newlines - these will typically all be empty. diff --git a/compiler/parse/src/module.rs b/compiler/parse/src/module.rs index 004a17a6f8..4a31995e91 100644 --- a/compiler/parse/src/module.rs +++ b/compiler/parse/src/module.rs @@ -270,7 +270,7 @@ fn platform_header<'a>() -> impl Parser<'a, PlatformHeader<'a>, EHeader<'a>> { let (_, ((before_imports, after_imports), imports), state) = specialize(EHeader::Imports, imports()).parse(arena, state)?; - let (_, ((before_provides, after_provides), (provides, provides_final_comments)), state) = + let (_, ((before_provides, after_provides), provides), state) = specialize(EHeader::Provides, provides_without_to()).parse(arena, state)?; let (_, effects, state) = specialize(EHeader::Effects, effects()).parse(arena, state)?; @@ -303,7 +303,7 @@ fn platform_header<'a>() -> impl Parser<'a, PlatformHeader<'a>, EHeader<'a>> { #[derive(Debug)] struct ProvidesTo<'a> { - entries: Vec<'a, Located>>, + entries: Collection<'a, Located>>, to: Located>, before_provides_keyword: &'a [CommentOrNewline<'a>], @@ -342,7 +342,7 @@ fn provides_to<'a>() -> impl Parser<'a, ProvidesTo<'a>, EProvides<'a>> { ) ), |( - ((before_provides_keyword, after_provides_keyword), (entries, final_comments)), + ((before_provides_keyword, after_provides_keyword), entries), ((before_to_keyword, after_to_keyword), to), )| { ProvidesTo { @@ -362,10 +362,7 @@ fn provides_without_to<'a>() -> impl Parser< 'a, ( (&'a [CommentOrNewline<'a>], &'a [CommentOrNewline<'a>]), - ( - Vec<'a, Located>>, - &'a [CommentOrNewline<'a>], - ), + Collection<'a, Located>>, ), EProvides<'a>, > { diff --git a/compiler/parse/tests/test_parse.rs b/compiler/parse/tests/test_parse.rs index 4d3fd5e2ba..b3b3779bd4 100644 --- a/compiler/parse/tests/test_parse.rs +++ b/compiler/parse/tests/test_parse.rs @@ -3078,7 +3078,7 @@ mod test_parse { let arena = Bump::new(); let packages = Collection::empty(); let imports = Collection::empty(); - let provides = Vec::new_in(&arena); + let provides = Collection::empty(); let module_name = StrLiteral::PlainLine("test-app"); let header = AppHeader { name: Located::new(0, 0, 4, 14, module_name), @@ -3118,7 +3118,7 @@ mod test_parse { let arena = Bump::new(); let packages = Collection::empty(); let imports = Collection::empty(); - let provides = Vec::new_in(&arena); + let provides = Collection::empty(); let module_name = StrLiteral::PlainLine("test-app"); let header = AppHeader { before_header: &[], @@ -3170,7 +3170,7 @@ mod test_parse { let loc_import = Located::new(2, 2, 14, 25, import); let imports = Collection::with_items(arena.alloc([loc_import])); let provide_entry = Located::new(3, 3, 15, 24, Exposed("quicksort")); - let provides = bumpalo::vec![in &arena; provide_entry]; + let provides = Collection::with_items(arena.alloc([provide_entry])); let module_name = StrLiteral::PlainLine("quicksort"); let header = AppHeader { @@ -3255,7 +3255,7 @@ mod test_parse { let loc_import = Located::new(2, 6, 14, 5, import); let imports = Collection::with_items(arena.alloc([loc_import])); let provide_entry = Located::new(7, 7, 15, 24, Exposed("quicksort")); - let provides = bumpalo::vec![in &arena; provide_entry]; + let provides = Collection::with_items(arena.alloc([provide_entry])); let module_name = StrLiteral::PlainLine("quicksort"); let header = AppHeader { @@ -3343,7 +3343,7 @@ mod test_parse { exposes: Vec::new_in(&arena), packages: Collection::empty(), imports: Collection::empty(), - provides: Vec::new_in(&arena), + provides: Collection::empty(), effects, after_platform_keyword: &[], before_requires: &[], @@ -3387,7 +3387,7 @@ mod test_parse { let packages = Collection::with_items(arena.alloc([loc_pkg_entry])); let imports = Collection::empty(); let provide_entry = Located::new(5, 5, 15, 26, Exposed("mainForHost")); - let provides = bumpalo::vec![in &arena; provide_entry]; + let provides = Collection::with_items(arena.alloc([provide_entry])); let effects = Effects { effect_type_name: "Effect", effect_shortname: "fx",