[svn] r7798: nemerle/trunk/ncc/parsing/MainParser.n vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Complet...

pbludov svnadmin at nemerle.org
Fri Sep 14 12:12:40 CEST 2007


Log:
bug fix http://nemerle.org/bugs/bug_view_advanced_page.php?bug_id=1049

Author: pbludov
Date: Fri Sep 14 12:12:36 2007
New Revision: 7798

Modified:
   nemerle/trunk/ncc/parsing/MainParser.n
   vs-plugin/trunk/Nemerle.Compiler.Utils/Nemerle.Completion2/CodeModel/Project.Type.n

Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n	(original)
+++ nemerle/trunk/ncc/parsing/MainParser.n	Fri Sep 14 12:12:36 2007
@@ -1179,9 +1179,10 @@
 
             match (get_token ()) {
               | Token.Identifier (i) as nametok =>
-                def mloc = nametok.Location;
                 match (i) {
                   | "remove" | "add" =>
+                    def mloc = nametok.Location + Location_stack.top();
+
                     if (i == "remove")
                       unless (remove == null)
                         Message.Error (mloc, "event cannot have multiple remove methods");
@@ -1200,7 +1201,7 @@
                     def (kind, bd) = parse_accessor_body (method_parms, []);
                     def name = Splicable.Name (mloc, mkname (i + "_" + plain_name));
                     def fh = Fun_header (mloc, name, PExpr.Void (mloc), method_parms);
-                    def method = ClassMember.Function (loc, name, method_atts, fh, kind, bd);
+                    def method = ClassMember.Function (mloc, name, method_atts, fh, kind, bd);
                     method._env = env;
                     if (i == "remove")
                       remove = method;
@@ -1208,6 +1209,7 @@
                       add = method;
 
                   | _ =>
+                    def mloc = nametok.Location;
                     def nm = Splicable.Name (loc, mkname (i));
                     def t = parse_return_type (false);
                     def attrs = Modifiers (mymods, []);

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	Fri Sep 14 12:12:36 2007
@@ -233,6 +233,27 @@
       match (member)
       {
       | mb is MethodBuilder   => getMethod(mb)
+      | eb is EventBuilder    => 
+
+          if (eb.Ast.ty.Location.Contains(line, col))
+            checkType(eb.Ast.ty, eb.GetMemType())
+          else if (eb.Ast.name.Location.Contains(line, col))
+            (eb.Ast.name.Location, null, eb)
+          else
+          {
+            def adder = eb.GetAdder();
+            if (adder != null && adder.BodyLocation.Contains(line, col))
+              getMethod(adder)
+            else
+            {
+              def remover = eb.GetRemover();
+              if (remover != null && remover.BodyLocation.Contains(line, col))
+                getMethod(remover)
+              else
+               (eb.Location,          null, eb)
+            }
+          }
+
       | fb is FieldBuilder    => 
 
         if (typeDecl.Builder.IsEnum)



More information about the svn mailing list