◐ Shell
clean mode source ↗

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+209252

TEST(FixedArrayAccessSmiIndex) {

210253

Isolate* isolate(CcTest::InitIsolateOnce());

211254

CodeAssemblerTester asm_tester(isolate);