digitalmars.D - Mixin templates vs interface files
- Jean-Louis Leroy (56/56) Aug 06 2017 Consider:
- Jean-Louis Leroy (3/6) Aug 07 2017 I see no reason why this() is kept and ~this() not. Should I
- Jean-Louis Leroy (14/23) Aug 07 2017 It seems to be happening here:
Consider: // app.d import std.stdio; import tracemodule; mixin traceModule; void main() { writeln("main"); } // tracemodule.d module tracemodule; import std.stdio; mixin template traceModule(string moduleName = __MODULE__) { import std.stdio; static this() { writeln("init " ~ moduleName); } static ~this() { writeln("deinit " ~ moduleName); } } When I compile like this: $ rm -f *.o *.di $ dmd -c tracemodule.d $ dmd -c app.d $ dmd app.o tracemodule.o -of=app ...and run 'app' I get the expected output: $ ./app init app main deinit app Now if I throw -H in, things get weird: $ rm -f *.o *.di $ dmd -c -H tracemodule.d $ dmd -c app.d $ dmd app.o tracemodule.o -of=app $ ./app init app main Indeed when I look at the content of the interface file, I see: // D import file generated from 'tracemodule.d' module tracemodule; import std.stdio; template traceModule(string moduleName = __MODULE__) { import std.stdio; static this() { writeln("init " ~ moduleName); } } 'static this()' is there, but no 'static ~this()'. What's happening here?
Aug 06 2017
On Sunday, 6 August 2017 at 13:24:23 UTC, Jean-Louis Leroy wrote:Consider: // app.d [...]I see no reason why this() is kept and ~this() not. Should I report this as a bug?
Aug 07 2017
On Tuesday, 8 August 2017 at 01:04:30 UTC, Jean-Louis Leroy wrote:On Sunday, 6 August 2017 at 13:24:23 UTC, Jean-Louis Leroy wrote:It seems to be happening here: https://github.com/dlang/dmd/blob/master/src/ddmd/hdrgen.d#L1982 Maybe if (hgs.hdrgen) return; should read: if (hgs.hdrgen && !hgs.tpltMember) return; When I make that change I get my static ~this in the .di file. Beyond that, I don't see the reason why visit(StaticDtorDeclaration d) is not a copy-paste of visit(StaticCtorDeclaration d) with one tilde added. PR?Consider: // app.d [...]I see no reason why this() is kept and ~this() not. Should I report this as a bug?
Aug 07 2017