| Index: runtime/lib/errors.cc | 
| diff --git a/runtime/lib/errors.cc b/runtime/lib/errors.cc | 
| index 27770a92f191954251a8ccf301773ab026f63282..9eb89177708548289daeeb50b15cd4f219f908ca 100644 | 
| --- a/runtime/lib/errors.cc | 
| +++ b/runtime/lib/errors.cc | 
| @@ -62,8 +62,9 @@ static RawScript* FindScript(DartFrameIterator* iterator) { | 
| // Allocate and throw a new AssertionError. | 
| // Arg0: index of the first token of the failed assertion. | 
| // Arg1: index of the first token after the failed assertion. | 
| +// Arg2: Message object or null. | 
| // Return value: none, throws an exception. | 
| -DEFINE_NATIVE_ENTRY(AssertionError_throwNew, 2) { | 
| +DEFINE_NATIVE_ENTRY(AssertionError_throwNew, 3) { | 
| // No need to type check the arguments. This function can only be called | 
| // internally from the VM. | 
| const TokenPosition assertion_start = | 
| @@ -71,7 +72,8 @@ DEFINE_NATIVE_ENTRY(AssertionError_throwNew, 2) { | 
| const TokenPosition assertion_end = | 
| TokenPosition(Smi::CheckedHandle(arguments->NativeArgAt(1)).Value()); | 
|  | 
| -  const Array& args = Array::Handle(Array::New(4)); | 
| +  const Instance& message = Instance::CheckedHandle(arguments->NativeArgAt(2)); | 
| +  const Array& args = Array::Handle(Array::New(5)); | 
|  | 
| DartFrameIterator iterator; | 
| iterator.NextFrame();  // Skip native call. | 
| @@ -92,6 +94,7 @@ DEFINE_NATIVE_ENTRY(AssertionError_throwNew, 2) { | 
| args.SetAt(1, String::Handle(script.url())); | 
| args.SetAt(2, Smi::Handle(Smi::New(from_line))); | 
| args.SetAt(3, Smi::Handle(Smi::New(script.HasSource() ? from_column : -1))); | 
| +  args.SetAt(4, message); | 
|  | 
| Exceptions::ThrowByType(Exceptions::kAssertion, args); | 
| UNREACHABLE(); | 
|  |