2010-06-29 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Tue, 29 Jun 2010 13:28:01 +0000 (13:28 -0000)
committerMarek Safar <marek.safar@gmail.com>
Tue, 29 Jun 2010 13:28:01 +0000 (13:28 -0000)
* import.cs: Operators must have between 1 and 2 parameters.

* method.cs: Switch destructor to direct membercache lookup

svn path=/trunk/mcs/; revision=159662

mcs/mcs/ChangeLog
mcs/mcs/import.cs
mcs/mcs/method.cs

index 4f42784ee94bfaa70c2550e8c1a994e5819504c0..5bb24d53b914e08711000d783a423fbfba3d49a8 100644 (file)
@@ -1,3 +1,9 @@
+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
index 67719e644d01c8b3b59ce510ffd4e93992cb87c3..25da0055b18cb94fa60aacd811651062fa8851d2 100644 (file)
@@ -247,7 +247,7 @@ namespace Mono.CSharp
                                        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;
                                                        }
                                                }
index 43d8f39f73fb7384c1a2cdfd5a4fa1fa8903cefc..ba68333bf397d82480cbc0c5d5724abb854b7fa3 100644 (file)
@@ -1937,14 +1937,17 @@ namespace Mono.CSharp {
                        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);