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

Side by Side Diff: runtime/vm/dart_api_impl.cc

Issue 19662003: Refactor resolution code in the vm to properly handle ambiguity errors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/compiler_test.cc ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "include/dart_api.h" 5 #include "include/dart_api.h"
6 #include "include/dart_mirrors_api.h" 6 #include "include/dart_mirrors_api.h"
7 #include "include/dart_native_api.h" 7 #include "include/dart_native_api.h"
8 8
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "vm/bigint_operations.h" 10 #include "vm/bigint_operations.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 } else { 50 } else {
51 return func; 51 return func;
52 } 52 }
53 } 53 }
54 54
55 55
56 static RawInstance* GetListInstance(Isolate* isolate, const Object& obj) { 56 static RawInstance* GetListInstance(Isolate* isolate, const Object& obj) {
57 if (obj.IsInstance()) { 57 if (obj.IsInstance()) {
58 const Library& core_lib = Library::Handle(Library::CoreLibrary()); 58 const Library& core_lib = Library::Handle(Library::CoreLibrary());
59 const Class& list_class = 59 const Class& list_class =
60 Class::Handle(core_lib.LookupClass(Symbols::List())); 60 Class::Handle(core_lib.LookupClass(Symbols::List(), NULL));
61 ASSERT(!list_class.IsNull()); 61 ASSERT(!list_class.IsNull());
62 const Instance& instance = Instance::Cast(obj); 62 const Instance& instance = Instance::Cast(obj);
63 const Class& obj_class = Class::Handle(isolate, obj.clazz()); 63 const Class& obj_class = Class::Handle(isolate, obj.clazz());
64 Error& malformed_type_error = Error::Handle(isolate); 64 Error& malformed_type_error = Error::Handle(isolate);
65 if (obj_class.IsSubtypeOf(TypeArguments::Handle(isolate), 65 if (obj_class.IsSubtypeOf(TypeArguments::Handle(isolate),
66 list_class, 66 list_class,
67 TypeArguments::Handle(isolate), 67 TypeArguments::Handle(isolate),
68 &malformed_type_error)) { 68 &malformed_type_error)) {
69 ASSERT(malformed_type_error.IsNull()); // Type is a raw List. 69 ASSERT(malformed_type_error.IsNull()); // Type is a raw List.
70 return instance.raw(); 70 return instance.raw();
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 const String& function_name = 1043 const String& function_name =
1044 String::Handle(isolate_lib.PrivateName(Symbols::_get_or_create())); 1044 String::Handle(isolate_lib.PrivateName(Symbols::_get_or_create()));
1045 const int kNumArguments = 1; 1045 const int kNumArguments = 1;
1046 const Function& function = Function::Handle( 1046 const Function& function = Function::Handle(
1047 isolate, 1047 isolate,
1048 Resolver::ResolveStatic(isolate_lib, 1048 Resolver::ResolveStatic(isolate_lib,
1049 class_name, 1049 class_name,
1050 function_name, 1050 function_name,
1051 kNumArguments, 1051 kNumArguments,
1052 Object::empty_array(), 1052 Object::empty_array(),
1053 Resolver::kIsQualified)); 1053 Resolver::kIsQualified,
1054 NULL)); // No ambiguity error expected.
1054 ASSERT(!function.IsNull()); 1055 ASSERT(!function.IsNull());
1055 const Array& args = Array::Handle(isolate, Array::New(kNumArguments)); 1056 const Array& args = Array::Handle(isolate, Array::New(kNumArguments));
1056 args.SetAt(0, Integer::Handle(isolate, Integer::New(port_id))); 1057 args.SetAt(0, Integer::Handle(isolate, Integer::New(port_id)));
1057 return Api::NewHandle(isolate, DartEntry::InvokeFunction(function, args)); 1058 return Api::NewHandle(isolate, DartEntry::InvokeFunction(function, args));
1058 } 1059 }
1059 1060
1060 1061
1061 DART_EXPORT Dart_Port Dart_GetMainPortId() { 1062 DART_EXPORT Dart_Port Dart_GetMainPortId() {
1062 Isolate* isolate = Isolate::Current(); 1063 Isolate* isolate = Isolate::Current();
1063 CHECK_ISOLATE(isolate); 1064 CHECK_ISOLATE(isolate);
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 const String& lib_url = String::Handle(String::New("dart:core")); 2055 const String& lib_url = String::Handle(String::New("dart:core"));
2055 const String& class_name = String::Handle(String::New("ArgumentError")); 2056 const String& class_name = String::Handle(String::New("ArgumentError"));
2056 const Library& lib = 2057 const Library& lib =
2057 Library::Handle(isolate, Library::LookupLibrary(lib_url)); 2058 Library::Handle(isolate, Library::LookupLibrary(lib_url));
2058 if (lib.IsNull()) { 2059 if (lib.IsNull()) {
2059 const String& message = String::Handle( 2060 const String& message = String::Handle(
2060 String::NewFormatted("%s: library '%s' not found.", 2061 String::NewFormatted("%s: library '%s' not found.",
2061 CURRENT_FUNC, lib_url.ToCString())); 2062 CURRENT_FUNC, lib_url.ToCString()));
2062 return ApiError::New(message); 2063 return ApiError::New(message);
2063 } 2064 }
2064 const Class& cls = Class::Handle(isolate, 2065 const Class& cls = Class::Handle(
2065 lib.LookupClassAllowPrivate(class_name)); 2066 isolate, lib.LookupClassAllowPrivate(class_name, NULL));
2066 if (cls.IsNull()) { 2067 ASSERT(!cls.IsNull());
2067 const String& message = String::Handle(
2068 String::NewFormatted("%s: class '%s' not found in library '%s'.",
2069 CURRENT_FUNC, class_name.ToCString(),
2070 lib_url.ToCString()));
2071 return ApiError::New(message);
2072 }
2073 Object& result = Object::Handle(isolate); 2068 Object& result = Object::Handle(isolate);
2074 String& dot_name = String::Handle(String::New(".")); 2069 String& dot_name = String::Handle(String::New("."));
2075 String& constr_name = String::Handle(String::Concat(class_name, dot_name)); 2070 String& constr_name = String::Handle(String::Concat(class_name, dot_name));
2076 result = ResolveConstructor(CURRENT_FUNC, cls, class_name, constr_name, 1); 2071 result = ResolveConstructor(CURRENT_FUNC, cls, class_name, constr_name, 1);
2077 if (result.IsError()) return result.raw(); 2072 if (result.IsError()) return result.raw();
2078 ASSERT(result.IsFunction()); 2073 ASSERT(result.IsFunction());
2079 Function& constructor = Function::Handle(isolate); 2074 Function& constructor = Function::Handle(isolate);
2080 constructor ^= result.raw(); 2075 constructor ^= result.raw();
2081 if (!constructor.IsConstructor()) { 2076 if (!constructor.IsConstructor()) {
2082 const String& message = String::Handle( 2077 const String& message = String::Handle(
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
2411 return Dart_TypedData_kInvalid; 2406 return Dart_TypedData_kInvalid;
2412 } 2407 }
2413 2408
2414 2409
2415 static RawObject* GetByteDataConstructor(Isolate* isolate, 2410 static RawObject* GetByteDataConstructor(Isolate* isolate,
2416 const String& constructor_name, 2411 const String& constructor_name,
2417 intptr_t num_args) { 2412 intptr_t num_args) {
2418 const Library& lib = 2413 const Library& lib =
2419 Library::Handle(isolate->object_store()->typed_data_library()); 2414 Library::Handle(isolate->object_store()->typed_data_library());
2420 ASSERT(!lib.IsNull()); 2415 ASSERT(!lib.IsNull());
2421 const Class& cls = 2416 const Class& cls = Class::Handle(
2422 Class::Handle(isolate, lib.LookupClassAllowPrivate(Symbols::ByteData())); 2417 isolate, lib.LookupClassAllowPrivate(Symbols::ByteData(), NULL));
2423 ASSERT(!cls.IsNull()); 2418 ASSERT(!cls.IsNull());
2424 return ResolveConstructor(CURRENT_FUNC, 2419 return ResolveConstructor(CURRENT_FUNC,
2425 cls, 2420 cls,
2426 Symbols::ByteData(), 2421 Symbols::ByteData(),
2427 constructor_name, 2422 constructor_name,
2428 num_args); 2423 num_args);
2429 } 2424 }
2430 2425
2431 2426
2432 static Dart_Handle NewByteData(Isolate* isolate, intptr_t length) { 2427 static Dart_Handle NewByteData(Isolate* isolate, intptr_t length) {
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
3001 } else if (obj.IsLibrary()) { 2996 } else if (obj.IsLibrary()) {
3002 // Check whether class finalization is needed. 2997 // Check whether class finalization is needed.
3003 const Library& lib = Library::Cast(obj); 2998 const Library& lib = Library::Cast(obj);
3004 2999
3005 // Finalize all classes if needed. 3000 // Finalize all classes if needed.
3006 Dart_Handle state = Api::CheckIsolateState(isolate); 3001 Dart_Handle state = Api::CheckIsolateState(isolate);
3007 if (::Dart_IsError(state)) { 3002 if (::Dart_IsError(state)) {
3008 return state; 3003 return state;
3009 } 3004 }
3010 3005
3006 String& ambiguity_error_msg = String::Handle(isolate);
3011 Function& function = Function::Handle(isolate); 3007 Function& function = Function::Handle(isolate);
3012 function = lib.LookupFunctionAllowPrivate(function_name); 3008 function = lib.LookupFunctionAllowPrivate(function_name,
3009 &ambiguity_error_msg);
3013 if (function.IsNull()) { 3010 if (function.IsNull()) {
3011 if (!ambiguity_error_msg.IsNull()) {
3012 return Api::NewError("%s.", ambiguity_error_msg.ToCString());
3013 }
3014 return Api::NewError("%s: did not find top-level function '%s'.", 3014 return Api::NewError("%s: did not find top-level function '%s'.",
3015 CURRENT_FUNC, 3015 CURRENT_FUNC,
3016 function_name.ToCString()); 3016 function_name.ToCString());
3017 } 3017 }
3018 // LookupFunctionAllowPrivate does not check argument arity, so we 3018 // LookupFunctionAllowPrivate does not check argument arity, so we
3019 // do it here. 3019 // do it here.
3020 String& error_message = String::Handle(); 3020 String& error_message = String::Handle();
3021 if (!function.AreValidArgumentCounts(number_of_arguments, 3021 if (!function.AreValidArgumentCounts(number_of_arguments,
3022 0, 3022 0,
3023 &error_message)) { 3023 &error_message)) {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
3162 getter_name, 3162 getter_name,
3163 args, 3163 args,
3164 args_descriptor)); 3164 args_descriptor));
3165 } 3165 }
3166 return Api::NewHandle(isolate, DartEntry::InvokeFunction(getter, args)); 3166 return Api::NewHandle(isolate, DartEntry::InvokeFunction(getter, args));
3167 3167
3168 } else if (obj.IsLibrary()) { 3168 } else if (obj.IsLibrary()) {
3169 // To access a top-level we may need to use the Field or the 3169 // To access a top-level we may need to use the Field or the
3170 // getter Function. The getter function may either be in the 3170 // getter Function. The getter function may either be in the
3171 // library or in the field's owner class, depending. 3171 // library or in the field's owner class, depending.
3172 String& ambiguity_error_msg = String::Handle(isolate);
3172 const Library& lib = Library::Cast(obj); 3173 const Library& lib = Library::Cast(obj);
3173 field = lib.LookupFieldAllowPrivate(field_name); 3174 field = lib.LookupFieldAllowPrivate(field_name, &ambiguity_error_msg);
3174 if (field.IsNull()) { 3175 if (field.IsNull() && ambiguity_error_msg.IsNull()) {
3175 // No field found. Check for a getter in the lib. 3176 // No field found and no ambiguity error. Check for a getter in the lib.
3176 const String& getter_name = 3177 const String& getter_name =
3177 String::Handle(isolate, Field::GetterName(field_name)); 3178 String::Handle(isolate, Field::GetterName(field_name));
3178 getter = lib.LookupFunctionAllowPrivate(getter_name); 3179 getter = lib.LookupFunctionAllowPrivate(getter_name,
3179 } else if (FieldIsUninitialized(isolate, field)) { 3180 &ambiguity_error_msg);
3181 } else if (!field.IsNull() && FieldIsUninitialized(isolate, field)) {
3180 // A field was found. Check for a getter in the field's owner classs. 3182 // A field was found. Check for a getter in the field's owner classs.
3181 const Class& cls = Class::Handle(isolate, field.owner()); 3183 const Class& cls = Class::Handle(isolate, field.owner());
3182 const String& getter_name = 3184 const String& getter_name =
3183 String::Handle(isolate, Field::GetterName(field_name)); 3185 String::Handle(isolate, Field::GetterName(field_name));
3184 getter = cls.LookupStaticFunctionAllowPrivate(getter_name); 3186 getter = cls.LookupStaticFunctionAllowPrivate(getter_name);
3185 } 3187 }
3186 3188
3187 if (!getter.IsNull()) { 3189 if (!getter.IsNull()) {
3188 // Invoke the getter and return the result. 3190 // Invoke the getter and return the result.
3189 return Api::NewHandle( 3191 return Api::NewHandle(
3190 isolate, DartEntry::InvokeFunction(getter, Object::empty_array())); 3192 isolate, DartEntry::InvokeFunction(getter, Object::empty_array()));
3191 } else if (!field.IsNull()) { 3193 }
3194 if (!field.IsNull()) {
3192 return Api::NewHandle(isolate, field.value()); 3195 return Api::NewHandle(isolate, field.value());
3193 } else {
3194 return Api::NewError("%s: did not find top-level variable '%s'.",
3195 CURRENT_FUNC, field_name.ToCString());
3196 } 3196 }
3197 if (!ambiguity_error_msg.IsNull()) {
3198 return Api::NewError("%s.", ambiguity_error_msg.ToCString());
3199 }
3200 return Api::NewError("%s: did not find top-level variable '%s'.",
3201 CURRENT_FUNC, field_name.ToCString());
3197 3202
3198 } else if (obj.IsError()) { 3203 } else if (obj.IsError()) {
3199 return container; 3204 return container;
3200 } else { 3205 } else {
3201 return Api::NewError( 3206 return Api::NewError(
3202 "%s expects argument 'container' to be an object, type, or library.", 3207 "%s expects argument 'container' to be an object, type, or library.",
3203 CURRENT_FUNC); 3208 CURRENT_FUNC);
3204 } 3209 }
3205 } 3210 }
3206 3211
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
3314 setter_name, 3319 setter_name,
3315 args, 3320 args,
3316 args_descriptor)); 3321 args_descriptor));
3317 } 3322 }
3318 return Api::NewHandle(isolate, DartEntry::InvokeFunction(setter, args)); 3323 return Api::NewHandle(isolate, DartEntry::InvokeFunction(setter, args));
3319 3324
3320 } else if (obj.IsLibrary()) { 3325 } else if (obj.IsLibrary()) {
3321 // To access a top-level we may need to use the Field or the 3326 // To access a top-level we may need to use the Field or the
3322 // setter Function. The setter function may either be in the 3327 // setter Function. The setter function may either be in the
3323 // library or in the field's owner class, depending. 3328 // library or in the field's owner class, depending.
3329 String& ambiguity_error_msg = String::Handle(isolate);
3324 const Library& lib = Library::Cast(obj); 3330 const Library& lib = Library::Cast(obj);
3325 field = lib.LookupFieldAllowPrivate(field_name); 3331 field = lib.LookupFieldAllowPrivate(field_name, &ambiguity_error_msg);
3326 if (field.IsNull()) { 3332 if (field.IsNull() && ambiguity_error_msg.IsNull()) {
3327 const String& setter_name = 3333 const String& setter_name =
3328 String::Handle(isolate, Field::SetterName(field_name)); 3334 String::Handle(isolate, Field::SetterName(field_name));
3329 setter ^= lib.LookupFunctionAllowPrivate(setter_name); 3335 setter ^= lib.LookupFunctionAllowPrivate(setter_name,
3336 &ambiguity_error_msg);
3330 } 3337 }
3331 3338
3332 if (!setter.IsNull()) { 3339 if (!setter.IsNull()) {
3333 // Invoke the setter and return the result. 3340 // Invoke the setter and return the result.
3334 const int kNumArgs = 1; 3341 const int kNumArgs = 1;
3335 const Array& args = Array::Handle(isolate, Array::New(kNumArgs)); 3342 const Array& args = Array::Handle(isolate, Array::New(kNumArgs));
3336 args.SetAt(0, value_instance); 3343 args.SetAt(0, value_instance);
3337 const Object& result = 3344 const Object& result =
3338 Object::Handle(isolate, DartEntry::InvokeFunction(setter, args)); 3345 Object::Handle(isolate, DartEntry::InvokeFunction(setter, args));
3339 if (result.IsError()) { 3346 if (result.IsError()) {
3340 return Api::NewHandle(isolate, result.raw()); 3347 return Api::NewHandle(isolate, result.raw());
3341 } else {
3342 return Api::Success();
3343 } 3348 }
3344 } else if (!field.IsNull()) { 3349 return Api::Success();
3350 }
3351 if (!field.IsNull()) {
3345 if (field.is_final()) { 3352 if (field.is_final()) {
3346 return Api::NewError("%s: cannot set final top-level variable '%s'.", 3353 return Api::NewError("%s: cannot set final top-level variable '%s'.",
3347 CURRENT_FUNC, field_name.ToCString()); 3354 CURRENT_FUNC, field_name.ToCString());
3348 } else {
3349 field.set_value(value_instance);
3350 return Api::Success();
3351 } 3355 }
3352 } else { 3356 field.set_value(value_instance);
3353 return Api::NewError("%s: did not find top-level variable '%s'.", 3357 return Api::Success();
3354 CURRENT_FUNC, field_name.ToCString());
3355 } 3358 }
3359 if (!ambiguity_error_msg.IsNull()) {
3360 return Api::NewError("%s.", ambiguity_error_msg.ToCString());
3361 }
3362 return Api::NewError("%s: did not find top-level variable '%s'.",
3363 CURRENT_FUNC, field_name.ToCString());
3356 3364
3357 } else if (obj.IsError()) { 3365 } else if (obj.IsError()) {
3358 return container; 3366 return container;
3359 } else {
3360 return Api::NewError(
3361 "%s expects argument 'container' to be an object, type, or library.",
3362 CURRENT_FUNC);
3363 } 3367 }
3368 return Api::NewError(
3369 "%s expects argument 'container' to be an object, type, or library.",
3370 CURRENT_FUNC);
3364 } 3371 }
3365 3372
3366 3373
3367 // --- Exceptions ---- 3374 // --- Exceptions ----
3368 3375
3369 DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) { 3376 DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) {
3370 Isolate* isolate = Isolate::Current(); 3377 Isolate* isolate = Isolate::Current();
3371 CHECK_ISOLATE(isolate); 3378 CHECK_ISOLATE(isolate);
3372 CHECK_CALLBACK_STATE(isolate); 3379 CHECK_CALLBACK_STATE(isolate);
3373 { 3380 {
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
3700 Isolate* isolate = Isolate::Current(); 3707 Isolate* isolate = Isolate::Current();
3701 DARTSCOPE(isolate); 3708 DARTSCOPE(isolate);
3702 const Library& lib = Api::UnwrapLibraryHandle(isolate, library); 3709 const Library& lib = Api::UnwrapLibraryHandle(isolate, library);
3703 if (lib.IsNull()) { 3710 if (lib.IsNull()) {
3704 RETURN_TYPE_ERROR(isolate, library, Library); 3711 RETURN_TYPE_ERROR(isolate, library, Library);
3705 } 3712 }
3706 const String& cls_name = Api::UnwrapStringHandle(isolate, class_name); 3713 const String& cls_name = Api::UnwrapStringHandle(isolate, class_name);
3707 if (cls_name.IsNull()) { 3714 if (cls_name.IsNull()) {
3708 RETURN_TYPE_ERROR(isolate, class_name, String); 3715 RETURN_TYPE_ERROR(isolate, class_name, String);
3709 } 3716 }
3710 const Class& cls = 3717 String& ambiguity_error_msg = String::Handle(isolate);
3711 Class::Handle(isolate, lib.LookupClassAllowPrivate(cls_name)); 3718 const Class& cls = Class::Handle(
3719 isolate, lib.LookupClassAllowPrivate(cls_name, &ambiguity_error_msg));
3712 if (cls.IsNull()) { 3720 if (cls.IsNull()) {
3721 if (!ambiguity_error_msg.IsNull()) {
3722 return Api::NewError("%s.", ambiguity_error_msg.ToCString());
3723 }
3713 // TODO(turnidge): Return null or error in this case? 3724 // TODO(turnidge): Return null or error in this case?
3714 const String& lib_name = String::Handle(isolate, lib.name()); 3725 const String& lib_name = String::Handle(isolate, lib.name());
3715 return Api::NewError("Class '%s' not found in library '%s'.", 3726 return Api::NewError("Class '%s' not found in library '%s'.",
3716 cls_name.ToCString(), lib_name.ToCString()); 3727 cls_name.ToCString(), lib_name.ToCString());
3717 } 3728 }
3718 return Api::NewHandle(isolate, cls.raw()); 3729 return Api::NewHandle(isolate, cls.raw());
3719 } 3730 }
3720 3731
3721 3732
3722 DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library, 3733 DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library,
(...skipping 10 matching lines...) Expand all
3733 } 3744 }
3734 const String& name_str = Api::UnwrapStringHandle(isolate, class_name); 3745 const String& name_str = Api::UnwrapStringHandle(isolate, class_name);
3735 if (name_str.IsNull()) { 3746 if (name_str.IsNull()) {
3736 RETURN_TYPE_ERROR(isolate, class_name, String); 3747 RETURN_TYPE_ERROR(isolate, class_name, String);
3737 } 3748 }
3738 // Ensure all classes are finalized. 3749 // Ensure all classes are finalized.
3739 Dart_Handle state = Api::CheckIsolateState(isolate); 3750 Dart_Handle state = Api::CheckIsolateState(isolate);
3740 if (::Dart_IsError(state)) { 3751 if (::Dart_IsError(state)) {
3741 return state; 3752 return state;
3742 } 3753 }
3754 String& ambiguity_error_msg = String::Handle(isolate);
3743 const Class& cls = 3755 const Class& cls =
3744 Class::Handle(isolate, lib.LookupClassAllowPrivate(name_str)); 3756 Class::Handle(isolate, lib.LookupClassAllowPrivate(name_str,
3757 &ambiguity_error_msg));
3745 if (cls.IsNull()) { 3758 if (cls.IsNull()) {
3759 if (!ambiguity_error_msg.IsNull()) {
3760 return Api::NewError("%s.", ambiguity_error_msg.ToCString());
3761 }
3746 const String& lib_name = String::Handle(isolate, lib.name()); 3762 const String& lib_name = String::Handle(isolate, lib.name());
3747 return Api::NewError("Type '%s' not found in library '%s'.", 3763 return Api::NewError("Type '%s' not found in library '%s'.",
3748 name_str.ToCString(), lib_name.ToCString()); 3764 name_str.ToCString(), lib_name.ToCString());
3749 } 3765 }
3750 if (cls.NumTypeArguments() == 0) { 3766 if (cls.NumTypeArguments() == 0) {
3751 if (number_of_type_arguments != 0) { 3767 if (number_of_type_arguments != 0) {
3752 return Api::NewError("Invalid number of type arguments specified, " 3768 return Api::NewError("Invalid number of type arguments specified, "
3753 "got %"Pd" expected 0", number_of_type_arguments); 3769 "got %"Pd" expected 0", number_of_type_arguments);
3754 } 3770 }
3755 return Api::NewHandle(isolate, Type::NewNonParameterizedType(cls)); 3771 return Api::NewHandle(isolate, Type::NewNonParameterizedType(cls));
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
4018 } 4034 }
4019 { 4035 {
4020 NoGCScope no_gc; 4036 NoGCScope no_gc;
4021 RawObject* raw_obj = obj.raw(); 4037 RawObject* raw_obj = obj.raw();
4022 isolate->heap()->SetPeer(raw_obj, peer); 4038 isolate->heap()->SetPeer(raw_obj, peer);
4023 } 4039 }
4024 return Api::Success(); 4040 return Api::Success();
4025 } 4041 }
4026 4042
4027 } // namespace dart 4043 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/compiler_test.cc ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698