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

Side by Side Diff: src/factory.cc

Issue 258953009: Refactor calls to CALL_HEAP_FUNCTION. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « src/factory.h ('k') | src/isolate.cc » ('j') | src/objects.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 "factory.h" 5 #include "factory.h"
6 6
7 #include "conversions.h" 7 #include "conversions.h"
8 #include "isolate-inl.h" 8 #include "isolate-inl.h"
9 #include "macro-assembler.h" 9 #include "macro-assembler.h"
10 10
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 Handle<String> first, 435 Handle<String> first,
436 Handle<String> second) { 436 Handle<String> second) {
437 DisallowHeapAllocation pointer_stays_valid; 437 DisallowHeapAllocation pointer_stays_valid;
438 SinkChar* sink = result->GetChars(); 438 SinkChar* sink = result->GetChars();
439 String::WriteToFlat(*first, sink, 0, first->length()); 439 String::WriteToFlat(*first, sink, 0, first->length());
440 String::WriteToFlat(*second, sink + first->length(), 0, second->length()); 440 String::WriteToFlat(*second, sink + first->length(), 0, second->length());
441 return result; 441 return result;
442 } 442 }
443 443
444 444
445 Handle<ConsString> Factory::NewRawConsString(String::Encoding encoding) {
446 Handle<Map> map = (encoding == String::ONE_BYTE_ENCODING)
447 ? cons_ascii_string_map() : cons_string_map();
448 return New<ConsString>(map, NEW_SPACE);
449 }
450
451
452 MaybeHandle<String> Factory::NewConsString(Handle<String> left, 445 MaybeHandle<String> Factory::NewConsString(Handle<String> left,
453 Handle<String> right) { 446 Handle<String> right) {
454 int left_length = left->length(); 447 int left_length = left->length();
455 if (left_length == 0) return right; 448 if (left_length == 0) return right;
456 int right_length = right->length(); 449 int right_length = right->length();
457 if (right_length == 0) return left; 450 if (right_length == 0) return left;
458 451
459 int length = left_length + right_length; 452 int length = left_length + right_length;
460 453
461 if (length == 2) { 454 if (length == 2) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 return result; 504 return result;
512 } 505 }
513 506
514 return (is_one_byte_data_in_two_byte_string) 507 return (is_one_byte_data_in_two_byte_string)
515 ? ConcatStringContent<uint8_t>( 508 ? ConcatStringContent<uint8_t>(
516 NewRawOneByteString(length).ToHandleChecked(), left, right) 509 NewRawOneByteString(length).ToHandleChecked(), left, right)
517 : ConcatStringContent<uc16>( 510 : ConcatStringContent<uc16>(
518 NewRawTwoByteString(length).ToHandleChecked(), left, right); 511 NewRawTwoByteString(length).ToHandleChecked(), left, right);
519 } 512 }
520 513
521 Handle<ConsString> result = NewRawConsString( 514 Handle<Map> map = (is_one_byte || is_one_byte_data_in_two_byte_string)
522 (is_one_byte || is_one_byte_data_in_two_byte_string) 515 ? cons_ascii_string_map() : cons_string_map();
523 ? String::ONE_BYTE_ENCODING 516 Handle<ConsString> result = New<ConsString>(map, NEW_SPACE);
524 : String::TWO_BYTE_ENCODING);
525 517
526 DisallowHeapAllocation no_gc; 518 DisallowHeapAllocation no_gc;
527 WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); 519 WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc);
528 520
529 result->set_hash_field(String::kEmptyHashField); 521 result->set_hash_field(String::kEmptyHashField);
530 result->set_length(length); 522 result->set_length(length);
531 result->set_first(*left, mode); 523 result->set_first(*left, mode);
532 result->set_second(*right, mode); 524 result->set_second(*right, mode);
533 return result; 525 return result;
534 } 526 }
535 527
536 528
537 Handle<String> Factory::NewFlatConcatString(Handle<String> first, 529 Handle<String> Factory::NewFlatConcatString(Handle<String> first,
538 Handle<String> second) { 530 Handle<String> second) {
539 int total_length = first->length() + second->length(); 531 int total_length = first->length() + second->length();
540 if (first->IsOneByteRepresentation() && second->IsOneByteRepresentation()) { 532 if (first->IsOneByteRepresentation() && second->IsOneByteRepresentation()) {
541 return ConcatStringContent<uint8_t>( 533 return ConcatStringContent<uint8_t>(
542 NewRawOneByteString(total_length).ToHandleChecked(), first, second); 534 NewRawOneByteString(total_length).ToHandleChecked(), first, second);
543 } else { 535 } else {
544 return ConcatStringContent<uc16>( 536 return ConcatStringContent<uc16>(
545 NewRawTwoByteString(total_length).ToHandleChecked(), first, second); 537 NewRawTwoByteString(total_length).ToHandleChecked(), first, second);
546 } 538 }
547 } 539 }
548 540
549 541
550 Handle<SlicedString> Factory::NewRawSlicedString(String::Encoding encoding) {
551 Handle<Map> map = (encoding == String::ONE_BYTE_ENCODING)
552 ? sliced_ascii_string_map() : sliced_string_map();
553 return New<SlicedString>(map, NEW_SPACE);
554 }
555
556
557 Handle<String> Factory::NewProperSubString(Handle<String> str, 542 Handle<String> Factory::NewProperSubString(Handle<String> str,
558 int begin, 543 int begin,
559 int end) { 544 int end) {
560 #if VERIFY_HEAP 545 #if VERIFY_HEAP
561 if (FLAG_verify_heap) str->StringVerify(); 546 if (FLAG_verify_heap) str->StringVerify();
562 #endif 547 #endif
563 ASSERT(begin > 0 || end < str->length()); 548 ASSERT(begin > 0 || end < str->length());
564 549
565 str = String::Flatten(str); 550 str = String::Flatten(str);
566 551
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 583
599 int offset = begin; 584 int offset = begin;
600 585
601 if (str->IsSlicedString()) { 586 if (str->IsSlicedString()) {
602 Handle<SlicedString> slice = Handle<SlicedString>::cast(str); 587 Handle<SlicedString> slice = Handle<SlicedString>::cast(str);
603 str = Handle<String>(slice->parent(), isolate()); 588 str = Handle<String>(slice->parent(), isolate());
604 offset += slice->offset(); 589 offset += slice->offset();
605 } 590 }
606 591
607 ASSERT(str->IsSeqString() || str->IsExternalString()); 592 ASSERT(str->IsSeqString() || str->IsExternalString());
608 Handle<SlicedString> slice = NewRawSlicedString( 593 Handle<Map> map = str->IsOneByteRepresentation() ? sliced_ascii_string_map()
609 str->IsOneByteRepresentation() ? String::ONE_BYTE_ENCODING 594 : sliced_string_map();
610 : String::TWO_BYTE_ENCODING); 595 Handle<SlicedString> slice = New<SlicedString>(map, NEW_SPACE);
611 596
612 slice->set_hash_field(String::kEmptyHashField); 597 slice->set_hash_field(String::kEmptyHashField);
613 slice->set_length(length); 598 slice->set_length(length);
614 slice->set_parent(*str); 599 slice->set_parent(*str);
615 slice->set_offset(offset); 600 slice->set_offset(offset);
616 return slice; 601 return slice;
617 } 602 }
618 603
619 604
620 MaybeHandle<String> Factory::NewExternalStringFromAscii( 605 MaybeHandle<String> Factory::NewExternalStringFromAscii(
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 JSObject::SetLocalPropertyIgnoreAttributes(prototype, 955 JSObject::SetLocalPropertyIgnoreAttributes(prototype,
971 constructor_string(), 956 constructor_string(),
972 function, 957 function,
973 DONT_ENUM).Assert(); 958 DONT_ENUM).Assert();
974 } 959 }
975 960
976 return prototype; 961 return prototype;
977 } 962 }
978 963
979 964
965
966 Handle<JSObject> Factory::CopyJSObject(Handle<JSObject> object) {
967 CALL_HEAP_FUNCTION(isolate(),
968 isolate()->heap()->CopyJSObject(*object, NULL),
969 JSObject);
970 }
971
972
973 Handle<JSObject> Factory::CopyJSObjectWithMemento(Handle<JSObject> object,
974 Handle<AllocationSite> site) {
975 CALL_HEAP_FUNCTION(isolate(),
976 isolate()->heap()->CopyJSObject(
977 *object,
978 site.is_null() ? NULL : *site),
979 JSObject);
980 }
981
982
983 Handle<FixedArray> Factory::CopyFixedArrayWithMap(Handle<FixedArray> array,
984 Handle<Map> map) {
985 CALL_HEAP_FUNCTION(isolate(),
986 isolate()->heap()->CopyFixedArrayWithMap(*array, *map),
987 FixedArray);
988 }
989
990
980 Handle<FixedArray> Factory::CopyFixedArray(Handle<FixedArray> array) { 991 Handle<FixedArray> Factory::CopyFixedArray(Handle<FixedArray> array) {
981 CALL_HEAP_FUNCTION(isolate(), array->Copy(), FixedArray); 992 CALL_HEAP_FUNCTION(isolate(), array->Copy(), FixedArray);
982 } 993 }
983 994
984 995
985 Handle<FixedArray> Factory::CopyAndTenureFixedCOWArray( 996 Handle<FixedArray> Factory::CopyAndTenureFixedCOWArray(
986 Handle<FixedArray> array) { 997 Handle<FixedArray> array) {
987 ASSERT(isolate()->heap()->InNewSpace(*array)); 998 ASSERT(isolate()->heap()->InNewSpace(*array));
988 CALL_HEAP_FUNCTION(isolate(), 999 CALL_HEAP_FUNCTION(isolate(),
989 isolate()->heap()->CopyAndTenureFixedCOWArray(*array), 1000 isolate()->heap()->CopyAndTenureFixedCOWArray(*array),
(...skipping 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after
2328 return Handle<Object>::null(); 2339 return Handle<Object>::null();
2329 } 2340 }
2330 2341
2331 2342
2332 Handle<Object> Factory::ToBoolean(bool value) { 2343 Handle<Object> Factory::ToBoolean(bool value) {
2333 return value ? true_value() : false_value(); 2344 return value ? true_value() : false_value();
2334 } 2345 }
2335 2346
2336 2347
2337 } } // namespace v8::internal 2348 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/factory.h ('k') | src/isolate.cc » ('j') | src/objects.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698