expr-lang / expr

Expression language and expression evaluation for Go
https://expr-lang.org
MIT License
6.16k stars 394 forks source link

Fix tracking of applied operator patches per walk #658

Closed rrb3942 closed 3 months ago

rrb3942 commented 4 months ago

Tracking if an operator overload patch was applied was not happening per-walk of the ast tree. This lead to re-running patchers a thousand times if any operator overload applied.

I added a Reset() method to the operator patcher that can be called before every walk to reset the tracking state.

I don't think the outer loop limit of 1000 is required anymore since state is being properly tracked. I can revert this patch and re-push if you want to keep the limit.

This is part of the problem for issue #637

antonmedv commented 3 months ago

Closing in flavor of #659