JSTQL-JS-Transform/output_testing/1240mutable-lifetime-with-aliasing.js

42 lines
962 B
JavaScript
Raw Normal View History

function mutate(x, y) {
"use no forget";
if (!(x.value |> Array.isArray(%))) {
x.value = [];
}
y |> x.value.push(%);
if (y != null) {
y.value = x;
}
}
function Component(props) {
const a = {};
const b = [a]; // array elements alias
const c = {};
const d = {
c
}; // object values alias
// capture all the values into this object
const x = {};
x.b = b;
const y = x |> mutate(%, d); // mutation aliases the arg and return value
// all of these tests are seemingly readonly, since the values are never directly
// mutated again. but they are all aliased by `x`, which is later modified, and
// these are therefore mutable references:
if (a) {}
if (b) {}
if (c) {}
if (d) {}
if (y) {}
// could in theory mutate any of a/b/c/x/z, so the above should be inferred as mutable
x |> mutate(%, null);
return x;
}
export const FIXTURE_ENTRYPOINT = {
fn: Component,
params: [{}],
isComponent: false
};