| Index: src/code-stubs.cc
|
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
|
| index 3a4243dc5b853a8ade75d315d346634fe4af9dab..1a2716360e543f645176b4ef7da97af0afc20770 100644
|
| --- a/src/code-stubs.cc
|
| +++ b/src/code-stubs.cc
|
| @@ -407,6 +407,42 @@ void ICCompareStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +CompareNilICStub::Types CompareNilICStub::GetPatchedICFlags(
|
| + Code::ExtraICState extra_ic_state,
|
| + Handle<Object> object,
|
| + bool* already_monomorphic) {
|
| + Types types = TypesField::decode(extra_ic_state);
|
| + NilValue nil = NilValueField::decode(extra_ic_state);
|
| + EqualityKind kind = EqualityKindField::decode(extra_ic_state);
|
| + ASSERT(types != CompareNilICStub::kFullCompare);
|
| + *already_monomorphic =
|
| + (types & CompareNilICStub::kCompareAgainstMonomorphicMap) != 0;
|
| + if (kind == kStrictEquality) {
|
| + if (nil == kNullValue) {
|
| + return CompareNilICStub::kCompareAgainstNull;
|
| + } else {
|
| + return CompareNilICStub::kCompareAgainstUndefined;
|
| + }
|
| + } else {
|
| + if (object->IsNull()) {
|
| + types = static_cast<CompareNilICStub::Types>(
|
| + types | CompareNilICStub::kCompareAgainstNull);
|
| + } else if (object->IsUndefined()) {
|
| + types = static_cast<CompareNilICStub::Types>(
|
| + types | CompareNilICStub::kCompareAgainstUndefined);
|
| + } else if (object->IsUndetectableObject() || !object->IsHeapObject()) {
|
| + types = CompareNilICStub::kFullCompare;
|
| + } else if ((types & CompareNilICStub::kCompareAgainstMonomorphicMap) != 0) {
|
| + types = CompareNilICStub::kFullCompare;
|
| + } else {
|
| + types = static_cast<CompareNilICStub::Types>(
|
| + types | CompareNilICStub::kCompareAgainstMonomorphicMap);
|
| + }
|
| + }
|
| + return types;
|
| +}
|
| +
|
| +
|
| void InstanceofStub::PrintName(StringStream* stream) {
|
| const char* args = "";
|
| if (HasArgsInRegisters()) {
|
|
|