Skip to content

Commit 2966e9c

Browse files
committed
Finished adding support for private file-local functions
1 parent 1a67ac4 commit 2966e9c

File tree

12 files changed

+90
-57
lines changed

12 files changed

+90
-57
lines changed

Diff for: src/resolve/func_body.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub fn resolve_func_bodies(
2121
while let Some(job) = ctx.jobs.pop_front() {
2222
match job {
2323
FuncJob::Regular(physical_file_id, ast_func_index, func_ref) => {
24-
let module_file_id = ast_workspace.get_owning_module_or_self(physical_file_id);
24+
let module_folder_id = ast_workspace.get_owning_module_or_self(physical_file_id);
2525

2626
let ast_file = ast_workspace
2727
.files
@@ -37,7 +37,7 @@ pub fn resolve_func_bodies(
3737
ctx,
3838
asg,
3939
ast_workspace,
40-
module_file_id,
40+
module_folder_id,
4141
physical_file_id,
4242
ast_function,
4343
func_ref,
@@ -49,7 +49,7 @@ pub fn resolve_func_bodies(
4949
ast_impl_function_index,
5050
func_ref,
5151
) => {
52-
let module_file_id = ast_workspace.get_owning_module_or_self(physical_file_id);
52+
let module_folder_id = ast_workspace.get_owning_module_or_self(physical_file_id);
5353

5454
let ast_file = ast_workspace
5555
.files
@@ -68,7 +68,7 @@ pub fn resolve_func_bodies(
6868
ctx,
6969
asg,
7070
ast_workspace,
71-
module_file_id,
71+
module_folder_id,
7272
physical_file_id,
7373
ast_function,
7474
func_ref,
@@ -84,20 +84,20 @@ fn resolve_func_body(
8484
ctx: &mut ResolveCtx,
8585
asg: &mut Asg,
8686
ast_workspace: &AstWorkspace,
87-
module_file_id: FsNodeId,
87+
module_folder_id: FsNodeId,
8888
physical_file_id: FsNodeId,
8989
ast_function: &ast::Func,
9090
func_ref: FuncRef,
9191
) -> Result<(), ResolveError> {
9292
let func_haystack = ctx
9393
.func_haystacks
94-
.get(&module_file_id)
94+
.get(&module_folder_id)
9595
.expect("function haystack to exist for file");
9696

9797
let variable_haystack = resolve_param_vars(
9898
ctx,
9999
asg,
100-
module_file_id,
100+
module_folder_id,
101101
physical_file_id,
102102
ast_function,
103103
func_ref,
@@ -122,7 +122,7 @@ fn resolve_func_body(
122122
globals_in_modules: &ctx.globals_in_modules,
123123
helper_exprs_in_modules: &mut ctx.helper_exprs_in_modules,
124124
impls_in_modules: &mut ctx.impls_in_modules,
125-
module_fs_node_id: module_file_id,
125+
module_fs_node_id: module_folder_id,
126126
physical_fs_node_id: physical_file_id,
127127
},
128128
&ast_function.stmts,
@@ -140,7 +140,7 @@ fn resolve_func_body(
140140
fn resolve_param_vars(
141141
ctx: &ResolveCtx,
142142
asg: &mut Asg,
143-
module_file_id: FsNodeId,
143+
module_folder_id: FsNodeId,
144144
physical_file_id: FsNodeId,
145145
ast_func: &ast::Func,
146146
func_ref: FuncRef,
@@ -150,7 +150,7 @@ fn resolve_param_vars(
150150
for param in ast_func.head.params.required.iter() {
151151
let type_ctx = ResolveTypeCtx::new(
152152
&asg,
153-
module_file_id,
153+
module_folder_id,
154154
physical_file_id,
155155
&ctx.types_in_modules,
156156
);

Diff for: src/resolve/func_haystack.rs

+5-11
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use std::collections::HashMap;
2020
pub struct FuncHaystack {
2121
pub available: HashMap<ResolvedName, Vec<asg::FuncRef>>,
2222
pub imported_namespaces: Vec<Box<str>>,
23-
pub physical_fs_node_id: FsNodeId,
2423
pub module_fs_node_id: FsNodeId,
2524
}
2625

@@ -31,15 +30,10 @@ pub enum FindFunctionError {
3130
}
3231

3332
impl FuncHaystack {
34-
pub fn new(
35-
imported_namespaces: Vec<Box<str>>,
36-
physical_fs_node_id: FsNodeId,
37-
module_fs_node_id: FsNodeId,
38-
) -> Self {
33+
pub fn new(imported_namespaces: Vec<Box<str>>, module_fs_node_id: FsNodeId) -> Self {
3934
Self {
4035
available: Default::default(),
4136
imported_namespaces,
42-
physical_fs_node_id,
4337
module_fs_node_id,
4438
}
4539
}
@@ -66,10 +60,10 @@ impl FuncHaystack {
6660
.get(&ResolvedName::new(self.module_fs_node_id, name))
6761
.into_iter()
6862
.chain(
69-
(self.module_fs_node_id != self.physical_fs_node_id)
63+
(self.module_fs_node_id != ctx.physical_fs_node_id)
7064
.then(|| {
7165
self.available
72-
.get(&ResolvedName::new(self.physical_fs_node_id, name))
66+
.get(&ResolvedName::new(ctx.physical_fs_node_id, name))
7367
})
7468
.into_iter()
7569
.flatten(),
@@ -213,10 +207,10 @@ impl FuncHaystack {
213207
.get(&ResolvedName::new(self.module_fs_node_id, name))
214208
.into_iter()
215209
.chain(
216-
(self.module_fs_node_id != self.physical_fs_node_id)
210+
(self.module_fs_node_id != ctx.physical_fs_node_id)
217211
.then(|| {
218212
self.available
219-
.get(&ResolvedName::new(self.physical_fs_node_id, name))
213+
.get(&ResolvedName::new(ctx.physical_fs_node_id, name))
220214
})
221215
.into_iter()
222216
.flatten(),

Diff for: src/resolve/func_head.rs

+9-10
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ pub fn create_func_heads<'a>(
2626
options: &BuildOptions,
2727
) -> Result<(), ResolveError> {
2828
for (physical_file_id, file) in ast_workspace.files.iter() {
29-
let module_file_id = ast_workspace.get_owning_module_or_self(*physical_file_id);
29+
let module_folder_id = ast_workspace.get_owning_module_or_self(*physical_file_id);
3030

31-
create_impl_heads(ctx, asg, options, module_file_id, *physical_file_id, file)?;
31+
create_impl_heads(ctx, asg, options, module_folder_id, *physical_file_id, file)?;
3232

3333
for (func_i, func) in file.funcs.iter().enumerate() {
3434
let name = if func.head.privacy.is_private() {
3535
ResolvedName::new(*physical_file_id, &Name::plain(&func.head.name))
3636
} else {
37-
ResolvedName::new(module_file_id, &Name::plain(&func.head.name))
37+
ResolvedName::new(module_folder_id, &Name::plain(&func.head.name))
3838
};
3939

4040
let func_ref = create_func_head(
@@ -43,13 +43,13 @@ pub fn create_func_heads<'a>(
4343
options,
4444
name.clone(),
4545
&func.head,
46-
module_file_id,
46+
module_folder_id,
4747
*physical_file_id,
4848
)?;
4949

5050
if func.head.privacy.is_public() {
5151
let name = &func.head.name;
52-
let public_of_module = ctx.public_funcs.entry(module_file_id).or_default();
52+
let public_of_module = ctx.public_funcs.entry(module_folder_id).or_default();
5353

5454
public_of_module
5555
.get_or_insert_with(name, || Default::default())
@@ -59,13 +59,12 @@ pub fn create_func_heads<'a>(
5959
let settings = file.settings.map(|id| &ast_workspace.settings[id.0]);
6060
let imported_namespaces = settings.map(|settings| &settings.imported_namespaces);
6161

62-
let func_haystack = ctx.func_haystacks.get_or_insert_with(module_file_id, || {
62+
let func_haystack = ctx.func_haystacks.get_or_insert_with(module_folder_id, || {
6363
FuncHaystack::new(
6464
imported_namespaces
6565
.map(|namespaces| namespaces.clone())
6666
.unwrap_or_else(|| vec![]),
67-
*physical_file_id,
68-
module_file_id,
67+
module_folder_id,
6968
)
7069
});
7170

@@ -89,12 +88,12 @@ pub fn create_func_head<'a>(
8988
options: &BuildOptions,
9089
name: ResolvedName,
9190
head: &FuncHead,
92-
module_file_id: FsNodeId,
91+
module_folder_id: FsNodeId,
9392
physical_file_id: FsNodeId,
9493
) -> Result<FuncRef, ResolveError> {
9594
let type_ctx = ResolveTypeCtx::new(
9695
&asg,
97-
module_file_id,
96+
module_folder_id,
9897
physical_file_id,
9998
&ctx.types_in_modules,
10099
);

Diff for: src/resolve/global_variable.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@ pub fn resolve_global_variables(
1515
ast_workspace: &AstWorkspace,
1616
) -> Result<(), ResolveError> {
1717
for (physical_file_id, file) in ast_workspace.files.iter() {
18-
let module_file_id = ast_workspace.get_owning_module_or_self(*physical_file_id);
18+
let module_folder_id = ast_workspace.get_owning_module_or_self(*physical_file_id);
1919

2020
for global in file.global_variables.iter() {
2121
let type_ctx = ResolveTypeCtx::new(
2222
&asg,
23-
module_file_id,
23+
module_folder_id,
2424
*physical_file_id,
2525
&ctx.types_in_modules,
2626
);
2727

2828
let ty = type_ctx.resolve(&global.ast_type, ResolveTypeOptions::Unalias)?;
29-
let resolved_name = ResolvedName::new(module_file_id, &Name::plain(&global.name));
29+
let resolved_name = ResolvedName::new(module_folder_id, &Name::plain(&global.name));
3030

3131
let global_ref = asg.globals.insert(asg::GlobalVar {
3232
name: resolved_name,
@@ -37,7 +37,7 @@ pub fn resolve_global_variables(
3737
});
3838

3939
ctx.globals_in_modules
40-
.entry(module_file_id)
40+
.entry(module_folder_id)
4141
.or_default()
4242
.insert(
4343
global.name.clone(),

Diff for: src/resolve/helper_expr.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ pub fn resolve_helper_expressions(
1616
ast_workspace: &AstWorkspace,
1717
) -> Result<(), ResolveError> {
1818
for (physical_file_id, file) in ast_workspace.files.iter() {
19-
let module_file_id = ast_workspace.get_owning_module_or_self(*physical_file_id);
19+
let module_folder_id = ast_workspace.get_owning_module_or_self(*physical_file_id);
2020
let settings = &ast_workspace.settings[file.settings.unwrap_or_default().0];
2121

2222
// NOTE: This module should already have a function haystack
2323
let func_haystack = ctx
2424
.func_haystacks
25-
.get(&module_file_id)
25+
.get(&module_folder_id)
2626
.expect("function haystack to exist for file");
2727

2828
for helper_expr in file.helper_exprs.iter() {
@@ -39,7 +39,7 @@ pub fn resolve_helper_expressions(
3939
globals_in_modules: &ctx.globals_in_modules,
4040
helper_exprs_in_modules: &ctx.helper_exprs_in_modules,
4141
impls_in_modules: &ctx.impls_in_modules,
42-
module_fs_node_id: module_file_id,
42+
module_fs_node_id: module_folder_id,
4343
physical_fs_node_id: *physical_file_id,
4444
};
4545

@@ -54,7 +54,7 @@ pub fn resolve_helper_expressions(
5454

5555
let helper_exprs = ctx
5656
.helper_exprs_in_modules
57-
.entry(module_file_id)
57+
.entry(module_folder_id)
5858
.or_default();
5959

6060
helper_exprs.insert(

Diff for: src/resolve/impl_head/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,23 @@ pub fn create_impl_heads(
2020
ctx: &mut ResolveCtx,
2121
asg: &mut Asg,
2222
options: &BuildOptions,
23-
module_file_id: FsNodeId,
23+
module_folder_id: FsNodeId,
2424
physical_file_id: FsNodeId,
2525
file: &AstFile,
2626
) -> Result<(), ResolveError> {
2727
for (impl_i, ast_impl) in file.impls.iter().enumerate() {
28-
let impl_ref = create_impl_head(ctx, asg, module_file_id, physical_file_id, ast_impl)?;
28+
let impl_ref = create_impl_head(ctx, asg, module_folder_id, physical_file_id, ast_impl)?;
2929

3030
for (func_i, func) in ast_impl.body.iter().enumerate() {
31-
let name = ResolvedName::new(module_file_id, &Name::plain(&func.head.name));
31+
let name = ResolvedName::new(module_folder_id, &Name::plain(&func.head.name));
3232

3333
let func_ref = create_func_head(
3434
ctx,
3535
asg,
3636
options,
3737
name.clone(),
3838
&func.head,
39-
module_file_id,
39+
module_folder_id,
4040
physical_file_id,
4141
)?;
4242

0 commit comments

Comments
 (0)