@colbymchenry/codegraph-darwin-arm64 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/lib/dist/db/index.d.ts +17 -5
  2. package/lib/dist/db/index.d.ts.map +1 -1
  3. package/lib/dist/db/index.js +68 -12
  4. package/lib/dist/db/index.js.map +1 -1
  5. package/lib/dist/db/queries.d.ts +25 -1
  6. package/lib/dist/db/queries.d.ts.map +1 -1
  7. package/lib/dist/db/queries.js +39 -0
  8. package/lib/dist/db/queries.js.map +1 -1
  9. package/lib/dist/extraction/index.d.ts.map +1 -1
  10. package/lib/dist/extraction/index.js +84 -31
  11. package/lib/dist/extraction/index.js.map +1 -1
  12. package/lib/dist/index.d.ts.map +1 -1
  13. package/lib/dist/index.js +21 -3
  14. package/lib/dist/index.js.map +1 -1
  15. package/lib/dist/mcp/daemon.d.ts.map +1 -1
  16. package/lib/dist/mcp/daemon.js +23 -1
  17. package/lib/dist/mcp/daemon.js.map +1 -1
  18. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  19. package/lib/dist/mcp/proxy.js +8 -0
  20. package/lib/dist/mcp/proxy.js.map +1 -1
  21. package/lib/dist/mcp/query-pool.d.ts +14 -0
  22. package/lib/dist/mcp/query-pool.d.ts.map +1 -1
  23. package/lib/dist/mcp/query-pool.js +18 -0
  24. package/lib/dist/mcp/query-pool.js.map +1 -1
  25. package/lib/dist/mcp/session.d.ts.map +1 -1
  26. package/lib/dist/mcp/session.js +6 -0
  27. package/lib/dist/mcp/session.js.map +1 -1
  28. package/lib/dist/mcp/tools.d.ts.map +1 -1
  29. package/lib/dist/mcp/tools.js +14 -9
  30. package/lib/dist/mcp/tools.js.map +1 -1
  31. package/lib/dist/mcp/transport.d.ts.map +1 -1
  32. package/lib/dist/mcp/transport.js +18 -0
  33. package/lib/dist/mcp/transport.js.map +1 -1
  34. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts +2 -1
  35. package/lib/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  36. package/lib/dist/resolution/c-fnptr-synthesizer.js +170 -146
  37. package/lib/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  38. package/lib/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  39. package/lib/dist/resolution/callback-synthesizer.js +322 -93
  40. package/lib/dist/resolution/callback-synthesizer.js.map +1 -1
  41. package/lib/dist/resolution/goframe-synthesizer.d.ts +2 -1
  42. package/lib/dist/resolution/goframe-synthesizer.d.ts.map +1 -1
  43. package/lib/dist/resolution/goframe-synthesizer.js +8 -3
  44. package/lib/dist/resolution/goframe-synthesizer.js.map +1 -1
  45. package/lib/dist/resolution/index.d.ts +10 -0
  46. package/lib/dist/resolution/index.d.ts.map +1 -1
  47. package/lib/dist/resolution/index.js +55 -15
  48. package/lib/dist/resolution/index.js.map +1 -1
  49. package/lib/dist/resolution/types.d.ts +9 -0
  50. package/lib/dist/resolution/types.d.ts.map +1 -1
  51. package/lib/node_modules/.package-lock.json +1 -1
  52. package/lib/package.json +1 -1
  53. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
@@ -151,7 +151,15 @@ class LineBasedJsonRpcTransport {
151
151
  }
