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.

Reply via email to