On 09/29/2015 11:45 PM, deadalnix wrote:
On Tuesday, 29 September 2015 at 21:02:42 UTC, Nordlöw wrote:
As a follow-up to
https://github.com/D-Programming-Language/phobos/pull/3207#issuecomment-144073495
I starting digging in DMD for logic controlling behaviour of assert(),
especially whether it's possible to add automatic printing of `lhs`
and `rhs` upon assertion failure if `AssertExp` is a binary expression
say `lhs == rhs`.
After grepping for `AssertExp` the only possible place I could think
of was
ToElemVisitor::visit(AssertExp *ae)
inside
elem *toElem(Expression *e, IRState *irs)
in file e2ir.c.
Questions:
1. Is this the right place where this lhs-rhs-printing logic should be
added? If so could somebody tell me how to make this happen?
2. Is it possible to from within DMD generate expressions that do
`import std.stdio : write`
and then calls write on the `lhs` and `rsh`...or this a completely
wrong approach to solving this problem?
I do think wiring this in the compiler is probably not the right way
forward. Most language have some library functions like :
expect(exprssion).toBeTrue();
expect(function/delegate).toThrow!ExceptionType
And so on.
This allow to get nice error and do not need wiring int he language.
This is extensible and all. I'd rather have something like this.
I encourage making assert smarter seeing (a) it's already used
everywhere so the benefits will come for free and (b) it's a built-in.
-- Andrei