Skip to content

Commit 4aa9e40

Browse files
committed
Optimize: Use Span for coroutine.resume
1 parent 340dcd9 commit 4aa9e40

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

src/Lua/LuaCoroutine.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,15 @@ public override async ValueTask<int> ResumeAsync(LuaFunctionExecutionContext con
157157
Volatile.Write(ref isFirstCall, false);
158158
}
159159

160-
(var index, var result0, var result1) = await ValueTaskEx.WhenAny(resumeTask, functionTask!);
160+
var (index, result0, result1) = await ValueTaskEx.WhenAny(resumeTask, functionTask!);
161161

162+
var bufferSpan = buffer.Span;
162163
if (index == 0)
163164
{
164165
var results = result0.Results;
165166

166-
buffer.Span[0] = true;
167-
for (int i = 0; i < results.Length; i++)
168-
{
169-
buffer.Span[i + 1] = results[i];
170-
}
167+
bufferSpan[0] = true;
168+
results.CopyTo(bufferSpan[1..]);
171169

172170
return results.Length + 1;
173171
}
@@ -176,8 +174,8 @@ public override async ValueTask<int> ResumeAsync(LuaFunctionExecutionContext con
176174
var resultCount = functionTask!.Result;
177175

178176
Volatile.Write(ref status, (byte)LuaThreadStatus.Dead);
179-
buffer.Span[0] = true;
180-
this.buffer[0..resultCount].CopyTo(buffer.Span[1..]);
177+
bufferSpan[0] = true;
178+
this.buffer.AsSpan()[..resultCount].CopyTo(bufferSpan[1..]);
181179

182180
ArrayPool<LuaValue>.Shared.Return(this.buffer);
183181

@@ -192,7 +190,7 @@ public override async ValueTask<int> ResumeAsync(LuaFunctionExecutionContext con
192190

193191
Volatile.Write(ref status, (byte)LuaThreadStatus.Dead);
194192
buffer.Span[0] = false;
195-
buffer.Span[1] = ex is LuaRuntimeException { ErrorObject: not null } luaEx ? luaEx.ErrorObject.Value: ex.Message;
193+
buffer.Span[1] = ex is LuaRuntimeException { ErrorObject: not null } luaEx ? luaEx.ErrorObject.Value : ex.Message;
196194
return 2;
197195
}
198196
else

0 commit comments

Comments
 (0)