Skip to content

Commit 6fe7009

Browse files
authored
Merge pull request #41 from AnnulusGames/optimize-standard-libs
Optimize: standard libraries
2 parents e158c7e + f837301 commit 6fe7009

File tree

10 files changed

+436
-369
lines changed

10 files changed

+436
-369
lines changed

src/Lua/Standard/BasicLibrary.cs

Lines changed: 73 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,66 +4,65 @@
44

55
namespace Lua.Standard;
66

7-
public static class BasicLibrary
7+
public sealed class BasicLibrary
88
{
9-
public static void OpenBasicLibrary(this LuaState state)
10-
{
11-
state.Environment["_G"] = state.Environment;
12-
state.Environment["_VERSION"] = "Lua 5.2";
13-
foreach (var func in Functions)
14-
{
15-
state.Environment[func.Name] = func;
16-
}
17-
}
9+
public static readonly BasicLibrary Instance = new();
1810

19-
static readonly LuaFunction[] Functions = [
20-
new("assert", Assert),
21-
new("collectgarbage", CollectGarbage),
22-
new("dofile", DoFile),
23-
new("error", Error),
24-
new("getmetatable", GetMetatable),
25-
new("ipairs", IPairs),
26-
new("loadfile", LoadFile),
27-
new("load", Load),
28-
new("next", Next),
29-
new("pairs", Pairs),
30-
new("pcall", PCall),
31-
new("print", Print),
32-
new("rawequal", RawEqual),
33-
new("rawget", RawGet),
34-
new("rawlen", RawLen),
35-
new("rawset", RawSet),
36-
new("select", Select),
37-
new("setmetatable", SetMetatable),
38-
new("tonumber", ToNumber),
39-
new("tostring", ToString),
40-
new("type", Type),
41-
new("xpcall", XPCall),
42-
];
43-
44-
static readonly LuaFunction IPairsIterator = new("iterator", (context, buffer, cancellationToken) =>
11+
public BasicLibrary()
4512
{
46-
var table = context.GetArgument<LuaTable>(0);
47-
var i = context.GetArgument<double>(1);
13+
Functions = [
14+
new("assert", Assert),
15+
new("collectgarbage", CollectGarbage),
16+
new("dofile", DoFile),
17+
new("error", Error),
18+
new("getmetatable", GetMetatable),
19+
new("ipairs", IPairs),
20+
new("loadfile", LoadFile),
21+
new("load", Load),
22+
new("next", Next),
23+
new("pairs", Pairs),
24+
new("pcall", PCall),
25+
new("print", Print),
26+
new("rawequal", RawEqual),
27+
new("rawget", RawGet),
28+
new("rawlen", RawLen),
29+
new("rawset", RawSet),
30+
new("select", Select),
31+
new("setmetatable", SetMetatable),
32+
new("tonumber", ToNumber),
33+
new("tostring", ToString),
34+
new("type", Type),
35+
new("xpcall", XPCall),
36+
];
37+
38+
IPairsIterator = new("iterator", (context, buffer, cancellationToken) =>
39+
{
40+
var table = context.GetArgument<LuaTable>(0);
41+
var i = context.GetArgument<double>(1);
42+
43+
i++;
44+
if (table.TryGetValue(i, out var value))
45+
{
46+
buffer.Span[0] = i;
47+
buffer.Span[1] = value;
48+
}
49+
else
50+
{
51+
buffer.Span[0] = LuaValue.Nil;
52+
buffer.Span[1] = LuaValue.Nil;
53+
}
4854

49-
i++;
50-
if (table.TryGetValue(i, out var value))
51-
{
52-
buffer.Span[0] = i;
53-
buffer.Span[1] = value;
54-
}
55-
else
56-
{
57-
buffer.Span[0] = LuaValue.Nil;
58-
buffer.Span[1] = LuaValue.Nil;
59-
}
55+
return new(2);
56+
});
6057

61-
return new(2);
62-
});
58+
PairsIterator = new("iterator", Next);
59+
}
6360

