+2010-06-29 Marek Safar <marek.safar@gmail.com>
+
+ * import.cs: Operators must have between 1 and 2 parameters.
+
+ * method.cs: Switch destructor to direct membercache lookup
+
2010-06-29 Marek Safar <marek.safar@gmail.com>
* driver.cs, expression.cs: Use Membercache for StringConcat when
if ((mod & (Modifiers.STATIC | Modifiers.PUBLIC)) == (Modifiers.STATIC | Modifiers.PUBLIC)) {
if (name[2] == '_' && name[1] == 'p' && name[0] == 'o') {
var op_type = Operator.GetType (name);
- if (op_type.HasValue) {
+ if (op_type.HasValue && parameters.Count > 0 && parameters.Count < 3) {
kind = MemberKind.Operator;
}
}
return true;
}
- public override void Emit()
+ public override void Emit()
{
var base_type = Parent.PartialContainer.BaseType;
if (base_type != null && Block != null) {
- MethodGroupExpr method_expr = Expression.MethodLookup (Parent.Module.Compiler, Parent.Definition, base_type, MemberKind.Destructor, MetadataName, 0, Location);
- if (method_expr == null)
+ var base_dtor = MemberCache.FindMember (base_type,
+ new MemberFilter (MetadataName, 0, MemberKind.Destructor, null, null), BindingRestriction.InstanceOnly) as MethodSpec;
+
+ if (base_dtor == null)
throw new NotImplementedException ();
+ MethodGroupExpr method_expr = MethodGroupExpr.CreatePredefined (base_dtor, base_type, Location);
method_expr.QueriedBaseType = base_type;
method_expr.InstanceExpression = new CompilerGeneratedThis (Parent.Definition, Location);