| // 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; |
| } |