64-
static readonly LuaFunction PairsIterator = new("iterator", Next);
61+
public readonly LuaFunction[] Functions;
62+
readonly LuaFunction IPairsIterator;
63+
readonly LuaFunction PairsIterator;
6564

66-
public static ValueTask<int> Assert(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
65+
public ValueTask<int> Assert(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
6766
{
6867
var arg0 = context.GetArgument(0);
6968

@@ -82,13 +81,13 @@ public static ValueTask<int> Assert(LuaFunctionExecutionContext context, Memory<
8281
return new(context.ArgumentCount);
8382
}
8483

85-
public static ValueTask<int> CollectGarbage(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
84+
public ValueTask<int> CollectGarbage(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
8685
{
8786
GC.Collect();
8887
return new(0);
8988
}
9089

91-
public static async ValueTask<int> DoFile(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
90+
public async ValueTask<int> DoFile(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
9291
{
9392
var arg0 = context.GetArgument<string>(0);
9493

@@ -100,7 +99,7 @@ public static async ValueTask<int> DoFile(LuaFunctionExecutionContext context, M
10099
return await new Closure(context.State, chunk).InvokeAsync(context, buffer, cancellationToken);
101100
}
102101

103-
public static ValueTask<int> Error(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
102+
public ValueTask<int> Error(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
104103
{
105104
var obj = context.ArgumentCount == 0 || context.Arguments[0].Type is LuaValueType.Nil
106105
? "(error object is a nil value)"
@@ -109,7 +108,7 @@ public static ValueTask<int> Error(LuaFunctionExecutionContext context, Memory<L
109108
throw new LuaRuntimeException(context.State.GetTraceback(), obj!);
110109
}
111110

112-
public static ValueTask<int> GetMetatable(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
111+
public ValueTask<int> GetMetatable(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
113112
{
114113
var arg0 = context.GetArgument(0);
115114

@@ -136,7 +135,7 @@ public static ValueTask<int> GetMetatable(LuaFunctionExecutionContext context, M
136135
return new(1);
137136
}
138137

139-
public static ValueTask<int> IPairs(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
138+
public ValueTask<int> IPairs(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
140139
{
141140
var arg0 = context.GetArgument<LuaTable>(0);
142141

@@ -157,7 +156,7 @@ public static ValueTask<int> IPairs(LuaFunctionExecutionContext context, Memory<
157156
return new(3);
158157
}
159158

160-
public static async ValueTask<int> LoadFile(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
159+
public async ValueTask<int> LoadFile(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
161160
{
162161
// Lua-CSharp does not support binary chunks, the mode argument is ignored.
163162
var arg0 = context.GetArgument<string>(0);
@@ -182,7 +181,7 @@ public static async ValueTask<int> LoadFile(LuaFunctionExecutionContext context,
182181
}
183182
}
184183

185-
public static ValueTask<int> Load(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
184+
public ValueTask<int> Load(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
186185
{
187186
// Lua-CSharp does not support binary chunks, the mode argument is ignored.
188187
var arg0 = context.GetArgument(0);
@@ -223,7 +222,7 @@ public static ValueTask<int> Load(LuaFunctionExecutionContext context, Memory<Lu
223222
}
224223
}
225224

226-
public static ValueTask<int> Next(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
225+
public ValueTask<int> Next(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
227226
{
228227
var arg0 = context.GetArgument<LuaTable>(0);
229228
var arg1 = context.HasArgument(1) ? context.Arguments[1] : LuaValue.Nil;
@@ -241,7 +240,7 @@ public static ValueTask<int> Next(LuaFunctionExecutionContext context, Memory<Lu
241240
}
242241
}
243242

244-
public static ValueTask<int> Pairs(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
243+
public ValueTask<int> Pairs(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
245244
{
246245
var arg0 = context.GetArgument<LuaTable>(0);
247246

@@ -262,7 +261,7 @@ public static ValueTask<int> Pairs(LuaFunctionExecutionContext context, Memory<L
262261
return new(3);
263262
}
264263

265-
public static async ValueTask<int> PCall(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
264+
public async ValueTask<int> PCall(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
266265
{
267266
var arg0 = context.GetArgument<LuaFunction>(0);
268267

@@ -290,7 +289,7 @@ public static async ValueTask<int> PCall(LuaFunctionExecutionContext context, Me
290289
}
291290
}
292291

293-
public static async ValueTask<int> Print(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
292+
public async ValueTask<int> Print(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
294293
{
295294
using var methodBuffer = new PooledArray<LuaValue>(1);
296295

@@ -305,7 +304,7 @@ public static async ValueTask<int> Print(LuaFunctionExecutionContext context, Me
305304
return 0;
306305
}
307306

308-
public static ValueTask<int> RawEqual(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
307+
public ValueTask<int> RawEqual(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
309308
{
310309
var arg0 = context.GetArgument(0);
311310
var arg1 = context.GetArgument(1);
@@ -314,7 +313,7 @@ public static ValueTask<int> RawEqual(LuaFunctionExecutionContext context, Memor
314313
return new(1);
315314
}
316315

317-
public static ValueTask<int> RawGet(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
316+
public ValueTask<int> RawGet(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
318317
{
319318
var arg0 = context.GetArgument<LuaTable>(0);
320319
var arg1 = context.GetArgument(1);
@@ -323,7 +322,7 @@ public static ValueTask<int> RawGet(LuaFunctionExecutionContext context, Memory<
323322
return new(1);
324323
}
325324

326-
public static ValueTask<int> RawLen(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
325+
public ValueTask<int> RawLen(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
327326
{
328327
var arg0 = context.GetArgument(0);
329328

@@ -343,7 +342,7 @@ public static ValueTask<int> RawLen(LuaFunctionExecutionContext context, Memory<
343342
return new(1);
344343
}
345344

346-
public static ValueTask<int> RawSet(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
345+
public ValueTask<int> RawSet(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
347346
{
348347
var arg0 = context.GetArgument<LuaTable>(0);
349348
var arg1 = context.GetArgument(1);
@@ -353,7 +352,7 @@ public static ValueTask<int> RawSet(LuaFunctionExecutionContext context, Memory<
353352
return new(0);
354353
}
355354

356-
public static ValueTask<int> Select(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
355+
public ValueTask<int> Select(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
357356
{
358357
var arg0 = context.GetArgument(0);
359358

@@ -391,7 +390,7 @@ public static ValueTask<int> Select(LuaFunctionExecutionContext context, Memory<
391390
}
392391
}
393392

394-
public static ValueTask<int> SetMetatable(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
393+
public ValueTask<int> SetMetatable(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
395394
{
396395
var arg0 = context.GetArgument<LuaTable>(0);
397396
var arg1 = context.GetArgument(1);
@@ -418,7 +417,7 @@ public static ValueTask<int> SetMetatable(LuaFunctionExecutionContext context, M
418417
return new(1);
419418
}
420419

421-
public static ValueTask<int> ToNumber(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
420+
public ValueTask<int> ToNumber(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
422421
{
423422
var e = context.GetArgument(0);
424423
int? toBase = context.HasArgument(1)
@@ -554,13 +553,13 @@ static double StringToDouble(ReadOnlySpan<char> text, int toBase)
554553
return value;
555554
}
556555

557-
public static ValueTask<int> ToString(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
556+
public ValueTask<int> ToString(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
558557
{
559558
var arg0 = context.GetArgument(0);
560559
return arg0.CallToStringAsync(context, buffer, cancellationToken);
561560
}
562561

563-
public static ValueTask<int> Type(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
562+
public ValueTask<int> Type(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
564563
{
565564
var arg0 = context.GetArgument(0);
566565

@@ -580,7 +579,7 @@ public static ValueTask<int> Type(LuaFunctionExecutionContext context, Memory<Lu
580579
return new(1);
581580
}
582581

583-
public static async ValueTask<int> XPCall(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
582+
public async ValueTask<int> XPCall(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
584583
{
585584
var arg0 = context.GetArgument<LuaFunction>(0);
586585
var arg1 = context.GetArgument<LuaFunction>(1);

0 commit comments

Comments
 (0)