Cosmos/source2/IL2CPU/Cosmos.IL2CPU/IL/Pop.cs
kudzu_cp 2249797e61
2012-08-13 00:39:42 +00:00

29 lines
888 B
C#

using System;
using CPUx86 = Cosmos.Assembler.x86;
namespace Cosmos.IL2CPU.X86.IL
{
[Cosmos.IL2CPU.OpCode(ILOpCode.Code.Pop)]
public class Pop : ILOp
{
public Pop(Cosmos.Assembler.Assembler aAsmblr)
: base(aAsmblr)
{
}
public override void Execute(MethodInfo aMethod, ILOpCode aOpCode)
{
// todo: implement exception support.
if (Assembler.Stack.Count > 0)
{
var xItem = Assembler.Stack.Pop();
new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = ILOp.Align((uint)xItem.Size, 4) };
}
else
{
throw new Exception("Cosmos.IL2CPU.X86->IL->Pop.cs: Cannot pop from the stack, because there isn't anything on the stack to pop!");
}
}
}
}