Sheik Ershad and safishamsi
311e63a7fc
feat(extract): capture assignment/return indirect_call edges ( #1566 slice 2)
...
A function bound to a name (cb = handler) or returned from a factory
(def make(): return handler) is a real reference, but indirect_call only
covered call arguments and dispatch tables, so `affected` still dropped these
callers.
Emit indirect_call (context "assignment"/"return", INFERRED) for the value-side
identifiers of a Python assignment RHS and a return, at function scope (owner =
enclosing function) and module scope (owner = file node). Reuses the shared
_emit_indirect_ref guard. Scans the VALUE side only -- the assignment target is
a new local binding, not a reference -- so the existing param/local shadow guard
still rejects the false edges #1565 fixed.
Negatives covered: param-shadow, local-shadow, non-callable emit nothing.
Full suite green; ruff clean.
2026-06-30 23:26:13 +01:00
..
2026-06-30 17:23:46 +01:00
2026-06-27 23:57:39 +01:00
2026-06-23 17:26:49 +01:00
2026-05-30 21:37:47 +01:00
2026-06-16 01:41:15 +01:00
2026-06-02 23:48:54 +01:00
2026-06-03 00:08:03 +01:00
2026-06-28 17:52:34 +01:00
2026-06-29 13:14:37 +01:00
2026-06-11 15:08:36 -06:00
2026-06-11 09:58:39 -04:00
2026-06-22 21:15:51 +01:00
2026-06-07 14:34:13 +01:00
2026-06-30 18:30:05 +01:00
2026-06-02 22:23:15 +01:00
2026-06-30 19:32:10 +01:00
2026-06-11 19:52:56 +03:00
2026-06-17 14:21:19 +01:00
2026-06-18 01:15:24 +01:00
2026-05-26 09:17:18 +01:00
2026-06-26 10:23:10 +01:00
2026-06-30 11:19:54 +01:00
2026-06-30 11:19:54 +01:00
2026-06-28 16:17:21 +01:00
2026-06-30 16:59:16 +01:00
2026-06-28 16:57:00 +01:00
2026-06-07 15:03:49 +03:00
2026-06-28 16:57:00 +01:00
2026-06-18 01:55:56 +01:00
2026-06-11 09:36:38 +02:00
2026-06-22 17:02:29 +01:00
2026-06-30 16:58:23 +01:00
2026-06-18 22:55:44 +01:00
2026-06-07 01:20:38 +01:00
2026-06-28 19:29:51 +01:00
2026-06-30 23:26:13 +01:00
2026-06-30 22:34:48 +01:00
2026-06-24 11:43:13 +01:00
2026-06-13 15:13:23 +01:00
2026-06-02 20:48:13 +01:00
2026-06-29 10:01:06 +01:00
2026-06-05 22:15:09 +01:00
2026-06-23 00:18:47 +01:00
2026-06-28 19:05:09 +01:00
2026-06-30 09:42:49 +01:00
2026-06-18 22:50:52 +01:00
2026-06-27 10:19:15 +01:00
2026-06-29 09:40:22 +01:00
2026-06-30 17:23:46 +01:00
2026-06-29 09:45:03 +01:00
2026-05-28 17:44:35 +02:00
2026-06-19 10:25:09 +01:00
2026-05-26 20:16:41 +01:00
2026-06-10 15:50:38 +01:00
2026-05-28 14:46:03 +01:00
2026-06-10 19:31:47 +01:00
2026-05-31 16:41:18 +01:00
2026-06-02 22:50:33 +01:00
2026-06-02 22:50:33 +01:00
2026-06-16 01:41:15 +01:00
2026-06-30 16:59:16 +01:00
2026-06-10 12:45:20 +01:00
2026-06-02 22:16:58 +01:00
2026-05-24 20:38:10 +01:00
2026-06-03 21:04:01 +01:00
2026-05-27 22:30:08 +01:00
2026-06-25 20:33:00 +01:00
2026-06-30 12:57:33 +01:00
2026-06-30 11:19:54 +01:00
2026-06-29 09:40:22 +01:00
2026-06-22 17:02:29 +01:00
2026-06-30 16:58:23 +01:00
2026-06-07 00:43:40 +01:00
2026-06-30 11:19:54 +01:00
2026-06-30 23:15:52 +01:00
2026-06-29 10:01:06 +01:00
2026-06-29 14:49:42 +01:00
2026-06-16 03:06:43 +01:00
2026-06-30 16:59:16 +01:00
2026-06-05 21:46:25 +01:00
2026-05-31 16:47:52 +01:00
2026-06-24 08:54:11 +01:00
2026-06-26 10:20:53 +01:00
2026-06-24 11:29:08 +01:00
2026-06-23 17:26:49 +01:00
2026-06-27 10:19:15 +01:00