OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/v8.h" | 5 #include "src/code-stubs.h" |
| 6 |
| 7 #include <sstream> |
6 | 8 |
7 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
8 #include "src/code-stubs.h" | |
9 #include "src/cpu-profiler.h" | 10 #include "src/cpu-profiler.h" |
10 #include "src/factory.h" | 11 #include "src/factory.h" |
11 #include "src/gdb-jit.h" | 12 #include "src/gdb-jit.h" |
12 #include "src/ic/handler-compiler.h" | 13 #include "src/ic/handler-compiler.h" |
13 #include "src/ic/ic.h" | 14 #include "src/ic/ic.h" |
14 #include "src/macro-assembler.h" | 15 #include "src/macro-assembler.h" |
15 | 16 |
16 namespace v8 { | 17 namespace v8 { |
17 namespace internal { | 18 namespace internal { |
18 | 19 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 if (index != UnseededNumberDictionary::kNotFound) { | 69 if (index != UnseededNumberDictionary::kNotFound) { |
69 *code_out = Code::cast(stubs->ValueAt(index)); | 70 *code_out = Code::cast(stubs->ValueAt(index)); |
70 return true; | 71 return true; |
71 } | 72 } |
72 return false; | 73 return false; |
73 } | 74 } |
74 | 75 |
75 | 76 |
76 void CodeStub::RecordCodeGeneration(Handle<Code> code) { | 77 void CodeStub::RecordCodeGeneration(Handle<Code> code) { |
77 IC::RegisterWeakMapDependency(code); | 78 IC::RegisterWeakMapDependency(code); |
78 OStringStream os; | 79 std::ostringstream os; |
79 os << *this; | 80 os << *this; |
80 PROFILE(isolate(), CodeCreateEvent(Logger::STUB_TAG, *code, os.c_str())); | 81 PROFILE(isolate(), |
| 82 CodeCreateEvent(Logger::STUB_TAG, *code, os.str().c_str())); |
81 Counters* counters = isolate()->counters(); | 83 Counters* counters = isolate()->counters(); |
82 counters->total_stubs_code_size()->Increment(code->instruction_size()); | 84 counters->total_stubs_code_size()->Increment(code->instruction_size()); |
83 } | 85 } |
84 | 86 |
85 | 87 |
86 Code::Kind CodeStub::GetCodeKind() const { | 88 Code::Kind CodeStub::GetCodeKind() const { |
87 return Code::STUB; | 89 return Code::STUB; |
88 } | 90 } |
89 | 91 |
90 | 92 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 | 148 |
147 Handle<Code> new_object = GenerateCode(); | 149 Handle<Code> new_object = GenerateCode(); |
148 new_object->set_stub_key(GetKey()); | 150 new_object->set_stub_key(GetKey()); |
149 FinishCode(new_object); | 151 FinishCode(new_object); |
150 RecordCodeGeneration(new_object); | 152 RecordCodeGeneration(new_object); |
151 | 153 |
152 #ifdef ENABLE_DISASSEMBLER | 154 #ifdef ENABLE_DISASSEMBLER |
153 if (FLAG_print_code_stubs) { | 155 if (FLAG_print_code_stubs) { |
154 CodeTracer::Scope trace_scope(isolate()->GetCodeTracer()); | 156 CodeTracer::Scope trace_scope(isolate()->GetCodeTracer()); |
155 OFStream os(trace_scope.file()); | 157 OFStream os(trace_scope.file()); |
156 OStringStream name; | 158 std::ostringstream name; |
157 name << *this; | 159 name << *this; |
158 new_object->Disassemble(name.c_str(), os); | 160 new_object->Disassemble(name.str().c_str(), os); |
159 os << "\n"; | 161 os << "\n"; |
160 } | 162 } |
161 #endif | 163 #endif |
162 | 164 |
163 if (UseSpecialCache()) { | 165 if (UseSpecialCache()) { |
164 AddToSpecialCache(new_object); | 166 AddToSpecialCache(new_object); |
165 } else { | 167 } else { |
166 // Update the dictionary and the root in Heap. | 168 // Update the dictionary and the root in Heap. |
167 Handle<UnseededNumberDictionary> dict = | 169 Handle<UnseededNumberDictionary> dict = |
168 UnseededNumberDictionary::AtNumberPut( | 170 UnseededNumberDictionary::AtNumberPut( |
(...skipping 22 matching lines...) Expand all Loading... |
191 case NoCache: | 193 case NoCache: |
192 return "<NoCache>Stub"; | 194 return "<NoCache>Stub"; |
193 case NUMBER_OF_IDS: | 195 case NUMBER_OF_IDS: |
194 UNREACHABLE(); | 196 UNREACHABLE(); |
195 return NULL; | 197 return NULL; |
196 } | 198 } |
197 return NULL; | 199 return NULL; |
198 } | 200 } |
199 | 201 |
200 | 202 |
201 void CodeStub::PrintBaseName(OStream& os) const { // NOLINT | 203 void CodeStub::PrintBaseName(std::ostream& os) const { // NOLINT |
202 os << MajorName(MajorKey(), false); | 204 os << MajorName(MajorKey(), false); |
203 } | 205 } |
204 | 206 |
205 | 207 |
206 void CodeStub::PrintName(OStream& os) const { // NOLINT | 208 void CodeStub::PrintName(std::ostream& os) const { // NOLINT |
207 PrintBaseName(os); | 209 PrintBaseName(os); |
208 PrintState(os); | 210 PrintState(os); |
209 } | 211 } |
210 | 212 |
211 | 213 |
212 void CodeStub::Dispatch(Isolate* isolate, uint32_t key, void** value_out, | 214 void CodeStub::Dispatch(Isolate* isolate, uint32_t key, void** value_out, |
213 DispatchedCall call) { | 215 DispatchedCall call) { |
214 switch (MajorKeyFromKey(key)) { | 216 switch (MajorKeyFromKey(key)) { |
215 #define DEF_CASE(NAME) \ | 217 #define DEF_CASE(NAME) \ |
216 case NAME: { \ | 218 case NAME: { \ |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 static_cast<OverwriteMode>(mode)); | 274 static_cast<OverwriteMode>(mode)); |
273 stub.GetCode(); | 275 stub.GetCode(); |
274 } | 276 } |
275 } | 277 } |
276 | 278 |
277 // Generate special versions of the stub. | 279 // Generate special versions of the stub. |
278 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime); | 280 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime); |
279 } | 281 } |
280 | 282 |
281 | 283 |
282 void BinaryOpICStub::PrintState(OStream& os) const { // NOLINT | 284 void BinaryOpICStub::PrintState(std::ostream& os) const { // NOLINT |
283 os << state(); | 285 os << state(); |
284 } | 286 } |
285 | 287 |
286 | 288 |
287 // static | 289 // static |
288 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate, | 290 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate, |
289 const BinaryOpICState& state) { | 291 const BinaryOpICState& state) { |
290 BinaryOpICStub stub(isolate, state); | 292 BinaryOpICStub stub(isolate, state); |
291 stub.GetCode(); | 293 stub.GetCode(); |
292 } | 294 } |
293 | 295 |
294 | 296 |
295 // static | 297 // static |
296 void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { | 298 void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { |
297 // Generate special versions of the stub. | 299 // Generate special versions of the stub. |
298 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime); | 300 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime); |
299 } | 301 } |
300 | 302 |
301 | 303 |
302 void BinaryOpICWithAllocationSiteStub::PrintState( | 304 void BinaryOpICWithAllocationSiteStub::PrintState( |
303 OStream& os) const { // NOLINT | 305 std::ostream& os) const { // NOLINT |
304 os << state(); | 306 os << state(); |
305 } | 307 } |
306 | 308 |
307 | 309 |
308 // static | 310 // static |
309 void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime( | 311 void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime( |
310 Isolate* isolate, const BinaryOpICState& state) { | 312 Isolate* isolate, const BinaryOpICState& state) { |
311 if (state.CouldCreateAllocationMementos()) { | 313 if (state.CouldCreateAllocationMementos()) { |
312 BinaryOpICWithAllocationSiteStub stub(isolate, state); | 314 BinaryOpICWithAllocationSiteStub stub(isolate, state); |
313 stub.GetCode(); | 315 stub.GetCode(); |
314 } | 316 } |
315 } | 317 } |
316 | 318 |
317 | 319 |
318 void StringAddStub::PrintBaseName(OStream& os) const { // NOLINT | 320 void StringAddStub::PrintBaseName(std::ostream& os) const { // NOLINT |
319 os << "StringAddStub"; | 321 os << "StringAddStub"; |
320 if ((flags() & STRING_ADD_CHECK_BOTH) == STRING_ADD_CHECK_BOTH) { | 322 if ((flags() & STRING_ADD_CHECK_BOTH) == STRING_ADD_CHECK_BOTH) { |
321 os << "_CheckBoth"; | 323 os << "_CheckBoth"; |
322 } else if ((flags() & STRING_ADD_CHECK_LEFT) == STRING_ADD_CHECK_LEFT) { | 324 } else if ((flags() & STRING_ADD_CHECK_LEFT) == STRING_ADD_CHECK_LEFT) { |
323 os << "_CheckLeft"; | 325 os << "_CheckLeft"; |
324 } else if ((flags() & STRING_ADD_CHECK_RIGHT) == STRING_ADD_CHECK_RIGHT) { | 326 } else if ((flags() & STRING_ADD_CHECK_RIGHT) == STRING_ADD_CHECK_RIGHT) { |
325 os << "_CheckRight"; | 327 os << "_CheckRight"; |
326 } | 328 } |
327 if (pretenure_flag() == TENURED) { | 329 if (pretenure_flag() == TENURED) { |
328 os << "_Tenured"; | 330 os << "_Tenured"; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 | 458 |
457 template<class StateType> | 459 template<class StateType> |
458 void HydrogenCodeStub::TraceTransition(StateType from, StateType to) { | 460 void HydrogenCodeStub::TraceTransition(StateType from, StateType to) { |
459 // Note: Although a no-op transition is semantically OK, it is hinting at a | 461 // Note: Although a no-op transition is semantically OK, it is hinting at a |
460 // bug somewhere in our state transition machinery. | 462 // bug somewhere in our state transition machinery. |
461 DCHECK(from != to); | 463 DCHECK(from != to); |
462 if (!FLAG_trace_ic) return; | 464 if (!FLAG_trace_ic) return; |
463 OFStream os(stdout); | 465 OFStream os(stdout); |
464 os << "["; | 466 os << "["; |
465 PrintBaseName(os); | 467 PrintBaseName(os); |
466 os << ": " << from << "=>" << to << "]" << endl; | 468 os << ": " << from << "=>" << to << "]" << std::endl; |
467 } | 469 } |
468 | 470 |
469 | 471 |
470 void CompareNilICStub::PrintBaseName(OStream& os) const { // NOLINT | 472 void CompareNilICStub::PrintBaseName(std::ostream& os) const { // NOLINT |
471 CodeStub::PrintBaseName(os); | 473 CodeStub::PrintBaseName(os); |
472 os << ((nil_value() == kNullValue) ? "(NullValue)" : "(UndefinedValue)"); | 474 os << ((nil_value() == kNullValue) ? "(NullValue)" : "(UndefinedValue)"); |
473 } | 475 } |
474 | 476 |
475 | 477 |
476 void CompareNilICStub::PrintState(OStream& os) const { // NOLINT | 478 void CompareNilICStub::PrintState(std::ostream& os) const { // NOLINT |
477 os << state(); | 479 os << state(); |
478 } | 480 } |
479 | 481 |
480 | 482 |
481 // TODO(svenpanne) Make this a real infix_ostream_iterator. | 483 // TODO(svenpanne) Make this a real infix_ostream_iterator. |
482 class SimpleListPrinter { | 484 class SimpleListPrinter { |
483 public: | 485 public: |
484 explicit SimpleListPrinter(OStream& os) : os_(os), first_(true) {} | 486 explicit SimpleListPrinter(std::ostream& os) : os_(os), first_(true) {} |
485 | 487 |
486 void Add(const char* s) { | 488 void Add(const char* s) { |
487 if (first_) { | 489 if (first_) { |
488 first_ = false; | 490 first_ = false; |
489 } else { | 491 } else { |
490 os_ << ","; | 492 os_ << ","; |
491 } | 493 } |
492 os_ << s; | 494 os_ << s; |
493 } | 495 } |
494 | 496 |
495 private: | 497 private: |
496 OStream& os_; | 498 std::ostream& os_; |
497 bool first_; | 499 bool first_; |
498 }; | 500 }; |
499 | 501 |
500 | 502 |
501 OStream& operator<<(OStream& os, const CompareNilICStub::State& s) { | 503 std::ostream& operator<<(std::ostream& os, const CompareNilICStub::State& s) { |
502 os << "("; | 504 os << "("; |
503 SimpleListPrinter p(os); | 505 SimpleListPrinter p(os); |
504 if (s.IsEmpty()) p.Add("None"); | 506 if (s.IsEmpty()) p.Add("None"); |
505 if (s.Contains(CompareNilICStub::UNDEFINED)) p.Add("Undefined"); | 507 if (s.Contains(CompareNilICStub::UNDEFINED)) p.Add("Undefined"); |
506 if (s.Contains(CompareNilICStub::NULL_TYPE)) p.Add("Null"); | 508 if (s.Contains(CompareNilICStub::NULL_TYPE)) p.Add("Null"); |
507 if (s.Contains(CompareNilICStub::MONOMORPHIC_MAP)) p.Add("MonomorphicMap"); | 509 if (s.Contains(CompareNilICStub::MONOMORPHIC_MAP)) p.Add("MonomorphicMap"); |
508 if (s.Contains(CompareNilICStub::GENERIC)) p.Add("Generic"); | 510 if (s.Contains(CompareNilICStub::GENERIC)) p.Add("Generic"); |
509 return os << ")"; | 511 return os << ")"; |
510 } | 512 } |
511 | 513 |
(...skipping 20 matching lines...) Expand all Loading... |
532 | 534 |
533 | 535 |
534 Type* CompareNilICStub::GetInputType(Zone* zone, Handle<Map> map) { | 536 Type* CompareNilICStub::GetInputType(Zone* zone, Handle<Map> map) { |
535 Type* output_type = GetType(zone, map); | 537 Type* output_type = GetType(zone, map); |
536 Type* nil_type = | 538 Type* nil_type = |
537 nil_value() == kNullValue ? Type::Null(zone) : Type::Undefined(zone); | 539 nil_value() == kNullValue ? Type::Null(zone) : Type::Undefined(zone); |
538 return Type::Union(output_type, nil_type, zone); | 540 return Type::Union(output_type, nil_type, zone); |
539 } | 541 } |
540 | 542 |
541 | 543 |
542 void CallIC_ArrayStub::PrintState(OStream& os) const { // NOLINT | 544 void CallIC_ArrayStub::PrintState(std::ostream& os) const { // NOLINT |
543 os << state() << " (Array)"; | 545 os << state() << " (Array)"; |
544 } | 546 } |
545 | 547 |
546 | 548 |
547 void CallICStub::PrintState(OStream& os) const { // NOLINT | 549 void CallICStub::PrintState(std::ostream& os) const { // NOLINT |
548 os << state(); | 550 os << state(); |
549 } | 551 } |
550 | 552 |
551 | 553 |
552 void InstanceofStub::PrintName(OStream& os) const { // NOLINT | 554 void InstanceofStub::PrintName(std::ostream& os) const { // NOLINT |
553 os << "InstanceofStub"; | 555 os << "InstanceofStub"; |
554 if (HasArgsInRegisters()) os << "_REGS"; | 556 if (HasArgsInRegisters()) os << "_REGS"; |
555 if (HasCallSiteInlineCheck()) os << "_INLINE"; | 557 if (HasCallSiteInlineCheck()) os << "_INLINE"; |
556 if (ReturnTrueFalseObject()) os << "_TRUEFALSE"; | 558 if (ReturnTrueFalseObject()) os << "_TRUEFALSE"; |
557 } | 559 } |
558 | 560 |
559 | 561 |
560 void JSEntryStub::FinishCode(Handle<Code> code) { | 562 void JSEntryStub::FinishCode(Handle<Code> code) { |
561 Handle<FixedArray> handler_table = | 563 Handle<FixedArray> handler_table = |
562 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); | 564 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
770 case NEW_SLOPPY_SLOW: | 772 case NEW_SLOPPY_SLOW: |
771 GenerateNewSloppySlow(masm); | 773 GenerateNewSloppySlow(masm); |
772 break; | 774 break; |
773 case NEW_STRICT: | 775 case NEW_STRICT: |
774 GenerateNewStrict(masm); | 776 GenerateNewStrict(masm); |
775 break; | 777 break; |
776 } | 778 } |
777 } | 779 } |
778 | 780 |
779 | 781 |
780 void ArgumentsAccessStub::PrintName(OStream& os) const { // NOLINT | 782 void ArgumentsAccessStub::PrintName(std::ostream& os) const { // NOLINT |
781 os << "ArgumentsAccessStub_"; | 783 os << "ArgumentsAccessStub_"; |
782 switch (type()) { | 784 switch (type()) { |
783 case READ_ELEMENT: | 785 case READ_ELEMENT: |
784 os << "ReadElement"; | 786 os << "ReadElement"; |
785 break; | 787 break; |
786 case NEW_SLOPPY_FAST: | 788 case NEW_SLOPPY_FAST: |
787 os << "NewSloppyFast"; | 789 os << "NewSloppyFast"; |
788 break; | 790 break; |
789 case NEW_SLOPPY_SLOW: | 791 case NEW_SLOPPY_SLOW: |
790 os << "NewSloppySlow"; | 792 os << "NewSloppySlow"; |
791 break; | 793 break; |
792 case NEW_STRICT: | 794 case NEW_STRICT: |
793 os << "NewStrict"; | 795 os << "NewStrict"; |
794 break; | 796 break; |
795 } | 797 } |
796 return; | 798 return; |
797 } | 799 } |
798 | 800 |
799 | 801 |
800 void CallFunctionStub::PrintName(OStream& os) const { // NOLINT | 802 void CallFunctionStub::PrintName(std::ostream& os) const { // NOLINT |
801 os << "CallFunctionStub_Args" << argc(); | 803 os << "CallFunctionStub_Args" << argc(); |
802 } | 804 } |
803 | 805 |
804 | 806 |
805 void CallConstructStub::PrintName(OStream& os) const { // NOLINT | 807 void CallConstructStub::PrintName(std::ostream& os) const { // NOLINT |
806 os << "CallConstructStub"; | 808 os << "CallConstructStub"; |
807 if (RecordCallTarget()) os << "_Recording"; | 809 if (RecordCallTarget()) os << "_Recording"; |
808 } | 810 } |
809 | 811 |
810 | 812 |
811 void ArrayConstructorStub::PrintName(OStream& os) const { // NOLINT | 813 void ArrayConstructorStub::PrintName(std::ostream& os) const { // NOLINT |
812 os << "ArrayConstructorStub"; | 814 os << "ArrayConstructorStub"; |
813 switch (argument_count()) { | 815 switch (argument_count()) { |
814 case ANY: | 816 case ANY: |
815 os << "_Any"; | 817 os << "_Any"; |
816 break; | 818 break; |
817 case NONE: | 819 case NONE: |
818 os << "_None"; | 820 os << "_None"; |
819 break; | 821 break; |
820 case ONE: | 822 case ONE: |
821 os << "_One"; | 823 os << "_One"; |
822 break; | 824 break; |
823 case MORE_THAN_ONE: | 825 case MORE_THAN_ONE: |
824 os << "_More_Than_One"; | 826 os << "_More_Than_One"; |
825 break; | 827 break; |
826 } | 828 } |
827 return; | 829 return; |
828 } | 830 } |
829 | 831 |
830 | 832 |
831 OStream& ArrayConstructorStubBase::BasePrintName(OStream& os, // NOLINT | 833 std::ostream& ArrayConstructorStubBase::BasePrintName( |
832 const char* name) const { | 834 std::ostream& os, // NOLINT |
| 835 const char* name) const { |
833 os << name << "_" << ElementsKindToString(elements_kind()); | 836 os << name << "_" << ElementsKindToString(elements_kind()); |
834 if (override_mode() == DISABLE_ALLOCATION_SITES) { | 837 if (override_mode() == DISABLE_ALLOCATION_SITES) { |
835 os << "_DISABLE_ALLOCATION_SITES"; | 838 os << "_DISABLE_ALLOCATION_SITES"; |
836 } | 839 } |
837 return os; | 840 return os; |
838 } | 841 } |
839 | 842 |
840 | 843 |
841 bool ToBooleanStub::UpdateStatus(Handle<Object> object) { | 844 bool ToBooleanStub::UpdateStatus(Handle<Object> object) { |
842 Types new_types = types(); | 845 Types new_types = types(); |
843 Types old_types = new_types; | 846 Types old_types = new_types; |
844 bool to_boolean_value = new_types.UpdateStatus(object); | 847 bool to_boolean_value = new_types.UpdateStatus(object); |
845 TraceTransition(old_types, new_types); | 848 TraceTransition(old_types, new_types); |
846 set_sub_minor_key(TypesBits::update(sub_minor_key(), new_types.ToByte())); | 849 set_sub_minor_key(TypesBits::update(sub_minor_key(), new_types.ToByte())); |
847 return to_boolean_value; | 850 return to_boolean_value; |
848 } | 851 } |
849 | 852 |
850 | 853 |
851 void ToBooleanStub::PrintState(OStream& os) const { // NOLINT | 854 void ToBooleanStub::PrintState(std::ostream& os) const { // NOLINT |
852 os << types(); | 855 os << types(); |
853 } | 856 } |
854 | 857 |
855 | 858 |
856 OStream& operator<<(OStream& os, const ToBooleanStub::Types& s) { | 859 std::ostream& operator<<(std::ostream& os, const ToBooleanStub::Types& s) { |
857 os << "("; | 860 os << "("; |
858 SimpleListPrinter p(os); | 861 SimpleListPrinter p(os); |
859 if (s.IsEmpty()) p.Add("None"); | 862 if (s.IsEmpty()) p.Add("None"); |
860 if (s.Contains(ToBooleanStub::UNDEFINED)) p.Add("Undefined"); | 863 if (s.Contains(ToBooleanStub::UNDEFINED)) p.Add("Undefined"); |
861 if (s.Contains(ToBooleanStub::BOOLEAN)) p.Add("Bool"); | 864 if (s.Contains(ToBooleanStub::BOOLEAN)) p.Add("Bool"); |
862 if (s.Contains(ToBooleanStub::NULL_TYPE)) p.Add("Null"); | 865 if (s.Contains(ToBooleanStub::NULL_TYPE)) p.Add("Null"); |
863 if (s.Contains(ToBooleanStub::SMI)) p.Add("Smi"); | 866 if (s.Contains(ToBooleanStub::SMI)) p.Add("Smi"); |
864 if (s.Contains(ToBooleanStub::SPEC_OBJECT)) p.Add("SpecObject"); | 867 if (s.Contains(ToBooleanStub::SPEC_OBJECT)) p.Add("SpecObject"); |
865 if (s.Contains(ToBooleanStub::STRING)) p.Add("String"); | 868 if (s.Contains(ToBooleanStub::STRING)) p.Add("String"); |
866 if (s.Contains(ToBooleanStub::SYMBOL)) p.Add("Symbol"); | 869 if (s.Contains(ToBooleanStub::SYMBOL)) p.Add("Symbol"); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 } | 962 } |
960 | 963 |
961 | 964 |
962 InternalArrayConstructorStub::InternalArrayConstructorStub( | 965 InternalArrayConstructorStub::InternalArrayConstructorStub( |
963 Isolate* isolate) : PlatformCodeStub(isolate) { | 966 Isolate* isolate) : PlatformCodeStub(isolate) { |
964 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); | 967 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
965 } | 968 } |
966 | 969 |
967 | 970 |
968 } } // namespace v8::internal | 971 } } // namespace v8::internal |
OLD | NEW |