[be] Consistently use known returnValueKind from signatures
We were using `returnValueKind` from function signatures for CallExpression but not MethodCall; this PR changes to use this signature information for both instruction kinds.
Joe Savona committed
Nov 29, 2023 at 10:46 UTC
b952bc3d87062a6b63080cf26236efa86d32078d
2 files changed
+18
-8
compiler/packages/babel-plugin-react-forget/src/Inference/InferReferenceEffects.ts
+3
-1
@@ -835,6 +835,8 @@ function inferBlock(
835
836
const effects =
837
signature !== null ? getFunctionEffects(instrValue, signature) : null;
838
+ const returnValueKind =
839
+ signature !== null ? signature.returnValueKind : ValueKind.Mutable;
840
for (let i = 0; i < instrValue.args.length; i++) {
841
const arg = instrValue.args[i];
842
const place = arg.kind === "Identifier" ? arg : arg.place;
@@ -854,7 +856,7 @@ function inferBlock(
856
state.reference(instrValue.receiver, Effect.ConditionallyMutate);
857
}
858
857
- state.initialize(instrValue, ValueKind.Mutable);
859
+ state.initialize(instrValue, returnValueKind);
860
state.define(instr.lvalue, instrValue);
861
instr.lvalue.effect = Effect.ConditionallyMutate;
862
continue;
compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/babel-existing-react-namespace-import.expect.md
+15
-7
@@ -27,20 +27,28 @@ import * as React from "react";
27
import { calculateExpensiveNumber } from "shared-runtime";
28
29
function Component(props) {
30
- const $ = useMemoCache(2);
30
+ const $ = useMemoCache(4);
31
const [x] = React.useState(0);
32
let t17;
33
- t17 = calculateExpensiveNumber(x);
34
- const expensiveNumber = t17;
33
let t0;
36
- if ($[0] !== expensiveNumber) {
37
- t0 = <div>{expensiveNumber}</div>;
38
- $[0] = expensiveNumber;
34
+ if ($[0] !== x) {
35
+ t0 = calculateExpensiveNumber(x);
36
+ $[0] = x;
37
$[1] = t0;
38
} else {
39
t0 = $[1];
40
}
43
- return t0;
41
+ t17 = t0;
42
+ const expensiveNumber = t17;
43
+ let t1;
44
+ if ($[2] !== expensiveNumber) {
45
+ t1 = <div>{expensiveNumber}</div>;
46
+ $[2] = expensiveNumber;
47
+ $[3] = t1;
48
+ } else {
49
+ t1 = $[3];
50
+ }
51
+ return t1;
52
}
53
54
export const FIXTURE_ENTRYPOINT = {