protected FieldInfo GetField (EmitContext ec)
{
- if (ec.CurrentBlock.Toplevel != Scope.ScopeBlock.Toplevel)
+ if ((ec.CurrentBlock != null) &&
+ (ec.CurrentBlock.Toplevel != Scope.ScopeBlock.Toplevel))
return Field.FieldBuilder;
else
return FieldInstance.FieldInfo;
protected virtual void DoEmit (EmitContext ec)
{
- if (ec.CurrentBlock.Toplevel == Scope.ScopeBlock.Toplevel)
- DoEmitInstance (ec);
- else
+ if ((ec.CurrentBlock != null) &&
+ (ec.CurrentBlock.Toplevel != Scope.ScopeBlock.Toplevel))
ec.ig.Emit (OpCodes.Ldarg_0);
+ else
+ DoEmitInstance (ec);
}
protected void DoEmitInstance (EmitContext ec)
if (block != null) {
ec.ResolveTopBlock (null, block, ParameterInfo, this, out unreachable);
ec.EmitMeta (block);
+
+ if (block.ScopeInfo != null) {
+ ExpressionStatement init = block.ScopeInfo.GetScopeInitializer (ec);
+ init.EmitStatement (ec);
+ }
}
if (Initializer != null) {
}
RootScopeInfo host = block.Toplevel.RootScope;
- if ((host != null) && (!is_struct || host.IsIterator)) {
+ if ((host != null) && !ec.IsConstructor &&
+ (!is_struct || host.IsIterator)) {
variable = host.CaptureThis ();
type = variable.Type;
is_struct = false;