[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