I just found another bug in the rewritten 1.4.x resolver, and as much as I want to fix it (and I will)… part of me can’t help thinking if you encounter this bug, your code has greater problems than mine.
Picture this code:
Sub Foo() Dim Foo As New Foo With Foo With .Foo .Foo = 42 End With Bar .Foo.Foo End With End Sub
Believe it or not, it compiles… and the 1.4.1 resolver works perfectly and correctly identifies who’s who and who’s calling what. Now what if we added a recursive call?
Sub Foo() Dim Foo As New Foo With Foo With .Foo .Foo = 42 End With Bar .Foo.Foo End With Foo End Sub
The bug here, is that this Foo gets resolved as a call to the local variable, so renaming the procedure to DoSomething would leave that Foo unchanged.
Not too bad. I mean, nobody in their right minds would ever do that. (right?)
However, it gets worse: if we change Sub to Function, in the name of being able to identify a function’s return value, a matching identifier within the body of a function (or property getter) is resolved to the function (or getter) itself… so this part needs to be refined at bit.
Function Foo() Dim Foo As New Foo With Foo With .Foo .Foo = 42 End With Bar .Foo.Foo End With Foo End Function
Every single Foo here, with the sole exception of the local declaration, resolves to a reference to the function.
I hope this bug doesn’t affect your code… for your sake – and that of whoever will be maintaining your code in the future.
If it does… v1.4.2 with certainly include a fix for this issue.
The non-resolving recursive call isn’t a bug: