Go 1.21+ rejects 'replace X => Y vN' when Y's go.mod declares a module
path other than Y. The prior v1.17.8 kept 'module github.com/expr-lang/expr'
while being hosted+required at github.com/hanzoai/expr, so consumers on
Go 1.26 fail with:
module declares its path as: github.com/expr-lang/expr
but was required as: github.com/hanzoai/expr
Rehome the declared module path to github.com/hanzoai/expr and repath all
internal imports to match. Consumers keep 'require github.com/expr-lang/expr'
and 'replace github.com/expr-lang/expr => github.com/hanzoai/expr vX' — the
standard renaming-fork pattern that Go's replace path-check accepts.
* Reset tracking of applied operator overloads before every walk of the ast tree.
* Remove limit on operator overload resolution
* Do separate patcher phase for those that require multiple passes (Currently only need for Operator overloading). This patcher phase is run after other patchers.
* Add test to track how many times a patcher is run. Used to detect if patching phases is erroneously applying the patcher multiple times.
---------
Co-authored-by: Anton Medvedev <[email protected]>