diff options
Diffstat (limited to 'src/server/caches.odin')
| -rw-r--r-- | src/server/caches.odin | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/server/caches.odin b/src/server/caches.odin index f1cdc2e..a65de48 100644 --- a/src/server/caches.odin +++ b/src/server/caches.odin @@ -25,14 +25,31 @@ FileResolveCache :: struct { @(thread_local) file_resolve_cache: FileResolveCache -resolve_entire_file_cached :: proc(document: ^Document) -> map[uintptr]SymbolAndNode { - if document.uri.uri not_in file_resolve_cache.files { - file_resolve_cache.files[document.uri.uri] = FileResolve { +resolve_entire_file_cached :: proc(document: ^Document) -> FileResolve { + + file, cashed := file_resolve_cache.files[document.uri.uri] + + if !cashed { + file = { symbols = resolve_entire_file(document, .None, virtual.arena_allocator(document.allocator)), } + file_resolve_cache.files[document.uri.uri] = file + } + + return file +} + +resolve_ranged_file_cached :: proc(document: ^Document, range: common.Range, allocator := context.allocator) -> FileResolve { + + file, cashed := file_resolve_cache.files[document.uri.uri] + + if !cashed { + file = { + symbols = resolve_ranged_file(document, range, allocator), + } } - return file_resolve_cache.files[document.uri.uri].symbols + return file } BuildCache :: struct { |