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);
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;
}
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++;
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 ();
}
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;
}
}