Skip to content

Commit 466b2ac

Browse files
committed
Fix: fix SourcePositions on merge instructions
1 parent a3bf5df commit 466b2ac

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/Lua/CodeAnalysis/Compilation/FunctionCompilationContext.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ public void PushOrMergeInstruction(int lastLocal,in Instruction instruction, in
160160
if (lastInstruction.A == instruction.B)
161161
{
162162
lastInstruction=Instruction.GetTable(instruction.A, lastInstruction.B, instruction.C);
163+
instructionPositions[^1] = position;
163164
incrementStackPosition = false;
164165
return;
165166
}
@@ -186,18 +187,21 @@ public void PushOrMergeInstruction(int lastLocal,in Instruction instruction, in
186187
last2Instruction=Instruction.SetTable((byte)(lastB), instruction.B, last2Instruction.B);
187188
instructions.RemoveAtSwapback(instructions.Length - 1);
188189
instructionPositions.RemoveAtSwapback(instructionPositions.Length - 1);
190+
instructionPositions[^1] = position;
189191
incrementStackPosition = false;
190192
return;
191193
}
192194
}
193195
lastInstruction=Instruction.SetTable((byte)(lastB), instruction.B, instruction.C);
196+
instructionPositions[^1] = position;
194197
incrementStackPosition = false;
195198
return;
196199
}
197200

198201
if (lastA == instruction.C)
199202
{
200203
lastInstruction=Instruction.SetTable(instruction.A, instruction.B, lastB);
204+
instructionPositions[^1] = position;
201205
incrementStackPosition = false;
202206
return;
203207
}
@@ -215,6 +219,8 @@ public void PushOrMergeInstruction(int lastLocal,in Instruction instruction, in
215219
var c = last2OpCode==OpCode.LoadK?last2Instruction.Bx+256:last2Instruction.B;
216220
last2Instruction = lastInstruction;
217221
lastInstruction = instruction with { C = (ushort)c};
222+
instructionPositions[^2] = instructionPositions[^1];
223+
instructionPositions[^1] = position;
218224
incrementStackPosition = false;
219225
return;
220226
}
@@ -228,6 +234,7 @@ public void PushOrMergeInstruction(int lastLocal,in Instruction instruction, in
228234
if (lastInstruction.OpCode == OpCode.Move && lastLocal != lastInstruction.A && lastInstruction.A == instruction.B)
229235
{
230236
lastInstruction = instruction with { B = lastInstruction.B };;
237+
instructionPositions[^1] = position;
231238
incrementStackPosition = false;
232239
return;
233240
}
@@ -236,6 +243,7 @@ public void PushOrMergeInstruction(int lastLocal,in Instruction instruction, in
236243
if (lastInstruction.OpCode == OpCode.Move && instruction.B ==2 && lastInstruction.B < 256)
237244
{
238245
lastInstruction = instruction with { A = (byte)lastInstruction.B };
246+
instructionPositions[^1] = position;
239247
incrementStackPosition = false;
240248
return;
241249
}

0 commit comments

Comments
 (0)