| Index: src/code-stubs.cc
|
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
|
| index e72a43b430dbc331eb256581afa3bda8301ec34b..7b8cc9adbf986954f4439570f3cc8ab31d6f4b5a 100644
|
| --- a/src/code-stubs.cc
|
| +++ b/src/code-stubs.cc
|
| @@ -1586,8 +1586,9 @@ void ToBooleanStub::GenerateAssembly(
|
|
|
| assembler->Bind(&if_valueisnotsmi);
|
| {
|
| - Label if_valueisstring(assembler), if_valueisheapnumber(assembler),
|
| - if_valueisoddball(assembler), if_valueisother(assembler);
|
| + Label if_valueisstring(assembler), if_valueisnotstring(assembler),
|
| + if_valueisheapnumber(assembler), if_valueisoddball(assembler),
|
| + if_valueisother(assembler);
|
|
|
| // The {value} is a HeapObject, load its map.
|
| Node* value_map = assembler->LoadObjectField(value, HeapObject::kMapOffset);
|
| @@ -1599,24 +1600,20 @@ void ToBooleanStub::GenerateAssembly(
|
|
|
| // Dispatch based on the instance type; we distinguish all String instance
|
| // types, the HeapNumber type and the Oddball type.
|
| - size_t const kNumCases = FIRST_NONSTRING_TYPE + 2;
|
| + assembler->Branch(
|
| + assembler->Int32LessThan(
|
| + value_instancetype, assembler->Int32Constant(FIRST_NONSTRING_TYPE)),
|
| + &if_valueisstring, &if_valueisnotstring);
|
| + assembler->Bind(&if_valueisnotstring);
|
| + size_t const kNumCases = 2;
|
| Label* case_labels[kNumCases];
|
| int32_t case_values[kNumCases];
|
| - for (int32_t i = 0; i < FIRST_NONSTRING_TYPE; ++i) {
|
| - case_labels[i] = new Label(assembler);
|
| - case_values[i] = i;
|
| - }
|
| - case_labels[FIRST_NONSTRING_TYPE + 0] = &if_valueisheapnumber;
|
| - case_values[FIRST_NONSTRING_TYPE + 0] = HEAP_NUMBER_TYPE;
|
| - case_labels[FIRST_NONSTRING_TYPE + 1] = &if_valueisoddball;
|
| - case_values[FIRST_NONSTRING_TYPE + 1] = ODDBALL_TYPE;
|
| + case_labels[0] = &if_valueisheapnumber;
|
| + case_values[0] = HEAP_NUMBER_TYPE;
|
| + case_labels[1] = &if_valueisoddball;
|
| + case_values[1] = ODDBALL_TYPE;
|
| assembler->Switch(value_instancetype, &if_valueisother, case_values,
|
| case_labels, arraysize(case_values));
|
| - for (int32_t i = 0; i < FIRST_NONSTRING_TYPE; ++i) {
|
| - assembler->Bind(case_labels[i]);
|
| - assembler->Goto(&if_valueisstring);
|
| - delete case_labels[i];
|
| - }
|
|
|
| assembler->Bind(&if_valueisstring);
|
| {
|
|
|