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

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

Issue 18238003: Add Dart_GetSupertype to the dart debugger API so that the dartium (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/dart_api_impl.cc ('k') | runtime/vm/debugger_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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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_debugger_api.h" 5 #include "include/dart_debugger_api.h"
6 6
7 #include "vm/class_finalizer.h"
7 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
8 #include "vm/dart_api_state.h" 9 #include "vm/dart_api_state.h"
9 #include "vm/debugger.h" 10 #include "vm/debugger.h"
10 #include "vm/isolate.h" 11 #include "vm/isolate.h"
11 #include "vm/object_store.h" 12 #include "vm/object_store.h"
12 #include "vm/symbols.h" 13 #include "vm/symbols.h"
13 14
14 namespace dart { 15 namespace dart {
15 16
16 #define UNWRAP_AND_CHECK_PARAM(type, var, param) \ 17 #define UNWRAP_AND_CHECK_PARAM(type, var, param) \
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 499
499 500
500 DART_EXPORT Dart_Handle Dart_GetSuperclass(Dart_Handle cls_in) { 501 DART_EXPORT Dart_Handle Dart_GetSuperclass(Dart_Handle cls_in) {
501 Isolate* isolate = Isolate::Current(); 502 Isolate* isolate = Isolate::Current();
502 DARTSCOPE(isolate); 503 DARTSCOPE(isolate);
503 UNWRAP_AND_CHECK_PARAM(Class, cls, cls_in); 504 UNWRAP_AND_CHECK_PARAM(Class, cls, cls_in);
504 return Api::NewHandle(isolate, cls.SuperClass()); 505 return Api::NewHandle(isolate, cls.SuperClass());
505 } 506 }
506 507
507 508
509 DART_EXPORT Dart_Handle Dart_GetSupertype(Dart_Handle type_in) {
510 Isolate* isolate = Isolate::Current();
511 DARTSCOPE(isolate);
512
513 UNWRAP_AND_CHECK_PARAM(Type, type, type_in);
514 const Class& cls= Class::Handle(type.type_class());
515 intptr_t num_expected_type_arguments = cls.NumTypeParameters();
516 if (num_expected_type_arguments == 0) {
517 // The super type has no type parameters or it is already instantiated
518 // just return it.
519 const AbstractType& type = AbstractType::Handle(cls.super_type());
520 if (type.IsNull()) {
521 return Dart_Null();
522 }
523 return Api::NewHandle(isolate, type.Canonicalize());
524 }
525 // Set up the type arguments array for the super class type.
526 const Class& super_cls = Class::Handle(cls.SuperClass());
527 num_expected_type_arguments = super_cls.NumTypeParameters();
528 const AbstractTypeArguments& type_args_array =
529 AbstractTypeArguments::Handle(type.arguments());
530 const TypeArguments& super_type_args_array =
531 TypeArguments::Handle(TypeArguments::New(num_expected_type_arguments));
532 AbstractType& type_arg = AbstractType::Handle();
533 for (intptr_t i = 0; i < num_expected_type_arguments; i++) {
regis 2013/07/01 16:29:27 It is not correct to start at index 0. Since you c
siva 2013/07/01 18:45:15 As discussed offline I went with the adjustment to
534 type_arg ^= type_args_array.TypeAt(i);
535 super_type_args_array.SetTypeAt(i, type_arg);
536 }
537
538 // Construct the super type object, canonicalize it and return.
539 Type& instantiated_type = Type::Handle(
540 Type::New(super_cls, super_type_args_array, Scanner::kDummyTokenIndex));
541 ASSERT(!instantiated_type.IsNull());
542 instantiated_type ^= ClassFinalizer::FinalizeType(
543 super_cls, instantiated_type, ClassFinalizer::kCanonicalize);
544 return Api::NewHandle(isolate, instantiated_type.raw());
545 }
546
547
508 DART_EXPORT Dart_Handle Dart_GetClassInfo( 548 DART_EXPORT Dart_Handle Dart_GetClassInfo(
509 intptr_t cls_id, 549 intptr_t cls_id,
510 Dart_Handle* class_name, 550 Dart_Handle* class_name,
511 intptr_t* library_id, 551 intptr_t* library_id,
512 intptr_t* super_class_id, 552 intptr_t* super_class_id,
513 Dart_Handle* static_fields) { 553 Dart_Handle* static_fields) {
514 Isolate* isolate = Isolate::Current(); 554 Isolate* isolate = Isolate::Current();
515 DARTSCOPE(isolate); 555 DARTSCOPE(isolate);
516 if (!isolate->class_table()->IsValidIndex(cls_id)) { 556 if (!isolate->class_table()->IsValidIndex(cls_id)) {
517 return Api::NewError("%s: %"Pd" is not a valid class id", 557 return Api::NewError("%s: %"Pd" is not a valid class id",
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 813
774 814
775 DART_EXPORT char* Dart_GetVmStatus(const char* request) { 815 DART_EXPORT char* Dart_GetVmStatus(const char* request) {
776 if (strncmp(request, "/isolate/", 9) == 0) { 816 if (strncmp(request, "/isolate/", 9) == 0) {
777 return Isolate::GetStatus(request); 817 return Isolate::GetStatus(request);
778 } 818 }
779 return NULL; 819 return NULL;
780 } 820 }
781 821
782 } // namespace dart 822 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/debugger_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698