[Issue 1324] __FILE__ in mixin template expand to the definition, not the instantiation

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue May 21 00:43:28 UTC 2019


https://issues.dlang.org/show_bug.cgi?id=1324

Mathias LANG <pro.mathias.lang at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|diagnostic                  |
                 CC|                            |pro.mathias.lang at gmail.com
           Hardware|x86                         |All
            Version|D1 (retired)                |D2
            Summary|Wrong module name in        |__FILE__ in mixin template
                   |exception when using mixin  |expand to the definition,
                   |                            |not the instantiation
                 OS|Windows                     |All

--- Comment #1 from Mathias LANG <pro.mathias.lang at gmail.com> ---
Edited the issue title to make the current problem more obvious.
The original code uses ranges access to trigger an exception, which are errors
(not exception in D2).

The actual bug, can be illustrated by those 2 files:

///// t1.d /////
module t1;
import t2;
import std.stdio;
void main()
{
    mixin mixinT2!();
    testT2();
}

///// t2.d /////
module t2;
template mixinT2()
{
  void testT2()
  {
      try
          throw new Exception("FromT2");
      catch(Exception e)
          writefln("T2: caught exception in %s: '%s'", __FILE__, e.toString);
  }
}

///////////////
Running this code:

dmd t2.d -run t1.d
T2: caught exception in t2.d: 'object.Exception at t2.d(8): FromT2
----------------
??:? void t1.main().__mixin1.testT2(int) [0x102b84f17]
??:? _Dmain [0x102b84afb]'


As the message shows, `__FILE__` expands to `t2.d`, both in the `writeln` call
and the default parameter for `Exception` ctor.
However, the specs currently mentions:
> __FILE__ and __LINE__ expand to the source file name and line number at the point of instantiation. The path of the source file is left up to the compiler.

It is not 100% clear to me if "point of instantiation" implies templates as
well, and thus not 100% clear if this is a bug and/or can be solved.

--


More information about the Digitalmars-d-bugs mailing list