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