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

Unified Diff: runtime/vm/dart_api_impl.cc

Issue 24210003: Never return a Dart_Handle on a dart::Class from the embedding API. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: remove Dart_IsClass from header. remove demo assert Created 7 years, 3 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/include/dart_mirrors_api.h ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_impl.cc
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 0ba963874243a898bbf5c806f178c2eddd889f34..09390bfcb093090633ea765d459971826511b03e 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1304,14 +1304,6 @@ DART_EXPORT bool Dart_IsType(Dart_Handle handle) {
}
-DART_EXPORT bool Dart_IsClass(Dart_Handle handle) {
- Isolate* isolate = Isolate::Current();
- DARTSCOPE(isolate);
- const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(handle));
- return obj.IsClass();
-}
-
-
DART_EXPORT bool Dart_IsFunction(Dart_Handle handle) {
TRACE_API_CALL(CURRENT_FUNC);
return Api::ClassId(handle) == kFunctionCid;
@@ -1356,17 +1348,6 @@ DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance) {
return Api::NewHandle(isolate, type.Canonicalize());
}
-// TODO(asiva): Deprecate this method.
-DART_EXPORT Dart_Handle Dart_InstanceGetClass(Dart_Handle instance) {
- Isolate* isolate = Isolate::Current();
- DARTSCOPE(isolate);
- const Instance& obj = Api::UnwrapInstanceHandle(isolate, instance);
- if (obj.IsNull()) {
- RETURN_TYPE_ERROR(isolate, instance, Instance);
- }
- return Api::NewHandle(isolate, obj.clazz());
-}
-
// --- Numbers, Integers and Doubles ----
@@ -2841,29 +2822,15 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type,
}
// Get the class to instantiate.
- result = Api::UnwrapHandle(type);
- if (result.IsNull()) {
- RETURN_TYPE_ERROR(isolate, type, Type);
- }
- Class& cls = Class::Handle(isolate);
- AbstractTypeArguments& type_arguments =
- AbstractTypeArguments::Handle(isolate);
-
- if (result.IsType()) {
- cls = Type::Cast(result).type_class();
- type_arguments = Type::Cast(result).arguments();
- } else if (result.IsClass()) {
- // For backwards compatibility we allow class objects to be passed in
- // for now. This needs to be removed once all code that uses class
- // objects to invoke Dart_New is removed.
- cls ^= result.raw();
- type_arguments = Type::Handle(cls.RareType()).arguments();
- } else {
+ const Type& type_obj = Api::UnwrapTypeHandle(isolate, type);
+ if (type_obj.IsNull()) {
RETURN_TYPE_ERROR(isolate, type, Type);
}
+ Class& cls = Class::Handle(isolate, type_obj.type_class());
+ const AbstractTypeArguments& type_arguments =
+ AbstractTypeArguments::Handle(isolate, type_obj.arguments());
- String& base_constructor_name = String::Handle();
- base_constructor_name = cls.Name();
+ const String& base_constructor_name = String::Handle(isolate, cls.Name());
// And get the name of the constructor to invoke.
String& dot_name = String::Handle(isolate);
@@ -2965,23 +2932,13 @@ DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) {
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
CHECK_CALLBACK_STATE(isolate);
- const Object& result = Object::Handle(isolate, Api::UnwrapHandle(type));
+ const Type& type_obj = Api::UnwrapTypeHandle(isolate, type);
// Get the class to instantiate.
- if (result.IsNull()) {
- RETURN_TYPE_ERROR(isolate, type, Type);
- }
- Class& cls = Class::Handle(isolate);
- if (result.IsType()) {
- cls = Type::Cast(result).type_class();
- } else if (result.IsClass()) {
- // For backwards compatibility we allow class objects to be passed in
- // for now. This needs to be removed once all code that uses class
- // objects to invoke Dart_New is removed.
- cls ^= result.raw();
- } else {
+ if (type_obj.IsNull()) {
RETURN_TYPE_ERROR(isolate, type, Type);
}
+ const Class& cls = Class::Handle(isolate, type_obj.type_class());
// Allocate an object for the given class.
return Api::NewHandle(isolate, Instance::New(cls));
@@ -3030,22 +2987,14 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
args.SetAt((i + num_receiver), arg);
}
- if (obj.IsType() || obj.IsClass()) {
+ if (obj.IsType()) {
// Finalize all classes.
Dart_Handle state = Api::CheckIsolateState(isolate);
if (::Dart_IsError(state)) {
return state;
}
- // For backwards compatibility we allow class objects to be passed in
- // for now. This needs to be removed once all code that uses class
- // objects to invoke Dart_Invoke is removed.
- Class& cls = Class::Handle();
- if (obj.IsType()) {
- cls = Type::Cast(obj).type_class();
- } else {
- cls = Class::Cast(obj).raw();
- }
+ const Class& cls = Class::Handle(isolate, Type::Cast(obj).type_class());
const Function& function = Function::Handle(
isolate,
Resolver::ResolveStatic(cls,
@@ -3092,8 +3041,9 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
return state;
}
- Function& function = Function::Handle(isolate);
- function = lib.LookupFunctionAllowPrivate(function_name);
+ const Function& function =
+ Function::Handle(isolate,
+ lib.LookupFunctionAllowPrivate(function_name));
if (function.IsNull()) {
return Api::NewError("%s: did not find top-level function '%s'.",
CURRENT_FUNC,
@@ -3188,18 +3138,11 @@ DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) {
if (obj.IsNull()) {
return Api::NewError("%s expects argument 'container' to be non-null.",
CURRENT_FUNC);
- } else if (obj.IsType() || obj.IsClass()) {
+ } else if (obj.IsType()) {
// To access a static field we may need to use the Field or the
// getter Function.
- // For backwards compatibility we allow class objects to be passed in
- // for now. This needs to be removed once all code that uses class
- // objects to invoke Dart_GetField is removed.
- Class& cls = Class::Handle();
- if (obj.IsType()) {
- cls = Type::Cast(obj).type_class();
- } else {
- cls = Class::Cast(obj).raw();
- }
+ Class& cls = Class::Handle(isolate, Type::Cast(obj).type_class());
+
field = cls.LookupStaticField(field_name);
if (field.IsNull() || FieldIsUninitialized(isolate, field)) {
const String& getter_name =
@@ -3320,18 +3263,11 @@ DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container,
if (obj.IsNull()) {
return Api::NewError("%s expects argument 'container' to be non-null.",
CURRENT_FUNC);
- } else if (obj.IsType() || obj.IsClass()) {
+ } else if (obj.IsType()) {
// To access a static field we may need to use the Field or the
// setter Function.
- // For backwards compatibility we allow class objects to be passed in
- // for now. This needs to be removed once all code that uses class
- // objects to invoke Dart_SetField is removed.
- Class& cls = Class::Handle();
- if (obj.IsType()) {
- cls = Type::Cast(obj).type_class();
- } else {
- cls = Class::Cast(obj).raw();
- }
+ Class& cls = Class::Handle(isolate, Type::Cast(obj).type_class());
+
field = cls.LookupStaticField(field_name);
if (field.IsNull()) {
String& setter_name =
@@ -3550,7 +3486,7 @@ DART_EXPORT Dart_Handle Dart_CreateNativeWrapperClass(Dart_Handle library,
return Api::NewError(
"Unable to create native wrapper class : already exists");
}
- return Api::NewHandle(isolate, cls.raw());
+ return Api::NewHandle(isolate, cls.RareType());
}
@@ -4034,7 +3970,7 @@ DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library,
return Api::NewError("Class '%s' not found in library '%s'.",
cls_name.ToCString(), lib_name.ToCString());
}
- return Api::NewHandle(isolate, cls.raw());
+ return Api::NewHandle(isolate, cls.RareType());
}
« no previous file with comments | « runtime/include/dart_mirrors_api.h ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698