[dmd-internals] Fixing forward ref bugs for good
Walter Bright
walter at digitalmars.com
Wed Sep 14 00:47:16 PDT 2011
On 9/14/2011 12:06 AM, Rainer Schuetze wrote:
>
> On 14.09.2011 00:04, Walter Bright wrote:
>> Don, just so you know, I've been thinking for a while about transitioning
>> from doing the semantic pass in order to doing it completely "on demand". In
>> other words, try to semantic a declaration. In the process, any declarations
>> it depends on are semantic'd if not already, recursively.
>
> I've been trying something similar for Visual D in its yet to integrate
> semantic analysis for intellisense. Still, static if and mixins get in the way
> of complete "on demand" handling. When a symbol is searched in a scope (e.g. a
> module, class, struct), some preparational work has to be done before the
> member list can be searched:
>
> 1. all "simple" non-scoping members are expanded (version/debug conditions,
> attributed declaration blocks). the branch inserted to the scopes' member list
> is also searched for "simple" non-scoping members (this step could also be
> done non-lazily, but doing it lazily slightly changes the interaction of
> version statements and conditionals with "static if" conditionals - good or
> bad, I don't know)
>
> 2. "complex" non-scoping members are expanded in lexical order (static if,
> mixins). When inserting the expanded branch into the scopes member list, the
> expansion restarts at 1.
>
> This works out better than the current dmd implementation, e.g. when forward
> referencing symbols in a mixin. There are still situations that depend on
> interpretation order, but that is to be expected when "static if" is used.
>
> It might be good to define the lookup mechanism, so it would be possible to
> determine whether a failing forward reference is beyond expected behaviour
> rather than a compiler-implementation detail.
>
This is good stuff.
More information about the dmd-internals
mailing list