Files
JCIL/CLI/Program.cs
T
2026-05-06 12:47:10 +02:00

45 lines
1.4 KiB
C#
Executable File

using System.CodeDom.Compiler;
using System.Reflection;
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");
var builder = new AssemblyBuilder(new AssemblyName("Test"), false);
var dotnetClass = builder.MakeType(javaClass);
try
{
dotnetClass.GetMethod(javaClass.Methods[1]);
}
catch (InvalidDataException e)
{
Console.WriteLine($"Compiled methods: {builder.CompiledMethods}/{builder.TotalMethods}");
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine(e.Message);
Environment.Exit(1);
}
finally
{
Console.WriteLine($"Compiled methods: {builder.CompiledMethods}/{builder.TotalMethods}");
var assembly = (PersistedAssemblyBuilder)builder.Assembly;
assembly.Save("out.dll");
}
}
}
internal static class Debug
{
public static readonly IndentedTextWriter Writer = new(Console.Error, "| ");
}