OLD | NEW |
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 "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 3883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3894 const intptr_t other_num_fixed_params = other.num_fixed_parameters(); | 3894 const intptr_t other_num_fixed_params = other.num_fixed_parameters(); |
3895 const intptr_t other_num_opt_pos_params = | 3895 const intptr_t other_num_opt_pos_params = |
3896 other.NumOptionalPositionalParameters(); | 3896 other.NumOptionalPositionalParameters(); |
3897 const intptr_t other_num_opt_named_params = | 3897 const intptr_t other_num_opt_named_params = |
3898 other.NumOptionalNamedParameters(); | 3898 other.NumOptionalNamedParameters(); |
3899 // A generative constructor may be compared to a redirecting factory and be | 3899 // A generative constructor may be compared to a redirecting factory and be |
3900 // compatible although it has an additional phase parameter. | 3900 // compatible although it has an additional phase parameter. |
3901 const intptr_t num_ignored_params = | 3901 const intptr_t num_ignored_params = |
3902 (other.IsRedirectingFactory() && IsConstructor()) ? 1 : 0; | 3902 (other.IsRedirectingFactory() && IsConstructor()) ? 1 : 0; |
3903 // The default values of optional parameters can differ. | 3903 // The default values of optional parameters can differ. |
3904 if (((num_fixed_params - num_ignored_params) != other_num_fixed_params) || | 3904 // This function requires the same arguments or less and accepts the same |
3905 (num_opt_pos_params < other_num_opt_pos_params) || | 3905 // arguments or more. |
| 3906 if (((num_fixed_params - num_ignored_params) > other_num_fixed_params) || |
| 3907 ((num_fixed_params - num_ignored_params) + num_opt_pos_params < |
| 3908 other_num_fixed_params + other_num_opt_pos_params) || |
3906 (num_opt_named_params < other_num_opt_named_params)) { | 3909 (num_opt_named_params < other_num_opt_named_params)) { |
3907 return false; | 3910 return false; |
3908 } | 3911 } |
3909 if (other_num_opt_named_params == 0) { | 3912 if (other_num_opt_named_params == 0) { |
3910 return true; | 3913 return true; |
3911 } | 3914 } |
3912 // Check that for each optional named parameter of the other function there | 3915 // Check that for each optional named parameter of the other function there |
3913 // exists an optional named parameter of this function with an identical | 3916 // exists an optional named parameter of this function with an identical |
3914 // name. | 3917 // name. |
3915 // Note that SetParameterNameAt() guarantees that names are symbols, so we | 3918 // Note that SetParameterNameAt() guarantees that names are symbols, so we |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3992 const AbstractTypeArguments& other_type_arguments, | 3995 const AbstractTypeArguments& other_type_arguments, |
3993 Error* malformed_error) const { | 3996 Error* malformed_error) const { |
3994 const intptr_t num_fixed_params = num_fixed_parameters(); | 3997 const intptr_t num_fixed_params = num_fixed_parameters(); |
3995 const intptr_t num_opt_pos_params = NumOptionalPositionalParameters(); | 3998 const intptr_t num_opt_pos_params = NumOptionalPositionalParameters(); |
3996 const intptr_t num_opt_named_params = NumOptionalNamedParameters(); | 3999 const intptr_t num_opt_named_params = NumOptionalNamedParameters(); |
3997 const intptr_t other_num_fixed_params = other.num_fixed_parameters(); | 4000 const intptr_t other_num_fixed_params = other.num_fixed_parameters(); |
3998 const intptr_t other_num_opt_pos_params = | 4001 const intptr_t other_num_opt_pos_params = |
3999 other.NumOptionalPositionalParameters(); | 4002 other.NumOptionalPositionalParameters(); |
4000 const intptr_t other_num_opt_named_params = | 4003 const intptr_t other_num_opt_named_params = |
4001 other.NumOptionalNamedParameters(); | 4004 other.NumOptionalNamedParameters(); |
4002 if ((num_fixed_params != other_num_fixed_params) || | 4005 // This function requires the same arguments or less and accepts the same |
4003 (num_opt_pos_params < other_num_opt_pos_params) || | 4006 // arguments or more. |
| 4007 if ((num_fixed_params > other_num_fixed_params) || |
| 4008 (num_fixed_params + num_opt_pos_params < |
| 4009 other_num_fixed_params + other_num_opt_pos_params) || |
4004 (num_opt_named_params < other_num_opt_named_params)) { | 4010 (num_opt_named_params < other_num_opt_named_params)) { |
4005 return false; | 4011 return false; |
4006 } | 4012 } |
4007 // Check the result type. | 4013 // Check the result type. |
4008 AbstractType& other_res_type = AbstractType::Handle(other.result_type()); | 4014 AbstractType& other_res_type = AbstractType::Handle(other.result_type()); |
4009 if (!other_res_type.IsInstantiated()) { | 4015 if (!other_res_type.IsInstantiated()) { |
4010 other_res_type = other_res_type.InstantiateFrom(other_type_arguments, | 4016 other_res_type = other_res_type.InstantiateFrom(other_type_arguments, |
4011 malformed_error); | 4017 malformed_error); |
4012 ASSERT((malformed_error == NULL) || malformed_error->IsNull()); | 4018 ASSERT((malformed_error == NULL) || malformed_error->IsNull()); |
4013 } | 4019 } |
(...skipping 12 matching lines...) Expand all Loading... |
4026 return false; | 4032 return false; |
4027 } | 4033 } |
4028 } else { | 4034 } else { |
4029 ASSERT(test_kind == kIsMoreSpecificThan); | 4035 ASSERT(test_kind == kIsMoreSpecificThan); |
4030 if (!res_type.IsMoreSpecificThan(other_res_type, malformed_error)) { | 4036 if (!res_type.IsMoreSpecificThan(other_res_type, malformed_error)) { |
4031 return false; | 4037 return false; |
4032 } | 4038 } |
4033 } | 4039 } |
4034 } | 4040 } |
4035 // Check the types of fixed and optional positional parameters. | 4041 // Check the types of fixed and optional positional parameters. |
4036 for (intptr_t i = 0; i < num_fixed_params + other_num_opt_pos_params; i++) { | 4042 for (intptr_t i = 0; |
| 4043 i < other_num_fixed_params + other_num_opt_pos_params; i++) { |
4037 if (!TestParameterType(test_kind, | 4044 if (!TestParameterType(test_kind, |
4038 i, i, type_arguments, other, other_type_arguments, | 4045 i, i, type_arguments, other, other_type_arguments, |
4039 malformed_error)) { | 4046 malformed_error)) { |
4040 return false; | 4047 return false; |
4041 } | 4048 } |
4042 } | 4049 } |
4043 // Check the names and types of optional named parameters. | 4050 // Check the names and types of optional named parameters. |
4044 if (other_num_opt_named_params == 0) { | 4051 if (other_num_opt_named_params == 0) { |
4045 return true; | 4052 return true; |
4046 } | 4053 } |
(...skipping 9622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13669 } | 13676 } |
13670 return result.raw(); | 13677 return result.raw(); |
13671 } | 13678 } |
13672 | 13679 |
13673 | 13680 |
13674 const char* WeakProperty::ToCString() const { | 13681 const char* WeakProperty::ToCString() const { |
13675 return "_WeakProperty"; | 13682 return "_WeakProperty"; |
13676 } | 13683 } |
13677 | 13684 |
13678 } // namespace dart | 13685 } // namespace dart |
OLD | NEW |