45 lines
1.4 KiB
C#
Executable File
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}");
|
|
Console.ForegroundColor = ConsoleColor.Red;
|
|
Console.Error.WriteLine(e.Message);
|
|
Environment.Exit(1);
|
|
}
|
|
finally
|
|
{
|
|
Console.WriteLine($"Compiled methods: {builder.CompiledMethods}");
|
|
var assembly = (PersistedAssemblyBuilder)builder.Assembly;
|
|
assembly.Save("out.dll");
|
|
}
|
|
}
|
|
}
|
|
|
|
internal static class Debug
|
|
{
|
|
public static readonly IndentedTextWriter Writer = new(Console.Error, "| ");
|
|
}
|