2005-12-23 Miguel de Icaza <miguel@novell.com>
[mono.git] / mcs / mcs / expression.cs
index 5e9ca5e783b00888c8d24d754329d96ece7fb139..b2cb0c8f7aff2259f29db7959d0f70994b76f595 100644 (file)
@@ -2310,6 +2310,9 @@ namespace Mono.CSharp {
 
                public override Expression DoResolve (EmitContext ec)
                {
+                       if (left == null)
+                               return null;
+
                        if ((oper == Operator.Subtraction) && (left is ParenthesizedExpression)) {
                                left = ((ParenthesizedExpression) left).Expr;
                                left = left.Resolve (ec, ResolveFlags.VariableOrValue | ResolveFlags.Type);
@@ -3786,11 +3789,8 @@ namespace Mono.CSharp {
                        ILGenerator ig = ec.ig;
                        int arg_idx = idx;
 
-                       if (ec.HaveCaptureInfo && ec.IsParameterCaptured (name)){
-                               if (leave_copy)
-                                       throw new InternalErrorException ();
-                               
-                               ec.EmitParameter (name);
+                       if (ec.HaveCaptureInfo && ec.IsParameterCaptured (name)){                               
+                               ec.EmitParameter (name, leave_copy, prepared, ref temp);
                                return;
                        }
 
@@ -3822,15 +3822,16 @@ namespace Mono.CSharp {
                
                public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool prepare_for_load)
                {
+                       prepared = prepare_for_load;
                        if (ec.HaveCaptureInfo && ec.IsParameterCaptured (name)){
-                               ec.EmitAssignParameter (name, source, leave_copy, prepare_for_load);
+                               ec.EmitAssignParameter (name, source, leave_copy, prepare_for_load, ref temp);
                                return;
                        }
 
                        ILGenerator ig = ec.ig;
                        int arg_idx = idx;
                        
-                       prepared = prepare_for_load;
+                       
                        
                        if (!ec.MethodIsStatic)
                                arg_idx++;
@@ -6068,12 +6069,7 @@ namespace Mono.CSharp {
                        if (array_type_expr == null)
                                return false;
 
-                       type = array_type_expr.ResolveType (ec);
-                       
-                       if (!type.IsArray) {
-                               Error (622, "Can only use array initializer expressions to assign to array types. Try using a new expression instead.");
-                               return false;
-                       }
+                       type = array_type_expr.ResolveType (ec);                
                        underlying_type = TypeManager.GetElementType (type);
                        dimensions = type.GetArrayRank ();
 
@@ -8344,15 +8340,16 @@ namespace Mono.CSharp {
                }
 
                public override string Name {
-                       get {
-                               return left + dim;
-                       }
+                       get { return left + dim; }
                }
 
                public override string FullName {
-                       get {
-                               return type.FullName;
-                       }
+                       get { return type.FullName; }
+               }
+
+               public override string GetSignatureForError ()
+               {
+                       return left.GetSignatureForError () + dim;
                }
        }