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

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Aug 12 13:40:53 UTC 2019


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

RazvanN <razvan.nitu1305 at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |razvan.nitu1305 at gmail.com

--- Comment #2 from RazvanN <razvan.nitu1305 at gmail.com> ---
(In reply to Mathias LANG from comment #1)
> 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.

"Point of instantiation" refers to the call site of a function that uses
__FILE__ as a default parameter. Even though the mixin introduces the code in
there, I like it that __FILE__/__LINE__ point to the actual declaration because
it's real code, that generated.

IMHO this bug report is invalid.

--


More information about the Digitalmars-d-bugs mailing list