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

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

Issue 2509013002: Allocate generic types in new-space before canonicalizing. (Closed)
Patch Set: formatting Created 4 years, 1 month 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
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/debugger_api_impl.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 "lib/stacktrace.h" 10 #include "lib/stacktrace.h"
(...skipping 2118 matching lines...) Expand 10 before | Expand all | Expand 10 after
2129 DARTSCOPE(Thread::Current()); 2129 DARTSCOPE(Thread::Current());
2130 Isolate* I = T->isolate(); 2130 Isolate* I = T->isolate();
2131 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(instance)); 2131 const Object& obj = Object::Handle(Z, Api::UnwrapHandle(instance));
2132 if (obj.IsNull()) { 2132 if (obj.IsNull()) {
2133 return Api::NewHandle(T, I->object_store()->null_type()); 2133 return Api::NewHandle(T, I->object_store()->null_type());
2134 } 2134 }
2135 if (!obj.IsInstance()) { 2135 if (!obj.IsInstance()) {
2136 RETURN_TYPE_ERROR(Z, instance, Instance); 2136 RETURN_TYPE_ERROR(Z, instance, Instance);
2137 } 2137 }
2138 const AbstractType& type = 2138 const AbstractType& type =
2139 AbstractType::Handle(Instance::Cast(obj).GetType()); 2139 AbstractType::Handle(Instance::Cast(obj).GetType(Heap::kNew));
2140 return Api::NewHandle(T, type.Canonicalize()); 2140 return Api::NewHandle(T, type.Canonicalize());
2141 } 2141 }
2142 2142
2143 2143
2144 // --- Numbers, Integers and Doubles ---- 2144 // --- Numbers, Integers and Doubles ----
2145 2145
2146 DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer, 2146 DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer,
2147 bool* fits) { 2147 bool* fits) {
2148 API_TIMELINE_DURATION; 2148 API_TIMELINE_DURATION;
2149 // Fast path for Smis and Mints. 2149 // Fast path for Smis and Mints.
(...skipping 1917 matching lines...) Expand 10 before | Expand all | Expand 10 after
4067 RETURN_TYPE_ERROR(Z, object, Instance); 4067 RETURN_TYPE_ERROR(Z, object, Instance);
4068 } 4068 }
4069 4069
4070 // Since we have allocated an object it would mean that the type 4070 // Since we have allocated an object it would mean that the type
4071 // is finalized. 4071 // is finalized.
4072 // TODO(asiva): How do we ensure that a constructor is not called more than 4072 // TODO(asiva): How do we ensure that a constructor is not called more than
4073 // once for the same object. 4073 // once for the same object.
4074 4074
4075 // Construct name of the constructor to invoke. 4075 // Construct name of the constructor to invoke.
4076 const String& constructor_name = Api::UnwrapStringHandle(Z, name); 4076 const String& constructor_name = Api::UnwrapStringHandle(Z, name);
4077 const AbstractType& type_obj = AbstractType::Handle(Z, instance.GetType()); 4077 const AbstractType& type_obj =
4078 AbstractType::Handle(Z, instance.GetType(Heap::kNew));
4078 const Class& cls = Class::Handle(Z, type_obj.type_class()); 4079 const Class& cls = Class::Handle(Z, type_obj.type_class());
4079 const String& class_name = String::Handle(Z, cls.Name()); 4080 const String& class_name = String::Handle(Z, cls.Name());
4080 const Array& strings = Array::Handle(Z, Array::New(3)); 4081 const Array& strings = Array::Handle(Z, Array::New(3));
4081 strings.SetAt(0, class_name); 4082 strings.SetAt(0, class_name);
4082 strings.SetAt(1, Symbols::Dot()); 4083 strings.SetAt(1, Symbols::Dot());
4083 if (constructor_name.IsNull()) { 4084 if (constructor_name.IsNull()) {
4084 strings.SetAt(2, Symbols::Empty()); 4085 strings.SetAt(2, Symbols::Empty());
4085 } else { 4086 } else {
4086 strings.SetAt(2, constructor_name); 4087 strings.SetAt(2, constructor_name);
4087 } 4088 }
(...skipping 2508 matching lines...) Expand 10 before | Expand all | Expand 10 after
6596 6597
6597 DART_EXPORT bool Dart_IsPrecompiledRuntime() { 6598 DART_EXPORT bool Dart_IsPrecompiledRuntime() {
6598 #if defined(DART_PRECOMPILED_RUNTIME) 6599 #if defined(DART_PRECOMPILED_RUNTIME)
6599 return true; 6600 return true;
6600 #else 6601 #else
6601 return false; 6602 return false;
6602 #endif 6603 #endif
6603 } 6604 }
6604 6605
6605 } // namespace dart 6606 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/debugger_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698