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

Side by Side Diff: src/builtins/builtins-array-gen.cc

Issue 2771483002: [Builtins] New Array.prototype.filter implementation observability bug. (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « src/builtins/builtins.h ('k') | src/compiler/code-assembler.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 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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 SmiConstant(MessageTemplate::kReduceNoInitial)); 121 SmiConstant(MessageTemplate::kReduceNoInitial));
122 Unreachable(); 122 Unreachable();
123 Bind(&ok); 123 Bind(&ok);
124 } 124 }
125 125
126 Node* FilterResultGenerator() { 126 Node* FilterResultGenerator() {
127 // 7. Let A be ArraySpeciesCreate(O, 0). 127 // 7. Let A be ArraySpeciesCreate(O, 0).
128 return ArraySpeciesCreate(context(), o(), SmiConstant(0)); 128 return ArraySpeciesCreate(context(), o(), SmiConstant(0));
129 } 129 }
130 130
131 void FilterResultIndexReinitializer() {
132 Variable merged_length(this, MachineRepresentation::kTagged);
133 Label has_length(this, &merged_length), not_js_array(this);
134 GotoIf(DoesntHaveInstanceType(a(), JS_ARRAY_TYPE), &not_js_array);
135 merged_length.Bind(LoadJSArrayLength(a()));
136 Goto(&has_length);
137 Bind(&not_js_array);
138 Node* len_property =
139 GetProperty(context(), a(), isolate()->factory()->length_string());
140 merged_length.Bind(
141 CallStub(CodeFactory::ToLength(isolate()), context(), len_property));
142 Goto(&has_length);
143 Bind(&has_length);
144 Node* len = merged_length.value();
145
146 to_.Bind(len);
147 }
148
149 Node* FilterProcessor(Node* k_value, Node* k) { 131 Node* FilterProcessor(Node* k_value, Node* k) {
150 Node* callback_result = CallJS(CodeFactory::Call(isolate()), context(), 132 Node* callback_result = CallJS(CodeFactory::Call(isolate()), context(),
151 callbackfn(), this_arg(), k_value, k, o()); 133 callbackfn(), this_arg(), k_value, k, o());
152 Label true_continue(this, &to_), false_continue(this); 134 Label true_continue(this, &to_), false_continue(this);
153 BranchIfToBooleanIsTrue(callback_result, &true_continue, &false_continue); 135 BranchIfToBooleanIsTrue(callback_result, &true_continue, &false_continue);
154 Bind(&true_continue); 136 Bind(&true_continue);
155 137
156 // 1. let status be CreateDataPropertyOrThrow(A, ToString(to), kValue). 138 // 1. let status be CreateDataPropertyOrThrow(A, ToString(to), kValue).
157 // 2. ReturnIfAbrupt(status) 139 // 2. ReturnIfAbrupt(status)
158 Node* const p_to = ToString(context(), to_.value()); 140 Node* const p_to = ToString(context(), to_.value());
159 CallRuntime(Runtime::kCreateDataProperty, context(), a(), p_to, k_value); 141 CallRuntime(Runtime::kCreateDataProperty, context(), a(), p_to, k_value);
160 142
161 // 3. Increase to by 1. 143 // 3. Increase to by 1.
162 to_.Bind(NumberInc(to_.value())); 144 to_.Bind(NumberInc(to_.value()));
163 Goto(&false_continue); 145 Goto(&false_continue);
164 Bind(&false_continue); 146 Bind(&false_continue);
165 return a(); 147 return a();
166 } 148 }
167 149
168 void NullPostLoopAction() {} 150 void NullPostLoopAction() {}
169 151
170 void NullResultIndexReinitializer() {}
171
172 protected: 152 protected:
173 Node* context() { return context_; } 153 Node* context() { return context_; }
174 Node* receiver() { return receiver_; } 154 Node* receiver() { return receiver_; }
175 Node* new_target() { return new_target_; } 155 Node* new_target() { return new_target_; }
176 Node* o() { return o_; } 156 Node* o() { return o_; }
177 Node* len() { return len_; } 157 Node* len() { return len_; }
178 Node* callbackfn() { return callbackfn_; } 158 Node* callbackfn() { return callbackfn_; }
179 Node* this_arg() { return this_arg_; } 159 Node* this_arg() { return this_arg_; }
180 Node* k() { return k_.value(); } 160 Node* k() { return k_.value(); }
181 Node* a() { return a_.value(); } 161 Node* a() { return a_.value(); }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 HandleFastElements(processor, action, &slow); 246 HandleFastElements(processor, action, &slow);
267 247
268 Bind(&slow); 248 Bind(&slow);
269 249
270 Node* target = LoadFromFrame(StandardFrameConstants::kFunctionOffset, 250 Node* target = LoadFromFrame(StandardFrameConstants::kFunctionOffset,
271 MachineType::TaggedPointer()); 251 MachineType::TaggedPointer());
272 TailCallStub( 252 TailCallStub(
273 slow_case_continuation, context(), target, new_target(), 253 slow_case_continuation, context(), target, new_target(),
274 Int32Constant(IteratingArrayBuiltinLoopContinuationDescriptor::kArity), 254 Int32Constant(IteratingArrayBuiltinLoopContinuationDescriptor::kArity),
275 receiver(), callbackfn(), this_arg(), a_.value(), o(), k_.value(), 255 receiver(), callbackfn(), this_arg(), a_.value(), o(), k_.value(),
276 len()); 256 len(), to_.value());
277 } 257 }
278 258
279 void InitIteratingArrayBuiltinLoopContinuation(Node* context, Node* receiver, 259 void InitIteratingArrayBuiltinLoopContinuation(Node* context, Node* receiver,
280 Node* callbackfn, 260 Node* callbackfn,
281 Node* this_arg, Node* a, 261 Node* this_arg, Node* a,
282 Node* o, Node* initial_k, 262 Node* o, Node* initial_k,
283 Node* len) { 263 Node* len, Node* to) {
284 context_ = context; 264 context_ = context;
285 this_arg_ = this_arg; 265 this_arg_ = this_arg;
286 callbackfn_ = callbackfn; 266 callbackfn_ = callbackfn;
287 a_.Bind(a); 267 a_.Bind(a);
288 k_.Bind(initial_k); 268 k_.Bind(initial_k);
289 o_ = o; 269 o_ = o;
290 len_ = len; 270 len_ = len;
271 to_.Bind(to);
291 } 272 }
292 273
293 void GenerateIteratingArrayBuiltinLoopContinuation( 274 void GenerateIteratingArrayBuiltinLoopContinuation(
294 const BuiltinResultIndexInitializer& index_initializer,
295 const CallResultProcessor& processor, const PostLoopAction& action) { 275 const CallResultProcessor& processor, const PostLoopAction& action) {
296 index_initializer(this);
297
298 // 8. Repeat, while k < len 276 // 8. Repeat, while k < len
299 Label loop(this, {&k_, &a_, &to_}); 277 Label loop(this, {&k_, &a_, &to_});
300 Label after_loop(this); 278 Label after_loop(this);
301 Goto(&loop); 279 Goto(&loop);
302 Bind(&loop); 280 Bind(&loop);
303 { 281 {
304 GotoUnlessNumberLessThan(k(), len_, &after_loop); 282 GotoUnlessNumberLessThan(k(), len_, &after_loop);
305 283
306 Label done_element(this, &to_); 284 Label done_element(this, &to_);
307 // a. Let Pk be ToString(k). 285 // a. Let Pk be ToString(k).
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 589
612 TF_BUILTIN(ArrayForEachLoopContinuation, ArrayBuiltinCodeStubAssembler) { 590 TF_BUILTIN(ArrayForEachLoopContinuation, ArrayBuiltinCodeStubAssembler) {
613 Node* context = Parameter(Descriptor::kContext); 591 Node* context = Parameter(Descriptor::kContext);
614 Node* receiver = Parameter(Descriptor::kReceiver); 592 Node* receiver = Parameter(Descriptor::kReceiver);
615 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 593 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
616 Node* this_arg = Parameter(Descriptor::kThisArg); 594 Node* this_arg = Parameter(Descriptor::kThisArg);
617 Node* array = Parameter(Descriptor::kArray); 595 Node* array = Parameter(Descriptor::kArray);
618 Node* object = Parameter(Descriptor::kObject); 596 Node* object = Parameter(Descriptor::kObject);
619 Node* initial_k = Parameter(Descriptor::kInitialK); 597 Node* initial_k = Parameter(Descriptor::kInitialK);
620 Node* len = Parameter(Descriptor::kLength); 598 Node* len = Parameter(Descriptor::kLength);
599 Node* to = Parameter(Descriptor::kTo);
621 600
622 InitIteratingArrayBuiltinLoopContinuation( 601 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn,
623 context, receiver, callbackfn, this_arg, array, object, initial_k, len); 602 this_arg, array, object, initial_k,
603 len, to);
624 604
625 GenerateIteratingArrayBuiltinLoopContinuation( 605 GenerateIteratingArrayBuiltinLoopContinuation(
626 &ArrayBuiltinCodeStubAssembler::NullResultIndexReinitializer,
627 &ArrayBuiltinCodeStubAssembler::ForEachProcessor, 606 &ArrayBuiltinCodeStubAssembler::ForEachProcessor,
628 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); 607 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction);
629 } 608 }
630 609
631 TF_BUILTIN(ArrayForEach, ArrayBuiltinCodeStubAssembler) { 610 TF_BUILTIN(ArrayForEach, ArrayBuiltinCodeStubAssembler) {
632 Node* context = Parameter(Descriptor::kContext); 611 Node* context = Parameter(Descriptor::kContext);
633 Node* receiver = Parameter(Descriptor::kReceiver); 612 Node* receiver = Parameter(Descriptor::kReceiver);
634 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 613 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
635 Node* this_arg = Parameter(Descriptor::kThisArg); 614 Node* this_arg = Parameter(Descriptor::kThisArg);
636 Node* new_target = Parameter(Descriptor::kNewTarget); 615 Node* new_target = Parameter(Descriptor::kNewTarget);
(...skipping 11 matching lines...) Expand all
648 627
649 TF_BUILTIN(ArraySomeLoopContinuation, ArrayBuiltinCodeStubAssembler) { 628 TF_BUILTIN(ArraySomeLoopContinuation, ArrayBuiltinCodeStubAssembler) {
650 Node* context = Parameter(Descriptor::kContext); 629 Node* context = Parameter(Descriptor::kContext);
651 Node* receiver = Parameter(Descriptor::kReceiver); 630 Node* receiver = Parameter(Descriptor::kReceiver);
652 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 631 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
653 Node* this_arg = Parameter(Descriptor::kThisArg); 632 Node* this_arg = Parameter(Descriptor::kThisArg);
654 Node* array = Parameter(Descriptor::kArray); 633 Node* array = Parameter(Descriptor::kArray);
655 Node* object = Parameter(Descriptor::kObject); 634 Node* object = Parameter(Descriptor::kObject);
656 Node* initial_k = Parameter(Descriptor::kInitialK); 635 Node* initial_k = Parameter(Descriptor::kInitialK);
657 Node* len = Parameter(Descriptor::kLength); 636 Node* len = Parameter(Descriptor::kLength);
637 Node* to = Parameter(Descriptor::kTo);
658 638
659 InitIteratingArrayBuiltinLoopContinuation( 639 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn,
660 context, receiver, callbackfn, this_arg, array, object, initial_k, len); 640 this_arg, array, object, initial_k,
641 len, to);
661 642
662 GenerateIteratingArrayBuiltinLoopContinuation( 643 GenerateIteratingArrayBuiltinLoopContinuation(
663 &ArrayBuiltinCodeStubAssembler::NullResultIndexReinitializer,
664 &ArrayBuiltinCodeStubAssembler::SomeProcessor, 644 &ArrayBuiltinCodeStubAssembler::SomeProcessor,
665 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); 645 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction);
666 } 646 }
667 647
668 TF_BUILTIN(ArraySome, ArrayBuiltinCodeStubAssembler) { 648 TF_BUILTIN(ArraySome, ArrayBuiltinCodeStubAssembler) {
669 Node* context = Parameter(Descriptor::kContext); 649 Node* context = Parameter(Descriptor::kContext);
670 Node* receiver = Parameter(Descriptor::kReceiver); 650 Node* receiver = Parameter(Descriptor::kReceiver);
671 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 651 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
672 Node* this_arg = Parameter(Descriptor::kThisArg); 652 Node* this_arg = Parameter(Descriptor::kThisArg);
673 Node* new_target = Parameter(Descriptor::kNewTarget); 653 Node* new_target = Parameter(Descriptor::kNewTarget);
(...skipping 11 matching lines...) Expand all
685 665
686 TF_BUILTIN(ArrayEveryLoopContinuation, ArrayBuiltinCodeStubAssembler) { 666 TF_BUILTIN(ArrayEveryLoopContinuation, ArrayBuiltinCodeStubAssembler) {
687 Node* context = Parameter(Descriptor::kContext); 667 Node* context = Parameter(Descriptor::kContext);
688 Node* receiver = Parameter(Descriptor::kReceiver); 668 Node* receiver = Parameter(Descriptor::kReceiver);
689 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 669 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
690 Node* this_arg = Parameter(Descriptor::kThisArg); 670 Node* this_arg = Parameter(Descriptor::kThisArg);
691 Node* array = Parameter(Descriptor::kArray); 671 Node* array = Parameter(Descriptor::kArray);
692 Node* object = Parameter(Descriptor::kObject); 672 Node* object = Parameter(Descriptor::kObject);
693 Node* initial_k = Parameter(Descriptor::kInitialK); 673 Node* initial_k = Parameter(Descriptor::kInitialK);
694 Node* len = Parameter(Descriptor::kLength); 674 Node* len = Parameter(Descriptor::kLength);
675 Node* to = Parameter(Descriptor::kTo);
695 676
696 InitIteratingArrayBuiltinLoopContinuation( 677 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn,
697 context, receiver, callbackfn, this_arg, array, object, initial_k, len); 678 this_arg, array, object, initial_k,
679 len, to);
698 680
699 GenerateIteratingArrayBuiltinLoopContinuation( 681 GenerateIteratingArrayBuiltinLoopContinuation(
700 &ArrayBuiltinCodeStubAssembler::NullResultIndexReinitializer,
701 &ArrayBuiltinCodeStubAssembler::EveryProcessor, 682 &ArrayBuiltinCodeStubAssembler::EveryProcessor,
702 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); 683 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction);
703 } 684 }
704 685
705 TF_BUILTIN(ArrayEvery, ArrayBuiltinCodeStubAssembler) { 686 TF_BUILTIN(ArrayEvery, ArrayBuiltinCodeStubAssembler) {
706 Node* context = Parameter(Descriptor::kContext); 687 Node* context = Parameter(Descriptor::kContext);
707 Node* receiver = Parameter(Descriptor::kReceiver); 688 Node* receiver = Parameter(Descriptor::kReceiver);
708 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 689 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
709 Node* this_arg = Parameter(Descriptor::kThisArg); 690 Node* this_arg = Parameter(Descriptor::kThisArg);
710 Node* new_target = Parameter(Descriptor::kNewTarget); 691 Node* new_target = Parameter(Descriptor::kNewTarget);
(...skipping 11 matching lines...) Expand all
722 703
723 TF_BUILTIN(ArrayReduceLoopContinuation, ArrayBuiltinCodeStubAssembler) { 704 TF_BUILTIN(ArrayReduceLoopContinuation, ArrayBuiltinCodeStubAssembler) {
724 Node* context = Parameter(Descriptor::kContext); 705 Node* context = Parameter(Descriptor::kContext);
725 Node* receiver = Parameter(Descriptor::kReceiver); 706 Node* receiver = Parameter(Descriptor::kReceiver);
726 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 707 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
727 Node* this_arg = Parameter(Descriptor::kThisArg); 708 Node* this_arg = Parameter(Descriptor::kThisArg);
728 Node* accumulator = Parameter(Descriptor::kAccumulator); 709 Node* accumulator = Parameter(Descriptor::kAccumulator);
729 Node* object = Parameter(Descriptor::kObject); 710 Node* object = Parameter(Descriptor::kObject);
730 Node* initial_k = Parameter(Descriptor::kInitialK); 711 Node* initial_k = Parameter(Descriptor::kInitialK);
731 Node* len = Parameter(Descriptor::kLength); 712 Node* len = Parameter(Descriptor::kLength);
713 Node* to = Parameter(Descriptor::kTo);
732 714
733 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn, 715 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn,
734 this_arg, accumulator, object, 716 this_arg, accumulator, object,
735 initial_k, len); 717 initial_k, len, to);
736 718
737 GenerateIteratingArrayBuiltinLoopContinuation( 719 GenerateIteratingArrayBuiltinLoopContinuation(
738 &ArrayBuiltinCodeStubAssembler::NullResultIndexReinitializer,
739 &ArrayBuiltinCodeStubAssembler::ReduceProcessor, 720 &ArrayBuiltinCodeStubAssembler::ReduceProcessor,
740 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction); 721 &ArrayBuiltinCodeStubAssembler::ReducePostLoopAction);
741 } 722 }
742 723
743 TF_BUILTIN(ArrayReduce, ArrayBuiltinCodeStubAssembler) { 724 TF_BUILTIN(ArrayReduce, ArrayBuiltinCodeStubAssembler) {
744 Node* context = Parameter(Descriptor::kContext); 725 Node* context = Parameter(Descriptor::kContext);
745 Node* receiver = Parameter(Descriptor::kReceiver); 726 Node* receiver = Parameter(Descriptor::kReceiver);
746 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 727 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
747 Node* initial_value = Parameter(Descriptor::kInitialValue); 728 Node* initial_value = Parameter(Descriptor::kInitialValue);
748 Node* new_target = Parameter(Descriptor::kNewTarget); 729 Node* new_target = Parameter(Descriptor::kNewTarget);
(...skipping 11 matching lines...) Expand all
760 741
761 TF_BUILTIN(ArrayFilterLoopContinuation, ArrayBuiltinCodeStubAssembler) { 742 TF_BUILTIN(ArrayFilterLoopContinuation, ArrayBuiltinCodeStubAssembler) {
762 Node* context = Parameter(Descriptor::kContext); 743 Node* context = Parameter(Descriptor::kContext);
763 Node* receiver = Parameter(Descriptor::kReceiver); 744 Node* receiver = Parameter(Descriptor::kReceiver);
764 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 745 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
765 Node* this_arg = Parameter(Descriptor::kThisArg); 746 Node* this_arg = Parameter(Descriptor::kThisArg);
766 Node* array = Parameter(Descriptor::kArray); 747 Node* array = Parameter(Descriptor::kArray);
767 Node* object = Parameter(Descriptor::kObject); 748 Node* object = Parameter(Descriptor::kObject);
768 Node* initial_k = Parameter(Descriptor::kInitialK); 749 Node* initial_k = Parameter(Descriptor::kInitialK);
769 Node* len = Parameter(Descriptor::kLength); 750 Node* len = Parameter(Descriptor::kLength);
751 Node* to = Parameter(Descriptor::kTo);
770 752
771 InitIteratingArrayBuiltinLoopContinuation( 753 InitIteratingArrayBuiltinLoopContinuation(context, receiver, callbackfn,
772 context, receiver, callbackfn, this_arg, array, object, initial_k, len); 754 this_arg, array, object, initial_k,
755 len, to);
773 756
774 GenerateIteratingArrayBuiltinLoopContinuation( 757 GenerateIteratingArrayBuiltinLoopContinuation(
775 &ArrayBuiltinCodeStubAssembler::FilterResultIndexReinitializer,
776 &ArrayBuiltinCodeStubAssembler::FilterProcessor, 758 &ArrayBuiltinCodeStubAssembler::FilterProcessor,
777 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction); 759 &ArrayBuiltinCodeStubAssembler::NullPostLoopAction);
778 } 760 }
779 761
780 TF_BUILTIN(ArrayFilter, ArrayBuiltinCodeStubAssembler) { 762 TF_BUILTIN(ArrayFilter, ArrayBuiltinCodeStubAssembler) {
781 Node* context = Parameter(Descriptor::kContext); 763 Node* context = Parameter(Descriptor::kContext);
782 Node* receiver = Parameter(Descriptor::kReceiver); 764 Node* receiver = Parameter(Descriptor::kReceiver);
783 Node* callbackfn = Parameter(Descriptor::kCallbackFn); 765 Node* callbackfn = Parameter(Descriptor::kCallbackFn);
784 Node* this_arg = Parameter(Descriptor::kThisArg); 766 Node* this_arg = Parameter(Descriptor::kThisArg);
785 Node* new_target = Parameter(Descriptor::kNewTarget); 767 Node* new_target = Parameter(Descriptor::kNewTarget);
(...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after
1849 { 1831 {
1850 Node* message = SmiConstant(MessageTemplate::kDetachedOperation); 1832 Node* message = SmiConstant(MessageTemplate::kDetachedOperation);
1851 CallRuntime(Runtime::kThrowTypeError, context, message, 1833 CallRuntime(Runtime::kThrowTypeError, context, message,
1852 HeapConstant(operation)); 1834 HeapConstant(operation));
1853 Unreachable(); 1835 Unreachable();
1854 } 1836 }
1855 } 1837 }
1856 1838
1857 } // namespace internal 1839 } // namespace internal
1858 } // namespace v8 1840 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins.h ('k') | src/compiler/code-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698