eval-dot copy-pasted its entire dispatch chain across the (. obj method args...) and (. obj member) forms — string/number/object/tagged-shim lookup duplicated, hand-synced on every interop change. Extract one dispatch-member that takes the evaluated args plus a has-args flag. The shared head (string/number/object/ tagged) is single-sourced; the genuinely divergent tails (call form: record → native field → coll-interop(args); bare form: zero-arg coll-interop → field / zero-arg method) stay branched on has-args. The guards that differed between the arms (object-methods checks table? only; tagged dispatch checks table-or-struct; bare-form tagged dispatch requires the member present) are preserved verbatim, keyed off has-args, so behavior is identical. Adds a "dot dispatch arms" spec locking the divergent cases: zero-arg vs with-arg coll-interop, record/deftype zero-arg vs with-args methods, -field access. Full gate green. |
||
|---|---|---|
| .. | ||
| bench | ||
| clojure-stdlib/clojure | ||
| integration | ||
| spec | ||
| support | ||
| unit | ||