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?
More thoughts on this: what about ranges and testing for
equality? It would be helpful if either this DIP made the
compiler recognise and deal with `std.algorithm.equal`
differently or recognise that on one or both sides of `==`
there's a range.
I'm thinking of all the different `shouldXXX` functions I wrote
for unit-threaded. Equality is by far the most common thing to
assert on in a test, but there are other useful ones that need to
be considered. Two that come to mind right now are asserting that
a range contains an element and that two ranges are the same
ignoring ordering.
For the former, `assert(range.canFind(elt))` would be hard to
deal with in this DIP. I don't see a better way, however, since
`in` only works for AAs.
For the latter... I don't know either.
Atila