git.delta.rocks / jrsonnet / refs/commits / 79bb3812aa6b

difftreelog

fix static analyzer reports hoisting possibility for comp specs

rnykxxzyYaroslav Bolyukin2026-05-14parent: #e1572ba.patch.diff
in: master
This was done on purpose, I wanted to change the message here in the
future so it indicates that it is not the local that is unused, but that
it is possible to extract loop-invariant overs, but decided to implement
this optimization on another level (automatic loop_invariant overs
caching)

8 files changed

addedcrates/jrsonnet-evaluator/src/analysis_tests/issue224.jsonnetdiffbeforeafterboth

no changes

addedcrates/jrsonnet-evaluator/src/analysis_tests/issue224_hoisting.jsonnetdiffbeforeafterboth

no changes

modifiedcrates/jrsonnet-evaluator/src/analyze.rsdiffbeforeafterboth
1959 };1959 };
1960 let mut pending = alloc.finish();1960 let mut pending = alloc.finish();
19611961
1962 let var_analysis = AnalysisResult::default();1962 let mut var_analysis = over_taint;
1963 var_analysis.depend_on_local(pending.stack.depth);
1963 pending.record_spec_init(&l_destruct, var_analysis);1964 pending.record_spec_init(&l_destruct, var_analysis);
19641965
1965 let body_frame = pending.finish();1966 let body_frame = pending.finish();
1998 };1999 };
1999 let mut pending = alloc.finish();2000 let mut pending = alloc.finish();
20002001
2001 let var_analysis = AnalysisResult::default();2002 let mut var_analysis = over_taint;
2003 var_analysis.depend_on_local(pending.stack.depth);
2002 pending.record_spec_init(&LDestruct::Full(key_slot), var_analysis);2004 pending.record_spec_init(&LDestruct::Full(key_slot), var_analysis);
2003 pending.record_spec_init(&l_value, var_analysis);2005 pending.record_spec_init(&l_value, var_analysis);
20042006
addedcrates/jrsonnet-evaluator/src/snapshots/jrsonnet_evaluator__analyze__tests__snapshots@issue224.jsonnet.snapdiffbeforeafterboth

no changes

addedcrates/jrsonnet-evaluator/src/snapshots/jrsonnet_evaluator__analyze__tests__snapshots@issue224_hoisting.jsonnet.snapdiffbeforeafterboth

no changes

modifiedcrates/jrsonnet-evaluator/src/snapshots/jrsonnet_evaluator__analyze__tests__snapshots@loop_invariant.jsonnet.snapdiffbeforeafterboth
1---1---
2source: crates/jrsonnet-evaluator/src/analyze.rs2source: crates/jrsonnet-evaluator/src/analyze.rs
3assertion_line: 2175
4expression: rendered3expression: rendered
5input_file: crates/jrsonnet-evaluator/src/analysis_tests/loop_invariant.jsonnet4input_file: crates/jrsonnet-evaluator/src/analysis_tests/loop_invariant.jsonnet
6---5---
11local_dependent_depth: 010local_dependent_depth: 0
12errored: true11errored: true
13--- diagnostics ---12--- diagnostics ---
14 · ╭──────────────────────────────── undefined local: std13 · ╭──── undefined local: std
15 · │ ╭──── undefined local: std
161 │ [ i < j for i in std.range(1, 1000) for j in std.range(1, 1000)] 141 │ [ i < j for i in std.range(1, 1000) for j in std.range(1, 1000)]
17 · ╰── local could be hoisted to an outer scope: j15 · ╰──── undefined local: std
182 │ 162 │
19--- lir ---17--- lir ---
20ArrComp(18ArrComp(
modifiedtests/go_testdata_golden_override/arrcomp_if4.jsonnet.goldendiffbeforeafterboth
1static analysis errors1static analysis errors
2 arrcomp_if4.jsonnet:1:33 error: undefined local: y2 arrcomp_if4.jsonnet:1:33 error: undefined local: y
3 arrcomp_if4.jsonnet:1:44 warning: local could be hoisted to an outer scope: y
addedtests/golden/issue224.jsonnetdiffbeforeafterboth

no changes