From d7dd2cc4ff2dfafb2b5bbcf941acc4a6979e98c8 Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Thu, 5 Jun 2025 22:13:43 -0700 Subject: [PATCH] Update base for Update on "[compiler][newinference] Fixes for transitive function capturing, mutation via property loads" Fixes for a few cases: * If you extract part of a value and mutate the part, that has to count as mutating the whole. See the new fixture, but this also came up with an existing test that has an array whose items are modified via array.map with a lambda that mutates its input. The key change here is preserving the CreateFrom effect (not downgrading to Alias) and then handling CreateFrom specially in range inference. Mutations of values derived from CreateFrom are transitive against the value they came from. We handle this by keeping a queue of not just the places to visit during mutation, but whether to visit them transitively or not. * TODO: we may also want to track whether we've seen a value as transitive or not * For that array.map case w the mutable lambda, we weren't bubbling up the effects correctly so that we knew the param was mutated. Basically we inferred this information and then didn't record it. There is a bit of plumbing here. * Similarly, if a function expression returns a function expression and the inner one mutates context, we weren't propagating that up to the outer function expression. [ghstack-poisoned]