cb27634842
lib instead. Review URL: https://codereview.chromium.org//11712002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@16583 260f80e4-7a28-3924-810f-c04153c831b5
114 lines
3.5 KiB
Dart
114 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 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;
|
|
}
|