Repository navigation
[pull] main from DeusData:main - #149
Merged
Merged
Conversation
Signed-off-by: JosephStarobinets <konstantinstarobinets@gmail.com>
Signed-off-by: Pcristin <xxxokzxxx@protonmail.com>
…probe watcher_unwatch_drains_pending_free failed three times on macos-14 CI with `index_call_count == 0, expected 1` at its dirty-poll precondition. That precondition needs every git subprocess of one poll (rev-parse HEAD, status, submodule foreach) to succeed. A transient probe failure (spawn refused under runner load, a non-zero exit) makes that poll a fail-closed no-op by design: #937 leaves the baseline uncommitted and the next poll retries. Several of those paths return without a log line, which matches the CI output exactly: watch, baseline, FAIL, with no watcher.changed and no watcher.git.failed. Holding a spawn failure with cbm_subprocess_force_spawn_eagain_for_testing reproduces that output deterministically. This is a test race, not a production defect. The precondition was also unrelated to the contract under test. A poll that stopped draining would neither crash nor leak, because cbm_watcher_free frees the same deferred list. So the old test could not see a broken drain at all. Add a test-only seam, cbm_watcher_test_pending_free_count, and assert the stable states the watcher holds: 0 parked before unwatch, 1 after, 0 after the next poll with no index work, and still 0 after a further poll. No assertion depends on a git probe succeeding. Dirty-poll reindexing stays covered by watcher_detects_dirty_worktree and watcher_modify_tracked_file. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
In IRIS embedded Python, iris.cls("Pkg.X").Method(...) names its target
class in the receiver's string literal. There was no receiver path for it
next to the classMethod* string dispatch, so after the weak-member-call
suppression in b6a2284 these calls produced no CALLS edge at all.
When a Python call's receiver is iris.cls() with a plain quoted literal as
its first argument, also emit "<class-literal>.<method>" as a callee, the
same way classMethodValue already does. Non-literal class arguments
(variables, f-strings) name nothing and get no class-qualified callee.
Also add invokeClassMethod to the Python dispatch suffixes. It takes the
same (class_name, method_name, *args) arguments as classMethodValue.
Tests: the #1260 repro as a pipeline test (two classes sharing Run, a
nonexistent class, an unrelated receiver, classMethodValue and
invokeClassMethod), plus extraction tests for the synthesized callee,
non-literal and f-string arguments, and invokeClassMethod.
Fixes #1260
Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
Signed-off-by: News <knewstimek@users.noreply.github.com>
walk_defs keeps its pending frames in a growable stack that was bounded by an 8M-frame ceiling (env CBM_WALK_DEFS_MAX). At the ceiling wd_push logged "extract.walk_defs_capped" once and then stopped pushing. Children are pushed last-to-first, so a file wider than the ceiling lost its FIRST definitions: a work cap decided graph content. Fix: no ceiling. The stack doubles on demand, heap frames now come from the memory core (cbm_realloc/cbm_free, class EXTRACT) instead of safe_realloc and raw free, and the doubling is overflow-guarded (int capacity and size_t byte count). The only thing that can stop the walk is an allocation failure, and that is loud: logged at error level as "extract.walk_stack_alloc_failed" (walker=walk_defs, pending, path) -- the same event the complexity walkers use -- and the file's result is marked has_error with "definitions walk: stack allocation failed", which the definitions passes already report as a per-file extract error. The arena-backed path (ctx->scratch) gets the same failure handling. Traversal order is unchanged. CBM_WALK_DEFS_MAX is removed. It was read only in wd_stack_max(); it was not documented anywhere (docs, --help, config, tests), so nothing else changes. extract_defs.c loses its raw free() call, so the memory-core baseline for the file drops from 5 to 4. Test (extraction suite): walk_defs_wide_file_extracts_every_definition extracts a C file with 1000 top-level functions with CBM_WALK_DEFS_MAX=256 set, and asserts every wd0..wd999 definition is present. RED on main (extract.walk_defs_capped limit=256; wd0 missing), GREEN with the fix, RED again with the production change reverted. The extraction (379), complexity (5), ast_profile (10) and semantic (35) suites pass. Real input: Linux kernel, index-only, fresh cache and runtime dirs, same machine. main and fix both produce 8,530,336 nodes and 15,764,128 edges, SEMANTICALLY_RELATED 607 each, and the full node set (label, QN, lines) and edge set (type, source QN, target QN) hash identically -- no kernel file approaches the old ceiling. Index wall time 210.0 s (main) vs 194.4 s (fix), within run-to-run noise. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
When the receiver is iris.cls("<literal>"), the class-qualified name now
replaces the primary call's callee instead of being pushed as a second
call. Keeping the bare name let it weak-match an unrelated same-named
method.
Tests assert exactly one Run call per iris.cls() site, and the pipeline
fixture adds two unrelated Run definitions that must receive no edges.
Refs #1260
Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
…lure test watcher_sustained_failure_logs_once_issue2015 failed on macos-14 CI with `failing_index_calls == 13, expected 14`. Its loop ran exactly 14 touch+poll rounds and assumed each one reached the index callback. A poll whose git probe fails transiently (spawn refused under runner load) is a fail-closed no-op by design (#937): the baseline stays uncommitted and the next poll retries. So one refused spawn costs one attempt, and the count ends at 13. This is the same test race as watcher_unwatch_drains_pending_free, not a production defect. Holding one exhausted spawn mid-loop with cbm_subprocess_force_spawn_eagain_for_testing reproduces the CI line exactly. The loop now polls until the 14th failed attempt instead of counting polls. Each poll runs at most one attempt for the single project, so it stops at exactly 14. A watcher that never reindexes hangs, and the runner reports that as a failure, never a pass. The log-once contract means the same thing as before: watcher.index.sustained_failure is emitted only on a failed index attempt when the streak equals the threshold, so extra no-op polls cannot add lines. An `==` to `>=` mutation in watcher.c still turns it red (`sustained_log_hits == 5, expected 1`). The change is now a dirty worktree instead of a commit. If the baseline poll itself failed, the old commit would be adopted as the baseline HEAD and never reindexed, so the wait would never end. The baseline keeps the dirty signature at "clean known", so a dirty change is seen whenever the baseline lands. With spawns forced to fail at the baseline poll and again mid-loop, the test passes after 16 polls for 14 attempts. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
…-state test(watcher): pin the pending-free drain on a held state, not a git probe
fix(extract): definitions walk stack grows without a ceiling
fix(windows): preserve mkstemp errors through cleanup
fix(python): resolve iris.cls("Pkg.X").Method() to the named class
test(cli): keep fixture host until released
…atic-array-access fix(pipeline): decode persisted LSP surfaces with linear array iteration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )