MIRType BaselineInspector::expectedResultType(jsbytecode *pc) { // Look at the IC entries for this op to guess what type it will produce, // returning MIRType_None otherwise. ICStub *stub = monomorphicStub(pc); if (!stub) return MIRType_None; switch (stub->kind()) { case ICStub::BinaryArith_Int32: if (stub->toBinaryArith_Int32()->allowDouble()) return MIRType_Double; return MIRType_Int32; case ICStub::BinaryArith_BooleanWithInt32: case ICStub::UnaryArith_Int32: case ICStub::BinaryArith_DoubleWithInt32: return MIRType_Int32; case ICStub::BinaryArith_Double: case ICStub::UnaryArith_Double: return MIRType_Double; case ICStub::BinaryArith_StringConcat: case ICStub::BinaryArith_StringObjectConcat: return MIRType_String; default: return MIRType_None; } }
MIRType BaselineInspector::expectedResultType(jsbytecode* pc) { // Look at the IC entries for this op to guess what type it will produce, // returning MIRType::None otherwise. Note that IonBuilder may call this // for bytecode ops that are unreachable and don't have a Baseline IC, see // comment in monomorphicStub. ICStub* stub = monomorphicStub(pc); if (!stub) return MIRType::None; switch (stub->kind()) { case ICStub::BinaryArith_Int32: if (stub->toBinaryArith_Int32()->allowDouble()) return MIRType::Double; return MIRType::Int32; case ICStub::BinaryArith_BooleanWithInt32: case ICStub::UnaryArith_Int32: case ICStub::BinaryArith_DoubleWithInt32: return MIRType::Int32; case ICStub::BinaryArith_Double: case ICStub::UnaryArith_Double: return MIRType::Double; case ICStub::BinaryArith_StringConcat: case ICStub::BinaryArith_StringObjectConcat: return MIRType::String; default: return MIRType::None; } }