Skip to content

Commit 92b9eef

Browse files
SamChou19815meta-codesync[bot]
authored andcommitted
[flow][oxidation] Fix .desc(false) that should be .desc(true) according to original ocaml code
Summary: Found the issue while debugging the prev issue fixed the previous diff. Changelog: [internal] Reviewed By: gkz Differential Revision: D98638106 fbshipit-source-id: 5a24ff577d78976fced4d1d89e289f1b1671de84
1 parent a7076f2 commit 92b9eef

File tree

11 files changed

+30
-33
lines changed

11 files changed

+30
-33
lines changed

rust_port/crates/flow_typing_flow_common/src/flow_js_utils.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5985,9 +5985,7 @@ pub fn objt_to_obj_rest<'cx>(
59855985
props.remove(&Name::new(x.dupe()));
59865986
}
59875987
let use_op: UseOp = VirtualUseOp::Op(std::sync::Arc::new(VirtualRootUseOp::ObjectRest {
5988-
op: reason_op
5989-
.dupe()
5990-
.replace_desc(reason_obj.desc(false).clone()),
5988+
op: reason_op.dupe().replace_desc(reason_obj.desc(true).clone()),
59915989
}));
59925990

59935991
let props = {

rust_port/crates/flow_typing_flow_common/src/instantiation_utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ pub mod implicit_type_argument {
4848
let loc_op = reason_op.loc().dupe();
4949
let desc = VirtualReasonDesc::RTypeParam(Box::new((
5050
typeparam.name.dupe(),
51-
(Arc::new(reason_op.desc(false).clone()), loc_op.dupe()),
51+
(Arc::new(reason_op.desc(true).clone()), loc_op.dupe()),
5252
(
53-
Arc::new(reason_tapp.desc(false).clone()),
53+
Arc::new(reason_tapp.desc(true).clone()),
5454
reason_tapp.def_loc().dupe(),
5555
),
5656
)));
@@ -65,7 +65,7 @@ pub mod implicit_type_argument {
6565
pub fn abstract_targ(tvar: &Type) -> Option<Type> {
6666
let tvar_inner = open_tvar(tvar);
6767
let reason = tvar_inner.reason();
68-
let desc = reason.desc(false).clone();
68+
let desc = reason.desc(true).clone();
6969
match &desc {
7070
VirtualReasonDesc::RTypeParam(box (_, _, _)) => {
7171
let reason = locationless_reason(desc);

rust_port/crates/flow_typing_flow_js/src/flow_js/dispatch.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ fn __flow_impl<'cx>(
568568
// TODO: directly derive loc and desc from the reason of tvar
569569
let loc = r.loc().dupe();
570570
let desc = if *use_desc {
571-
Some(r.desc(false).clone())
571+
Some(r.desc(true).clone())
572572
} else {
573573
None
574574
};
@@ -604,7 +604,7 @@ fn __flow_impl<'cx>(
604604
let annot_loc = reason.annot_loc().map(|l| l.dupe());
605605
let r = r.dupe().reposition(loc.dupe()).opt_annotate(annot_loc);
606606
let r = if *use_desc {
607-
r.replace_desc(reason.desc(false).clone())
607+
r.replace_desc(reason.desc(true).clone())
608608
} else {
609609
r
610610
};
@@ -628,7 +628,7 @@ fn __flow_impl<'cx>(
628628
let annot_loc = reason.annot_loc().map(|l| l.dupe());
629629
let r = r.dupe().reposition(loc.dupe()).opt_annotate(annot_loc);
630630
let r = if *use_desc {
631-
r.replace_desc(reason.desc(false).clone())
631+
r.replace_desc(reason.desc(true).clone())
632632
} else {
633633
r
634634
};
@@ -657,7 +657,7 @@ fn __flow_impl<'cx>(
657657
let annot_loc = reason.annot_loc().map(|l| l.dupe());
658658
let r = r.dupe().reposition(loc.dupe()).opt_annotate(annot_loc);
659659
let r = if *use_desc {
660-
r.replace_desc(reason.desc(false).clone())
660+
r.replace_desc(reason.desc(true).clone())
661661
} else {
662662
r
663663
};
@@ -694,7 +694,7 @@ fn __flow_impl<'cx>(
694694
let annot_loc = reason.annot_loc().map(|l| l.dupe());
695695
let r = r.dupe().reposition(loc.dupe()).opt_annotate(annot_loc);
696696
let r = if *use_desc {
697-
r.replace_desc(reason.desc(false).clone())
697+
r.replace_desc(reason.desc(true).clone())
698698
} else {
699699
r
700700
};
@@ -1748,7 +1748,7 @@ fn __flow_impl<'cx>(
17481748
// reposition the entire maybe type. *)
17491749
let loc = reason_op.loc().dupe();
17501750
let desc = if *use_desc {
1751-
Some(reason_op.desc(false).clone())
1751+
Some(reason_op.desc(true).clone())
17521752
} else {
17531753
None
17541754
};

rust_port/crates/flow_typing_flow_js/src/flow_js/multi_arg_helpers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ pub(super) fn multiflow_partial<'cx>(
310310
let arg_array_reason = reason_op
311311
.dupe()
312312
.replace_desc(VirtualReasonDesc::RRestArrayLit(Arc::new(
313-
reason_op.desc(false).clone(),
313+
reason_op.desc(true).clone(),
314314
)));
315315
let arg_array = {
316316
let arg_array_reason2 = arg_array_reason.dupe();

rust_port/crates/flow_typing_flow_js/src/natural_inference.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ fn is_literal_union(r: &Reason, rep: &union_rep::UnionRep) -> bool {
132132
| UnionKind::ImplicitInstantiationKind
133133
| UnionKind::LogicalKind => true,
134134
UnionKind::ProvidersKind | UnionKind::ResolvedKind | UnionKind::UnknownKind => {
135-
match r.desc(false) {
135+
match r.desc(true) {
136136
VirtualReasonDesc::RInferredUnionElemArray { .. } => true,
137137
_ => false,
138138
}
@@ -279,7 +279,7 @@ fn literal_type_mapper_type_dispatch<'cx>(
279279
TypeInner::DefT(r, def_t)
280280
if matches!(def_t.deref(), DefTInner::ArrT(_)) && is_literal_array_reason(r) =>
281281
{
282-
let t = if matches!(r.desc(false), VirtualReasonDesc::RArrayLitUnsound) {
282+
let t = if matches!(r.desc(true), VirtualReasonDesc::RArrayLitUnsound) {
283283
mod_reason_of_t(&|r| r.replace_desc_new(VirtualReasonDesc::RArrayLit), t)
284284
} else {
285285
t.dupe()
@@ -289,7 +289,7 @@ fn literal_type_mapper_type_dispatch<'cx>(
289289
TypeInner::DefT(r, def_t)
290290
if matches!(def_t.deref(), DefTInner::ObjT(_)) && is_literal_object_reason(r) =>
291291
{
292-
let t = if matches!(r.desc(false), VirtualReasonDesc::RObjectLitUnsound) {
292+
let t = if matches!(r.desc(true), VirtualReasonDesc::RObjectLitUnsound) {
293293
mod_reason_of_t(&|r| r.replace_desc_new(VirtualReasonDesc::RObjectLit), t)
294294
} else {
295295
t.dupe()

rust_port/crates/flow_typing_flow_js/src/slice_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ pub fn type_optionality_and_missing_property(prop: &object::Prop) -> (Type, bool
199199
use_desc,
200200
} => {
201201
let is_missing_property_desc = matches!(
202-
reason.desc(false),
202+
reason.desc(true),
203203
VirtualReasonDesc::RPossiblyMissingPropFromObj(..)
204204
);
205205
(t.dupe(), true, *use_desc && is_missing_property_desc)

rust_port/crates/flow_typing_flow_js/src/subtyping_kit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1208,7 +1208,7 @@ fn flow_obj_to_obj<'cx>(
12081208
ObjKind::Inexact => {
12091209
let r = flow_common::reason::mk_reason(
12101210
VirtualReasonDesc::RUnknownUnspecifiedProperty(Arc::new(
1211-
lreason.desc(false).clone(),
1211+
lreason.desc(true).clone(),
12121212
)),
12131213
lreason.loc().dupe(),
12141214
);

rust_port/crates/flow_typing_statement/src/statement.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10450,8 +10450,8 @@ fn binary<'a>(
1045010450
let t2 = right_ast.loc().1.dupe();
1045110451
let desc = RBinaryOperator(Box::new((
1045210452
FlowSmolStr::from("arithmetic operation"),
10453-
Arc::new(reason_of_t(&t1).desc(false).clone()),
10454-
Arc::new(reason_of_t(&t2).desc(false).clone()),
10453+
Arc::new(reason_of_t(&t1).desc(true).clone()),
10454+
Arc::new(reason_of_t(&t2).desc(true).clone()),
1045510455
)));
1045610456
let reason = mk_reason(desc, loc.dupe());
1045710457
let arith_kind = type_::arith_kind::ArithKind::of_binary_operator(expr.operator);
@@ -10884,7 +10884,7 @@ fn assign_member<'a>(
1088410884
|cx, prop_t| {
1088510885
let use_op = make_op(
1088610886
reason.dupe(),
10887-
mk_reason(lhs_prop_reason.desc(false).clone(), prop_loc.dupe()),
10887+
mk_reason(lhs_prop_reason.desc(true).clone(), prop_loc.dupe()),
1088810888
);
1088910889
flow_js::flow_non_speculating(
1089010890
cx,
@@ -10951,7 +10951,7 @@ fn assign_member<'a>(
1095110951
tvar_resolver::mk_tvar_and_fully_resolve_where(cx, prop_reason, |_cx, prop_t| {
1095210952
let use_op = make_op(
1095310953
reason.dupe(),
10954-
mk_reason(lhs_prop_reason.desc(false).clone(), prop_loc.dupe()),
10954+
mk_reason(lhs_prop_reason.desc(true).clone(), prop_loc.dupe()),
1095510955
);
1095610956
run_maybe_optional_chain(
1095710957
&o,
@@ -11013,7 +11013,7 @@ fn assign_member<'a>(
1101311013
|_cx, prop_t| {
1101411014
let use_op = make_op(
1101511015
reason.dupe(),
11016-
mk_reason(lhs_prop_reason.desc(false).clone(), prop_loc.dupe()),
11016+
mk_reason(lhs_prop_reason.desc(true).clone(), prop_loc.dupe()),
1101711017
);
1101811018
run_maybe_optional_chain(
1101911019
&o,
@@ -11088,7 +11088,7 @@ fn assign_member<'a>(
1108811088
let i = typed_index.loc().1.dupe();
1108911089
let use_op = make_op(
1109011090
reason.dupe(),
11091-
mk_reason(lhs_prop_reason.desc(false).clone(), iloc.dupe()),
11091+
mk_reason(lhs_prop_reason.desc(true).clone(), iloc.dupe()),
1109211092
);
1109311093
run_maybe_optional_chain(
1109411094
&o,
@@ -14892,7 +14892,7 @@ pub fn mk_class_sig<'a>(
1489214892
Type::new(TypeInner::OptionalT {
1489314893
reason: mk_reason(
1489414894
VirtualReasonDesc::ROptional(
14895-
Arc::new(field_reason.desc(false).clone()),
14895+
Arc::new(field_reason.desc(true).clone()),
1489614896
),
1489714897
id_loc.dupe(),
1489814898
),
@@ -16363,7 +16363,7 @@ pub fn mk_record_sig<'a>(
1636316363
Type::new(TypeInner::OptionalT {
1636416364
reason: mk_reason(
1636516365
VirtualReasonDesc::ROptional(Arc::new(
16366-
field_reason.desc(false).clone(),
16366+
field_reason.desc(true).clone(),
1636716367
)),
1636816368
key_loc.dupe(),
1636916369
),

rust_port/crates/flow_typing_statement/src/type_annotation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3533,7 +3533,7 @@ fn convert_render_type_inner<'a>(
35333533
env.in_renders_arg = old_in_renders_arg;
35343534
let (_, t) = t_ast.loc();
35353535
let t = t.dupe();
3536-
let arg_desc = Arc::new(type_util::reason_of_t(&t).desc(false).clone());
3536+
let arg_desc = Arc::new(type_util::reason_of_t(&t).desc(true).clone());
35373537
let reason_desc = match renders.variant {
35383538
ast::types::RendersVariant::Normal => reason::VirtualReasonDesc::RRenderType(arg_desc),
35393539
ast::types::RendersVariant::Maybe => reason::VirtualReasonDesc::RRenderMaybeType(arg_desc),

rust_port/crates/flow_typing_type/src/type_util.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,9 +2243,9 @@ pub fn typeof_annotation(reason: Reason, t: Type, targs: Option<Vec<Type>>) -> T
22432243
use flow_common::reason::mk_annot_reason;
22442244

22452245
let annot_loc = reason.loc().dupe();
2246-
let desc_for_tapp = reason.desc(false).clone();
2246+
let desc_for_tapp = reason.desc(true).clone();
22472247
let t_annot = Type::new(TypeInner::AnnotT(
2248-
reason.opt_annotate(Some(annot_loc.dupe())),
2248+
reason.dupe().opt_annotate(Some(annot_loc.dupe())),
22492249
t,
22502250
false,
22512251
));
@@ -2254,9 +2254,8 @@ pub fn typeof_annotation(reason: Reason, t: Type, targs: Option<Vec<Type>>) -> T
22542254
Some(targs) => {
22552255
let desc = flow_common::reason::VirtualReasonDesc::RTypeApp(Arc::new(desc_for_tapp));
22562256
let reason_tapp = mk_annot_reason(desc, annot_loc.dupe());
2257-
let reason_for_app = mk_reason(reason_tapp.desc(false).clone(), annot_loc);
22582257
let use_op = UseOp::Op(Arc::new(RootUseOp::TypeApplication { type_: reason_tapp }));
2259-
typeapp_with_use_op(true, false, reason_for_app, use_op, t_annot, targs)
2258+
typeapp_with_use_op(true, false, reason, use_op, t_annot, targs)
22602259
}
22612260
}
22622261
}

0 commit comments

Comments
 (0)