@@ -34,7 +34,7 @@ store: *DocumentStore,
3434ip : * InternPool ,
3535resolved_callsites : std .AutoHashMapUnmanaged (Declaration.Param , ? Type ) = .empty ,
3636resolved_nodes : std .HashMapUnmanaged (NodeWithUri , ? Binding , NodeWithUri .Context , std .hash_map .default_max_load_percentage ) = .empty ,
37- collect_callsite_references : bool ,
37+ max_callsite_depth : usize = 4 , // TODO: come up with a sensible default
3838/// avoid unnecessarily parsing number literals
3939resolve_number_literal_values : bool ,
4040/// handle of the doc where the request originated
@@ -57,7 +57,6 @@ pub fn init(
5757 .arena = arena ,
5858 .store = store ,
5959 .ip = ip ,
60- .collect_callsite_references = true ,
6160 .resolve_number_literal_values = false ,
6261 .root_handle = root_handle ,
6362 };
@@ -1731,7 +1730,7 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
17311730 const tree = & decl_handle .handle .tree ;
17321731 const is_cimport = std .mem .eql (u8 , std .fs .path .basename (decl_handle .handle .uri .raw ), "cimport.zig" );
17331732
1734- if (is_cimport or ! analyser .collect_callsite_references ) return null ;
1733+ if (is_cimport or analyser .max_callsite_depth == 0 ) return null ;
17351734
17361735 // protection against recursive callsite resolution
17371736 const gop_resolved = try analyser .resolved_callsites .getOrPut (analyser .gpa , pay );
@@ -1770,10 +1769,8 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
17701769 if (real_param_idx >= call .ast .params .len ) continue ;
17711770
17721771 var ty = resolve_ty : {
1773- // don't resolve callsite references while resolving callsite references
1774- const old_collect_callsite_references = analyser .collect_callsite_references ;
1775- defer analyser .collect_callsite_references = old_collect_callsite_references ;
1776- analyser .collect_callsite_references = false ;
1772+ analyser .max_callsite_depth -= 1 ;
1773+ defer analyser .max_callsite_depth += 1 ;
17771774
17781775 break :resolve_ty try analyser .resolveTypeOfNode (.of (
17791776 // TODO?: this is a """heuristic based approach"""
@@ -1796,7 +1793,7 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
17961793 }
17971794
17981795 const maybe_type = try Type .fromEither (analyser , possible .items );
1799- if (maybe_type ) | ty | analyser . resolved_callsites . getPtr ( pay ) .? .* = ty ;
1796+ if (maybe_type ) | ty | gop_resolved . value_ptr .* = ty ;
18001797 return maybe_type ;
18011798}
18021799
0 commit comments