| Index: src/code-stubs.h
|
| diff --git a/src/code-stubs.h b/src/code-stubs.h
|
| index 4f3020ed5d411af61ed2529151c0e1a37eccad17..ce4e94451448fe2cd831edd0ce6b1b83d7a44918 100644
|
| --- a/src/code-stubs.h
|
| +++ b/src/code-stubs.h
|
| @@ -95,12 +95,13 @@ namespace internal {
|
| V(StoreGlobalViaContext) \
|
| V(StoreScriptContextField) \
|
| V(StringAdd) \
|
| - V(ToBoolean) \
|
| + V(ToBooleanIC) \
|
| V(TransitionElementsKind) \
|
| V(KeyedLoadIC) \
|
| V(LoadIC) \
|
| /* TurboFanCodeStubs */ \
|
| V(StringLength) \
|
| + V(ToBoolean) \
|
| /* IC Handler stubs */ \
|
| V(ArrayBufferViewLoadField) \
|
| V(LoadConstant) \
|
| @@ -630,6 +631,15 @@ class StringLengthStub : public TurboFanCodeStub {
|
| DEFINE_CODE_STUB(StringLength, TurboFanCodeStub);
|
| };
|
|
|
| +class ToBooleanStub final : public TurboFanCodeStub {
|
| + public:
|
| + explicit ToBooleanStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
|
| +
|
| + void GenerateAssembly(compiler::CodeStubAssembler* assembler) const final;
|
| +
|
| + DEFINE_CALL_INTERFACE_DESCRIPTOR(ToBoolean);
|
| + DEFINE_CODE_STUB(ToBoolean, TurboFanCodeStub);
|
| +};
|
|
|
| enum StringAddFlags {
|
| // Omit both parameter checks.
|
| @@ -2636,8 +2646,7 @@ class StoreElementStub : public PlatformCodeStub {
|
| DEFINE_PLATFORM_CODE_STUB(StoreElement, PlatformCodeStub);
|
| };
|
|
|
| -
|
| -class ToBooleanStub: public HydrogenCodeStub {
|
| +class ToBooleanICStub : public HydrogenCodeStub {
|
| public:
|
| enum Type {
|
| UNDEFINED,
|
| @@ -2664,14 +2673,14 @@ class ToBooleanStub: public HydrogenCodeStub {
|
| bool UpdateStatus(Handle<Object> object);
|
| bool NeedsMap() const;
|
| bool CanBeUndetectable() const {
|
| - return Contains(ToBooleanStub::SPEC_OBJECT);
|
| + return Contains(ToBooleanICStub::SPEC_OBJECT);
|
| }
|
| bool IsGeneric() const { return ToIntegral() == Generic().ToIntegral(); }
|
|
|
| static Types Generic() { return Types((1 << NUMBER_OF_TYPES) - 1); }
|
| };
|
|
|
| - ToBooleanStub(Isolate* isolate, ExtraICState state)
|
| + ToBooleanICStub(Isolate* isolate, ExtraICState state)
|
| : HydrogenCodeStub(isolate) {
|
| set_sub_minor_key(TypesBits::encode(static_cast<uint16_t>(state)));
|
| }
|
| @@ -2685,7 +2694,7 @@ class ToBooleanStub: public HydrogenCodeStub {
|
| bool SometimesSetsUpAFrame() override { return false; }
|
|
|
| static Handle<Code> GetUninitialized(Isolate* isolate) {
|
| - return ToBooleanStub(isolate, UNINITIALIZED).GetCode();
|
| + return ToBooleanICStub(isolate, UNINITIALIZED).GetCode();
|
| }
|
|
|
| ExtraICState GetExtraICState() const override { return types().ToIntegral(); }
|
| @@ -2699,19 +2708,16 @@ class ToBooleanStub: public HydrogenCodeStub {
|
| }
|
|
|
| private:
|
| - ToBooleanStub(Isolate* isolate, InitializationState init_state)
|
| - : HydrogenCodeStub(isolate, init_state) {
|
| - }
|
| + ToBooleanICStub(Isolate* isolate, InitializationState init_state)
|
| + : HydrogenCodeStub(isolate, init_state) {}
|
|
|
| class TypesBits : public BitField<uint16_t, 0, NUMBER_OF_TYPES> {};
|
|
|
| DEFINE_CALL_INTERFACE_DESCRIPTOR(ToBoolean);
|
| - DEFINE_HYDROGEN_CODE_STUB(ToBoolean, HydrogenCodeStub);
|
| + DEFINE_HYDROGEN_CODE_STUB(ToBooleanIC, HydrogenCodeStub);
|
| };
|
|
|
| -
|
| -std::ostream& operator<<(std::ostream& os, const ToBooleanStub::Types& t);
|
| -
|
| +std::ostream& operator<<(std::ostream& os, const ToBooleanICStub::Types& t);
|
|
|
| class ElementsTransitionAndStoreStub : public HydrogenCodeStub {
|
| public:
|
|
|