Chromium Code Reviews| Index: src/hydrogen.cc |
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
| index 50e3b2124df60ddc29331f0d9d4feb8f753c6a54..d282742a60dabecc3fd393aef3f8899f0e45c61d 100644 |
| --- a/src/hydrogen.cc |
| +++ b/src/hydrogen.cc |
| @@ -10488,16 +10488,21 @@ HValue* HGraphBuilder::BuildBinaryOperation( |
| return AddUncasted<HInvokeFunction>(function, 2); |
| } |
| - // Fast path for empty constant strings. |
| - if (left->IsConstant() && |
| - HConstant::cast(left)->HasStringValue() && |
| - HConstant::cast(left)->StringValue()->length() == 0) { |
| - return right; |
| - } |
| - if (right->IsConstant() && |
| - HConstant::cast(right)->HasStringValue() && |
| - HConstant::cast(right)->StringValue()->length() == 0) { |
| - return left; |
| + // Fast paths for empty constant strings. |
| + Handle<String> left_string = |
| + left->IsConstant() && HConstant::cast(left)->HasStringValue() |
| + ? HConstant::cast(left)->StringValue() |
| + : Handle<String>(); |
| + Handle<String> right_string = |
| + left->IsConstant() && HConstant::cast(right)->HasStringValue() |
|
Vyacheslav Egorov (Google)
2015/02/20 15:10:17
one left is still here :)
|
| + ? HConstant::cast(right)->StringValue() |
| + : Handle<String>(); |
| + if (!left_string.is_null() && left_string->length() == 0) return right; |
| + if (!right_string.is_null() && right_string->length() == 0) return left; |
| + if (!left_string.is_null() && !right_string.is_null()) { |
| + return AddUncasted<HStringAdd>( |
| + left, right, allocation_mode.GetPretenureMode(), |
| + STRING_ADD_CHECK_NONE, allocation_mode.feedback_site()); |
| } |
| // Register the dependent code with the allocation site. |