deps: patch V8 to 6.7.288.46 · nodejs/node@ffc29c1
@@ -206,6 +206,49 @@ TEST(ToUint32) {
206206 ft.CheckThrows(factory->match_symbol());
207207}
208208209+namespace {
210+void IsValidPositiveSmiCase(Isolate* isolate, intptr_t value, bool expected) {
211+const int kNumParams = 0;
212+ CodeAssemblerTester asm_tester(isolate, kNumParams);
213+214+ CodeStubAssembler m(asm_tester.state());
215+ m.Return(
216+ m.SelectBooleanConstant(m.IsValidPositiveSmi(m.IntPtrConstant(value))));
217+218+ FunctionTester ft(asm_tester.GenerateCode(), kNumParams);
219+ MaybeHandle<Object> maybe_handle = ft.Call();
220+221+if (expected) {
222+CHECK(maybe_handle.ToHandleChecked()->IsTrue(isolate));
223+ } else {
224+CHECK(maybe_handle.ToHandleChecked()->IsFalse(isolate));
225+ }
226+}
227+} // namespace
228+229+TEST(IsValidPositiveSmi) {
230+ Isolate* isolate(CcTest::InitIsolateOnce());
231+232+IsValidPositiveSmiCase(isolate, -1, false);
233+IsValidPositiveSmiCase(isolate, 0, true);
234+IsValidPositiveSmiCase(isolate, 1, true);
235+236+#ifdef V8_TARGET_ARCH_32_BIT
237+IsValidPositiveSmiCase(isolate, 0x3FFFFFFFU, true);
238+IsValidPositiveSmiCase(isolate, 0xC0000000U, false);
239+IsValidPositiveSmiCase(isolate, 0x40000000U, false);
240+IsValidPositiveSmiCase(isolate, 0xBFFFFFFFU, false);
241+#else
242+typedef std::numeric_limits<int32_t> int32_limits;
243+IsValidPositiveSmiCase(isolate, int32_limits::max(), true);
244+IsValidPositiveSmiCase(isolate, int32_limits::min(), false);
245+IsValidPositiveSmiCase(isolate,
246+static_cast<intptr_t>(int32_limits::max()) + 1, false);
247+IsValidPositiveSmiCase(isolate,
248+static_cast<intptr_t>(int32_limits::min()) - 1, false);
249+#endif
250+}
251+209252TEST(FixedArrayAccessSmiIndex) {
210253 Isolate* isolate(CcTest::InitIsolateOnce());
211254 CodeAssemblerTester asm_tester(isolate);