@samitouri / QOS-React-1 / commits / b952bc3d87

[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 = {