nim-lang / Nim

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
https://nim-lang.org
Other
16.61k stars 1.47k forks source link

gensym anonymous proc symbols #24422

Closed metagn closed 1 week ago

metagn commented 1 week ago

fixes #14067, fixes #15004, fixes #19019

Anonymous procs are added to scope with the name :anonymous. This means that if they have the same signature in a scope, they can consider each other as redefinitions. To prevent this, mark their symbols as sfGenSym so they do not get added to scope or cause any name conflicts. The commented out and not isAnon check wouldn't work because isAnon would not be true if the proc is being resemmed, in which case the name field in the proc AST would have the symbol of the anonymous proc rather than being empty.

There is a separate problem of default values in generic/normal procs not opening new scopes which is partially responsible for #19019.

github-actions[bot] commented 1 week ago

Thanks for your hard work on this PR! The lines below are statistics of the Nim compiler built from 3e47725c08b42515d17d77b3a6c9cc3029e5681c

Hint: mm: orc; opt: speed; options: -d:release 177289 lines; 9.527s; 652.941MiB peakmem