mirror of
https://github.com/Sei-Lisa/LSL-PyOptimizer
synced 2025-07-02 08:08:20 +00:00
Fix exception when a global references another without constfold
Fixes #19. Thanks to SaladDais for the report and test case. With constant folding inactive, the dead code removal optimization was removing globals and their symbols when they were e.g. integer constants, without substituting them in other globals. This produced a crash when the output module tried to access said symbols. For example, in this code: ``` integer A = 1; integer B = A; default{timer(){llBreakLink(B);}} ``` the line `integer A = 1` was being removed, as well as the `A` global symbol, but the line `integer B = A` was retained with the missing symbol, and the output module crashed when trying to look up the `A` symbol. Apparently, it wasn't an issue when constant folding was active (which is why it went unnoticed for so long) because the constant folding code sets 'orig' in the symbol table to the original value the variable was being set to, which let the output module know what to output. The fix is to replace the references to deleted symbols with their values in global definitions. In normal code that was already happening.
This commit is contained in:
parent
1df05ed0d7
commit
e62b5ffcb6
4 changed files with 53 additions and 7 deletions
14
unit_tests/regression.suite/issue-19.lsl
Normal file
14
unit_tests/regression.suite/issue-19.lsl
Normal file
|
@ -0,0 +1,14 @@
|
|||
integer FOO=1;
|
||||
integer BAR=FOO;
|
||||
integer BAZ=BAR;
|
||||
|
||||
integer FEZ=2;
|
||||
list L = [1,FEZ];
|
||||
|
||||
integer FUZ=3;
|
||||
|
||||
default {
|
||||
state_entry() {
|
||||
llOwnerSay((string)BAZ+(string)L+(string)FUZ);
|
||||
}
|
||||
}
|
11
unit_tests/regression.suite/issue-19.out
Normal file
11
unit_tests/regression.suite/issue-19.out
Normal file
|
@ -0,0 +1,11 @@
|
|||
integer BAR = 1;
|
||||
integer BAZ = BAR;
|
||||
list L = [1, 2];
|
||||
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
llOwnerSay((string)BAZ + (string)L + (string)3);
|
||||
}
|
||||
}
|
1
unit_tests/regression.suite/issue-19.run
Normal file
1
unit_tests/regression.suite/issue-19.run
Normal file
|
@ -0,0 +1 @@
|
|||
main.py -y -O -constfold -
|
Loading…
Add table
Add a link
Reference in a new issue