@@ -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 };
@@ -1630,7 +1629,7 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
16301629 const tree = & decl_handle .handle .tree ;
16311630 const is_cimport = std .mem .eql (u8 , std .fs .path .basename (decl_handle .handle .uri .raw ), "cimport.zig" );
16321631
1633- if (is_cimport or ! analyser .collect_callsite_references ) return null ;
1632+ if (is_cimport or analyser .max_callsite_depth == 0 ) return null ;
16341633
16351634 // protection against recursive callsite resolution
16361635 const gop_resolved = try analyser .resolved_callsites .getOrPut (analyser .gpa , pay );
@@ -1669,10 +1668,8 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
16691668 if (real_param_idx >= call .ast .params .len ) continue ;
16701669
16711670 var ty = resolve_ty : {
1672- // don't resolve callsite references while resolving callsite references
1673- const old_collect_callsite_references = analyser .collect_callsite_references ;
1674- defer analyser .collect_callsite_references = old_collect_callsite_references ;
1675- analyser .collect_callsite_references = false ;
1671+ analyser .max_callsite_depth -= 1 ;
1672+ defer analyser .max_callsite_depth += 1 ;
16761673
16771674 break :resolve_ty try analyser .resolveTypeOfNode (.of (
16781675 // TODO?: this is a """heuristic based approach"""
@@ -1695,7 +1692,7 @@ fn resolveCallsiteReferences(analyser: *Analyser, decl_handle: DeclWithHandle) E
16951692 }
16961693
16971694 const maybe_type = try Type .fromEither (analyser , possible .items );
1698- if (maybe_type ) | ty | analyser . resolved_callsites . getPtr ( pay ) .? .* = ty ;
1695+ if (maybe_type ) | ty | gop_resolved . value_ptr .* = ty ;
16991696 return maybe_type ;
17001697}
17011698
0 commit comments