mirror of
https://github.com/morluto/rea
synced 2026-10-27 14:42:18 -04:00
feat(electron): resolve stable local constant window options
Resolve stable local constant BrowserWindow options with retained provenance and shared early-exit mutation queries. Preserve source ordering and unknown results for relevant mutations or escapes. Includes real Joplin correctness/cost receipts and regression coverage. Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
This commit is contained in:
@@ -571,8 +571,7 @@ const resolvedRequestTarget = (
|
||||
// A toString result is selected before the enclosing request invocation.
|
||||
const expression = unwrapJavaScriptExpression(node).node;
|
||||
const capture = reference === expression ? site : expression;
|
||||
if (referenceMayHaveChangedAtSite(reference, capture, index))
|
||||
return undefined;
|
||||
if (index.referenceMayHaveChangedAt(capture, reference)) return undefined;
|
||||
if (!requestInitializerPrecedesSite(reference, capture, bindings, index))
|
||||
return undefined;
|
||||
const evaluated = evaluateSemanticExpression(node, bindings);
|
||||
@@ -587,9 +586,7 @@ const requestInitializerPrecedesSite = (
|
||||
bindings: JavaScriptSemanticAnalysisState,
|
||||
index: JavaScriptBindingIndex,
|
||||
): boolean => {
|
||||
const effects = index.effectsForReferenceAt(site, reference);
|
||||
if (effects.bindingId === null) return false;
|
||||
const binding = bindings.bindingsById.get(effects.bindingId);
|
||||
const binding = index.bindingForReferenceAt(reference);
|
||||
const initializer = semanticStableInitializer(binding, bindings);
|
||||
return (
|
||||
initializer !== undefined &&
|
||||
@@ -601,19 +598,6 @@ const requestInitializerPrecedesSite = (
|
||||
);
|
||||
};
|
||||
|
||||
const referenceMayHaveChangedAtSite = (
|
||||
reference: t.Node,
|
||||
site: t.Node,
|
||||
index: JavaScriptBindingIndex,
|
||||
): boolean => {
|
||||
const effects = index.effectsForReferenceAt(site, reference);
|
||||
return (
|
||||
!effects.memberEffectsIndexed ||
|
||||
effects.resolution !== "resolved" ||
|
||||
effects.effects.some(({ timing }) => timing !== "after")
|
||||
);
|
||||
};
|
||||
|
||||
const requestReferenceNode = (node: t.Node): t.Node => {
|
||||
const target = unwrapJavaScriptExpression(node).node;
|
||||
if (
|
||||
@@ -652,16 +636,9 @@ const urlObjectRequestTarget = (
|
||||
)
|
||||
target = unwrapJavaScriptExpression(callee.object).node;
|
||||
}
|
||||
if (
|
||||
!t.isIdentifier(target) ||
|
||||
referenceMayHaveChangedAtSite(target, site, index)
|
||||
)
|
||||
if (!t.isIdentifier(target) || index.referenceMayHaveChangedAt(site, target))
|
||||
return undefined;
|
||||
const effects = index.effectsForReferenceAt(site, target);
|
||||
const binding =
|
||||
effects.bindingId === null
|
||||
? undefined
|
||||
: bindings.bindingsById.get(effects.bindingId);
|
||||
const binding = index.bindingForReferenceAt(target);
|
||||
if (binding === undefined || seen.has(binding.bindingId)) return undefined;
|
||||
seen.add(binding.bindingId);
|
||||
const stable = semanticStableInitializer(binding, bindings);
|
||||
|
||||
Reference in New Issue
Block a user