Skip to content

Commit e160dbd

Browse files
committed
hopefully fix lints
1 parent af1b69d commit e160dbd

File tree

5 files changed

+53
-36
lines changed

5 files changed

+53
-36
lines changed

nova_vm/src/ecmascript/abstract_operations/testing_and_comparison.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -366,23 +366,28 @@ pub(crate) fn is_less_than<'a, const LEFT_FIRST: bool>(
366366
let (px, py, gc) = match (Primitive::try_from(x.into()), Primitive::try_from(y.into())) {
367367
(Ok(px), Ok(py)) => {
368368
let gc = gc.into_nogc();
369-
(px.bind(gc), py.bind(gc), gc)
369+
let px = px.bind(gc);
370+
let py = py.bind(gc);
371+
(px, py, gc)
370372
}
371373
(Ok(px), Err(_)) => {
372374
let px = px.scope(agent, gc.nogc());
373375
let py = to_primitive(agent, y.into(), Some(PreferredType::Number), gc.reborrow())
374376
.unbind()?;
375377
let gc = gc.into_nogc();
376-
let px = px.get(agent);
377-
(px.bind(gc), py.bind(gc), gc)
378+
let px = px.get(agent).bind(gc);
379+
let py = py.bind(gc);
380+
(px, py, gc)
378381
}
379382
(Err(_), Ok(py)) => {
380383
let py = py.scope(agent, gc.nogc());
381384
let px = to_primitive(agent, x.into(), Some(PreferredType::Number), gc.reborrow())
382385
.unbind()?;
383386
let gc = gc.into_nogc();
384-
let py = py.get(agent);
385-
(px.bind(gc), py.bind(gc), gc)
387+
let px = px.bind(gc);
388+
// SAFETY: not shared.
389+
let py = unsafe { py.take(agent) }.bind(gc);
390+
(px, py, gc)
386391
}
387392
(Err(_), Err(_)) => {
388393
if LEFT_FIRST {
@@ -393,17 +398,22 @@ pub(crate) fn is_less_than<'a, const LEFT_FIRST: bool>(
393398
let y = y.scope(agent, gc.nogc());
394399
let px = to_primitive(agent, x.into(), Some(PreferredType::Number), gc.reborrow())
395400
.unbind()?
396-
.scope(agent, gc.nogc());
401+
.bind(gc.nogc());
402+
let py = y.get(agent).bind(gc.nogc());
403+
// SAFETY: not shared.
404+
let px = unsafe { y.replace_self(agent, px.unbind()) };
397405
let py = to_primitive(
398406
agent,
399-
y.get(agent),
407+
py.unbind(),
400408
Some(PreferredType::Number),
401409
gc.reborrow(),
402410
)
403411
.unbind()?;
404412
let gc = gc.into_nogc();
405-
let px = px.get(agent);
406-
(px.bind(gc), py.bind(gc), gc)
413+
// SAFETY: not shared.
414+
let px = unsafe { px.take(agent) }.bind(gc);
415+
let py = py.bind(gc);
416+
(px, py, gc)
407417
} else {
408418
// 2. Else,
409419
// a. NOTE: The order of evaluation needs to be reversed to preserve left to right evaluation.
@@ -413,17 +423,21 @@ pub(crate) fn is_less_than<'a, const LEFT_FIRST: bool>(
413423
let x = x.scope(agent, gc.nogc());
414424
let py = to_primitive(agent, y.into(), Some(PreferredType::Number), gc.reborrow())
415425
.unbind()?
416-
.scope(agent, gc.nogc());
426+
.bind(gc.nogc());
427+
let px = x.get(agent).bind(gc.nogc());
428+
// SAFETY: not shared.
429+
let py = unsafe { x.replace_self(agent, py.unbind()) };
417430
let px = to_primitive(
418431
agent,
419-
x.get(agent),
432+
px.unbind(),
420433
Some(PreferredType::Number),
421434
gc.reborrow(),
422435
)
423436
.unbind()?;
424437
let gc = gc.into_nogc();
425-
let py = py.get(agent);
426-
(px.bind(gc), py.bind(gc), gc)
438+
let px = px.bind(gc);
439+
let py = unsafe { py.take(agent) }.bind(gc);
440+
(px, py, gc)
427441
}
428442
}
429443
};

nova_vm/src/ecmascript/builtins/indexed_collections/array_objects/array_prototype.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3791,16 +3791,18 @@ impl ArrayPrototype {
37913791
// d. Set i to i + 1.
37923792
i += 1;
37933793
}
3794+
let local_a = scoped_a.get(agent).bind(gc.nogc());
37943795
// 17. For each element E of items, do
37953796
for e in items {
37963797
// a. Let Pi be ! ToString(𝔽(i)).
37973798
let pi = i.try_into().unwrap();
37983799
// b. Perform ! CreateDataPropertyOrThrow(A, Pi, E).
37993800
unwrap_try(try_create_data_property_or_throw(
38003801
agent,
3801-
scoped_a.get(agent),
3802+
local_a,
38023803
pi,
3803-
e.get(agent).unbind(),
3804+
// SAFETY: not shared.
3805+
unsafe { e.take(agent) },
38043806
None,
38053807
gc.nogc(),
38063808
));
@@ -3831,9 +3833,9 @@ impl ArrayPrototype {
38313833
// f. Set r to r + 1.
38323834
r += 1;
38333835
}
3834-
let a = scoped_a.get(agent);
38353836
// 19. Return A.
3836-
Ok(a.into_value())
3837+
// SAFETY: not shared.
3838+
Ok(unsafe { scoped_a.take(agent) }.into_value())
38373839
}
38383840

