Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(813)

Unified Diff: runtime/vm/class_finalizer.cc

Issue 9325047: Add token index position to classes and types for more accurate error reporting. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/class_finalizer.h ('k') | runtime/vm/class_finalizer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/class_finalizer.cc
===================================================================
--- runtime/vm/class_finalizer.cc (revision 3964)
+++ runtime/vm/class_finalizer.cc (working copy)
@@ -299,7 +299,7 @@
String& class_name = String::Handle(cls.Name());
String& super_class_name = String::Handle(super_class.Name());
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"class '%s' and superclass '%s' are not "
"both classes or both interfaces.\n",
class_name.ToCString(),
@@ -337,7 +337,7 @@
(super_class.raw() == object_store->two_byte_string_class()) ||
(super_class.raw() == object_store->four_byte_string_class())) {
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"'%s' is not allowed to extend '%s'\n",
String::Handle(cls.Name()).ToCString(),
String::Handle(super_class.Name()).ToCString());
@@ -561,7 +561,7 @@
const String& class_name = String::Handle(cls.Name());
const String& extends_name = String::Handle(type_extends.Name());
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, type.token_index(),
"type argument '%s' of class '%s' "
"does not extend type '%s'\n",
type_argument_name.ToCString(),
@@ -610,7 +610,9 @@
parameterized_type ^= type.raw();
if (parameterized_type.IsBeingFinalized()) {
- ReportError("type '%s' illegally refers to itself\n",
+ const Script& script = Script::Handle(cls.script());
+ ReportError(script, parameterized_type.token_index(),
+ "type '%s' illegally refers to itself\n",
String::Handle(parameterized_type.Name()).ToCString());
}
@@ -659,8 +661,9 @@
// Specifying no type arguments indicates a raw type, which is not an error.
// However, subtyping constraints are checked below, even for a raw type.
if (!arguments.IsNull() && (arguments.Length() != num_type_parameters)) {
- // TODO(regis): We need to store the token_index in each type.
- ReportError("wrong number of type arguments in type '%s'\n",
+ const Script& script = Script::Handle(cls.script());
+ ReportError(script, type.token_index(),
+ "wrong number of type arguments in type '%s'\n",
String::Handle(type.Name()).ToCString());
}
// The full type argument vector consists of the type arguments of the
@@ -710,32 +713,6 @@
}
-RawAbstractType* ClassFinalizer::FinalizeAndCanonicalizeType(
- const Class& cls,
- const AbstractType& type,
- Error* error) {
- Isolate* isolate = Isolate::Current();
- ASSERT(isolate != NULL);
- LongJump* base = isolate->long_jump_base();
- LongJump jump;
- isolate->set_long_jump_base(&jump);
- if (setjmp(*jump.Set()) == 0) {
- const AbstractType& finalized_type =
- AbstractType::Handle(FinalizeType(cls, type));
- isolate->set_long_jump_base(base);
- *error = Error::null();
- return finalized_type.raw();
- } else {
- // Error occured: Get the error message.
- isolate->set_long_jump_base(base);
- *error = isolate->object_store()->sticky_error();
- return type.raw();
- }
- UNREACHABLE();
- return NULL;
-}
-
-
void ClassFinalizer::ResolveAndFinalizeSignature(const Class& cls,
const Function& function) {
// Resolve result type.
@@ -971,7 +948,7 @@
if (!IsSuperCycleFree(cls)) {
const String& name = String::Handle(cls.Name());
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"class '%s' has a cycle in its superclass relationship.\n",
name.ToCString());
}
@@ -1023,7 +1000,7 @@
const String& cls_name = String::Handle(cls.Name());
const String& lib_name = String::Handle(lib.url());
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"class '%s' is trying to extend a native fields class, "
"but library '%s' has no native resolvers",
cls_name.ToCString(), lib_name.ToCString());
@@ -1106,7 +1083,7 @@
// We have already visited interface class 'cls'. We found a cycle.
const String& interface_name = String::Handle(cls.Name());
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"Cyclic reference found for interface '%s'\n",
interface_name.ToCString());
}
@@ -1132,14 +1109,14 @@
ResolveType(cls, interface);
if (interface.IsTypeParameter()) {
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"Type parameter '%s' cannot be used as interface\n",
String::Handle(interface.Name()).ToCString());
}
const Class& interface_class = Class::Handle(interface.type_class());
if (!interface_class.is_interface()) {
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"Class '%s' is used where an interface is expected\n",
String::Handle(interface_class.Name()).ToCString());
}
@@ -1156,7 +1133,7 @@
(interface.IsFunctionInterface() && !cls.IsSignatureClass()) ||
interface.IsDynamicType()) {
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"'%s' is not allowed to extend or implement '%s'\n",
String::Handle(cls.Name()).ToCString(),
String::Handle(interface_class.Name()).ToCString());
@@ -1180,7 +1157,7 @@
if (!super.IsNull() && !super.is_const()) {
String& name = String::Handle(super.Name());
const Script& script = Script::Handle(cls.script());
- ReportError(script, -1,
+ ReportError(script, cls.token_index(),
"superclass '%s' must be const.\n", name.ToCString());
}
const Array& fields_array = Array::Handle(cls.fields());
« no previous file with comments | « runtime/vm/class_finalizer.h ('k') | runtime/vm/class_finalizer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698