зеркало из https://github.com/mono/ikvm-fork.git
Fixed bug introduced in recent changes. When the first entry on the stack contains a partial expression, it cannot be popped.
This commit is contained in:
Родитель
f7f3ad1c6c
Коммит
05d0c7a5c6
|
@ -581,7 +581,7 @@ namespace IKVM.Internal
|
|||
internal void LazyEmitPop()
|
||||
{
|
||||
Expr exp = PeekStack();
|
||||
if (exp == null || exp.HasSideEffect)
|
||||
if (exp == null || exp.HasSideEffect || exp.IsIncomplete)
|
||||
{
|
||||
Emit(OpCodes.Pop);
|
||||
}
|
||||
|
@ -905,6 +905,8 @@ namespace IKVM.Internal
|
|||
{
|
||||
internal bool HasSideEffect { get { return false; } } // for now we only have side-effect free expressions
|
||||
|
||||
internal virtual bool IsIncomplete { get { return false; } }
|
||||
|
||||
internal abstract void Emit(CodeEmitter ilgen);
|
||||
}
|
||||
|
||||
|
@ -919,6 +921,11 @@ namespace IKVM.Internal
|
|||
this.Type = type;
|
||||
}
|
||||
|
||||
internal override bool IsIncomplete
|
||||
{
|
||||
get { return Expr == null; }
|
||||
}
|
||||
|
||||
internal override void Emit(CodeEmitter ilgen)
|
||||
{
|
||||
if (Expr != null)
|
||||
|
@ -1160,6 +1167,14 @@ namespace IKVM.Internal
|
|||
this.Type = type;
|
||||
}
|
||||
|
||||
internal override bool IsIncomplete
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
internal override void Emit(CodeEmitter ilgen)
|
||||
{
|
||||
ilgen.Emit(OpCodes.Isinst, this.Type);
|
||||
|
@ -1174,6 +1189,14 @@ namespace IKVM.Internal
|
|||
{
|
||||
}
|
||||
|
||||
internal override bool IsIncomplete
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
internal abstract void EmitBcc(CodeEmitter ilgen, Comparison comp, CodeEmitterLabel label);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче