[svn] r6524: nemerle/trunk/ncc: hierarchy/NamespaceTree.n
typing/Typer.n
VladD2
svnadmin at nemerle.org
Tue Aug 15 17:51:10 CEST 2006
Log:
Completion logic update.
Author: VladD2
Date: Tue Aug 15 17:51:05 2006
New Revision: 6524
Modified:
nemerle/trunk/ncc/hierarchy/NamespaceTree.n
nemerle/trunk/ncc/typing/Typer.n
Modified: nemerle/trunk/ncc/hierarchy/NamespaceTree.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/NamespaceTree.n (original)
+++ nemerle/trunk/ncc/hierarchy/NamespaceTree.n Tue Aug 15 17:51:05 2006
@@ -71,6 +71,18 @@
Value = v;
}
+ public EnsureCached() : void
+ {
+ match (Value)
+ {
+ | NotLoaded (extType) => extType.ConstructTypeInfo (this, true)
+ | NotLoadedList (elems) =>
+ Value = TypeInfoCache.CachedAmbiguous (elems.Map (
+ fun (e) { e.ConstructTypeInfo (this, false); e.tycon }))
+ | _ => ()
+ }
+ }
+
[Nemerle.OverrideObjectEquals]
public Equals (other : Node) : bool {
if (other == null) false
Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n (original)
+++ nemerle/trunk/ncc/typing/Typer.n Tue Aug 15 17:51:05 2006
@@ -26,6 +26,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using SCG = System.Collections.Generic;
using Nemerle.Collections;
using Nemerle.Utility;
using Nemerle.Logging;
@@ -43,10 +44,19 @@
namespace Nemerle.Compiler
{
- [Record (Include = [Overloads, NamePrefix])]
+ public variant Elem
+ {
+ | Node { Name : string; node : NamespaceTree.Node; }
+ | Local { Value : LocalValue }
+ | Overloads { Values : list [OverloadPossibility]; }
+ }
+
+ [Record (Include = [Elems, NamePrefix])]
public class CompletionResult : System.Exception
{
- public Overloads : list [OverloadPossibility];
+ public Elems : SCG.IList [Elem];
+
+ //public Overloads : list [OverloadPossibility];
public NamePrefix : string;
[Accessor (flags = WantSetter)]
mutable object_type : MType;
@@ -1415,43 +1425,40 @@
| Some (lst)
| None with lst = [] => lst
}
- def compl_exc = CompletionResult (member_overloads + name_overloads, name.Id);
+
+ def elems = SCG.List ();
+ elems.Add(Elem.Overloads (member_overloads + name_overloads));
+
+ def compl_exc = CompletionResult (elems, name.Id);
compl_exc.ObjectType = tobj.Type.Fix();
throw compl_exc
| PT.PExpr.ToComplete (name) =>
def prefix = name.Id;
- def builder = CurrentMethodBuilder;
- mutable overloads = TypeNameFull (expression, expected, for_completion = true);
+ //def builder = CurrentMethodBuilder;
+ def overloads = TypeNameFull (expression, expected, for_completion = true);
+
+ def elems = SCG.List ();
+ elems.Add(Elem.Overloads (overloads));
// find locals
foreach ((name, local) when name.Id.StartsWith (prefix) in local_context.GetLocals ())
- overloads ::= LocalValueCompletionPossibility (
- this, local.Type, null, null, builder, null, local);
+ elems.Add(Elem.Local (local));
- // find namespaces
+ // find namespaces and types
- def find_namespaces (ns, processParent)
- {
- when (ns != null)
+ def find_namespaces (ns)
{
- when (ns.Children != null)
- foreach ((name, subNs) in ns.Children.KeyValuePairs)
- when (subNs.Value is NamespaceTree.TypeInfoCache.NamespaceReference && name.StartsWith (prefix))
- overloads ::= NamespaceCompletionPossibility (
- this, null, null, null, CurrentMethodBuilder, null, false, name, subNs.GetDisplayName ());
-
- when (processParent)
- find_namespaces (ns.Parent, processParent)
+ foreach ((name, node) in ns.Children.KeyValuePairs)
+ when (!(node.Value is NamespaceTree.TypeInfoCache.No) && name.StartsWith (prefix))
+ elems.Add(Elem.Node (name, node));
}
- }
-
- find_namespaces (env.CurrentNamespace.Parent, true);
- foreach (ns in env.OpenNamespaces)
- find_namespaces (ns, false);
+ find_namespaces (Manager.CoreEnv.CurrentNamespace);
+ foreach (ns when ns.Children != null in name.context.OpenNamespaces)
+ find_namespaces (ns);
- throw CompletionResult (overloads, prefix)
+ throw CompletionResult (elems, prefix)
| PT.PExpr.Member (_, _) =>
More information about the svn
mailing list