I encountered this Mono vs LSL VM discrepancy while trying to use AVSitter compiled to the LSL VM (offsets would fail to work due to how lists are handled in sitA)
Here is a sample script that breaks on LSL VM but works on Mono:
default {
state_entry()
{
list vectors = [<1,0,1>,<0,-0.192,2.479>];
vectors = [(vector)llList2String(vectors, 0),(vector)llList2String(vectors, 1)]; // <--- does not work in lsl vm
llSay(0,"LSL VM TEST VECTOR PARSE: " + (string)((vector)llList2String(vectors, 1)));
}
}
This pattern breaks compatibility due to the self-referenced assignment, the vectors array becomes [<0,0,0>, <0,0,0>] instead of keeping the same values [<1,0,1>,<0,-0.192,2.479>].
The expected output of llSay here is <0,-0.192,2.479> like in Mono, but in lsl vm it outputs <0,0,0>
Tested in Clawed region, current simulator: Luau 2026-06-09.27238848717
A simpler version that also breaks:
default {
state_entry()
{
list integers = [1,2,3];
integers = [llList2Integer(integers, 0)];
llSay(0, llList2String(integers, 0)); // Expected Output: 1, Actual: 0
}
}
Some further observations from Suzanna:
Another example, tested on the Beta grid, Luau 2026-07-24.30110090421:
default {
state_entry() {
list myList = ["test"];
myList = [myList == []]; // myList should be [0]
llOwnerSay((string)myList); // --> 1
}
}
When the list being assigned to is also used inside the expression, its value is evaluated to an empty list.
I think the bug comes from here:
where the destination list is assigned a new empty table before evaluating the expression.