| 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/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 5854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5865 } | 5865 } |
| 5866 | 5866 |
| 5867 | 5867 |
| 5868 intptr_t Function::NumParameters() const { | 5868 intptr_t Function::NumParameters() const { |
| 5869 return num_fixed_parameters() + NumOptionalParameters(); | 5869 return num_fixed_parameters() + NumOptionalParameters(); |
| 5870 } | 5870 } |
| 5871 | 5871 |
| 5872 | 5872 |
| 5873 intptr_t Function::NumImplicitParameters() const { | 5873 intptr_t Function::NumImplicitParameters() const { |
| 5874 if (kind() == RawFunction::kConstructor) { | 5874 if (kind() == RawFunction::kConstructor) { |
| 5875 if (is_static()) { | 5875 // Type arguments for factory; instance for generative constructor. |
| 5876 ASSERT(IsFactory()); | 5876 return 1; |
| 5877 return 1; // Type arguments. | |
| 5878 } else { | |
| 5879 ASSERT(IsGenerativeConstructor()); | |
| 5880 return 2; // Instance, phase. | |
| 5881 } | |
| 5882 } | 5877 } |
| 5883 if ((kind() == RawFunction::kClosureFunction) || | 5878 if ((kind() == RawFunction::kClosureFunction) || |
| 5884 (kind() == RawFunction::kSignatureFunction)) { | 5879 (kind() == RawFunction::kSignatureFunction)) { |
| 5885 return 1; // Closure object. | 5880 return 1; // Closure object. |
| 5886 } | 5881 } |
| 5887 if (!is_static()) { | 5882 if (!is_static()) { |
| 5888 // Closure functions defined inside instance (i.e. non-static) functions are | 5883 // Closure functions defined inside instance (i.e. non-static) functions are |
| 5889 // marked as non-static, but they do not have a receiver. | 5884 // marked as non-static, but they do not have a receiver. |
| 5890 // Closures are handled above. | 5885 // Closures are handled above. |
| 5891 ASSERT((kind() != RawFunction::kClosureFunction) && | 5886 ASSERT((kind() != RawFunction::kClosureFunction) && |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6250 Heap::Space space) const { | 6245 Heap::Space space) const { |
| 6251 const intptr_t num_fixed_params = num_fixed_parameters(); | 6246 const intptr_t num_fixed_params = num_fixed_parameters(); |
| 6252 const intptr_t num_opt_pos_params = NumOptionalPositionalParameters(); | 6247 const intptr_t num_opt_pos_params = NumOptionalPositionalParameters(); |
| 6253 const intptr_t num_opt_named_params = NumOptionalNamedParameters(); | 6248 const intptr_t num_opt_named_params = NumOptionalNamedParameters(); |
| 6254 const intptr_t other_num_fixed_params = other.num_fixed_parameters(); | 6249 const intptr_t other_num_fixed_params = other.num_fixed_parameters(); |
| 6255 const intptr_t other_num_opt_pos_params = | 6250 const intptr_t other_num_opt_pos_params = |
| 6256 other.NumOptionalPositionalParameters(); | 6251 other.NumOptionalPositionalParameters(); |
| 6257 const intptr_t other_num_opt_named_params = | 6252 const intptr_t other_num_opt_named_params = |
| 6258 other.NumOptionalNamedParameters(); | 6253 other.NumOptionalNamedParameters(); |
| 6259 // This function requires the same arguments or less and accepts the same | 6254 // This function requires the same arguments or less and accepts the same |
| 6260 // arguments or more. | 6255 // arguments or more. We can ignore implicit parameters. |
| 6261 // A generative constructor may be compared to a redirecting factory and be | |
| 6262 // compatible although it has an additional phase parameter. | |
| 6263 // More generally, we can ignore implicit parameters. | |
| 6264 const intptr_t num_ignored_params = NumImplicitParameters(); | 6256 const intptr_t num_ignored_params = NumImplicitParameters(); |
| 6265 const intptr_t other_num_ignored_params = other.NumImplicitParameters(); | 6257 const intptr_t other_num_ignored_params = other.NumImplicitParameters(); |
| 6266 if (((num_fixed_params - num_ignored_params) > | 6258 if (((num_fixed_params - num_ignored_params) > |
| 6267 (other_num_fixed_params - other_num_ignored_params)) || | 6259 (other_num_fixed_params - other_num_ignored_params)) || |
| 6268 ((num_fixed_params - num_ignored_params + num_opt_pos_params) < | 6260 ((num_fixed_params - num_ignored_params + num_opt_pos_params) < |
| 6269 (other_num_fixed_params - other_num_ignored_params + | 6261 (other_num_fixed_params - other_num_ignored_params + |
| 6270 other_num_opt_pos_params)) || | 6262 other_num_opt_pos_params)) || |
| 6271 (num_opt_named_params < other_num_opt_named_params)) { | 6263 (num_opt_named_params < other_num_opt_named_params)) { |
| 6272 return false; | 6264 return false; |
| 6273 } | 6265 } |
| (...skipping 15767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 22041 return tag_label.ToCString(); | 22033 return tag_label.ToCString(); |
| 22042 } | 22034 } |
| 22043 | 22035 |
| 22044 | 22036 |
| 22045 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 22037 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 22046 Instance::PrintJSONImpl(stream, ref); | 22038 Instance::PrintJSONImpl(stream, ref); |
| 22047 } | 22039 } |
| 22048 | 22040 |
| 22049 | 22041 |
| 22050 } // namespace dart | 22042 } // namespace dart |
| OLD | NEW |