October 13, 2018 [Issue 19305] New: In symbol lookup, with statement becomes stronger than an inner scope import statement | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=19305 Issue ID: 19305 Summary: In symbol lookup, with statement becomes stronger than an inner scope import statement Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: shigekikarita@gmail.com I found a breaking change of symbol from DMD2.073.0. I think this change comes from a conflict between statement spec 4.3.2 and module spec 11.19.1. see 4.3.2 in https://docarchives.dlang.io/v2.081.0/spec/module.html see 11.19.1 in https://docarchives.dlang.io/v2.081.0/spec/statement.html#with-statement running example https://wandbox.org/permlink/5bDsMZeqKYh4runs ------- module a; enum f = "a"; module b; enum f = "b"; module main; import std.stdio; import a; import b; void main() { with (a) { // 11.19.1 Within the with body the referenced object is searched first for identifier symbols assert(f == "a"); // 4.3.2 When a symbol name is used unqualified, a two-phase lookup will happen. // First, the module scope will be searched, starting from the innermost scope. ... // Symbol lookup stops as soon as a symbol is found. // If two symbols with the same name are found at the same lookup phase, // this ambiguity will result in a compilation error. import b; static if (__VERSION__ >= 2073) { assert(f == "a"); } else { assert(f == "b"); } } } -- |
Copyright © 1999-2021 by the D Language Foundation