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

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

Issue 910313002: Rename IsConstructor to IsGenerativeConstructor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | runtime/vm/flow_graph_builder.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/class_finalizer.h" 10 #include "vm/class_finalizer.h"
(...skipping 2666 matching lines...) Expand 10 before | Expand all | Expand 10 after
2677 isolate, lib.LookupClassAllowPrivate(class_name)); 2677 isolate, lib.LookupClassAllowPrivate(class_name));
2678 ASSERT(!cls.IsNull()); 2678 ASSERT(!cls.IsNull());
2679 Object& result = Object::Handle(isolate); 2679 Object& result = Object::Handle(isolate);
2680 String& dot_name = String::Handle(String::New(".")); 2680 String& dot_name = String::Handle(String::New("."));
2681 String& constr_name = String::Handle(String::Concat(class_name, dot_name)); 2681 String& constr_name = String::Handle(String::Concat(class_name, dot_name));
2682 result = ResolveConstructor(CURRENT_FUNC, cls, class_name, constr_name, 1); 2682 result = ResolveConstructor(CURRENT_FUNC, cls, class_name, constr_name, 1);
2683 if (result.IsError()) return result.raw(); 2683 if (result.IsError()) return result.raw();
2684 ASSERT(result.IsFunction()); 2684 ASSERT(result.IsFunction());
2685 Function& constructor = Function::Handle(isolate); 2685 Function& constructor = Function::Handle(isolate);
2686 constructor ^= result.raw(); 2686 constructor ^= result.raw();
2687 if (!constructor.IsConstructor()) { 2687 if (!constructor.IsGenerativeConstructor()) {
2688 const String& message = String::Handle( 2688 const String& message = String::Handle(
2689 String::NewFormatted("%s: class '%s' is not a constructor.", 2689 String::NewFormatted("%s: class '%s' is not a constructor.",
2690 CURRENT_FUNC, class_name.ToCString())); 2690 CURRENT_FUNC, class_name.ToCString()));
2691 return ApiError::New(message); 2691 return ApiError::New(message);
2692 } 2692 }
2693 Instance& exception = Instance::Handle(isolate); 2693 Instance& exception = Instance::Handle(isolate);
2694 exception = Instance::New(cls); 2694 exception = Instance::New(cls);
2695 const Array& args = Array::Handle(isolate, Array::New(3)); 2695 const Array& args = Array::Handle(isolate, Array::New(3));
2696 args.SetAt(0, exception); 2696 args.SetAt(0, exception);
2697 args.SetAt(1, 2697 args.SetAt(1,
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
3144 } 3144 }
3145 3145
3146 3146
3147 static Dart_Handle NewByteData(Isolate* isolate, intptr_t length) { 3147 static Dart_Handle NewByteData(Isolate* isolate, intptr_t length) {
3148 CHECK_LENGTH(length, TypedData::MaxElements(kTypedDataInt8ArrayCid)); 3148 CHECK_LENGTH(length, TypedData::MaxElements(kTypedDataInt8ArrayCid));
3149 Object& result = Object::Handle(isolate); 3149 Object& result = Object::Handle(isolate);
3150 result = GetByteDataConstructor(isolate, Symbols::ByteDataDot(), 1); 3150 result = GetByteDataConstructor(isolate, Symbols::ByteDataDot(), 1);
3151 ASSERT(!result.IsNull()); 3151 ASSERT(!result.IsNull());
3152 ASSERT(result.IsFunction()); 3152 ASSERT(result.IsFunction());
3153 const Function& factory = Function::Cast(result); 3153 const Function& factory = Function::Cast(result);
3154 ASSERT(!factory.IsConstructor()); 3154 ASSERT(!factory.IsGenerativeConstructor());
3155 3155
3156 // Create the argument list. 3156 // Create the argument list.
3157 const Array& args = Array::Handle(isolate, Array::New(2)); 3157 const Array& args = Array::Handle(isolate, Array::New(2));
3158 // Factories get type arguments. 3158 // Factories get type arguments.
3159 args.SetAt(0, Object::null_type_arguments()); 3159 args.SetAt(0, Object::null_type_arguments());
3160 args.SetAt(1, Smi::Handle(isolate, Smi::New(length))); 3160 args.SetAt(1, Smi::Handle(isolate, Smi::New(length)));
3161 3161
3162 // Invoke the constructor and return the new object. 3162 // Invoke the constructor and return the new object.
3163 result = DartEntry::InvokeFunction(factory, args); 3163 result = DartEntry::InvokeFunction(factory, args);
3164 ASSERT(result.IsInstance() || result.IsNull() || result.IsError()); 3164 ASSERT(result.IsInstance() || result.IsNull() || result.IsError());
(...skipping 28 matching lines...) Expand all
3193 Dart_Handle ext_data = NewExternalTypedData( 3193 Dart_Handle ext_data = NewExternalTypedData(
3194 isolate, kExternalTypedDataUint8ArrayCid, data, length); 3194 isolate, kExternalTypedDataUint8ArrayCid, data, length);
3195 if (::Dart_IsError(ext_data)) { 3195 if (::Dart_IsError(ext_data)) {
3196 return ext_data; 3196 return ext_data;
3197 } 3197 }
3198 Object& result = Object::Handle(isolate); 3198 Object& result = Object::Handle(isolate);
3199 result = GetByteDataConstructor(isolate, Symbols::ByteDataDot_view(), 3); 3199 result = GetByteDataConstructor(isolate, Symbols::ByteDataDot_view(), 3);
3200 ASSERT(!result.IsNull()); 3200 ASSERT(!result.IsNull());
3201 ASSERT(result.IsFunction()); 3201 ASSERT(result.IsFunction());
3202 const Function& factory = Function::Cast(result); 3202 const Function& factory = Function::Cast(result);
3203 ASSERT(!factory.IsConstructor()); 3203 ASSERT(!factory.IsGenerativeConstructor());
3204 3204
3205 // Create the argument list. 3205 // Create the argument list.
3206 const intptr_t num_args = 3; 3206 const intptr_t num_args = 3;
3207 const Array& args = Array::Handle(isolate, Array::New(num_args + 1)); 3207 const Array& args = Array::Handle(isolate, Array::New(num_args + 1));
3208 // Factories get type arguments. 3208 // Factories get type arguments.
3209 args.SetAt(0, Object::null_type_arguments()); 3209 args.SetAt(0, Object::null_type_arguments());
3210 const ExternalTypedData& array = 3210 const ExternalTypedData& array =
3211 Api::UnwrapExternalTypedDataHandle(isolate, ext_data); 3211 Api::UnwrapExternalTypedDataHandle(isolate, ext_data);
3212 args.SetAt(1, array); 3212 args.SetAt(1, array);
3213 Smi& smi = Smi::Handle(isolate); 3213 Smi& smi = Smi::Handle(isolate);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
3374 RETURN_TYPE_ERROR(isolate, typed_data, 'TypedData'); 3374 RETURN_TYPE_ERROR(isolate, typed_data, 'TypedData');
3375 } 3375 }
3376 Object& result = Object::Handle(isolate); 3376 Object& result = Object::Handle(isolate);
3377 result = GetByteBufferConstructor(isolate, 3377 result = GetByteBufferConstructor(isolate,
3378 Symbols::_ByteBuffer(), 3378 Symbols::_ByteBuffer(),
3379 Symbols::_ByteBufferDot_New(), 3379 Symbols::_ByteBufferDot_New(),
3380 1); 3380 1);
3381 ASSERT(!result.IsNull()); 3381 ASSERT(!result.IsNull());
3382 ASSERT(result.IsFunction()); 3382 ASSERT(result.IsFunction());
3383 const Function& factory = Function::Cast(result); 3383 const Function& factory = Function::Cast(result);
3384 ASSERT(!factory.IsConstructor()); 3384 ASSERT(!factory.IsGenerativeConstructor());
3385 3385
3386 // Create the argument list. 3386 // Create the argument list.
3387 const Array& args = Array::Handle(isolate, Array::New(2)); 3387 const Array& args = Array::Handle(isolate, Array::New(2));
3388 // Factories get type arguments. 3388 // Factories get type arguments.
3389 args.SetAt(0, Object::null_type_arguments()); 3389 args.SetAt(0, Object::null_type_arguments());
3390 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(typed_data)); 3390 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(typed_data));
3391 args.SetAt(1, obj); 3391 args.SetAt(1, obj);
3392 3392
3393 // Invoke the factory constructor and return the new object. 3393 // Invoke the factory constructor and return the new object.
3394 result = DartEntry::InvokeFunction(factory, args); 3394 result = DartEntry::InvokeFunction(factory, args);
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
3519 3519
3520 static RawObject* ResolveConstructor(const char* current_func, 3520 static RawObject* ResolveConstructor(const char* current_func,
3521 const Class& cls, 3521 const Class& cls,
3522 const String& class_name, 3522 const String& class_name,
3523 const String& constr_name, 3523 const String& constr_name,
3524 int num_args) { 3524 int num_args) {
3525 // The constructor must be present in the interface. 3525 // The constructor must be present in the interface.
3526 const Function& constructor = 3526 const Function& constructor =
3527 Function::Handle(cls.LookupFunctionAllowPrivate(constr_name)); 3527 Function::Handle(cls.LookupFunctionAllowPrivate(constr_name));
3528 if (constructor.IsNull() || 3528 if (constructor.IsNull() ||
3529 (!constructor.IsConstructor() && !constructor.IsFactory())) { 3529 (!constructor.IsGenerativeConstructor() && !constructor.IsFactory())) {
3530 const String& lookup_class_name = String::Handle(cls.Name()); 3530 const String& lookup_class_name = String::Handle(cls.Name());
3531 if (!class_name.Equals(lookup_class_name)) { 3531 if (!class_name.Equals(lookup_class_name)) {
3532 // When the class name used to build the constructor name is 3532 // When the class name used to build the constructor name is
3533 // different than the name of the class in which we are doing 3533 // different than the name of the class in which we are doing
3534 // the lookup, it can be confusing to the user to figure out 3534 // the lookup, it can be confusing to the user to figure out
3535 // what's going on. Be a little more explicit for these error 3535 // what's going on. Be a little more explicit for these error
3536 // messages. 3536 // messages.
3537 const String& message = String::Handle( 3537 const String& message = String::Handle(
3538 String::NewFormatted( 3538 String::NewFormatted(
3539 "%s: could not find factory '%s' in class '%s'.", 3539 "%s: could not find factory '%s' in class '%s'.",
3540 current_func, 3540 current_func,
3541 constr_name.ToCString(), 3541 constr_name.ToCString(),
3542 lookup_class_name.ToCString())); 3542 lookup_class_name.ToCString()));
3543 return ApiError::New(message); 3543 return ApiError::New(message);
3544 } else { 3544 } else {
3545 const String& message = String::Handle( 3545 const String& message = String::Handle(
3546 String::NewFormatted("%s: could not find constructor '%s'.", 3546 String::NewFormatted("%s: could not find constructor '%s'.",
3547 current_func, constr_name.ToCString())); 3547 current_func, constr_name.ToCString()));
3548 return ApiError::New(message); 3548 return ApiError::New(message);
3549 } 3549 }
3550 } 3550 }
3551 int extra_args = (constructor.IsConstructor() ? 2 : 1); 3551 int extra_args = (constructor.IsGenerativeConstructor() ? 2 : 1);
3552 String& error_message = String::Handle(); 3552 String& error_message = String::Handle();
3553 if (!constructor.AreValidArgumentCounts(num_args + extra_args, 3553 if (!constructor.AreValidArgumentCounts(num_args + extra_args,
3554 0, 3554 0,
3555 &error_message)) { 3555 &error_message)) {
3556 const String& message = String::Handle( 3556 const String& message = String::Handle(
3557 String::NewFormatted("%s: wrong argument count for " 3557 String::NewFormatted("%s: wrong argument count for "
3558 "constructor '%s': %s.", 3558 "constructor '%s': %s.",
3559 current_func, 3559 current_func,
3560 constr_name.ToCString(), 3560 constr_name.ToCString(),
3561 error_message.ToCString())); 3561 error_message.ToCString()));
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
3644 return Api::NewHandle(isolate, bound_error.raw()); 3644 return Api::NewHandle(isolate, bound_error.raw());
3645 } 3645 }
3646 redirect_type ^= redirect_type.Canonicalize(); 3646 redirect_type ^= redirect_type.Canonicalize();
3647 } 3647 }
3648 3648
3649 type_obj = redirect_type.raw(); 3649 type_obj = redirect_type.raw();
3650 type_arguments = redirect_type.arguments(); 3650 type_arguments = redirect_type.arguments();
3651 3651
3652 cls = type_obj.type_class(); 3652 cls = type_obj.type_class();
3653 } 3653 }
3654 if (constructor.IsConstructor()) { 3654 if (constructor.IsGenerativeConstructor()) {
3655 // Create the new object. 3655 // Create the new object.
3656 new_object = Instance::New(cls); 3656 new_object = Instance::New(cls);
3657 } 3657 }
3658 3658
3659 // Create the argument list. 3659 // Create the argument list.
3660 intptr_t arg_index = 0; 3660 intptr_t arg_index = 0;
3661 int extra_args = (constructor.IsConstructor() ? 2 : 1); 3661 int extra_args = (constructor.IsGenerativeConstructor() ? 2 : 1);
3662 const Array& args = 3662 const Array& args =
3663 Array::Handle(isolate, Array::New(number_of_arguments + extra_args)); 3663 Array::Handle(isolate, Array::New(number_of_arguments + extra_args));
3664 if (constructor.IsConstructor()) { 3664 if (constructor.IsGenerativeConstructor()) {
3665 // Constructors get the uninitialized object and a constructor phase. 3665 // Constructors get the uninitialized object and a constructor phase.
3666 if (!type_arguments.IsNull()) { 3666 if (!type_arguments.IsNull()) {
3667 // The type arguments will be null if the class has no type parameters, in 3667 // The type arguments will be null if the class has no type parameters, in
3668 // which case the following call would fail because there is no slot 3668 // which case the following call would fail because there is no slot
3669 // reserved in the object for the type vector. 3669 // reserved in the object for the type vector.
3670 new_object.SetTypeArguments(type_arguments); 3670 new_object.SetTypeArguments(type_arguments);
3671 } 3671 }
3672 args.SetAt(arg_index++, new_object); 3672 args.SetAt(arg_index++, new_object);
3673 args.SetAt(arg_index++, 3673 args.SetAt(arg_index++,
3674 Smi::Handle(isolate, Smi::New(Function::kCtorPhaseAll))); 3674 Smi::Handle(isolate, Smi::New(Function::kCtorPhaseAll)));
(...skipping 15 matching lines...) Expand all
3690 } 3690 }
3691 args.SetAt(arg_index++, argument); 3691 args.SetAt(arg_index++, argument);
3692 } 3692 }
3693 3693
3694 // Invoke the constructor and return the new object. 3694 // Invoke the constructor and return the new object.
3695 result = DartEntry::InvokeFunction(constructor, args); 3695 result = DartEntry::InvokeFunction(constructor, args);
3696 if (result.IsError()) { 3696 if (result.IsError()) {
3697 return Api::NewHandle(isolate, result.raw()); 3697 return Api::NewHandle(isolate, result.raw());
3698 } 3698 }
3699 3699
3700 if (constructor.IsConstructor()) { 3700 if (constructor.IsGenerativeConstructor()) {
3701 ASSERT(result.IsNull()); 3701 ASSERT(result.IsNull());
3702 } else { 3702 } else {
3703 ASSERT(result.IsNull() || result.IsInstance()); 3703 ASSERT(result.IsNull() || result.IsInstance());
3704 new_object ^= result.raw(); 3704 new_object ^= result.raw();
3705 } 3705 }
3706 return Api::NewHandle(isolate, new_object.raw()); 3706 return Api::NewHandle(isolate, new_object.raw());
3707 } 3707 }
3708 3708
3709 3709
3710 static RawInstance* AllocateObject(Isolate* isolate, const Class& cls) { 3710 static RawInstance* AllocateObject(Isolate* isolate, const Class& cls) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
3848 strings.SetAt(0, class_name); 3848 strings.SetAt(0, class_name);
3849 strings.SetAt(1, Symbols::Dot()); 3849 strings.SetAt(1, Symbols::Dot());
3850 strings.SetAt(2, constructor_name); 3850 strings.SetAt(2, constructor_name);
3851 const String& dot_name = String::Handle(isolate, String::ConcatAll(strings)); 3851 const String& dot_name = String::Handle(isolate, String::ConcatAll(strings));
3852 const TypeArguments& type_arguments = 3852 const TypeArguments& type_arguments =
3853 TypeArguments::Handle(isolate, type_obj.arguments()); 3853 TypeArguments::Handle(isolate, type_obj.arguments());
3854 const Function& constructor = 3854 const Function& constructor =
3855 Function::Handle(isolate, cls.LookupFunctionAllowPrivate(dot_name)); 3855 Function::Handle(isolate, cls.LookupFunctionAllowPrivate(dot_name));
3856 const int extra_args = 2; 3856 const int extra_args = 2;
3857 if (!constructor.IsNull() && 3857 if (!constructor.IsNull() &&
3858 constructor.IsConstructor() && 3858 constructor.IsGenerativeConstructor() &&
3859 constructor.AreValidArgumentCounts(number_of_arguments + extra_args, 3859 constructor.AreValidArgumentCounts(number_of_arguments + extra_args,
3860 0, 3860 0,
3861 NULL)) { 3861 NULL)) {
3862 // Create the argument list. 3862 // Create the argument list.
3863 // Constructors get the uninitialized object and a constructor phase. 3863 // Constructors get the uninitialized object and a constructor phase.
3864 if (!type_arguments.IsNull()) { 3864 if (!type_arguments.IsNull()) {
3865 // The type arguments will be null if the class has no type 3865 // The type arguments will be null if the class has no type
3866 // parameters, in which case the following call would fail 3866 // parameters, in which case the following call would fail
3867 // because there is no slot reserved in the object for the 3867 // because there is no slot reserved in the object for the
3868 // type vector. 3868 // type vector.
(...skipping 1606 matching lines...) Expand 10 before | Expand all | Expand 10 after
5475 5475
5476 5476
5477 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( 5477 DART_EXPORT void Dart_RegisterRootServiceRequestCallback(
5478 const char* name, 5478 const char* name,
5479 Dart_ServiceRequestCallback callback, 5479 Dart_ServiceRequestCallback callback,
5480 void* user_data) { 5480 void* user_data) {
5481 Service::RegisterRootEmbedderCallback(name, callback, user_data); 5481 Service::RegisterRootEmbedderCallback(name, callback, user_data);
5482 } 5482 }
5483 5483
5484 } // namespace dart 5484 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | runtime/vm/flow_graph_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698