Files
JCIL/CLI/Program.cs
T

45 lines
1.4 KiB
C#
Raw Normal View History

2026-05-06 03:06:31 +02:00
using System.CodeDom.Compiler;
using System.Reflection;
2026-05-05 22:41:02 +02:00
using System.Reflection.Emit;
using JCIL.Java.Class;
namespace JCIL.CLI;
public class Program
{
public static void Main(string[] args)
{
var now = DateTime.Now;
var loader = new TypeLoader();
loader.AddPath(Environment.CurrentDirectory);
loader.AddPath("../extracted_java_classes/java.base/");
var javaClass = loader.LoadClass("Main".AsMemory());
Console.WriteLine($"Load time: {(DateTime.Now - now).TotalMilliseconds}ms");
2026-05-06 12:47:10 +02:00
2026-05-08 14:53:21 +02:00
var builder = new AssemblyBuilder(loader, new AssemblyName("Test"), false);
2026-05-06 03:06:31 +02:00
var dotnetClass = builder.MakeType(javaClass);
2026-05-05 22:41:02 +02:00
try
{
2026-05-06 03:06:31 +02:00
dotnetClass.GetMethod(javaClass.Methods[1]);
2026-05-05 22:41:02 +02:00
}
catch (InvalidDataException e)
{
2026-05-06 18:13:53 +02:00
Console.WriteLine($"Compiled methods: {builder.CompiledMethods}");
2026-05-05 22:41:02 +02:00
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine(e.Message);
Environment.Exit(1);
}
finally
{
2026-05-06 18:13:53 +02:00
Console.WriteLine($"Compiled methods: {builder.CompiledMethods}");
2026-05-05 22:41:02 +02:00
var assembly = (PersistedAssemblyBuilder)builder.Assembly;
assembly.Save("out.dll");
}
}
2026-05-06 03:06:31 +02:00
}
internal static class Debug
{
2026-05-06 18:13:53 +02:00
public static readonly IndentedTextWriter Writer = new(Console.Error, "| ");
2026-05-06 03:06:31 +02:00
}