Skip to content

Commit e81032a

Browse files
committed
make FindEntryPoint() static andadd mainClassName argument
1 parent 5aa3b24 commit e81032a

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

kscr-build/KScrBuild.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private static void RunRun(RebuildCmdRun rebuildCmd)
4242
if (exported.Select(mod => mod.ModuleInfo).Append(baseModule)
4343
.FirstOrDefault(mod => mod?.MainClassName != null) is { } mod)
4444
KScrStarter.Execute(out _, mod.MainClassName);
45-
else Package.RootPackage.FindEntrypoint()?.Invoke(KScrStarter.VM, RuntimeBase.MainStack);
45+
else Package.FindEntrypoint()?.Invoke(KScrStarter.VM, RuntimeBase.MainStack);
4646
}
4747

4848
private static void RunPublish(CmdPublish cmd)

kscr-core/Bytecode/Package.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.IO.Compression;
44
using System.Linq;
55
using comroid.csapi.common;
6+
using KScr.Core.Exception;
67
using KScr.Core.Model;
78
using KScr.Core.Std;
89
using KScr.Core.Util;
@@ -23,12 +24,14 @@ public Package(Package parent, string name) : base(parent, name,
2324
{
2425
}
2526

26-
public Method FindEntrypoint()
27+
public static Method FindEntrypoint(string? mainClassName = null)
2728
{
28-
return All().Where(it => it is Class).Cast<Class>()
29-
.Where(it => it.DeclaredMembers.ContainsKey("main"))
30-
.Select(it => (it.DeclaredMembers["main"] as Method)!)
31-
.First(it => it.IsStatic());
29+
return (mainClassName != null
30+
? new[] { RootPackage.GetClass(mainClassName)! }.Where(x => x != null)
31+
: RootPackage.All().Where(it => it is Class).Cast<Class>()
32+
.Where(it => it.DeclaredMembers.ContainsKey("main")))
33+
.Select(it => (it.DeclaredMembers["main"] as Method)!).FirstOrDefault(it => it.IsStatic())
34+
?? throw new FatalException("Loaded classes contain no main() method definition");
3235
}
3336

3437
public void Write(RuntimeBase vm, DirectoryInfo dir, ClassInfo[]? names = null, StringCache? strings = null,

kscr-core/RuntimeBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ public Stack Execute(string? mainClassName = null)
262262
Method method;
263263
if (mainClassName == null)
264264
{
265-
method = Package.RootPackage.FindEntrypoint();
265+
method = Package.FindEntrypoint();
266266
}
267267
else
268268
{

0 commit comments

Comments
 (0)