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

Side by Side Diff: runtime/lib/mirrors.cc

Issue 868453002: Rename is_visible to is_reflectable; use is_debuggable instead of is_reflectable (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 | « no previous file | runtime/lib/stacktrace.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 "lib/mirrors.h" 5 #include "lib/mirrors.h"
6 6
7 #include "lib/invocation_mirror.h" 7 #include "lib/invocation_mirror.h"
8 #include "vm/bootstrap_natives.h" 8 #include "vm/bootstrap_natives.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 const Instance& receiver, 583 const Instance& receiver,
584 const Function& function, 584 const Function& function,
585 const String& target_name, 585 const String& target_name,
586 const Array& args, 586 const Array& args,
587 const Array& args_descriptor_array) { 587 const Array& args_descriptor_array) {
588 // Note "args" is already the internal arguments with the receiver as the 588 // Note "args" is already the internal arguments with the receiver as the
589 // first element. 589 // first element.
590 Object& result = Object::Handle(); 590 Object& result = Object::Handle();
591 ArgumentsDescriptor args_descriptor(args_descriptor_array); 591 ArgumentsDescriptor args_descriptor(args_descriptor_array);
592 if (function.IsNull() || 592 if (function.IsNull() ||
593 !function.is_visible() || 593 !function.is_reflectable() ||
594 !function.AreValidArguments(args_descriptor, NULL)) { 594 !function.AreValidArguments(args_descriptor, NULL)) {
595 result = DartEntry::InvokeNoSuchMethod(receiver, 595 result = DartEntry::InvokeNoSuchMethod(receiver,
596 target_name, 596 target_name,
597 args, 597 args,
598 args_descriptor_array); 598 args_descriptor_array);
599 } else { 599 } else {
600 result = DartEntry::InvokeFunction(function, 600 result = DartEntry::InvokeFunction(function,
601 args, 601 args,
602 args_descriptor_array); 602 args_descriptor_array);
603 } 603 }
(...skipping 30 matching lines...) Expand all
634 return field.value(); 634 return field.value();
635 } 635 }
636 // An uninitialized field was found. Check for a getter in the field's 636 // An uninitialized field was found. Check for a getter in the field's
637 // owner classs. 637 // owner classs.
638 const Class& klass = Class::Handle(field.owner()); 638 const Class& klass = Class::Handle(field.owner());
639 const String& internal_getter_name = 639 const String& internal_getter_name =
640 String::Handle(Field::GetterName(getter_name)); 640 String::Handle(Field::GetterName(getter_name));
641 getter = klass.LookupStaticFunction(internal_getter_name); 641 getter = klass.LookupStaticFunction(internal_getter_name);
642 } 642 }
643 643
644 if (!getter.IsNull() && getter.is_visible()) { 644 if (!getter.IsNull() && getter.is_reflectable()) {
645 // Invoke the getter and return the result. 645 // Invoke the getter and return the result.
646 const Object& result = Object::Handle( 646 const Object& result = Object::Handle(
647 DartEntry::InvokeFunction(getter, Object::empty_array())); 647 DartEntry::InvokeFunction(getter, Object::empty_array()));
648 return ReturnResult(result); 648 return ReturnResult(result);
649 } 649 }
650 650
651 if (throw_nsm_if_absent) { 651 if (throw_nsm_if_absent) {
652 ThrowNoSuchMethod(Instance::null_instance(), 652 ThrowNoSuchMethod(Instance::null_instance(),
653 getter_name, 653 getter_name,
654 getter, 654 getter,
(...skipping 14 matching lines...) Expand all
669 const String& getter_name, 669 const String& getter_name,
670 const bool throw_nsm_if_absent) { 670 const bool throw_nsm_if_absent) {
671 // Note static fields do not have implicit getters. 671 // Note static fields do not have implicit getters.
672 const Field& field = Field::Handle(klass.LookupStaticField(getter_name)); 672 const Field& field = Field::Handle(klass.LookupStaticField(getter_name));
673 if (field.IsNull() || field.IsUninitialized()) { 673 if (field.IsNull() || field.IsUninitialized()) {
674 const String& internal_getter_name = String::Handle( 674 const String& internal_getter_name = String::Handle(
675 Field::GetterName(getter_name)); 675 Field::GetterName(getter_name));
676 Function& getter = Function::Handle( 676 Function& getter = Function::Handle(
677 klass.LookupStaticFunction(internal_getter_name)); 677 klass.LookupStaticFunction(internal_getter_name));
678 678
679 if (getter.IsNull() || !getter.is_visible()) { 679 if (getter.IsNull() || !getter.is_reflectable()) {
680 if (getter.IsNull()) { 680 if (getter.IsNull()) {
681 getter = klass.LookupStaticFunction(getter_name); 681 getter = klass.LookupStaticFunction(getter_name);
682 if (!getter.IsNull()) { 682 if (!getter.IsNull()) {
683 // Looking for a getter but found a regular method: closurize it. 683 // Looking for a getter but found a regular method: closurize it.
684 const Function& closure_function = 684 const Function& closure_function =
685 Function::Handle(getter.ImplicitClosureFunction()); 685 Function::Handle(getter.ImplicitClosureFunction());
686 return closure_function.ImplicitStaticClosure(); 686 return closure_function.ImplicitStaticClosure();
687 } 687 }
688 } 688 }
689 if (throw_nsm_if_absent) { 689 if (throw_nsm_if_absent) {
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 field ^= fields.At(i); 1035 field ^= fields.At(i);
1036 if (!field.is_synthetic()) { 1036 if (!field.is_synthetic()) {
1037 member_mirror = CreateVariableMirror(field, owner_mirror); 1037 member_mirror = CreateVariableMirror(field, owner_mirror);
1038 member_mirrors.Add(member_mirror); 1038 member_mirrors.Add(member_mirror);
1039 } 1039 }
1040 } 1040 }
1041 1041
1042 Function& func = Function::Handle(); 1042 Function& func = Function::Handle();
1043 for (intptr_t i = 0; i < num_functions; i++) { 1043 for (intptr_t i = 0; i < num_functions; i++) {
1044 func ^= functions.At(i); 1044 func ^= functions.At(i);
1045 if (func.is_visible() && 1045 if (func.is_reflectable() &&
1046 (func.kind() == RawFunction::kRegularFunction || 1046 (func.kind() == RawFunction::kRegularFunction ||
1047 func.kind() == RawFunction::kGetterFunction || 1047 func.kind() == RawFunction::kGetterFunction ||
1048 func.kind() == RawFunction::kSetterFunction)) { 1048 func.kind() == RawFunction::kSetterFunction)) {
1049 member_mirror = CreateMethodMirror(func, owner_mirror); 1049 member_mirror = CreateMethodMirror(func, owner_mirror);
1050 member_mirrors.Add(member_mirror); 1050 member_mirrors.Add(member_mirror);
1051 } 1051 }
1052 } 1052 }
1053 1053
1054 return member_mirrors.raw(); 1054 return member_mirrors.raw();
1055 } 1055 }
(...skipping 14 matching lines...) Expand all
1070 const Array& functions = Array::Handle(klass.functions()); 1070 const Array& functions = Array::Handle(klass.functions());
1071 const intptr_t num_functions = functions.Length(); 1071 const intptr_t num_functions = functions.Length();
1072 1072
1073 Instance& constructor_mirror = Instance::Handle(); 1073 Instance& constructor_mirror = Instance::Handle();
1074 const GrowableObjectArray& constructor_mirrors = GrowableObjectArray::Handle( 1074 const GrowableObjectArray& constructor_mirrors = GrowableObjectArray::Handle(
1075 GrowableObjectArray::New(num_functions)); 1075 GrowableObjectArray::New(num_functions));
1076 1076
1077 Function& func = Function::Handle(); 1077 Function& func = Function::Handle();
1078 for (intptr_t i = 0; i < num_functions; i++) { 1078 for (intptr_t i = 0; i < num_functions; i++) {
1079 func ^= functions.At(i); 1079 func ^= functions.At(i);
1080 if (func.is_visible() && func.kind() == RawFunction::kConstructor) { 1080 if (func.is_reflectable() && func.kind() == RawFunction::kConstructor) {
1081 constructor_mirror = CreateMethodMirror(func, owner_mirror); 1081 constructor_mirror = CreateMethodMirror(func, owner_mirror);
1082 constructor_mirrors.Add(constructor_mirror); 1082 constructor_mirrors.Add(constructor_mirror);
1083 } 1083 }
1084 } 1084 }
1085 1085
1086 return constructor_mirrors.raw(); 1086 return constructor_mirrors.raw();
1087 } 1087 }
1088 1088
1089 1089
1090 DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) { 1090 DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 member_mirrors.Add(member_mirror); 1122 member_mirrors.Add(member_mirror);
1123 } 1123 }
1124 } else if (entry.IsField()) { 1124 } else if (entry.IsField()) {
1125 const Field& field = Field::Cast(entry); 1125 const Field& field = Field::Cast(entry);
1126 if (!field.is_synthetic()) { 1126 if (!field.is_synthetic()) {
1127 member_mirror = CreateVariableMirror(field, owner_mirror); 1127 member_mirror = CreateVariableMirror(field, owner_mirror);
1128 member_mirrors.Add(member_mirror); 1128 member_mirrors.Add(member_mirror);
1129 } 1129 }
1130 } else if (entry.IsFunction()) { 1130 } else if (entry.IsFunction()) {
1131 const Function& func = Function::Cast(entry); 1131 const Function& func = Function::Cast(entry);
1132 if (func.is_visible() && 1132 if (func.is_reflectable() &&
1133 (func.kind() == RawFunction::kRegularFunction || 1133 (func.kind() == RawFunction::kRegularFunction ||
1134 func.kind() == RawFunction::kGetterFunction || 1134 func.kind() == RawFunction::kGetterFunction ||
1135 func.kind() == RawFunction::kSetterFunction)) { 1135 func.kind() == RawFunction::kSetterFunction)) {
1136 member_mirror = CreateMethodMirror(func, owner_mirror); 1136 member_mirror = CreateMethodMirror(func, owner_mirror);
1137 member_mirrors.Add(member_mirror); 1137 member_mirrors.Add(member_mirror);
1138 } 1138 }
1139 } 1139 }
1140 } 1140 }
1141 1141
1142 return member_mirrors.raw(); 1142 return member_mirrors.raw();
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 } 1420 }
1421 } 1421 }
1422 1422
1423 const Array& args_descriptor_array = 1423 const Array& args_descriptor_array =
1424 Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names)); 1424 Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
1425 1425
1426 ArgumentsDescriptor args_descriptor(args_descriptor_array); 1426 ArgumentsDescriptor args_descriptor(args_descriptor_array);
1427 1427
1428 if (function.IsNull() || 1428 if (function.IsNull() ||
1429 !function.AreValidArguments(args_descriptor, NULL) || 1429 !function.AreValidArguments(args_descriptor, NULL) ||
1430 !function.is_visible()) { 1430 !function.is_reflectable()) {
1431 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()), 1431 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
1432 function_name, 1432 function_name,
1433 function, 1433 function,
1434 Object::null_array(), 1434 Object::null_array(),
1435 InvocationMirror::kStatic, 1435 InvocationMirror::kStatic,
1436 InvocationMirror::kMethod); 1436 InvocationMirror::kMethod);
1437 UNREACHABLE(); 1437 UNREACHABLE();
1438 } 1438 }
1439 1439
1440 Object& result = Object::Handle( 1440 Object& result = Object::Handle(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1473 const String& internal_setter_name = String::Handle( 1473 const String& internal_setter_name = String::Handle(
1474 Field::SetterName(setter_name)); 1474 Field::SetterName(setter_name));
1475 1475
1476 if (field.IsNull()) { 1476 if (field.IsNull()) {
1477 setter = klass.LookupStaticFunction(internal_setter_name); 1477 setter = klass.LookupStaticFunction(internal_setter_name);
1478 1478
1479 const int kNumArgs = 1; 1479 const int kNumArgs = 1;
1480 const Array& args = Array::Handle(Array::New(kNumArgs)); 1480 const Array& args = Array::Handle(Array::New(kNumArgs));
1481 args.SetAt(0, value); 1481 args.SetAt(0, value);
1482 1482
1483 if (setter.IsNull() || !setter.is_visible()) { 1483 if (setter.IsNull() || !setter.is_reflectable()) {
1484 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()), 1484 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
1485 internal_setter_name, 1485 internal_setter_name,
1486 setter, 1486 setter,
1487 args, 1487 args,
1488 InvocationMirror::kStatic, 1488 InvocationMirror::kStatic,
1489 InvocationMirror::kSetter); 1489 InvocationMirror::kSetter);
1490 UNREACHABLE(); 1490 UNREACHABLE();
1491 } 1491 }
1492 1492
1493 // Invoke the setter and return the result. 1493 // Invoke the setter and return the result.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1534 if (!constructor_name.IsNull()) { 1534 if (!constructor_name.IsNull()) {
1535 internal_constructor_name = 1535 internal_constructor_name =
1536 String::Concat(internal_constructor_name, constructor_name); 1536 String::Concat(internal_constructor_name, constructor_name);
1537 } 1537 }
1538 1538
1539 Function& lookup_constructor = Function::Handle( 1539 Function& lookup_constructor = Function::Handle(
1540 klass.LookupFunction(internal_constructor_name)); 1540 klass.LookupFunction(internal_constructor_name));
1541 1541
1542 if (lookup_constructor.IsNull() || 1542 if (lookup_constructor.IsNull() ||
1543 !(lookup_constructor.IsConstructor() || lookup_constructor.IsFactory()) || 1543 !(lookup_constructor.IsConstructor() || lookup_constructor.IsFactory()) ||
1544 !lookup_constructor.is_visible()) { 1544 !lookup_constructor.is_reflectable()) {
1545 // Pretend we didn't find the constructor at all when the arity is wrong 1545 // Pretend we didn't find the constructor at all when the arity is wrong
1546 // so as to produce the same NoSuchMethodError as the non-reflective case. 1546 // so as to produce the same NoSuchMethodError as the non-reflective case.
1547 lookup_constructor = Function::null(); 1547 lookup_constructor = Function::null();
1548 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()), 1548 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
1549 internal_constructor_name, 1549 internal_constructor_name,
1550 lookup_constructor, 1550 lookup_constructor,
1551 Object::null_array(), 1551 Object::null_array(),
1552 InvocationMirror::kConstructor, 1552 InvocationMirror::kConstructor,
1553 InvocationMirror::kMethod); 1553 InvocationMirror::kMethod);
1554 UNREACHABLE(); 1554 UNREACHABLE();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 explicit_argument = explicit_args.At(i); 1612 explicit_argument = explicit_args.At(i);
1613 args.SetAt(i + num_implicit_args, explicit_argument); 1613 args.SetAt(i + num_implicit_args, explicit_argument);
1614 } 1614 }
1615 1615
1616 const Array& args_descriptor_array = 1616 const Array& args_descriptor_array =
1617 Array::Handle(ArgumentsDescriptor::New(args.Length(), 1617 Array::Handle(ArgumentsDescriptor::New(args.Length(),
1618 arg_names)); 1618 arg_names));
1619 1619
1620 ArgumentsDescriptor args_descriptor(args_descriptor_array); 1620 ArgumentsDescriptor args_descriptor(args_descriptor_array);
1621 if (!redirected_constructor.AreValidArguments(args_descriptor, NULL) || 1621 if (!redirected_constructor.AreValidArguments(args_descriptor, NULL) ||
1622 !redirected_constructor.is_visible()) { 1622 !redirected_constructor.is_reflectable()) {
1623 // Pretend we didn't find the constructor at all when the arity is wrong 1623 // Pretend we didn't find the constructor at all when the arity is wrong
1624 // so as to produce the same NoSuchMethodError as the non-reflective case. 1624 // so as to produce the same NoSuchMethodError as the non-reflective case.
1625 redirected_constructor = Function::null(); 1625 redirected_constructor = Function::null();
1626 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()), 1626 ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
1627 internal_constructor_name, 1627 internal_constructor_name,
1628 redirected_constructor, 1628 redirected_constructor,
1629 Object::null_array(), 1629 Object::null_array(),
1630 InvocationMirror::kConstructor, 1630 InvocationMirror::kConstructor,
1631 InvocationMirror::kMethod); 1631 InvocationMirror::kMethod);
1632 UNREACHABLE(); 1632 UNREACHABLE();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1712 return call_result.raw(); 1712 return call_result.raw();
1713 } 1713 }
1714 } 1714 }
1715 1715
1716 const Array& args_descriptor_array = 1716 const Array& args_descriptor_array =
1717 Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names)); 1717 Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
1718 ArgumentsDescriptor args_descriptor(args_descriptor_array); 1718 ArgumentsDescriptor args_descriptor(args_descriptor_array);
1719 1719
1720 if (function.IsNull() || 1720 if (function.IsNull() ||
1721 !function.AreValidArguments(args_descriptor, NULL) || 1721 !function.AreValidArguments(args_descriptor, NULL) ||
1722 !function.is_visible()) { 1722 !function.is_reflectable()) {
1723 ThrowNoSuchMethod(Instance::null_instance(), 1723 ThrowNoSuchMethod(Instance::null_instance(),
1724 function_name, 1724 function_name,
1725 function, 1725 function,
1726 Object::null_array(), 1726 Object::null_array(),
1727 InvocationMirror::kTopLevel, 1727 InvocationMirror::kTopLevel,
1728 InvocationMirror::kMethod); 1728 InvocationMirror::kMethod);
1729 UNREACHABLE(); 1729 UNREACHABLE();
1730 } 1730 }
1731 1731
1732 const Object& result = Object::Handle( 1732 const Object& result = Object::Handle(
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1768 const String& internal_setter_name = 1768 const String& internal_setter_name =
1769 String::Handle(Field::SetterName(setter_name)); 1769 String::Handle(Field::SetterName(setter_name));
1770 1770
1771 if (field.IsNull()) { 1771 if (field.IsNull()) {
1772 setter = library.LookupLocalFunction(internal_setter_name); 1772 setter = library.LookupLocalFunction(internal_setter_name);
1773 1773
1774 const int kNumArgs = 1; 1774 const int kNumArgs = 1;
1775 const Array& args = Array::Handle(Array::New(kNumArgs)); 1775 const Array& args = Array::Handle(Array::New(kNumArgs));
1776 args.SetAt(0, value); 1776 args.SetAt(0, value);
1777 1777
1778 if (setter.IsNull() || !setter.is_visible()) { 1778 if (setter.IsNull() || !setter.is_reflectable()) {
1779 ThrowNoSuchMethod(Instance::null_instance(), 1779 ThrowNoSuchMethod(Instance::null_instance(),
1780 internal_setter_name, 1780 internal_setter_name,
1781 setter, 1781 setter,
1782 args, 1782 args,
1783 InvocationMirror::kTopLevel, 1783 InvocationMirror::kTopLevel,
1784 InvocationMirror::kSetter); 1784 InvocationMirror::kSetter);
1785 UNREACHABLE(); 1785 UNREACHABLE();
1786 } 1786 }
1787 1787
1788 // Invoke the setter and return the result. 1788 // Invoke the setter and return the result.
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1965 } 1965 }
1966 1966
1967 DEFINE_NATIVE_ENTRY(TypeMirror_moreSpecificTest, 2) { 1967 DEFINE_NATIVE_ENTRY(TypeMirror_moreSpecificTest, 2) {
1968 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, a, arguments->NativeArgAt(0)); 1968 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, a, arguments->NativeArgAt(0));
1969 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, b, arguments->NativeArgAt(1)); 1969 GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, b, arguments->NativeArgAt(1));
1970 return Bool::Get(a.IsMoreSpecificThan(b, NULL)).raw(); 1970 return Bool::Get(a.IsMoreSpecificThan(b, NULL)).raw();
1971 } 1971 }
1972 1972
1973 1973
1974 } // namespace dart 1974 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/lib/stacktrace.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698