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

Side by Side Diff: src/factory.cc

Issue 1347603002: Make all ExternalStrings bail out JIT code when accessing the sting contents Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 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 | « no previous file | src/objects.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 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 "src/factory.h" 5 #include "src/factory.h"
6 6
7 #include "src/allocation-site-scopes.h" 7 #include "src/allocation-site-scopes.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/conversions.h" 10 #include "src/conversions.h"
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 } 640 }
641 641
642 642
643 MaybeHandle<String> Factory::NewExternalStringFromOneByte( 643 MaybeHandle<String> Factory::NewExternalStringFromOneByte(
644 const ExternalOneByteString::Resource* resource) { 644 const ExternalOneByteString::Resource* resource) {
645 size_t length = resource->length(); 645 size_t length = resource->length();
646 if (length > static_cast<size_t>(String::kMaxLength)) { 646 if (length > static_cast<size_t>(String::kMaxLength)) {
647 THROW_NEW_ERROR(isolate(), NewInvalidStringLengthError(), String); 647 THROW_NEW_ERROR(isolate(), NewInvalidStringLengthError(), String);
648 } 648 }
649 649
650 Handle<Map> map = external_one_byte_string_map(); 650 Handle<Map> map = short_external_one_byte_string_map();
651 Handle<ExternalOneByteString> external_string = 651 Handle<ExternalOneByteString> external_string =
652 New<ExternalOneByteString>(map, NEW_SPACE); 652 New<ExternalOneByteString>(map, NEW_SPACE);
653 external_string->set_length(static_cast<int>(length)); 653 external_string->set_length(static_cast<int>(length));
654 external_string->set_hash_field(String::kEmptyHashField); 654 external_string->set_hash_field(String::kEmptyHashField);
655 external_string->set_resource(resource); 655 external_string->set_resource(resource);
656 656
657 return external_string; 657 return external_string;
658 } 658 }
659 659
660 660
661 MaybeHandle<String> Factory::NewExternalStringFromTwoByte( 661 MaybeHandle<String> Factory::NewExternalStringFromTwoByte(
662 const ExternalTwoByteString::Resource* resource) { 662 const ExternalTwoByteString::Resource* resource) {
663 size_t length = resource->length(); 663 size_t length = resource->length();
664 if (length > static_cast<size_t>(String::kMaxLength)) { 664 if (length > static_cast<size_t>(String::kMaxLength)) {
665 THROW_NEW_ERROR(isolate(), NewInvalidStringLengthError(), String); 665 THROW_NEW_ERROR(isolate(), NewInvalidStringLengthError(), String);
666 } 666 }
667 667
668 // For small strings we check whether the resource contains only 668 // For small strings we check whether the resource contains only
669 // one byte characters. If yes, we use a different string map. 669 // one byte characters. If yes, we use a different string map.
670 static const size_t kOneByteCheckLengthLimit = 32; 670 static const size_t kOneByteCheckLengthLimit = 32;
671 bool is_one_byte = length <= kOneByteCheckLengthLimit && 671 bool is_one_byte = length <= kOneByteCheckLengthLimit &&
672 String::IsOneByte(resource->data(), static_cast<int>(length)); 672 String::IsOneByte(resource->data(), static_cast<int>(length));
673 Handle<Map> map = is_one_byte ? 673 Handle<Map> map = is_one_byte ?
674 external_string_with_one_byte_data_map() : external_string_map(); 674 short_external_string_with_one_byte_data_map()
675 : short_external_string_map();
675 Handle<ExternalTwoByteString> external_string = 676 Handle<ExternalTwoByteString> external_string =
676 New<ExternalTwoByteString>(map, NEW_SPACE); 677 New<ExternalTwoByteString>(map, NEW_SPACE);
677 external_string->set_length(static_cast<int>(length)); 678 external_string->set_length(static_cast<int>(length));
678 external_string->set_hash_field(String::kEmptyHashField); 679 external_string->set_hash_field(String::kEmptyHashField);
679 external_string->set_resource(resource); 680 external_string->set_resource(resource);
680 681
681 return external_string; 682 return external_string;
682 } 683 }
683 684
684 685
(...skipping 1676 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 } 2362 }
2362 2363
2363 2364
2364 Handle<Object> Factory::ToBoolean(bool value) { 2365 Handle<Object> Factory::ToBoolean(bool value) {
2365 return value ? true_value() : false_value(); 2366 return value ? true_value() : false_value();
2366 } 2367 }
2367 2368
2368 2369
2369 } // namespace internal 2370 } // namespace internal
2370 } // namespace v8 2371 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698