38393841
/// ### [23.1.3.36 Array.prototype.toString ( )](https://tc39.es/ecma262/#sec-array.prototype.tostring)

nova_vm/src/ecmascript/builtins/indexed_collections/typed_array_objects/typed_array_intrinsic_object.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ impl TypedArrayIntrinsicObject {
301301
// f. Set k to k + 1.
302302
k += 1;
303303
}
304-
let target_obj = scoped_target_obj.get(agent);
305-
Ok(target_obj.into_value())
304+
// SAFETY: not shared.
305+
Ok(unsafe { scoped_target_obj.take(agent) }.into_value())
306306
}
307307

308308
/// ### [23.2.2.2 %TypedArray%.of ( ...items )](https://tc39.es/ecma262/multipage/indexed-collections.html#sec-properties-of-the-%typedarray%-intrinsic-object)

nova_vm/src/ecmascript/builtins/ordinary.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -916,8 +916,8 @@ pub(crate) fn ordinary_get<'gc>(
916916
let object = object.bind(gc.nogc());
917917
let property_key = property_key.bind(gc.nogc());
918918
// Note: We scope here because it's likely we've already tried.
919-
let scoped_object = object.scope(agent, gc.nogc());
920919
let scoped_property_key = property_key.scope(agent, gc.nogc());
920+
let scoped_object = object.scope(agent, gc.nogc());
921921
// 1. Let desc be ? O.[[GetOwnProperty]](P).
922922
let Some(descriptor) = object
923923
.unbind()
@@ -928,17 +928,16 @@ pub(crate) fn ordinary_get<'gc>(
928928
// 2. If desc is undefined, then
929929

930930
// a. Let parent be ? O.[[GetPrototypeOf]]().
931-
let object = scoped_object.get(agent).bind(gc.nogc());
931+
// SAFETY: not shared.
932+
let object = unsafe { scoped_object.take(agent) }.bind(gc.nogc());
932933
let (parent, property_key, receiver) =
933934
if let TryResult::Continue(parent) = object.try_get_prototype_of(agent, gc.nogc()) {
934935
let Some(parent) = parent else {
935936
return Ok(Value::Undefined);
936937
};
937-
(
938-
parent,
939-
scoped_property_key.get(agent).bind(gc.nogc()),
940-
receiver,
941-
)
938+
// SAFETY: not shared.
939+
let property_key = unsafe { scoped_property_key.take(agent) }.bind(gc.nogc());
940+
(parent, property_key, receiver)
942941
} else {
943942
// Note: We should root property_key and receiver here.
944943
let receiver = receiver.scope(agent, gc.nogc());
@@ -951,18 +950,17 @@ pub(crate) fn ordinary_get<'gc>(
951950
return Ok(Value::Undefined);
952951
};
953952
let parent = parent.unbind().bind(gc.nogc());
954-
let receiver = receiver.get(agent);
955-
(
956-
parent,
957-
scoped_property_key.get(agent).bind(gc.nogc()),
958-
receiver,
959-
)
953+
// SAFETY: not shared.
954+
let receiver = unsafe { receiver.take(agent) }.bind(gc.nogc());
955+
// SAFETY: not shared.
956+
let property_key = unsafe { scoped_property_key.take(agent) }.bind(gc.nogc());
957+
(parent, property_key, receiver)
960958
};
961959

962960
// c. Return ? parent.[[Get]](P, Receiver).
963961
return parent
964962
.unbind()
965-
.internal_get(agent, property_key.unbind(), receiver, gc);
963+
.internal_get(agent, property_key.unbind(), receiver.unbind(), gc);
966964
};
967965

968966
// 3. If IsDataDescriptor(desc) is true, return desc.[[Value]].

nova_vm/src/ecmascript/execution/environments/global_environment.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -607,14 +607,17 @@ impl<'e> GlobalEnvironment<'e> {
607607
.unbind()
608608
.delete_binding(agent, scoped_name.get(agent), gc.reborrow())
609609
.unbind()?;
610-
let env = unsafe { env.take(agent) }.bind(gc.nogc());
610+
let gc = gc.into_nogc();
611+
// SAFETY: not shared.
612+
let env = unsafe { env.take(agent) }.bind(gc);
611613
// b. If status is true and envRec.[[VarNames]] contains N, then
612614
if status {
613-
let name = scoped_name.get(agent);
615+
// SAFETY: not shared.
616+
let name = unsafe { scoped_name.take(agent) }.bind(gc);
614617
let env_rec = &mut agent[env];
615618
if env_rec.var_names.contains(&name) {
616619
// i. Remove N from envRec.[[VarNames]].
617-
env_rec.var_names.remove(&name);
620+
env_rec.var_names.remove(&name.unbind());
618621
}
619622
}
620623
// c. Return status.

0 commit comments

Comments
 (0)