[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