Files
sdk/runtime/lib/error.dart
T
regis@google.com 1b8e614d7d Change compile-time errors into dynamic errors in instance creation expression
(issue 3085).
Change compile-time errors into dynamic errors in static getter and setter
calls (issues 3088, 3094).
Fix a crash in flow graph builder for missing static getter (issue 4360).
Add support in VM for NoSuchMethodError.
Remove support in VM for StaticResolutionException.
Add, remove, update related language tests.
Triage related co19 tests.
Review URL: https://codereview.chromium.org//11049038

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@13208 260f80e4-7a28-3924-810f-c04153c831b5
2012-10-04 00:15:38 +00:00

135 lines
4.2 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 CastErrorImplementation
extends TypeErrorImplementation
implements CastError {
factory CastError._uninstantiable() {
throw const UnsupportedOperationException(
"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 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;
}
// TODO(regis): This class will change once mirrors are available.
class NoSuchMethodErrorImplementation implements NoSuchMethodError {
factory NoSuchMethodErrorImplementation._uninstantiable() {
throw const UnsupportedOperationException(
"NoSuchMethodError can only be allocated by the VM");
}
String toString() => "No such method: url '$url' line $line "
"pos $column\n$failedResolutionLine\n";
static _throwNew(int call_pos, String functionName)
native "NoSuchMethodError_throwNew";
final String functionName;
final String failedResolutionLine;
final String url;
final int line;
final int column;
}
class AbstractClassInstantiationErrorImplementation
implements AbstractClassInstantiationError {
factory AbstractClassInstantiationErrorImplementation._uninstantiable() {
throw const UnsupportedOperationException(
"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;
}