On Friday, 19 January 2018 at 08:51:00 UTC, Jacob Carlborg wrote:
Not sure I understand this feature. Is it something like:

auto foo = 3;
auto bar = 4;
log(foo, bar);

Would print?

main.d:3 foo=3
main.d:3 bar=4

If that's the case then this seems like yet another hack because we don't have AST macros.

The above is trivial:

template log(Args...) {
    auto log(string file = __FILE__, int line = __LINE__)() {
        import std.stdio;
        static foreach (arg; Args) {
            writeln(file, ":", line, " ", arg.stringof, "=", arg);
        }
    }
}

unittest {
    int foo = 3;
    int bar = 4;
    log!(foo, bar);
}

What's hard is getting expressions as text:

unittest {
    int foo = 3;
    int bar = 4;
    // Should print 'main.d:5 foo+bar=7'
// but fails to compile with 'variable foo cannot be read at compile time'
    log!(foo + bar);
}

Actually, if we could alias expressions, this should Just Work™.

--
 Simen

Reply via email to