public override bool Resolve (BlockContext ec) { current = current.Resolve (ec); if (current == null) return false; conv = Convert.ExplicitConversion (ec, current, type, loc); if (conv == null) return false; assign = new SimpleAssign (variable, conv, loc); if (assign.Resolve (ec) == null) return false; if (!statement.Resolve (ec)) return false; return true; }
// // Emits the instance field initializers // public bool EmitFieldInitializers (EmitContext ec) { ArrayList fields; ILGenerator ig = ec.ig; Expression instance_expr; if (ec.IsStatic){ fields = initialized_static_fields; instance_expr = null; } else { fields = initialized_fields; instance_expr = new This (Location.Null).Resolve (ec); } if (fields == null) return true; foreach (Field f in fields){ Expression e = f.GetInitializerExpression (ec); if (e == null) return false; Location l = f.Location; FieldExpr fe = new FieldExpr (f.FieldBuilder, l); fe.InstanceExpression = instance_expr; Expression a = new Assign (fe, e, l); a = a.Resolve (ec); if (a == null) return false; if (a is ExpressionStatement) ((ExpressionStatement) a).EmitStatement (ec); else { throw new Exception ("Assign.Resolve returned a non ExpressionStatement"); } } return true; }