@@ -33,7 +33,7 @@ store: *DocumentStore,
3333ip : * InternPool ,
3434resolved_callsites : std .AutoHashMapUnmanaged (Declaration.Param , ? Type ) = .empty ,
3535resolved_nodes : std .HashMapUnmanaged (NodeWithUri , ? Binding , NodeWithUri .Context , std .hash_map .default_max_load_percentage ) = .empty ,
36- collect_callsite_references : bool ,
36+ max_callsite_depth : usize = 4 , // TODO: come up with a sensible default
3737/// avoid unnecessarily parsing number literals
3838resolve_number_literal_values : bool ,
3939/// handle of the doc where the request originated
@@ -56,7 +56,6 @@ pub fn init(
5656 .arena = arena ,
5757 .store = store ,
5858 .ip = ip ,
59- .collect_callsite_references = true ,
6059 .resolve_number_literal_values = false ,
6160 .root_handle = root_handle ,
6261 };
@@ -1699,7 +1698,7 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
16991698 const tree = & decl_handle .handle .tree ;
17001699 const is_cimport = std .mem .eql (u8 , std .fs .path .basename (decl_handle .handle .uri .raw ), "cimport.zig" );
17011700
1702- if (is_cimport or ! analyser .collect_callsite_references ) return null ;
1701+ if (is_cimport or analyser .max_callsite_depth == 0 ) return null ;
17031702
17041703 // protection against recursive callsite resolution
17051704 const gop_resolved = try analyser .resolved_callsites .getOrPut (analyser .gpa , pay );
@@ -1738,10 +1737,8 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
17381737 if (real_param_idx >= call .ast .params .len ) continue ;
17391738
17401739 var ty = resolve_ty : {
1741- // don't resolve callsite references while resolving callsite references
1742- const old_collect_callsite_references = analyser .collect_callsite_references ;
1743- defer analyser .collect_callsite_references = old_collect_callsite_references ;
1744- analyser .collect_callsite_references = false ;
1740+ analyser .max_callsite_depth -= 1 ;
1741+ defer analyser .max_callsite_depth += 1 ;
17451742
17461743 break :resolve_ty try analyser .resolveTypeOfNode (.of (
17471744 // TODO?: this is a """heuristic based approach"""
@@ -1764,7 +1761,7 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
17641761 }
17651762
17661763 const maybe_type = try Type .fromEither (analyser , possible .items );
1767- if (maybe_type ) | ty | analyser . resolved_callsites . getPtr ( pay ) .? .* = ty ;
1764+ if (maybe_type ) | ty | gop_resolved . value_ptr .* = ty ;
17681765 return maybe_type ;
17691766}
17701767
0 commit comments