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/v8.h" |
6 | 6 |
7 #include "src/double.h" | 7 #include "src/double.h" |
8 #include "src/factory.h" | 8 #include "src/factory.h" |
9 #include "src/hydrogen-infer-representation.h" | 9 #include "src/hydrogen-infer-representation.h" |
10 #include "src/property-details-inl.h" | 10 #include "src/property-details-inl.h" |
(...skipping 4049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4060 StringAddFlags flags, | 4060 StringAddFlags flags, |
4061 Handle<AllocationSite> allocation_site) { | 4061 Handle<AllocationSite> allocation_site) { |
4062 if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { | 4062 if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { |
4063 HConstant* c_right = HConstant::cast(right); | 4063 HConstant* c_right = HConstant::cast(right); |
4064 HConstant* c_left = HConstant::cast(left); | 4064 HConstant* c_left = HConstant::cast(left); |
4065 if (c_left->HasStringValue() && c_right->HasStringValue()) { | 4065 if (c_left->HasStringValue() && c_right->HasStringValue()) { |
4066 Handle<String> left_string = c_left->StringValue(); | 4066 Handle<String> left_string = c_left->StringValue(); |
4067 Handle<String> right_string = c_right->StringValue(); | 4067 Handle<String> right_string = c_right->StringValue(); |
4068 // Prevent possible exception by invalid string length. | 4068 // Prevent possible exception by invalid string length. |
4069 if (left_string->length() + right_string->length() < String::kMaxLength) { | 4069 if (left_string->length() + right_string->length() < String::kMaxLength) { |
4070 Handle<String> concat = zone->isolate()->factory()->NewFlatConcatString( | 4070 MaybeHandle<String> concat = zone->isolate()->factory()->NewConsString( |
4071 c_left->StringValue(), c_right->StringValue()); | 4071 c_left->StringValue(), c_right->StringValue()); |
4072 ASSERT(!concat.is_null()); | 4072 return HConstant::New(zone, context, concat.ToHandleChecked()); |
4073 return HConstant::New(zone, context, concat); | |
4074 } | 4073 } |
4075 } | 4074 } |
4076 } | 4075 } |
4077 return new(zone) HStringAdd( | 4076 return new(zone) HStringAdd( |
4078 context, left, right, pretenure_flag, flags, allocation_site); | 4077 context, left, right, pretenure_flag, flags, allocation_site); |
4079 } | 4078 } |
4080 | 4079 |
4081 | 4080 |
4082 OStream& HStringAdd::PrintDataTo(OStream& os) const { // NOLINT | 4081 OStream& HStringAdd::PrintDataTo(OStream& os) const { // NOLINT |
4083 if ((flags() & STRING_ADD_CHECK_BOTH) == STRING_ADD_CHECK_BOTH) { | 4082 if ((flags() & STRING_ADD_CHECK_BOTH) == STRING_ADD_CHECK_BOTH) { |
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4772 break; | 4771 break; |
4773 case HObjectAccess::kExternalMemory: | 4772 case HObjectAccess::kExternalMemory: |
4774 os << "[external-memory]"; | 4773 os << "[external-memory]"; |
4775 break; | 4774 break; |
4776 } | 4775 } |
4777 | 4776 |
4778 return os << "@" << access.offset(); | 4777 return os << "@" << access.offset(); |
4779 } | 4778 } |
4780 | 4779 |
4781 } } // namespace v8::internal | 4780 } } // namespace v8::internal |
OLD | NEW |