[svn] r7284: vs-plugin/trunk/Nemerle.Compiler.Utils: Nemerle.Completion2/CodeModel/Project.Refactoring.n N...

VladD2 svnadmin at nemerle.org
Wed Jan 17 07:00:04 CET 2007


Log:
1. AstTollWindow now show information about IsGenerated (G) and IsSpetialName (S) flags of methods.
2. Move to use IsBodyCompilable.
3. GetActiveMember()/GetActiveMembers at now work with MemberBuilder instate IMember and skip IsGenerated members.

Author: VladD2
Date: Wed Jan 17 07:00:01 2007
New Revision: 7284

Modified:
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Debug/AstUtils.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Utils.n

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Refactoring.n	Wed Jan 17 07:00:01 2007
@@ -53,6 +53,7 @@
       }
     }
 
+
     // TODO: implement get usages behaviour, this is a stub yet
     // Ïðèìåðíîå îïèñàíèå àëãîðèòìà ïîèñêà ÷ëåíà êëàññà:
     // 1. Íàõîäèì âñå ññûëêè íà äàííûé ÷ëåí â äåðåâå òèïîâ.
@@ -140,7 +141,7 @@
         Debug.WriteLine($"enclosing member:\n $member");
         match (member)
         {
-          | method is MethodBuilder =>
+          | method is MethodBuilder when method.IsBodyCompilable =>
             debug(method);
             Analyser().FindLocalValueEntries(method.BodyTyped, localValueDeclaration);
           | _ => []
@@ -171,7 +172,7 @@
               | @type is Decl.Type =>
                 match (@type.Builder.GetActiveMember(usage.FileIndex, usage.Line, usage.Column))
                 {
-                  | method is MethodBuilder when !method.IsAbstract =>
+                  | method is MethodBuilder when method.IsBodyCompilable =>
                     debug(method);
                     //VladD2: 137 ñèìâîëîâ ýòî óæå ïåðåáîð. Ïåðåíîñè, ïëèç äëèííûå ñòðîêè.
                     def (_, _, usageTypedExpression) = ExprFinder().Find(method.BodyParsed, method.BodyTyped, usage.Line, usage.Column);
@@ -256,12 +257,12 @@
       }
       and chainInsideMember(member : IMember)
       {
-        | member is MethodBuilder =>
-          if (member.BodyLocation.Contains(line, column))
-            Analyser().GetChainOfEnclosingLocations(member.BodyTokens, line, column)
+        | method is MethodBuilder when method.IsBodyCompilable =>
+          if (method.BodyLocation.Contains(line, column))
+            Analyser().GetChainOfEnclosingLocations(method.BodyTokens, line, column)
           else
           {
-            Debug.WriteLine($"line: $line, column: $column, member: $(member.Location), body: $(member.BodyLocation)");
+            Debug.WriteLine($"line: $line, column: $column, method: $(method.Location), body: $(method.BodyLocation)");
             []
           }
         | null => []

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n	Wed Jan 17 07:00:01 2007
@@ -105,7 +105,7 @@
       def member      = 
         if (typeBuilder.IsDelegate) typeBuilder : IMember
         else typeBuilder.GetActiveMember(fileIndex, line, col,
-          fun(member1 : IMember, member2 : IMember) : IMember
+          fun(member1, member2)
           {
             def doIgnore(m)
             {

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.n	Wed Jan 17 07:00:01 2007
@@ -282,9 +282,7 @@
       foreach (cm when cm.Location.FileIndex == fileIndex in Errors)
         yield cm;
 
-      def skip(m) { m.Attributes %&& (SpecialName | Abstract) || m.IsGenerated || m.BodyLocation.FileIndex <= 0 }
-
-      foreach (method when !skip(method) in GetAllMetodsDefinedInFile(fileIndex))
+      foreach (method when method.IsBodyCompilable in GetAllMetodsDefinedInFile(fileIndex))
       {
 #if !DEBUG
         try

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Debug/AstUtils.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Debug/AstUtils.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/Debug/AstUtils.n	Wed Jan 17 07:00:01 2007
@@ -59,7 +59,10 @@
               def scanMethod(method : MethodBuilder, indent)
               {
                 def name = method.Name;
-                items.Add(AstNodeInfo($"$(indent)method $name(...", method.Location));
+                def flags = (if (method.IsGenerated) "G " else "")
+                  + (if (method.Attributes %&& NemerleAttributes.SpecialName) "S " else "");
+                items.Add(AstNodeInfo($"$(indent)method $name(... // $flags",
+                  method.Location));
                 def ret = method.Ast.header.ret_type;
                 items.Add(AstNodeInfo($"$(indent)  ) : $ret", ret.Location));
                 items.Add(AstNodeInfo($"$(indent){", method.BodyLocation.FromStart()));

Modified: vs-plugin/trunk/Nemerle.Compiler.Utils/Utils.n
==============================================================================
--- vs-plugin/trunk/Nemerle.Compiler.Utils/Utils.n	(original)
+++ vs-plugin/trunk/Nemerle.Compiler.Utils/Utils.n	Wed Jan 17 07:00:01 2007
@@ -212,9 +212,9 @@
       fileIndex        : int,
       line             : int,
       col              : int,
-      comparator       : IMember * IMember -> IMember
+      comparator       : MemberBuilder * MemberBuilder -> MemberBuilder
     )
-      : IMember
+      : MemberBuilder
     {
       assert(true);
       def members = typeBuilder.GetActiveMembers(fileIndex, line, col);
@@ -223,11 +223,16 @@
       {
       | [m] => m
       | []  => null
-      | m1 :: m2 :: tail =>
+      | m1 :: ((m2 :: tail) as m2_tail) =>
 
+        if (m1.IsGenerated)
+          if (m2.IsGenerated) filter(tail);
+          else filter(m2_tail)
+        else
+        {
         def m = comparator(m1, m2);
         filter(if (m == null) tail else m :: tail)
-
+        }
       }
 
       filter(members)
@@ -239,7 +244,7 @@
       line             : int,
       col              : int,
     )
-      : IMember
+      : MemberBuilder
     {
       typeBuilder.GetActiveMember(fileIndex, line, col, (m, _) => m);
     }
@@ -250,33 +255,27 @@
       line             : int,
       col              : int
     )
-      : list[IMember]
+      : list[MemberBuilder]
     {
       def loop(members : list[IMember])
       {
       | member :: tail =>
-
         match (member)
         {
         | tb is TypeBuilder   =>
-
           tb.GetActiveMembers(fileIndex, line, col) + loop(tail)
 
-        | mb is MemberBuilder =>
+            | mb is MethodBuilder =>
+              if (mb.Location.Contains(fileIndex, line, col)
+                || mb.BodyLocation.Contains(fileIndex, line, col)
+              )    mb :: loop(tail)
+              else loop(tail)
 
-          if (mb.Location.Contains(fileIndex, line, col) ||
-              mb.BodyLocation.Contains(fileIndex, line, col))
+            | member is MemberBuilder
+              when member.Location.Contains(fileIndex, line, col) =>
             member :: loop(tail)
-          else
-            loop(tail)
-
-        | _ =>
-
-          if (member.Location.Contains(fileIndex, line, col))
-            member :: loop(tail)
-          else
-            loop(tail)
 
+            | _ => loop(tail)
         }
       | [] => []
       }



More information about the svn mailing list