152
152
  if (this.messageHandler) {
153
153
  try {
154
+ if (process.env.CODEGRAPH_MCP_DEBUG) {
155
+ const m = parsed;
156
+ process.stderr.write(`[mcp-debug] recv method=${m.method} id=${String(m.id)}\n`);
157
+ }
154
158
  await this.messageHandler(parsed);
159
+ if (process.env.CODEGRAPH_MCP_DEBUG) {
160
+ const m = parsed;
161
+ process.stderr.write(`[mcp-debug] handled method=${m.method} id=${String(m.id)}\n`);
162
+ }
155
163
  }
156
164
  catch (err) {
157
165
  const message = parsed;
@@ -292,7 +300,12 @@ class SocketTransport extends LineBasedJsonRpcTransport {
292
300
  start(handler) {
293
301
  this.messageHandler = handler;
294
302
  this.socket.setEncoding('utf8');
303
+ if (process.env.CODEGRAPH_MCP_DEBUG) {
304
+ process.stderr.write(`[mcp-debug] transport attached flowing=${String(this.socket.readableFlowing)} buffered=${this.socket.readableLength}\n`);
305
+ }
295
306
  this.socket.on('data', (chunk) => {
307
+ if (process.env.CODEGRAPH_MCP_DEBUG)
308
+ process.stderr.write(`[mcp-debug] transport data ${chunk.length}b\n`);
296
309
  this.buffer += chunk;
297
310
  let idx;
298
311
  // Drain every complete line; tail-fragment stays in the buffer for the
@@ -312,6 +325,11 @@ class SocketTransport extends LineBasedJsonRpcTransport {
312
325
  process.stderr.write(`[CodeGraph daemon] socket error: ${err.message}\n`);
313
326
  this.handleSocketClose();
314
327
  });
328
+ // The daemon's hello reader hands the socket over PAUSED (so the unshifted
329
+ // tail can't be emitted to zero listeners and lost — the #662 wedge).
330
+ // Attaching 'data' does not resume an explicitly-paused stream; do it here.
331
+ // Harmless when the socket was never paused.
332
+ this.socket.resume();
315
333
  }
316
334
  stop() {
317
335
  if (this.stopped)
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Edge } from '../types';
2
2
  import type { QueryBuilder } from '../db/queries';
3
3
  import type { ResolutionContext } from './types';
4
- export declare function cFnPointerDispatchEdges(queries: QueryBuilder, ctx: ResolutionContext): Edge[];
4
+ import type { MaybeYield } from './cooperative-yield';
5
+ export declare function cFnPointerDispatchEdges(_queries: QueryBuilder, ctx: ResolutionContext, onYield: MaybeYield): Promise<Edge[]>;
5
6
  //# sourceMappingURL=c-fnptr-synthesizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"c-fnptr-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/c-fnptr-synthesizer.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,IAAI,EAAQ,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA+PjD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,EAAE,CA4oB7F"}
1
+ {"version":3,"file":"c-fnptr-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/c-fnptr-synthesizer.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAAE,IAAI,EAAQ,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAgQtD,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAmqBlI"}
@@ -85,6 +85,7 @@ exports.cFnPointerDispatchEdges = cFnPointerDispatchEdges;
85
85
  * key + a real-function gate; a project with no fn-pointer dispatch is a no-op.
86
86
  */
87
87
  const path = __importStar(require("node:path"));
88
+ const lru_cache_1 = require("./lru-cache");
88
89
  const strip_comments_1 = require("./strip-comments");
89
90
  const C_CPP_EXT = /\.(c|h|cc|cpp|cxx|hpp|hh|hxx|cppm|ipp|inl|tcc)$/i;
90
91
  const FN_KINDS = new Set(['function', 'method']);
@@ -337,13 +338,18 @@ const C_TYPE_KEYWORDS = new Set([
337
338
  const INCLUDE_RE = /#[ \t]*include[ \t]+"([^"\n]+)"/g;
338
339
  /** Included files worth scanning for registration tables (e.g. a generated `.def`). */
339
340
  const INCLUDABLE_EXT = /\.(def|inc|h|hh|hpp|hxx|c|cc|cpp|cxx|ipp|tcc|tbl)$/i;
340
- function cFnPointerDispatchEdges(queries, ctx) {
341
+ async function cFnPointerDispatchEdges(_queries, ctx, onYield) {
342
+ let scannedFiles = 0;
341
343
  const files = ctx.getAllFiles().filter((f) => C_CPP_EXT.test(f));
342
344
  if (files.length === 0)
343
345
  return [];
344
- // Cache raw + stripped source per file (read once, reused across passes).
345
- // Raw is needed for `#include "…"` directives strip blanks string contents.
346
- const rawCache = new Map();
346
+ // Cache raw + stripped source per file, LRU-BOUNDED. The old unbounded Maps
347
+ // retained every C/C++ file's raw AND stripped text for the whole pass —
348
+ // multiple GB on the Linux kernel, one of the two OOM culprits in #1212.
349
+ // Every sweep below iterates in `files` order, and node-kind scans return
350
+ // rows in file-commit order, so access is near-sequential and a small LRU
351
+ // hits; a miss just re-reads + re-strips.
352
+ const rawCache = new lru_cache_1.LRUCache(128);
347
353
  const raw = (file) => {
348
354
  if (rawCache.has(file))
349
355
  return rawCache.get(file);
@@ -351,10 +357,14 @@ function cFnPointerDispatchEdges(queries, ctx) {
351
357
  rawCache.set(file, r);
352
358
  return r;
353
359
  };
354
- const srcCache = new Map();
360
+ const srcCache = new lru_cache_1.LRUCache(128);
355
361
  const src = (file) => {
356
- if (srcCache.has(file))
357
- return srcCache.get(file);
362
+ // A cached '' (empty or unreadable file) returns '' where the miss path
363
+ // returns null for unreadable — every caller falsy-checks, so the two are
364
+ // interchangeable.
365
+ const hit = srcCache.get(file);
366
+ if (hit !== undefined)
367
+ return hit;
358
368
  const r = raw(file);
359
369
  const s = r == null ? '' : (0, strip_comments_1.stripCommentsForRegex)(r, 'c');
360
370
  srcCache.set(file, s);
@@ -380,6 +390,8 @@ function cFnPointerDispatchEdges(queries, ctx) {
380
390
  const fnPtrTypedefs = new Set();
381
391
  const fnTypeTypedefs = new Set();
382
392
  for (const file of files) {
393
+ if ((++scannedFiles & 15) === 0)
394
+ await onYield();
383
395
  const s = src(file);
384
396
  if (!s || !s.includes('typedef'))
385
397
  continue;
@@ -472,10 +484,12 @@ function cFnPointerDispatchEdges(queries, ctx) {
472
484
  if (fields.some((f) => f.isFnPtr))
473
485
  structLayout.set(name, fields);
474
486
  };
475
- for (const st of ctx.getNodesByKind('struct')) {
487
+ for (const st of (ctx.iterateNodesByKind?.('struct') ?? ctx.getNodesByKind('struct'))) {
488
+ if ((++scannedFiles & 255) === 0)
489
+ await onYield();
476
490
  if (!C_CPP_EXT.test(st.filePath))
477
491
  continue;
478
- const s = srcCache.get(st.filePath) ?? src(st.filePath);
492
+ const s = src(st.filePath);
479
493
  if (!s)
480
494
  continue;
481
495
  const body = sliceLines(s, st.startLine, st.endLine);
@@ -490,12 +504,9 @@ function cFnPointerDispatchEdges(queries, ctx) {
490
504
  // up by `#ifdef`) is discovered later during the unit scan. The `reg.size === 0`
491
505
  // guard after registration still short-circuits when nothing bridges.
492
506
  const fnPtrFieldOf = (struct, field) => !!structLayout.get(struct)?.some((f) => f.name === field && f.isFnPtr);
493
- // C/C++ function + method nodes, materialized once (bounded by C/C++ files).
494
- const cFns = [];
495
- for (const fn of iterateFns(queries)) {
496
- if (C_CPP_EXT.test(fn.filePath))
497
- cFns.push(fn);
498
- }
507
+ // C/C++ function + method nodes are STREAMED per sweep (see passes D/E)
508
+ // the old materialized `cFns` array held every function node on the repo
509
+ // (O(nodes) memory, part of the #1212 kernel OOM).
499
510
  // ---- function-name → node resolution (prefer a function in the same file) ----
500
511
  const resolveFn = (name, preferFile) => {
501
512
  const cands = ctx.getNodesByName(name).filter((n) => FN_KINDS.has(n.kind));
@@ -511,14 +522,14 @@ function cFnPointerDispatchEdges(queries, ctx) {
511
522
  return cands[0];
512
523
  };
513
524
  // ---- Pass C: registrations — Map<"struct.field", Set<funcNodeId>> ----
525
+ // Ids only — retaining the full Node per registration (the old `idToNode`)
526
+ // was write-only dead weight at O(registrations) memory.
514
527
  const reg = new Map();
515
- const idToNode = new Map();
516
528
  const addReg = (struct, field, fn) => {
517
529
  const key = `${struct}.${field}`;
518
530
  if (!reg.has(key))
519
531
  reg.set(key, new Set());
520
532
  reg.get(key).add(fn.id);
521
- idToNode.set(fn.id, fn);
522
533
  };
523
534
  // Bare arrays-of-fn-pointers (no struct): array VARIABLE name → per-file sets
524
535
  // of registered function ids. Multi-entry because a file-scope `static` table
@@ -537,7 +548,6 @@ function cFnPointerDispatchEdges(queries, ctx) {
537
548
  entries.push(e);
538
549
  }
539
550
  e.ids.add(fn.id);
540
- idToNode.set(fn.id, fn);
541
551
  };
542
552
  // A struct value `{ … }` (one element) — register its function entries to the
543
553
  // struct's fields, by `.field = fn` designators or by positional slot.
@@ -612,7 +622,8 @@ function cFnPointerDispatchEdges(queries, ctx) {
612
622
  }
613
623
  };
614
624
  // Per-file macro + include parsing (any file, indexed or not), cached.
615
- const fnMacroCache = new Map();
625
+ // Derived per-file caches, LRU-bounded like the content caches (#1212).
626
+ const fnMacroCache = new lru_cache_1.LRUCache(256);
616
627
  const fileFnMacros = (file) => {
617
628
  let m = fnMacroCache.get(file);
618
629
  if (!m) {
@@ -621,7 +632,7 @@ function cFnPointerDispatchEdges(queries, ctx) {
621
632
  }
622
633
  return m;
623
634
  };
624
- const objMacroCache = new Map();
635
+ const objMacroCache = new lru_cache_1.LRUCache(256);
625
636
  const fileObjMacros = (file) => {
626
637
  let m = objMacroCache.get(file);
627
638
  if (!m) {
@@ -630,7 +641,7 @@ function cFnPointerDispatchEdges(queries, ctx) {
630
641
  }
631
642
  return m;
632
643
  };
633
- const definedCache = new Map();
644
+ const definedCache = new lru_cache_1.LRUCache(256);
634
645
  const fileDefinedNames = (file) => {
635
646
  let d = definedCache.get(file);
636
647
  if (!d) {
@@ -639,7 +650,7 @@ function cFnPointerDispatchEdges(queries, ctx) {
639
650
  }
640
651
  return d;
641
652
  };
642
- const includeCache = new Map();
653
+ const includeCache = new lru_cache_1.LRUCache(1024);
643
654
  const localIncludesOf = (file) => {
644
655
  let out = includeCache.get(file);
645
656
  if (out)
@@ -681,45 +692,7 @@ function cFnPointerDispatchEdges(queries, ctx) {
681
692
  buildEnv(inc, depth - 1, seen, fn, obj, def);
682
693
  };
683
694
  const indexedSet = new Set(files);
684
- const units = [];
685
695
  const seenInclude = new Set();
686
- for (const file of files) {
687
- const env = new Map();
688
- const objEnv = new Map();
689
- const defined = new Set();
690
- buildEnv(file, 2, new Set(), env, objEnv, defined);
691
- const s = src(file);
692
- if (s)
693
- units.push({ text: s, file, env, objEnv });
694
- for (const target of localIncludesOf(file)) {
695
- if (seenInclude.has(`${file}>${target}`))
696
- continue;
697
- const incSrc = src(target);
698
- if (!incSrc)
699
- continue;
700
- if (indexedSet.has(target)) {
701
- // Re-scan an indexed header only when this includer unlocks guarded code.
702
- const ownDef = fileDefinedNames(target);
703
- const adds = [...defined].some((n) => !ownDef.has(n));
704
- if (!adds || !/#\s*if/.test(incSrc))
705
- continue;
706
- }
707
- seenInclude.add(`${file}>${target}`);
708
- // The include is pasted into the includer — evaluate its conditionals in
709
- // the includer's defined set (a no-op when it has none). Re-parse the
710
- // included file's OWN macros from that resolved text so a macro it defines
711
- // conditionally (vim's `EXCMD`, whose plain last-wins parse picks the enum
712
- // arm) overrides with the ARM THAT IS ACTUALLY ACTIVE here.
713
- const text = evalConditionals(incSrc, defined);
714
- const incEnv = new Map(env);
715
- for (const [k, v] of parseFunctionMacros(text))
716
- incEnv.set(k, v);
717
- const incObjEnv = new Map(objEnv);
718
- for (const [k, v] of parseObjectMacros(text))
719
- incObjEnv.set(k, v);
720
- units.push({ text, file: target, env: incEnv, objEnv: incObjEnv });
721
- }
722
- }
723
696
  // Global variable → struct type, for resolving a dispatch through a file-scope
724
697
  // table by subscript (`cmdnames[i].cmd_func(…)`).
725
698
  const globalVarType = new Map();
@@ -760,10 +733,13 @@ function cFnPointerDispatchEdges(queries, ctx) {
760
733
  // (`zend_rc_dtor_func_t t[]`) needs none. The typedef-set membership gate
761
734
  // (below) is what separates this from a plain data/struct array.
762
735
  const ARRAY_TABLE_RE = /(?:^|[;{}])\s*(?:(?:static|const|extern|register|volatile)\s+)*(\w+)\s+(\*\s*)?(\w+)\s*\[[^\]]*\]\s*=\s*\{/g;
763
- for (const unit of units) {
736
+ // Process ONE unit's text and discard it. The old shape built every unit up
737
+ // front (`const units: Unit[]`) — the full text of every C file plus its
738
+ // expanded includes held simultaneously, gigabytes on the kernel (#1212).
739
+ const processUnit = (unit) => {
764
740
  const s = unit.text;
765
741
  if (!s || !s.includes('{'))
766
- continue;
742
+ return;
767
743
  INLINE_STRUCT_RE.lastIndex = 0;
768
744
  let im;
769
745
  while ((im = INLINE_STRUCT_RE.exec(s))) {
@@ -793,7 +769,7 @@ function cFnPointerDispatchEdges(queries, ctx) {
793
769
  }
794
770
  }
795
771
  if (!s.includes('='))
796
- continue;
772
+ return;
797
773
  INIT_RE.lastIndex = 0;
798
774
  let m;
799
775
  while ((m = INIT_RE.exec(s))) {
@@ -829,6 +805,47 @@ function cFnPointerDispatchEdges(queries, ctx) {
829
805
  registerArrayValue(am[3], s.slice(open + 1, close), unit.file, unit.env);
830
806
  ARRAY_TABLE_RE.lastIndex = close;
831
807
  }
808
+ };
809
+ // ---- Pass C: registrations — stream each file (and its qualifying local
810
+ // includes) through processUnit, one at a time.
811
+ for (const file of files) {
812
+ if ((++scannedFiles & 15) === 0)
813
+ await onYield();
814
+ const env = new Map();
815
+ const objEnv = new Map();
816
+ const defined = new Set();
817
+ buildEnv(file, 2, new Set(), env, objEnv, defined);
818
+ const s = src(file);
819
+ if (s)
820
+ processUnit({ text: s, file, env, objEnv });
821
+ for (const target of localIncludesOf(file)) {
822
+ if (seenInclude.has(`${file}>${target}`))
823
+ continue;
824
+ const incSrc = src(target);
825
+ if (!incSrc)
826
+ continue;
827
+ if (indexedSet.has(target)) {
828
+ // Re-scan an indexed header only when this includer unlocks guarded code.
829
+ const ownDef = fileDefinedNames(target);
830
+ const adds = [...defined].some((n) => !ownDef.has(n));
831
+ if (!adds || !/#\s*if/.test(incSrc))
832
+ continue;
833
+ }
834
+ seenInclude.add(`${file}>${target}`);
835
+ // The include is pasted into the includer — evaluate its conditionals in
836
+ // the includer's defined set (a no-op when it has none). Re-parse the
837
+ // included file's OWN macros from that resolved text so a macro it defines
838
+ // conditionally (vim's `EXCMD`, whose plain last-wins parse picks the enum
839
+ // arm) overrides with the ARM THAT IS ACTUALLY ACTIVE here.
840
+ const text = evalConditionals(incSrc, defined);
841
+ const incEnv = new Map(env);
842
+ for (const [k, v] of parseFunctionMacros(text))
843
+ incEnv.set(k, v);
844
+ const incObjEnv = new Map(objEnv);
845
+ for (const [k, v] of parseObjectMacros(text))
846
+ incObjEnv.set(k, v);
847
+ processUnit({ text, file: target, env: incEnv, objEnv: incObjEnv });
848
+ }
832
849
  }
833
850
  // ---- receiver-type resolution within a function's source ----
834
851
  // `(?:struct )?TYPE [*]recv` declared in the params or body → TYPE (if a known
@@ -882,21 +899,27 @@ function cFnPointerDispatchEdges(queries, ctx) {
882
899
  // a fixpoint so a hook slot inherits a registry field's handlers.
883
900
  const FIELD_ASSIGN_RE = /(\w+)\s*(?:->|\.)\s*(\w+)\s*=\s*(\w+)\s*(?:->|\.)\s*(\w+)/g;
884
901
  const propagations = [];
885
- for (const fn of cFns) {
886
- const s = srcCache.get(fn.filePath);
887
- if (!s)
888
- continue;
889
- const body = sliceLines(s, fn.startLine, fn.endLine);
890
- if (!body.includes('='))
902
+ for (const file of files) {
903
+ if ((++scannedFiles & 15) === 0)
904
+ await onYield();
905
+ const s = src(file);
906
+ if (!s || !s.includes('='))
891
907
  continue;
892
- FIELD_ASSIGN_RE.lastIndex = 0;
893
- let m;
894
- while ((m = FIELD_ASSIGN_RE.exec(body))) {
895
- const [, lrecv, lfield, rrecv, rfield] = m;
896
- const lt = recvTypeIn(body, lrecv);
897
- const rt = recvTypeIn(body, rrecv);
898
- if (lt && rt && fnPtrFieldOf(lt, lfield) && fnPtrFieldOf(rt, rfield)) {
899
- propagations.push({ to: `${lt}.${lfield}`, from: `${rt}.${rfield}` });
908
+ for (const fn of ctx.getNodesInFile(file)) {
909
+ if (!FN_KINDS.has(fn.kind))
910
+ continue;
911
+ const body = sliceLines(s, fn.startLine, fn.endLine);
912
+ if (!body.includes('='))
913
+ continue;
914
+ FIELD_ASSIGN_RE.lastIndex = 0;
915
+ let m;
916
+ while ((m = FIELD_ASSIGN_RE.exec(body))) {
917
+ const [, lrecv, lfield, rrecv, rfield] = m;
918
+ const lt = recvTypeIn(body, lrecv);
919
+ const rt = recvTypeIn(body, rrecv);
920
+ if (lt && rt && fnPtrFieldOf(lt, lfield) && fnPtrFieldOf(rt, rfield)) {
921
+ propagations.push({ to: `${lt}.${lfield}`, from: `${rt}.${rfield}` });
922
+ }
900
923
  }
901
924
  }
902
925
  }
@@ -934,76 +957,43 @@ function cFnPointerDispatchEdges(queries, ctx) {
934
957
  const ARRAY_DISPATCH_RE = /(?:\(\s*\*\s*)?\b(\w+)\s*\[[^\][]*\]\s*\)?\s*\(/g;
935
958
  const edges = [];
936
959
  const seen = new Set();
937
- for (const fn of cFns) {
938
- const s = srcCache.get(fn.filePath);
960
+ for (const file of files) {
961
+ if ((++scannedFiles & 15) === 0)
962
+ await onYield();
963
+ const s = src(file);
939
964
  if (!s)
940
965
  continue;
941
- const body = sliceLines(s, fn.startLine, fn.endLine);
942
- DISPATCH_RE.lastIndex = 0;
943
- let m;
944
- let added = 0;
945
- while ((m = DISPATCH_RE.exec(body)) && added < FANOUT_CAP) {
946
- const baseChain = m[1].replace(/\s*(?:->|\.)\s*$/, '').trim(); // receiver, minus the trailing arrow
947
- const field = m[2];
948
- const owners = fieldToStructs.get(field);
949
- if (!owners || owners.size === 0)
950
- continue;
951
- // 1) resolve the receiver chain's struct type precisely (handles c->cmd->proc);
952
- // 2) else the last segment as a simple local/param of a fn-pointer-bearing struct;
953
- // 3) else fall back to a field name that belongs to exactly one struct.
954
- let struct = resolveChainType(body, baseChain);
955
- if (!struct || !owners.has(struct)) {
956
- const lastSeg = baseChain.replace(/\s*\[[^\]]*\]/g, '').split(/\s*(?:->|\.)\s*/).pop();
957
- const t = recvTypeIn(body, lastSeg);
958
- struct = t && owners.has(t) ? t : null;
959
- }
960
- if (!struct || !owners.has(struct))
961
- struct = owners.size === 1 ? [...owners][0] : null;
962
- if (!struct)
966
+ for (const fn of ctx.getNodesInFile(file)) {
967
+ if (!FN_KINDS.has(fn.kind))
963
968
  continue;
964
- const targets = reg.get(`${struct}.${field}`);
965
- if (!targets)
966
- continue;
967
- const line = fn.startLine + body.slice(0, m.index).split('\n').length - 1;
968
- for (const tid of targets) {
969
- if (tid === fn.id)
970
- continue;
971
- const key = `${fn.id}>${tid}`;
972
- if (seen.has(key))
969
+ const body = sliceLines(s, fn.startLine, fn.endLine);
970
+ DISPATCH_RE.lastIndex = 0;
971
+ let m;
972
+ let added = 0;
973
+ while ((m = DISPATCH_RE.exec(body)) && added < FANOUT_CAP) {
974
+ const baseChain = m[1].replace(/\s*(?:->|\.)\s*$/, '').trim(); // receiver, minus the trailing arrow
975
+ const field = m[2];
976
+ const owners = fieldToStructs.get(field);
977
+ if (!owners || owners.size === 0)
973
978
  continue;
974
- seen.add(key);
975
- edges.push({
976
- source: fn.id,
977
- target: tid,
978
- kind: 'calls',
979
- line,
980
- provenance: 'heuristic',
981
- metadata: {
982
- synthesizedBy: 'fn-pointer-dispatch',
983
- via: `${struct}.${field}`,
984
- registeredAt: `${fn.filePath}:${line}`,
985
- },
986
- });
987
- if (++added >= FANOUT_CAP)
988
- break;
989
- }
990
- }
991
- // ---- bare array-of-fn-pointers dispatch (`tbl[i](…)`) ----
992
- if (arrayReg.size && added < FANOUT_CAP) {
993
- ARRAY_DISPATCH_RE.lastIndex = 0;
994
- while ((m = ARRAY_DISPATCH_RE.exec(body)) && added < FANOUT_CAP) {
995
- const entries = arrayReg.get(m[1]);
996
- if (!entries)
979
+ // 1) resolve the receiver chain's struct type precisely (handles c->cmd->proc);
980
+ // 2) else the last segment as a simple local/param of a fn-pointer-bearing struct;
981
+ // 3) else fall back to a field name that belongs to exactly one struct.
982
+ let struct = resolveChainType(body, baseChain);
983
+ if (!struct || !owners.has(struct)) {
984
+ const lastSeg = baseChain.replace(/\s*\[[^\]]*\]/g, '').split(/\s*(?:->|\.)\s*/).pop();
985
+ const t = recvTypeIn(body, lastSeg);
986
+ struct = t && owners.has(t) ? t : null;
987
+ }
988
+ if (!struct || !owners.has(struct))
989
+ struct = owners.size === 1 ? [...owners][0] : null;
990
+ if (!struct)
997
991
  continue;
998
- // Same-file table wins on a name collision (two file-local `opcodes`);
999
- // a unique name resolves cross-file; otherwise ambiguous — bail.
1000
- const ids = entries.length === 1
1001
- ? entries[0].ids
1002
- : (entries.find((e) => e.file === fn.filePath)?.ids ?? null);
1003
- if (!ids)
992
+ const targets = reg.get(`${struct}.${field}`);
993
+ if (!targets)
1004
994
  continue;
1005
995
  const line = fn.startLine + body.slice(0, m.index).split('\n').length - 1;
1006
- for (const tid of ids) {
996
+ for (const tid of targets) {
1007
997
  if (tid === fn.id)
1008
998
  continue;
1009
999
  const key = `${fn.id}>${tid}`;
@@ -1018,7 +1008,7 @@ function cFnPointerDispatchEdges(queries, ctx) {
1018
1008
  provenance: 'heuristic',
1019
1009
  metadata: {
1020
1010
  synthesizedBy: 'fn-pointer-dispatch',
1021
- via: `${m[1]}[]`,
1011
+ via: `${struct}.${field}`,
1022
1012
  registeredAt: `${fn.filePath}:${line}`,
1023
1013
  },
1024
1014
  });
@@ -1026,13 +1016,47 @@ function cFnPointerDispatchEdges(queries, ctx) {
1026
1016
  break;
1027
1017
  }
1028
1018
  }
1019
+ // ---- bare array-of-fn-pointers dispatch (`tbl[i](…)`) ----
1020
+ if (arrayReg.size && added < FANOUT_CAP) {
1021
+ ARRAY_DISPATCH_RE.lastIndex = 0;
1022
+ while ((m = ARRAY_DISPATCH_RE.exec(body)) && added < FANOUT_CAP) {
1023
+ const entries = arrayReg.get(m[1]);
1024
+ if (!entries)
1025
+ continue;
1026
+ // Same-file table wins on a name collision (two file-local `opcodes`);
1027
+ // a unique name resolves cross-file; otherwise ambiguous — bail.
1028
+ const ids = entries.length === 1
1029
+ ? entries[0].ids
1030
+ : (entries.find((e) => e.file === fn.filePath)?.ids ?? null);
1031
+ if (!ids)
1032
+ continue;
1033
+ const line = fn.startLine + body.slice(0, m.index).split('\n').length - 1;
1034
+ for (const tid of ids) {
1035
+ if (tid === fn.id)
1036
+ continue;
1037
+ const key = `${fn.id}>${tid}`;
1038
+ if (seen.has(key))
1039
+ continue;
1040
+ seen.add(key);
1041
+ edges.push({
1042
+ source: fn.id,
1043
+ target: tid,
1044
+ kind: 'calls',
1045
+ line,
1046
+ provenance: 'heuristic',
1047
+ metadata: {
1048
+ synthesizedBy: 'fn-pointer-dispatch',
1049
+ via: `${m[1]}[]`,
1050
+ registeredAt: `${fn.filePath}:${line}`,
1051
+ },
1052
+ });
1053
+ if (++added >= FANOUT_CAP)
1054
+ break;
1055
+ }
1056
+ }
1057
+ }
1029
1058
  }
1030
1059
  }
1031
1060
  return edges;
1032
1061
  }
1033
- /** C/C++ function + method nodes, streamed (memory-safe on symbol-dense repos). */
1034
- function* iterateFns(queries) {
1035
- yield* queries.iterateNodesByKind('function');
1036
- yield* queries.iterateNodesByKind('method');
1037
- }
1038
1062
  //# sourceMappingURL=c-fnptr-synthesizer.js.map