mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-27 22:12:25 +00:00
This commit is contained in:
parent
1d146df185
commit
13ab61a6ac
2 changed files with 35 additions and 66 deletions
|
|
@ -1,44 +1,15 @@
|
|||
using System;
|
||||
|
||||
namespace Cosmos.IL2CPU.X86.IL
|
||||
{
|
||||
[Cosmos.IL2CPU.OpCode(ILOpCode.Code.Conv_Ovf_I4)]
|
||||
public class Conv_Ovf_I4: ILOp
|
||||
{
|
||||
public Conv_Ovf_I4(Cosmos.IL2CPU.Assembler aAsmblr):base(aAsmblr)
|
||||
{
|
||||
}
|
||||
namespace Cosmos.IL2CPU.X86.IL {
|
||||
[Cosmos.IL2CPU.OpCode(ILOpCode.Code.Conv_Ovf_I4)]
|
||||
public class Conv_Ovf_I4 : ILOp {
|
||||
public Conv_Ovf_I4(Cosmos.IL2CPU.Assembler aAsmblr)
|
||||
: base(aAsmblr) {
|
||||
}
|
||||
|
||||
public override void Execute(MethodInfo aMethod, ILOpCode aOpCode) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
// using System;
|
||||
// using System.IO;
|
||||
//
|
||||
//
|
||||
// using CPU = Cosmos.IL2CPU.X86;
|
||||
//
|
||||
// namespace Indy.IL2CPU.IL.X86 {
|
||||
// [OpCode(OpCodeEnum.Conv_Ovf_I4)]
|
||||
// public class Conv_Ovf_I4: Op {
|
||||
// private string mNextLabel;
|
||||
// private string mCurLabel;
|
||||
// private uint mCurOffset;
|
||||
// private MethodInformation mMethodInformation;
|
||||
// public Conv_Ovf_I4(ILReader aReader, MethodInformation aMethodInfo)
|
||||
// : base(aReader, aMethodInfo) {
|
||||
// mMethodInformation = aMethodInfo;
|
||||
// mCurOffset = aReader.Position;
|
||||
// mCurLabel = IL.Op.GetInstructionLabel(aReader);
|
||||
// mNextLabel = IL.Op.GetInstructionLabel(aReader.NextPosition);
|
||||
// }
|
||||
// public override void DoAssemble() {
|
||||
// EmitNotImplementedException(Assembler, GetServiceProvider(), "Conv_Ovf_I4: This has not been implemented at all yet!", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using System.Linq;
|
|||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Indy.IL2CPU;
|
||||
using Indy.IL2CPU.Plugs;
|
||||
using Indy.IL2CPU.Plugs;
|
||||
|
||||
namespace Cosmos.IL2CPU {
|
||||
public class ILScanner {
|
||||
|
|
@ -75,7 +75,7 @@ namespace Cosmos.IL2CPU {
|
|||
if (xTargetType == null) {
|
||||
xTargetType = Type.GetType(xTypeAttrib.TargetName, true);
|
||||
}
|
||||
|
||||
|
||||
// See if there is a custom PlugMethod attribute
|
||||
// Plug implementations must be static and public, so
|
||||
// we narrow the search to meet these requirements
|
||||
|
|
@ -127,9 +127,9 @@ namespace Cosmos.IL2CPU {
|
|||
|
||||
if (xEnabled) {
|
||||
// for PlugMethodAttribute:
|
||||
//TODO: public string Signature;
|
||||
//[PlugMethod(Signature = "System_Void__Indy_IL2CPU_Assembler_Assembler__cctor__")]
|
||||
//TODO: public Type Assembler = null;
|
||||
//TODO: public string Signature;
|
||||
//[PlugMethod(Signature = "System_Void__Indy_IL2CPU_Assembler_Assembler__cctor__")]
|
||||
//TODO: public Type Assembler = null;
|
||||
// Scan the plug implementation
|
||||
uint xUID = ExecuteInternal(xMethod, true);
|
||||
|
||||
|
|
@ -198,25 +198,25 @@ namespace Cosmos.IL2CPU {
|
|||
}
|
||||
//TODO: Look for Field plugs
|
||||
}
|
||||
// register any "system" types:
|
||||
QueueType(typeof(Array));
|
||||
}
|
||||
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )RuntimeEngineRefs.InitializeApplicationRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )RuntimeEngineRefs.FinalizeApplicationRef, true );
|
||||
// Manually register certain system types
|
||||
QueueType(typeof(Array));
|
||||
|
||||
// Pull in extra implementations, GC etc.
|
||||
ExecuteInternal((System.Reflection.MethodInfo)RuntimeEngineRefs.InitializeApplicationRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)RuntimeEngineRefs.FinalizeApplicationRef, true);
|
||||
////xScanner.QueueMethod(typeof(CosmosAssembler).GetMethod("PrintException"), true);
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )VTablesImplRefs.LoadTypeTableRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )VTablesImplRefs.SetMethodInfoRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )VTablesImplRefs.IsInstanceRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )VTablesImplRefs.SetTypeInfoRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )VTablesImplRefs.GetMethodAddressForTypeRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )GCImplementationRefs.IncRefCountRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )GCImplementationRefs.DecRefCountRef, true );
|
||||
ExecuteInternal( ( System.Reflection.MethodInfo )GCImplementationRefs.AllocNewObjectRef, true );
|
||||
ExecuteInternal((System.Reflection.MethodInfo)VTablesImplRefs.LoadTypeTableRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)VTablesImplRefs.SetMethodInfoRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)VTablesImplRefs.IsInstanceRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)VTablesImplRefs.SetTypeInfoRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)VTablesImplRefs.GetMethodAddressForTypeRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)GCImplementationRefs.IncRefCountRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)GCImplementationRefs.DecRefCountRef, true);
|
||||
ExecuteInternal((System.Reflection.MethodInfo)GCImplementationRefs.AllocNewObjectRef, true);
|
||||
|
||||
// Scan from entry point of this program
|
||||
//TODO: Now that we scan plugs first, we might need to put a jump
|
||||
// in the asm to jump to the entry point?
|
||||
ExecuteInternal(aStartMethod, false);
|
||||
}
|
||||
|
||||
|
|
@ -323,7 +323,7 @@ namespace Cosmos.IL2CPU {
|
|||
if (mKnownMethods.TryGetValue(aMethodBase, out xResult)) {
|
||||
return xResult;
|
||||
}
|
||||
|
||||
|
||||
xResult = (uint)mMethodsToProcess.Count;
|
||||
mKnownMethods.Add(aMethodBase, xResult);
|
||||
|
||||
|
|
@ -352,17 +352,15 @@ namespace Cosmos.IL2CPU {
|
|||
var xMethod = new MethodInfo(aMethodBase, xResult, xMethodType, xPlug);
|
||||
mMethodsToProcess.Add(xMethod);
|
||||
|
||||
//TODO: Might still need this one, see after we get assembly output again
|
||||
//Im hoping the operand walking we have now will include this on its own.
|
||||
//QueueType(aMethod.DeclaringType);
|
||||
// Queue Types directly related to method
|
||||
QueueType(aMethodBase.DeclaringType);
|
||||
if (aMethodBase is System.Reflection.MethodInfo) {
|
||||
QueueType(((System.Reflection.MethodInfo)aMethodBase).ReturnType);
|
||||
}
|
||||
foreach (var xParam in aMethodBase.GetParameters()) {
|
||||
QueueType(xParam.ParameterType);
|
||||
}
|
||||
|
||||
//var xMethodInfo = aMethod as MethodInfo;
|
||||
//if (xMethodInfo != null) {
|
||||
// QueueType(xMethodInfo.ReturnType);
|
||||
//}
|
||||
//foreach (var xParam in aMethod.GetParameters()) {
|
||||
// QueueType(xParam.ParameterType);
|
||||
//}
|
||||
return xResult;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue