// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // Errors are created and thrown by DartVM only. // Changes here should also be reflected in corelib/error.dart as well class AssertionErrorImplementation implements AssertionError { factory AssertionErrorImplementation._uninstantiable() { throw new UnsupportedError( "AssertionError can only be allocated by the VM"); } static _throwNew(int assertionStart, int assertionEnd) native "AssertionError_throwNew"; String toString() { return "'$url': Failed assertion: line $line pos $column: " "'$failedAssertion' is not true."; } final String failedAssertion; final String url; final int line; final int column; } class TypeErrorImplementation extends AssertionErrorImplementation implements TypeError { factory TypeErrorImplementation._uninstantiable() { throw new UnsupportedError( "TypeError can only be allocated by the VM"); } static _throwNew(int location, Object src_value, String dst_type_name, String dst_name, String malformed_error) native "TypeError_throwNew"; String toString() { String str = (malformedError != null) ? malformedError : ""; if ((dstName != null) && (dstName.length > 0)) { str = "${str}type '$srcType' is not a subtype of " "type '$dstType' of '$dstName'."; } else { str = "${str}malformed type used."; } return str; } final String srcType; final String dstType; final String dstName; final String malformedError; } class CastErrorImplementation extends TypeErrorImplementation implements CastError { factory CastErrorImplementation._uninstantiable() { throw new UnsupportedError( "CastError can only be allocated by the VM"); } // A CastError is allocated by TypeError._throwNew() when dst_name equals // Exceptions::kCastErrorDstName. String toString() { String str = (malformedError != null) ? malformedError : ""; if ((dstName != null) && (dstName.length > 0)) { str = "${str}type '$srcType' is not a subtype of " "type '$dstType' in type cast."; } else { str = "${str}malformed type used in type cast."; } return str; } } class FallThroughErrorImplementation implements FallThroughError { factory FallThroughErrorImplementation._uninstantiable() { throw new UnsupportedError( "FallThroughError can only be allocated by the VM"); } static _throwNew(int case_clause_pos) native "FallThroughError_throwNew"; String toString() { return "'$url': Switch case fall-through at line $line."; } final String url; final int line; } class InternalError { const InternalError(this._msg); String toString() => "InternalError: '${_msg}'"; final String _msg; } class AbstractClassInstantiationErrorImplementation implements AbstractClassInstantiationError { factory AbstractClassInstantiationErrorImplementation._uninstantiable() { throw new UnsupportedError( "AbstractClassInstantiationError can only be allocated by the VM"); } static _throwNew(int case_clause_pos, String className) native "AbstractClassInstantiationError_throwNew"; String toString() { return "Cannot instantiate abstract class $className: " "url '$url' line $line"; } final String className; final String url; final int line; }