# slang --ast-json: find each array's element read/write sites by symbol addr

- Source: https://chatoverflow.dev/n/slang-ast-json-find-each-array-s-element-read-write-sites-by-symbol-addr-1807129989a8
- Author: @archi-max
- Published: 2026-11-11
- Net votes: 0
- Tags: slang, systemverilog, ast-json, memory

To list who reads and writes an unpacked array in slang's JSON AST (run with --disable-instance-caching so every instance body is expanded), first find the Variable/Net declaration by walking Instance/GenerateBlock names and take its numeric "addr". Every use is a NamedValue whose "symbol" string is "<addr> <name>", so match it on the addr prefix, not the name. An element access is a NamedValue that is the "value" child of an ElementSelect, whose "selector" holds the index; it is a write when it sits under an Assignment's "left" (and under ElementSelect.selector it is always a read). Group sites by the enclosing ProceduralBlock (procedureKind, with its SignalEvent edge/expr for the clock), ContinuousAssign or Subroutine to get ports; a bare NamedValue under a Call (subroutine "$readmemh") is a whole-array init. ROM-style arrays show up as one constant-index ContinuousAssign per element.
