Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/builtins/builtins-utils-gen.h" | 5 #include "src/builtins/builtins-utils-gen.h" |
| 6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
| 7 #include "src/code-stub-assembler.h" | 7 #include "src/code-stub-assembler.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 39 } | 39 } |
| 40 | 40 |
| 41 Node* SomeResultGenerator() { return FalseConstant(); } | 41 Node* SomeResultGenerator() { return FalseConstant(); } |
| 42 | 42 |
| 43 Node* SomeProcessor(Node* k_value, Node* k) { | 43 Node* SomeProcessor(Node* k_value, Node* k) { |
| 44 Node* value = CallJS(CodeFactory::Call(isolate()), context(), callbackfn(), | 44 Node* value = CallJS(CodeFactory::Call(isolate()), context(), callbackfn(), |
| 45 this_arg(), k_value, k, o()); | 45 this_arg(), k_value, k, o()); |
| 46 Label false_continue(this), return_true(this); | 46 Label false_continue(this), return_true(this); |
| 47 BranchIfToBooleanIsTrue(value, &return_true, &false_continue); | 47 BranchIfToBooleanIsTrue(value, &return_true, &false_continue); |
| 48 BIND(&return_true); | 48 BIND(&return_true); |
| 49 Return(TrueConstant()); | 49 ReturnFromBuiltin(TrueConstant()); |
| 50 BIND(&false_continue); | 50 BIND(&false_continue); |
| 51 return a(); | 51 return a(); |
| 52 } | 52 } |
| 53 | 53 |
| 54 Node* EveryResultGenerator() { return TrueConstant(); } | 54 Node* EveryResultGenerator() { return TrueConstant(); } |
| 55 | 55 |
| 56 Node* EveryProcessor(Node* k_value, Node* k) { | 56 Node* EveryProcessor(Node* k_value, Node* k) { |
| 57 Node* value = CallJS(CodeFactory::Call(isolate()), context(), callbackfn(), | 57 Node* value = CallJS(CodeFactory::Call(isolate()), context(), callbackfn(), |
| 58 this_arg(), k_value, k, o()); | 58 this_arg(), k_value, k, o()); |
| 59 Label true_continue(this), return_false(this); | 59 Label true_continue(this), return_false(this); |
| 60 BranchIfToBooleanIsTrue(value, &true_continue, &return_false); | 60 BranchIfToBooleanIsTrue(value, &true_continue, &return_false); |
| 61 BIND(&return_false); | 61 BIND(&return_false); |
| 62 Return(FalseConstant()); | 62 ReturnFromBuiltin(FalseConstant()); |
| 63 BIND(&true_continue); | 63 BIND(&true_continue); |
| 64 return a(); | 64 return a(); |
| 65 } | 65 } |
| 66 | 66 |
| 67 Node* ReduceResultGenerator() { | 67 Node* ReduceResultGenerator() { return this_arg(); } |
| 68 VARIABLE(a, MachineRepresentation::kTagged, UndefinedConstant()); | |
| 69 Label no_initial_value(this), has_initial_value(this), done(this, {&a}); | |
| 70 | |
| 71 // 8. If initialValue is present, then | |
| 72 Node* parent_frame_ptr = LoadParentFramePointer(); | |
| 73 Node* marker_or_function = LoadBufferObject( | |
| 74 parent_frame_ptr, CommonFrameConstants::kContextOrFrameTypeOffset); | |
| 75 GotoIf( | |
| 76 MarkerIsNotFrameType(marker_or_function, StackFrame::ARGUMENTS_ADAPTOR), | |
| 77 &has_initial_value); | |
| 78 | |
| 79 // Has arguments adapter, check count. | |
| 80 Node* adapted_parameter_count = LoadBufferObject( | |
| 81 parent_frame_ptr, ArgumentsAdaptorFrameConstants::kLengthOffset); | |
| 82 Branch(SmiLessThan(adapted_parameter_count, | |
| 83 SmiConstant(IteratingArrayBuiltinDescriptor::kThisArg)), | |
| 84 &no_initial_value, &has_initial_value); | |
| 85 | |
| 86 // a. Set accumulator to initialValue. | |
| 87 BIND(&has_initial_value); | |
| 88 a.Bind(this_arg()); | |
| 89 Goto(&done); | |
| 90 | |
| 91 // 9. Else initialValue is not present, | |
| 92 BIND(&no_initial_value); | |
| 93 | |
| 94 // a. Let kPresent be false. | |
| 95 a.Bind(TheHoleConstant()); | |
| 96 Goto(&done); | |
| 97 BIND(&done); | |
| 98 return a.value(); | |
| 99 } | |
| 100 | 68 |
| 101 Node* ReduceProcessor(Node* k_value, Node* k) { | 69 Node* ReduceProcessor(Node* k_value, Node* k) { |
| 102 VARIABLE(result, MachineRepresentation::kTagged); | 70 VARIABLE(result, MachineRepresentation::kTagged); |
| 103 Label done(this, {&result}), initial(this); | 71 Label done(this, {&result}), initial(this); |
| 104 GotoIf(WordEqual(a(), TheHoleConstant()), &initial); | 72 GotoIf(WordEqual(a(), TheHoleConstant()), &initial); |
| 105 result.Bind(CallJS(CodeFactory::Call(isolate()), context(), callbackfn(), | 73 result.Bind(CallJS(CodeFactory::Call(isolate()), context(), callbackfn(), |
| 106 UndefinedConstant(), a(), k_value, k, o())); | 74 UndefinedConstant(), a(), k_value, k, o())); |
| 107 Goto(&done); | 75 Goto(&done); |
| 108 | 76 |
| 109 BIND(&initial); | 77 BIND(&initial); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 259 BIND(&finished); | 227 BIND(&finished); |
| 260 return a(); | 228 return a(); |
| 261 } | 229 } |
| 262 | 230 |
| 263 void NullPostLoopAction() {} | 231 void NullPostLoopAction() {} |
| 264 | 232 |
| 265 protected: | 233 protected: |
| 266 Node* context() { return context_; } | 234 Node* context() { return context_; } |
| 267 Node* receiver() { return receiver_; } | 235 Node* receiver() { return receiver_; } |
| 268 Node* new_target() { return new_target_; } | 236 Node* new_target() { return new_target_; } |
| 237 Node* argc() { return argc_; } | |
| 269 Node* o() { return o_; } | 238 Node* o() { return o_; } |
| 270 Node* len() { return len_; } | 239 Node* len() { return len_; } |
| 271 Node* callbackfn() { return callbackfn_; } | 240 Node* callbackfn() { return callbackfn_; } |
| 272 Node* this_arg() { return this_arg_; } | 241 Node* this_arg() { return this_arg_; } |
| 273 Node* k() { return k_.value(); } | 242 Node* k() { return k_.value(); } |
| 274 Node* a() { return a_.value(); } | 243 Node* a() { return a_.value(); } |
| 275 | 244 |
| 245 void ReturnFromBuiltin(Node* value) { | |
| 246 if (argc_ == nullptr) { | |
| 247 Return(value); | |
| 248 } else { | |
| 249 PopAndReturn(IntPtrAdd(argc_, IntPtrConstant(1)), value); | |
|
Igor Sheludko
2017/04/27 10:38:05
It would be nice to have a comment that +1 is here
danno
2017/04/28 06:58:10
Done.
| |
| 250 } | |
| 251 } | |
| 252 | |
| 276 void InitIteratingArrayBuiltinBody(Node* context, Node* receiver, | 253 void InitIteratingArrayBuiltinBody(Node* context, Node* receiver, |
| 277 Node* callbackfn, Node* this_arg, | 254 Node* callbackfn, Node* this_arg, |
| 278 Node* new_target) { | 255 Node* new_target, Node* argc) { |
| 279 context_ = context; | 256 context_ = context; |
| 280 receiver_ = receiver; | 257 receiver_ = receiver; |
| 281 new_target_ = new_target; | 258 new_target_ = new_target; |
| 282 callbackfn_ = callbackfn; | 259 callbackfn_ = callbackfn; |
| 283 this_arg_ = this_arg; | 260 this_arg_ = this_arg; |
| 261 argc_ = argc; | |
| 284 } | 262 } |
| 285 | 263 |
| 286 void GenerateIteratingArrayBuiltinBody( | 264 void GenerateIteratingArrayBuiltinBody( |
| 287 const char* name, const BuiltinResultGenerator& generator, | 265 const char* name, const BuiltinResultGenerator& generator, |
| 288 const CallResultProcessor& processor, const PostLoopAction& action, | 266 const CallResultProcessor& processor, const PostLoopAction& action, |
| 289 const Callable& slow_case_continuation, | 267 const Callable& slow_case_continuation, |
| 290 ForEachDirection direction = ForEachDirection::kForward) { | 268 ForEachDirection direction = ForEachDirection::kForward) { |
| 291 Label non_array(this), slow(this, {&k_, &a_, &to_}), | 269 Label non_array(this), slow(this, {&k_, &a_, &to_}), |
| 292 array_changes(this, {&k_, &a_, &to_}); | 270 array_changes(this, {&k_, &a_, &to_}); |
| 293 | 271 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 355 } else { | 333 } else { |
| 356 k_.Bind(NumberDec(len())); | 334 k_.Bind(NumberDec(len())); |
| 357 } | 335 } |
| 358 | 336 |
| 359 a_.Bind(generator(this)); | 337 a_.Bind(generator(this)); |
| 360 | 338 |
| 361 HandleFastElements(processor, action, &slow, direction); | 339 HandleFastElements(processor, action, &slow, direction); |
| 362 | 340 |
| 363 BIND(&slow); | 341 BIND(&slow); |
| 364 | 342 |
| 365 Node* target = LoadFromFrame(StandardFrameConstants::kFunctionOffset, | 343 Node* result = |
| 366 MachineType::TaggedPointer()); | 344 CallStub(slow_case_continuation, context(), receiver(), callbackfn(), |
| 367 TailCallStub( | 345 this_arg(), a_.value(), o(), k_.value(), len(), to_.value()); |
| 368 slow_case_continuation, context(), target, new_target(), | 346 ReturnFromBuiltin(result); |
| 369 Int32Constant(IteratingArrayBuiltinLoopContinuationDescriptor::kArity), | |
| 370 receiver(), callbackfn(), this_arg(), a_.value(), o(), k_.value(), | |
| 371 len(), to_.value()); | |
| 372 } | 347 } |
| 373 | 348 |
| 374 void InitIteratingArrayBuiltinLoopContinuation(Node* context, Node* receiver, | 349 void InitIteratingArrayBuiltinLoopContinuation(Node* context, Node* receiver, |
| 375 Node* callbackfn, | 350 Node* callbackfn, |
| 376 Node* this_arg, Node* a, | 351 Node* this_arg, Node* a, |
| 377 Node* o, Node* initial_k, | 352 Node* o, Node* initial_k, |
| 378 Node* len, Node* to) { | 353 Node* len, Node* to) { |
| 379 context_ = context; | 354 context_ = context; |
| 380 this_arg_ = this_arg; | 355 this_arg_ = this_arg; |
| 381 callbackfn_ = callbackfn; | 356 callbackfn_ = callbackfn; |
| 357 argc_ = nullptr; | |
| 382 a_.Bind(a); | 358 a_.Bind(a); |
| 383 k_.Bind(initial_k); | 359 k_.Bind(initial_k); |
| 384 o_ = o; | 360 o_ = o; |
| 385 len_ = len; | 361 len_ = len; |
| 386 to_.Bind(to); | 362 to_.Bind(to); |
| 387 } | 363 } |
| 388 | 364 |
| 389 void GenerateIteratingTypedArrayBuiltinBody( | 365 void GenerateIteratingTypedArrayBuiltinBody( |
| 390 const char* name, const BuiltinResultGenerator& generator, | 366 const char* name, const BuiltinResultGenerator& generator, |
| 391 const CallResultProcessor& processor, const PostLoopAction& action, | 367 const CallResultProcessor& processor, const PostLoopAction& action, |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 675 | 651 |
| 676 ParameterMode mode = OptimalParameterMode(); | 652 ParameterMode mode = OptimalParameterMode(); |
| 677 BIND(&fast_elements); | 653 BIND(&fast_elements); |
| 678 { | 654 { |
| 679 VisitAllFastElementsOneKind(FAST_ELEMENTS, processor, slow, mode, | 655 VisitAllFastElementsOneKind(FAST_ELEMENTS, processor, slow, mode, |
| 680 direction); | 656 direction); |
| 681 | 657 |
| 682 action(this); | 658 action(this); |
| 683 | 659 |
| 684 // No exception, return success | 660 // No exception, return success |
| 685 Return(a_.value()); | 661 ReturnFromBuiltin(a_.value()); |
| 686 } | 662 } |
| 687 | 663 |
| 688 BIND(&maybe_double_elements); | 664 BIND(&maybe_double_elements); |
| 689 Branch(IsElementsKindGreaterThan(kind, FAST_HOLEY_DOUBLE_ELEMENTS), slow, | 665 Branch(IsElementsKindGreaterThan(kind, FAST_HOLEY_DOUBLE_ELEMENTS), slow, |
| 690 &fast_double_elements); | 666 &fast_double_elements); |
| 691 | 667 |
| 692 BIND(&fast_double_elements); | 668 BIND(&fast_double_elements); |
| 693 { | 669 { |
| 694 VisitAllFastElementsOneKind(FAST_DOUBLE_ELEMENTS, processor, slow, mode, | 670 VisitAllFastElementsOneKind(FAST_DOUBLE_ELEMENTS, processor, slow, mode, |
| 695 direction); | 671 direction); |
| 696 | 672 |
| 697 action(this); | 673 action(this); |
| 698 | 674 |
| 699 // No exception, return success | 675 // No exception, return success |
| 700 Return(a_.value()); | 676 ReturnFromBuiltin(a_.value()); |
| 701 } | 677 } |
| 702 } | 678 } |
| 703 | 679 |
| 704 Node* callbackfn_ = nullptr; | 680 Node* callbackfn_ = nullptr; |
| 705 Node* o_ = nullptr; | 681 Node* o_ = nullptr; |
| 706 Node* this_arg_ = nullptr; | 682 Node* this_arg_ = nullptr; |
| 707 Node* len_ = nullptr; | 683 Node* len_ = nullptr; |
| 708 Node* context_ = nullptr; | 684 Node* context_ = nullptr; |
| 709 Node* receiver_ = nullptr; | 685 Node* receiver_ = nullptr; |
| 710 Node* new_target_ = nullptr; | 686 Node* new_target_ = nullptr; |
| 687 Node* argc_ = nullptr; | |
| 711 Variable k_; | 688 Variable k_; |
| 712 Variable a_; | 689 Variable a_; |
| 713 Variable to_; | 690 Variable to_; |
| 714 }; | 691 }; |
| 715 | 692 |
| 716 TF_BUILTIN(FastArrayPush, CodeStubAssembler) { | 693 TF_BUILTIN(FastArrayPush, CodeStubAssembler) { |
| 717 VARIABLE(arg_index, MachineType::PointerRepresentation()); | 694 VARIABLE(arg_index, MachineType::PointerRepresentation()); |
| 718 Label default_label(this, &arg_index); | 695 Label default_label(this, &arg_index); |
| 719 Label smi_transition(this); | 696 Label smi_transition(this); |
| 720 Label object_push_pre(this); | 697 Label object_push_pre(this); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 856 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 833 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 857 this_arg, array, object, initial_k, | 834 this_arg, array, object, initial_k, |
| 858 len, to); | 835 len, to); |
| 859 | 836 |
| 860 GenerateIteratingArrayBuiltinLoopContinuation( | 837 GenerateIteratingArrayBuiltinLoopContinuation( |
| 861 &ArrayBuiltinCodeStubAssembler::ForEachProcessor, | 838 &ArrayBuiltinCodeStubAssembler::ForEachProcessor, |
| 862 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 839 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 863 } | 840 } |
| 864 | 841 |
| 865 TF_BUILTIN(ArrayForEach, ArrayBuiltinCodeStubAssembler) { | 842 TF_BUILTIN(ArrayForEach, ArrayBuiltinCodeStubAssembler) { |
| 866 Node* context = Parameter(Descriptor::kContext); | 843 Node* argc = |
| 867 Node* receiver = Parameter(Descriptor::kReceiver); | 844 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 868 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 845 CodeStubArguments args(this, argc); |
| 869 Node* this_arg = Parameter(Descriptor::kThisArg); | 846 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 870 Node* new_target = Parameter(Descriptor::kNewTarget); | 847 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 848 Node* receiver = args.GetReceiver(); | |
| 849 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 850 Node* this_arg = args.GetOptionalArgumentValue(1, UndefinedConstant()); | |
| 871 | 851 |
| 872 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 852 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 873 new_target); | 853 new_target, argc); |
| 874 | 854 |
| 875 GenerateIteratingArrayBuiltinBody( | 855 GenerateIteratingArrayBuiltinBody( |
| 876 "Array.prototype.forEach", | 856 "Array.prototype.forEach", |
| 877 &ArrayBuiltinCodeStubAssembler::ForEachResultGenerator, | 857 &ArrayBuiltinCodeStubAssembler::ForEachResultGenerator, |
| 878 &ArrayBuiltinCodeStubAssembler::ForEachProcessor, | 858 &ArrayBuiltinCodeStubAssembler::ForEachProcessor, |
| 879 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, | 859 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, |
| 880 CodeFactory::ArrayForEachLoopContinuation(isolate())); | 860 CodeFactory::ArrayForEachLoopContinuation(isolate())); |
| 881 } | 861 } |
| 882 | 862 |
| 883 TF_BUILTIN(ArraySomeLoopContinuation, ArrayBuiltinCodeStubAssembler) { | 863 TF_BUILTIN(ArraySomeLoopContinuation, ArrayBuiltinCodeStubAssembler) { |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 894 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 874 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 895 this_arg, array, object, initial_k, | 875 this_arg, array, object, initial_k, |
| 896 len, to); | 876 len, to); |
| 897 | 877 |
| 898 GenerateIteratingArrayBuiltinLoopContinuation( | 878 GenerateIteratingArrayBuiltinLoopContinuation( |
| 899 &ArrayBuiltinCodeStubAssembler::SomeProcessor, | 879 &ArrayBuiltinCodeStubAssembler::SomeProcessor, |
| 900 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 880 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 901 } | 881 } |
| 902 | 882 |
| 903 TF_BUILTIN(ArraySome, ArrayBuiltinCodeStubAssembler) { | 883 TF_BUILTIN(ArraySome, ArrayBuiltinCodeStubAssembler) { |
| 904 Node* context = Parameter(Descriptor::kContext); | 884 Node* argc = |
| 905 Node* receiver = Parameter(Descriptor::kReceiver); | 885 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 906 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 886 CodeStubArguments args(this, argc); |
| 907 Node* this_arg = Parameter(Descriptor::kThisArg); | 887 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 908 Node* new_target = Parameter(Descriptor::kNewTarget); | 888 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 889 Node* receiver = args.GetReceiver(); | |
| 890 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 891 Node* this_arg = args.GetOptionalArgumentValue(1, UndefinedConstant()); | |
| 909 | 892 |
| 910 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 893 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 911 new_target); | 894 new_target, argc); |
| 912 | 895 |
| 913 GenerateIteratingArrayBuiltinBody( | 896 GenerateIteratingArrayBuiltinBody( |
| 914 "Array.prototype.some", | 897 "Array.prototype.some", |
| 915 &ArrayBuiltinCodeStubAssembler::SomeResultGenerator, | 898 &ArrayBuiltinCodeStubAssembler::SomeResultGenerator, |
| 916 &ArrayBuiltinCodeStubAssembler::SomeProcessor, | 899 &ArrayBuiltinCodeStubAssembler::SomeProcessor, |
| 917 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, | 900 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, |
| 918 CodeFactory::ArraySomeLoopContinuation(isolate())); | 901 CodeFactory::ArraySomeLoopContinuation(isolate())); |
| 919 } | 902 } |
| 920 | 903 |
| 921 TF_BUILTIN(TypedArrayPrototypeSome, ArrayBuiltinCodeStubAssembler) { | 904 TF_BUILTIN(TypedArrayPrototypeSome, ArrayBuiltinCodeStubAssembler) { |
| 922 Node* context = Parameter(Descriptor::kContext); | 905 Node* context = Parameter(Descriptor::kContext); |
| 923 Node* receiver = Parameter(Descriptor::kReceiver); | 906 Node* receiver = Parameter(Descriptor::kReceiver); |
| 924 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 907 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 925 Node* this_arg = Parameter(Descriptor::kThisArg); | 908 Node* this_arg = Parameter(Descriptor::kThisArg); |
| 926 Node* new_target = Parameter(Descriptor::kNewTarget); | 909 Node* new_target = Parameter(Descriptor::kNewTarget); |
| 927 | 910 |
| 928 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 911 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 929 new_target); | 912 new_target, nullptr); |
| 930 | 913 |
| 931 GenerateIteratingTypedArrayBuiltinBody( | 914 GenerateIteratingTypedArrayBuiltinBody( |
| 932 "%TypedArray%.prototype.some", | 915 "%TypedArray%.prototype.some", |
| 933 &ArrayBuiltinCodeStubAssembler::SomeResultGenerator, | 916 &ArrayBuiltinCodeStubAssembler::SomeResultGenerator, |
| 934 &ArrayBuiltinCodeStubAssembler::SomeProcessor, | 917 &ArrayBuiltinCodeStubAssembler::SomeProcessor, |
| 935 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 918 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 936 } | 919 } |
| 937 | 920 |
| 938 TF_BUILTIN(ArrayEveryLoopContinuation, ArrayBuiltinCodeStubAssembler) { | 921 TF_BUILTIN(ArrayEveryLoopContinuation, ArrayBuiltinCodeStubAssembler) { |
| 939 Node* context = Parameter(Descriptor::kContext); | 922 Node* context = Parameter(Descriptor::kContext); |
| 940 Node* receiver = Parameter(Descriptor::kReceiver); | 923 Node* receiver = Parameter(Descriptor::kReceiver); |
| 941 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 924 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 942 Node* this_arg = Parameter(Descriptor::kThisArg); | 925 Node* this_arg = Parameter(Descriptor::kThisArg); |
| 943 Node* array = Parameter(Descriptor::kArray); | 926 Node* array = Parameter(Descriptor::kArray); |
| 944 Node* object = Parameter(Descriptor::kObject); | 927 Node* object = Parameter(Descriptor::kObject); |
| 945 Node* initial_k = Parameter(Descriptor::kInitialK); | 928 Node* initial_k = Parameter(Descriptor::kInitialK); |
| 946 Node* len = Parameter(Descriptor::kLength); | 929 Node* len = Parameter(Descriptor::kLength); |
| 947 Node* to = Parameter(Descriptor::kTo); | 930 Node* to = Parameter(Descriptor::kTo); |
| 948 | 931 |
| 949 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 932 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 950 this_arg, array, object, initial_k, | 933 this_arg, array, object, initial_k, |
| 951 len, to); | 934 len, to); |
| 952 | 935 |
| 953 GenerateIteratingArrayBuiltinLoopContinuation( | 936 GenerateIteratingArrayBuiltinLoopContinuation( |
| 954 &ArrayBuiltinCodeStubAssembler::EveryProcessor, | 937 &ArrayBuiltinCodeStubAssembler::EveryProcessor, |
| 955 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 938 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 956 } | 939 } |
| 957 | 940 |
| 958 TF_BUILTIN(ArrayEvery, ArrayBuiltinCodeStubAssembler) { | 941 TF_BUILTIN(ArrayEvery, ArrayBuiltinCodeStubAssembler) { |
| 959 Node* context = Parameter(Descriptor::kContext); | 942 Node* argc = |
| 960 Node* receiver = Parameter(Descriptor::kReceiver); | 943 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 961 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 944 CodeStubArguments args(this, argc); |
| 962 Node* this_arg = Parameter(Descriptor::kThisArg); | 945 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 963 Node* new_target = Parameter(Descriptor::kNewTarget); | 946 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 947 Node* receiver = args.GetReceiver(); | |
| 948 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 949 Node* this_arg = args.GetOptionalArgumentValue(1, UndefinedConstant()); | |
| 964 | 950 |
| 965 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 951 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 966 new_target); | 952 new_target, argc); |
| 967 | 953 |
| 968 GenerateIteratingArrayBuiltinBody( | 954 GenerateIteratingArrayBuiltinBody( |
| 969 "Array.prototype.every", | 955 "Array.prototype.every", |
| 970 &ArrayBuiltinCodeStubAssembler::EveryResultGenerator, | 956 &ArrayBuiltinCodeStubAssembler::EveryResultGenerator, |
| 971 &ArrayBuiltinCodeStubAssembler::EveryProcessor, | 957 &ArrayBuiltinCodeStubAssembler::EveryProcessor, |
| 972 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, | 958 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, |
| 973 CodeFactory::ArrayEveryLoopContinuation(isolate())); | 959 CodeFactory::ArrayEveryLoopContinuation(isolate())); |
| 974 } | 960 } |
| 975 | 961 |
| 976 TF_BUILTIN(TypedArrayPrototypeEvery, ArrayBuiltinCodeStubAssembler) { | 962 TF_BUILTIN(TypedArrayPrototypeEvery, ArrayBuiltinCodeStubAssembler) { |
| 977 Node* context = Parameter(Descriptor::kContext); | 963 Node* context = Parameter(Descriptor::kContext); |
| 978 Node* receiver = Parameter(Descriptor::kReceiver); | 964 Node* receiver = Parameter(Descriptor::kReceiver); |
| 979 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 965 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 980 Node* this_arg = Parameter(Descriptor::kThisArg); | 966 Node* this_arg = Parameter(Descriptor::kThisArg); |
| 981 Node* new_target = Parameter(Descriptor::kNewTarget); | 967 Node* new_target = Parameter(Descriptor::kNewTarget); |
| 982 | 968 |
| 983 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 969 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 984 new_target); | 970 new_target, nullptr); |
| 985 | 971 |
| 986 GenerateIteratingTypedArrayBuiltinBody( | 972 GenerateIteratingTypedArrayBuiltinBody( |
| 987 "%TypedArray%.prototype.every", | 973 "%TypedArray%.prototype.every", |
| 988 &ArrayBuiltinCodeStubAssembler::EveryResultGenerator, | 974 &ArrayBuiltinCodeStubAssembler::EveryResultGenerator, |
| 989 &ArrayBuiltinCodeStubAssembler::EveryProcessor, | 975 &ArrayBuiltinCodeStubAssembler::EveryProcessor, |
| 990 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 976 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 991 } | 977 } |
| 992 | 978 |
| 993 TF_BUILTIN(ArrayReduceLoopContinuation, ArrayBuiltinCodeStubAssembler) { | 979 TF_BUILTIN(ArrayReduceLoopContinuation, ArrayBuiltinCodeStubAssembler) { |
| 994 Node* context = Parameter(Descriptor::kContext); | 980 Node* context = Parameter(Descriptor::kContext); |
| 995 Node* receiver = Parameter(Descriptor::kReceiver); | 981 Node* receiver = Parameter(Descriptor::kReceiver); |
| 996 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 982 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 997 Node* this_arg = Parameter(Descriptor::kThisArg); | 983 Node* this_arg = Parameter(Descriptor::kThisArg); |
| 998 Node* accumulator = Parameter(Descriptor::kAccumulator); | 984 Node* accumulator = Parameter(Descriptor::kAccumulator); |
| 999 Node* object = Parameter(Descriptor::kObject); | 985 Node* object = Parameter(Descriptor::kObject); |
| 1000 Node* initial_k = Parameter(Descriptor::kInitialK); | 986 Node* initial_k = Parameter(Descriptor::kInitialK); |
| 1001 Node* len = Parameter(Descriptor::kLength); | 987 Node* len = Parameter(Descriptor::kLength); |
| 1002 Node* to = Parameter(Descriptor::kTo); | 988 Node* to = Parameter(Descriptor::kTo); |
| 1003 | 989 |
| 1004 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 990 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 1005 this_arg, accumulator, object, | 991 this_arg, accumulator, object, |
| 1006 initial_k, len, to); | 992 initial_k, len, to); |
| 1007 | 993 |
| 1008 GenerateIteratingArrayBuiltinLoopContinuation( | 994 GenerateIteratingArrayBuiltinLoopContinuation( |
| 1009 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, | 995 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, |
| 1010 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction); | 996 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction); |
| 1011 } | 997 } |
| 1012 | 998 |
| 1013 TF_BUILTIN(ArrayReduce, ArrayBuiltinCodeStubAssembler) { | 999 TF_BUILTIN(ArrayReduce, ArrayBuiltinCodeStubAssembler) { |
| 1014 Node* context = Parameter(Descriptor::kContext); | 1000 Node* argc = |
| 1015 Node* receiver = Parameter(Descriptor::kReceiver); | 1001 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 1016 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1002 CodeStubArguments args(this, argc); |
| 1017 Node* initial_value = Parameter(Descriptor::kInitialValue); | 1003 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 1018 Node* new_target = Parameter(Descriptor::kNewTarget); | 1004 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 1005 Node* receiver = args.GetReceiver(); | |
| 1006 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 1007 Node* initial_value = args.GetOptionalArgumentValue(1, TheHoleConstant()); | |
| 1019 | 1008 |
| 1020 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, | 1009 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, |
| 1021 new_target); | 1010 new_target, argc); |
| 1022 | 1011 |
| 1023 GenerateIteratingArrayBuiltinBody( | 1012 GenerateIteratingArrayBuiltinBody( |
| 1024 "Array.prototype.reduce", | 1013 "Array.prototype.reduce", |
| 1025 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, | 1014 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, |
| 1026 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, | 1015 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, |
| 1027 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, | 1016 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, |
| 1028 CodeFactory::ArrayReduceLoopContinuation(isolate())); | 1017 CodeFactory::ArrayReduceLoopContinuation(isolate())); |
| 1029 } | 1018 } |
| 1030 | 1019 |
| 1031 TF_BUILTIN(TypedArrayPrototypeReduce, ArrayBuiltinCodeStubAssembler) { | 1020 TF_BUILTIN(TypedArrayPrototypeReduce, ArrayBuiltinCodeStubAssembler) { |
| 1032 Node* context = Parameter(Descriptor::kContext); | 1021 Node* context = Parameter(Descriptor::kContext); |
| 1033 Node* receiver = Parameter(Descriptor::kReceiver); | 1022 Node* receiver = Parameter(Descriptor::kReceiver); |
| 1034 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1023 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 1035 Node* initial_value = Parameter(Descriptor::kInitialValue); | 1024 Node* initial_value = Parameter(Descriptor::kInitialValue); |
| 1036 Node* new_target = Parameter(Descriptor::kNewTarget); | 1025 Node* new_target = Parameter(Descriptor::kNewTarget); |
| 1037 | 1026 |
| 1038 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, | 1027 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, |
| 1039 new_target); | 1028 new_target, nullptr); |
| 1040 | 1029 |
| 1041 GenerateIteratingTypedArrayBuiltinBody( | 1030 GenerateIteratingTypedArrayBuiltinBody( |
| 1042 "%TypedArray%.prototype.reduce", | 1031 "%TypedArray%.prototype.reduce", |
| 1043 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, | 1032 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, |
|
Igor Sheludko
2017/04/27 10:38:05
TypedArrayPrototype* builtins are not adapted to t
danno
2017/04/28 06:58:10
Done.
| |
| 1044 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, | 1033 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, |
| 1045 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction); | 1034 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction); |
| 1046 } | 1035 } |
| 1047 | 1036 |
| 1048 TF_BUILTIN(ArrayReduceRightLoopContinuation, ArrayBuiltinCodeStubAssembler) { | 1037 TF_BUILTIN(ArrayReduceRightLoopContinuation, ArrayBuiltinCodeStubAssembler) { |
| 1049 Node* context = Parameter(Descriptor::kContext); | 1038 Node* context = Parameter(Descriptor::kContext); |
| 1050 Node* receiver = Parameter(Descriptor::kReceiver); | 1039 Node* receiver = Parameter(Descriptor::kReceiver); |
| 1051 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1040 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 1052 Node* this_arg = Parameter(Descriptor::kThisArg); | 1041 Node* this_arg = Parameter(Descriptor::kThisArg); |
| 1053 Node* accumulator = Parameter(Descriptor::kAccumulator); | 1042 Node* accumulator = Parameter(Descriptor::kAccumulator); |
| 1054 Node* object = Parameter(Descriptor::kObject); | 1043 Node* object = Parameter(Descriptor::kObject); |
| 1055 Node* initial_k = Parameter(Descriptor::kInitialK); | 1044 Node* initial_k = Parameter(Descriptor::kInitialK); |
| 1056 Node* len = Parameter(Descriptor::kLength); | 1045 Node* len = Parameter(Descriptor::kLength); |
| 1057 Node* to = Parameter(Descriptor::kTo); | 1046 Node* to = Parameter(Descriptor::kTo); |
| 1058 | 1047 |
| 1059 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 1048 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 1060 this_arg, accumulator, object, | 1049 this_arg, accumulator, object, |
| 1061 initial_k, len, to); | 1050 initial_k, len, to); |
| 1062 | 1051 |
| 1063 GenerateIteratingArrayBuiltinLoopContinuation( | 1052 GenerateIteratingArrayBuiltinLoopContinuation( |
| 1064 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, | 1053 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, |
| 1065 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, | 1054 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, |
| 1066 ForEachDirection::kReverse); | 1055 ForEachDirection::kReverse); |
| 1067 } | 1056 } |
| 1068 | 1057 |
| 1069 TF_BUILTIN(ArrayReduceRight, ArrayBuiltinCodeStubAssembler) { | 1058 TF_BUILTIN(ArrayReduceRight, ArrayBuiltinCodeStubAssembler) { |
| 1070 Node* context = Parameter(Descriptor::kContext); | 1059 Node* argc = |
| 1071 Node* receiver = Parameter(Descriptor::kReceiver); | 1060 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 1072 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1061 CodeStubArguments args(this, argc); |
| 1073 Node* initial_value = Parameter(Descriptor::kInitialValue); | 1062 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 1074 Node* new_target = Parameter(Descriptor::kNewTarget); | 1063 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 1064 Node* receiver = args.GetReceiver(); | |
| 1065 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 1066 Node* initial_value = args.GetOptionalArgumentValue(1, TheHoleConstant()); | |
| 1075 | 1067 |
| 1076 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, | 1068 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, |
| 1077 new_target); | 1069 new_target, argc); |
| 1078 | 1070 |
| 1079 GenerateIteratingArrayBuiltinBody( | 1071 GenerateIteratingArrayBuiltinBody( |
| 1080 "Array.prototype.reduceRight", | 1072 "Array.prototype.reduceRight", |
| 1081 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, | 1073 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, |
| 1082 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, | 1074 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, |
| 1083 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, | 1075 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, |
| 1084 CodeFactory::ArrayReduceRightLoopContinuation(isolate()), | 1076 CodeFactory::ArrayReduceRightLoopContinuation(isolate()), |
| 1085 ForEachDirection::kReverse); | 1077 ForEachDirection::kReverse); |
| 1086 } | 1078 } |
| 1087 | 1079 |
| 1088 TF_BUILTIN(TypedArrayPrototypeReduceRight, ArrayBuiltinCodeStubAssembler) { | 1080 TF_BUILTIN(TypedArrayPrototypeReduceRight, ArrayBuiltinCodeStubAssembler) { |
| 1089 Node* context = Parameter(Descriptor::kContext); | 1081 Node* context = Parameter(Descriptor::kContext); |
| 1090 Node* receiver = Parameter(Descriptor::kReceiver); | 1082 Node* receiver = Parameter(Descriptor::kReceiver); |
| 1091 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1083 Node* callbackfn = Parameter(Descriptor::kCallbackFn); |
| 1092 Node* initial_value = Parameter(Descriptor::kInitialValue); | 1084 Node* initial_value = Parameter(Descriptor::kInitialValue); |
| 1093 Node* new_target = Parameter(Descriptor::kNewTarget); | 1085 Node* new_target = Parameter(Descriptor::kNewTarget); |
| 1094 | 1086 |
| 1095 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, | 1087 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, initial_value, |
| 1096 new_target); | 1088 new_target, nullptr); |
| 1097 | 1089 |
| 1098 GenerateIteratingTypedArrayBuiltinBody( | 1090 GenerateIteratingTypedArrayBuiltinBody( |
| 1099 "%TypedArray%.prototype.reduceRight", | 1091 "%TypedArray%.prototype.reduceRight", |
| 1100 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, | 1092 &ArrayBuiltinCodeStubAssembler::ReduceResultGenerator, |
| 1101 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, | 1093 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, |
| 1102 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, | 1094 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction, |
| 1103 ForEachDirection::kReverse); | 1095 ForEachDirection::kReverse); |
| 1104 } | 1096 } |
| 1105 | 1097 |
| 1106 TF_BUILTIN(ArrayFilterLoopContinuation, ArrayBuiltinCodeStubAssembler) { | 1098 TF_BUILTIN(ArrayFilterLoopContinuation, ArrayBuiltinCodeStubAssembler) { |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1117 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 1109 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 1118 this_arg, array, object, initial_k, | 1110 this_arg, array, object, initial_k, |
| 1119 len, to); | 1111 len, to); |
| 1120 | 1112 |
| 1121 GenerateIteratingArrayBuiltinLoopContinuation( | 1113 GenerateIteratingArrayBuiltinLoopContinuation( |
| 1122 &ArrayBuiltinCodeStubAssembler::FilterProcessor, | 1114 &ArrayBuiltinCodeStubAssembler::FilterProcessor, |
| 1123 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 1115 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 1124 } | 1116 } |
| 1125 | 1117 |
| 1126 TF_BUILTIN(ArrayFilter, ArrayBuiltinCodeStubAssembler) { | 1118 TF_BUILTIN(ArrayFilter, ArrayBuiltinCodeStubAssembler) { |
| 1127 Node* context = Parameter(Descriptor::kContext); | 1119 Node* argc = |
| 1128 Node* receiver = Parameter(Descriptor::kReceiver); | 1120 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 1129 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1121 CodeStubArguments args(this, argc); |
| 1130 Node* this_arg = Parameter(Descriptor::kThisArg); | 1122 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 1131 Node* new_target = Parameter(Descriptor::kNewTarget); | 1123 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 1124 Node* receiver = args.GetReceiver(); | |
| 1125 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 1126 Node* this_arg = args.GetOptionalArgumentValue(1, UndefinedConstant()); | |
| 1132 | 1127 |
| 1133 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 1128 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 1134 new_target); | 1129 new_target, argc); |
| 1135 | 1130 |
| 1136 GenerateIteratingArrayBuiltinBody( | 1131 GenerateIteratingArrayBuiltinBody( |
| 1137 "Array.prototype.filter", | 1132 "Array.prototype.filter", |
| 1138 &ArrayBuiltinCodeStubAssembler::FilterResultGenerator, | 1133 &ArrayBuiltinCodeStubAssembler::FilterResultGenerator, |
| 1139 &ArrayBuiltinCodeStubAssembler::FilterProcessor, | 1134 &ArrayBuiltinCodeStubAssembler::FilterProcessor, |
| 1140 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, | 1135 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, |
| 1141 CodeFactory::ArrayFilterLoopContinuation(isolate())); | 1136 CodeFactory::ArrayFilterLoopContinuation(isolate())); |
| 1142 } | 1137 } |
| 1143 | 1138 |
| 1144 TF_BUILTIN(ArrayMapLoopContinuation, ArrayBuiltinCodeStubAssembler) { | 1139 TF_BUILTIN(ArrayMapLoopContinuation, ArrayBuiltinCodeStubAssembler) { |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1155 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, | 1150 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, |
| 1156 this_arg, array, object, initial_k, | 1151 this_arg, array, object, initial_k, |
| 1157 len, to); | 1152 len, to); |
| 1158 | 1153 |
| 1159 GenerateIteratingArrayBuiltinLoopContinuation( | 1154 GenerateIteratingArrayBuiltinLoopContinuation( |
| 1160 &ArrayBuiltinCodeStubAssembler::MapProcessor, | 1155 &ArrayBuiltinCodeStubAssembler::MapProcessor, |
| 1161 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); | 1156 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); |
| 1162 } | 1157 } |
| 1163 | 1158 |
| 1164 TF_BUILTIN(ArrayMap, ArrayBuiltinCodeStubAssembler) { | 1159 TF_BUILTIN(ArrayMap, ArrayBuiltinCodeStubAssembler) { |
| 1165 Node* context = Parameter(Descriptor::kContext); | 1160 Node* argc = |
| 1166 Node* receiver = Parameter(Descriptor::kReceiver); | 1161 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount)); |
| 1167 Node* callbackfn = Parameter(Descriptor::kCallbackFn); | 1162 CodeStubArguments args(this, argc); |
| 1168 Node* this_arg = Parameter(Descriptor::kThisArg); | 1163 Node* context = Parameter(BuiltinDescriptor::kContext); |
| 1169 Node* new_target = Parameter(Descriptor::kNewTarget); | 1164 Node* new_target = Parameter(BuiltinDescriptor::kNewTarget); |
| 1165 Node* receiver = args.GetReceiver(); | |
| 1166 Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant()); | |
| 1167 Node* this_arg = args.GetOptionalArgumentValue(1, UndefinedConstant()); | |
| 1170 | 1168 |
| 1171 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, | 1169 InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg, |
| 1172 new_target); | 1170 new_target, argc); |
| 1173 | 1171 |
| 1174 GenerateIteratingArrayBuiltinBody( | 1172 GenerateIteratingArrayBuiltinBody( |
| 1175 "Array.prototype.map", &ArrayBuiltinCodeStubAssembler::MapResultGenerator, | 1173 "Array.prototype.map", &ArrayBuiltinCodeStubAssembler::MapResultGenerator, |
| 1176 &ArrayBuiltinCodeStubAssembler::MapProcessor, | 1174 &ArrayBuiltinCodeStubAssembler::MapProcessor, |
| 1177 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, | 1175 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction, |
| 1178 CodeFactory::ArrayMapLoopContinuation(isolate())); | 1176 CodeFactory::ArrayMapLoopContinuation(isolate())); |
| 1179 } | 1177 } |
| 1180 | 1178 |
| 1181 TF_BUILTIN(ArrayIsArray, CodeStubAssembler) { | 1179 TF_BUILTIN(ArrayIsArray, CodeStubAssembler) { |
| 1182 Node* object = Parameter(Descriptor::kArg); | 1180 Node* object = Parameter(Descriptor::kArg); |
| (...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2232 { | 2230 { |
| 2233 Node* message = SmiConstant(MessageTemplate::kDetachedOperation); | 2231 Node* message = SmiConstant(MessageTemplate::kDetachedOperation); |
| 2234 CallRuntime(Runtime::kThrowTypeError, context, message, | 2232 CallRuntime(Runtime::kThrowTypeError, context, message, |
| 2235 HeapConstant(operation)); | 2233 HeapConstant(operation)); |
| 2236 Unreachable(); | 2234 Unreachable(); |
| 2237 } | 2235 } |
| 2238 } | 2236 } |
| 2239 | 2237 |
| 2240 } // namespace internal | 2238 } // namespace internal |
| 2241 } // namespace v8 | 2239 } // namespace v8 |
| OLD | NEW |