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:
jfrijters 2009-03-02 04:52:05 +00:00
Родитель f7f3ad1c6c
Коммит 05d0c7a5c6
1 изменённых файлов: 24 добавлений и 1 удалений

Просмотреть файл

@ -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);
}