Is this a first step to fixing the compiler error where the JLS says the
(2nd) expression in an assert statement is converted to String and a new
AssertionError is constructed with that STRING as the argument, and that
AssertionError is thrown? (my paraphrase)

http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.10

BUT

assert false : new Throwable();

has evidence to suggest that this (JLS spec) is not currently the case,
since the AssertionError thrown has a cause, and therefore the Throwable
was not converted to a String before being passed to the AssertionError
constructor.

You can get away with having the AssertionError constructor do the
conversion in all other cases (which reduces the amount of bytecode
emitted for each assert statement), but this currently does not work for
a Throwable.

So it might be better for the 1st argument of the new method to be
Object, and having almost the same semantics as the current single
Object arg constructor - except it would NOT treat the first arg as the
cause when it is a Throwable.

This way the assert statements could for (other than primitives) be
compiled to call the 2 arg constructor with a null value for second arg
and thus become indistinguishable (other than bytecode inspection) from
something that did exactly as the JLS says.

yeah - call me pedantic if you want  :-)

Bruce



Joe Darcy wrote:
Hello.

Please review my fix for

6935997 "Please add a nested throwable constructor to AssertionError"
http://cr.openjdk.java.net/~darcy/6935997.0/

Thanks,

-Joe



Reply via email to