Files
sdk/runtime/lib/error.dart
T
ajohnsen@google.com 3a6daefd99 Expose remaining 'errors' in an unified dart:core.
This is a follow-up on my previous move of AssertionError.

BUG=

Review URL: https://chromiumcodereview.appspot.com//10896007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@11513 260f80e4-7a28-3924-810f-c04153c831b5
2012-08-29 11:57:37 +00:00

110 lines
3.5 KiB
Dart

// 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 const UnsupportedOperationException(
"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 const UnsupportedOperationException(
"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 CastExceptionImplementation
extends TypeErrorImplementation
implements CastException {
factory CastException._uninstantiable() {
throw const UnsupportedOperationException(
"CastException can only be allocated by the VM");
}
// A CastException is allocated by TypeError._throwNew() when dst_name equals
// Exceptions::kCastExceptionDstName.
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 const UnsupportedOperationException(
"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 StaticResolutionException implements Exception {
factory StaticResolutionException._uninstantiable() {
throw const UnsupportedOperationException(
"StaticResolutionException can only be allocated by the VM");
}
String toString() => "Unresolved static method: url '$url' line $line "
"pos $column\n$failedResolutionLine\n";
static _throwNew(int token_pos) native "StaticResolutionException_throwNew";
final String failedResolutionLine;
final String url;
final int line;
final int column;
}