+2008-05-01 Marek Safar <marek.safar@gmail.com>
+
+ * expression.cs, ecore.cs: Block base access expression inside expression
+ tree.
+
2008-05-01 Marek Safar <marek.safar@gmail.com>
A fix for bug #385058
"with an instance reference, qualify it with a type name instead", name);
}
+ public static void Error_BaseAccessInExpressionTree (Location loc)
+ {
+ Report.Error (831, loc, "An expression tree may not contain a base access");
+ }
+
// TODO: possible optimalization
// Cache resolved constant result in FieldBuilder <-> expression map
public virtual MemberExpr ResolveMemberAccess (EmitContext ec, Expression left, Location loc,
return CreateExpressionFactoryCall ("ArrayLength", args);
}
+ if (is_base) {
+ Error_BaseAccessInExpressionTree (loc);
+ return null;
+ }
+
// TODO: it's waiting for PropertyExpr refactoring
//ArrayList args = new ArrayList (2);
//args.Add (new Argument (InstanceExpression.CreateExpressionTree (ec)));
} else {
union = MethodGroupExpr.MakeUnionSet (left_operators, right_operators, loc);
}
+ } else if (left_operators != null) {
+ union = left_operators;
} else {
- union = MethodGroupExpr.MakeUnionSet (left_operators, right_operators, loc);
+ union = right_operators;
}
union = union.OverloadResolve (ec, ref args, true, loc);
}
}
+ if (mg.IsBase)
+ MemberExpr.Error_BaseAccessInExpressionTree (loc);
+
return CreateExpressionFactoryCall ("Call", args);
}
return true;
}
+
+ public override Expression CreateExpressionTree (EmitContext ec)
+ {
+ MemberExpr.Error_BaseAccessInExpressionTree (loc);
+ return base.CreateExpressionTree (ec);
+ }
}
/// <summary>