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/code_generator.h" | 5 #include "vm/code_generator.h" |
6 | 6 |
7 #include "vm/assembler_macros.h" | 7 #include "vm/assembler_macros.h" |
8 #include "vm/ast.h" | 8 #include "vm/ast.h" |
9 #include "vm/code_patcher.h" | 9 #include "vm/code_patcher.h" |
10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 dst_name, malformed_error_message); | 647 dst_name, malformed_error_message); |
648 UNREACHABLE(); | 648 UNREACHABLE(); |
649 } | 649 } |
650 UpdateTypeTestCache(src_instance, dst_type, | 650 UpdateTypeTestCache(src_instance, dst_type, |
651 dst_instantiator, instantiator_type_arguments, | 651 dst_instantiator, instantiator_type_arguments, |
652 Bool::ZoneHandle(Bool::True()), cache); | 652 Bool::ZoneHandle(Bool::True()), cache); |
653 arguments.SetReturn(src_instance); | 653 arguments.SetReturn(src_instance); |
654 } | 654 } |
655 | 655 |
656 | 656 |
| 657 // Test whether a formal parameter was defined by a passed-in argument. |
| 658 // Arg0: formal parameter index as Smi. |
| 659 // Arg1: formal parameter name as Symbol. |
| 660 // Arg2: arguments descriptor array. |
| 661 // Return value: true or false. |
| 662 DEFINE_RUNTIME_ENTRY(ArgumentDefinitionTest, 3) { |
| 663 ASSERT(arguments.Count() == |
| 664 kArgumentDefinitionTestRuntimeEntry.argument_count()); |
| 665 const Smi& param_index = Smi::CheckedHandle(arguments.At(0)); |
| 666 const String& param_name = String::CheckedHandle(arguments.At(1)); |
| 667 ASSERT(param_name.IsSymbol()); |
| 668 const Array& arg_desc = Array::CheckedHandle(arguments.At(2)); |
| 669 const intptr_t num_pos_args = Smi::CheckedHandle(arg_desc.At(1)).Value(); |
| 670 // Check if the formal parameter is defined by a positional argument. |
| 671 bool is_defined = num_pos_args > param_index.Value(); |
| 672 if (!is_defined) { |
| 673 // Check if the formal parameter is defined by a named argument. |
| 674 const intptr_t num_named_args = |
| 675 Smi::CheckedHandle(arg_desc.At(0)).Value() - num_pos_args; |
| 676 String& arg_name = String::Handle(); |
| 677 for (intptr_t i = 0; i < num_named_args; i++) { |
| 678 arg_name ^= arg_desc.At(2*i + 2); |
| 679 if (arg_name.raw() == param_name.raw()) { |
| 680 is_defined = true; |
| 681 break; |
| 682 } |
| 683 } |
| 684 } |
| 685 arguments.SetReturn(Bool::Handle(Bool::Get(is_defined))); |
| 686 } |
| 687 |
| 688 |
657 // Report that the type of the given object is not bool in conditional context. | 689 // Report that the type of the given object is not bool in conditional context. |
658 // Arg0: bad object. | 690 // Arg0: bad object. |
659 // Return value: none, throws a TypeError. | 691 // Return value: none, throws a TypeError. |
660 DEFINE_RUNTIME_ENTRY(ConditionTypeError, 1) { | 692 DEFINE_RUNTIME_ENTRY(ConditionTypeError, 1) { |
661 ASSERT(arguments.Count() == | 693 ASSERT(arguments.Count() == |
662 kConditionTypeErrorRuntimeEntry.argument_count()); | 694 kConditionTypeErrorRuntimeEntry.argument_count()); |
663 const intptr_t location = GetCallerLocation(); | 695 const intptr_t location = GetCallerLocation(); |
664 const Instance& src_instance = Instance::CheckedHandle(arguments.At(0)); | 696 const Instance& src_instance = Instance::CheckedHandle(arguments.At(0)); |
665 ASSERT(src_instance.IsNull() || !src_instance.IsBool()); | 697 ASSERT(src_instance.IsNull() || !src_instance.IsBool()); |
666 const Type& bool_interface = Type::Handle(Type::BoolType()); | 698 const Type& bool_interface = Type::Handle(Type::BoolType()); |
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1670 current->slot(), | 1702 current->slot(), |
1671 current->value()); | 1703 current->value()); |
1672 } | 1704 } |
1673 | 1705 |
1674 delete current; | 1706 delete current; |
1675 } | 1707 } |
1676 } | 1708 } |
1677 | 1709 |
1678 | 1710 |
1679 } // namespace dart | 1711 } // namespace dart |
OLD | NEW |