[svn] r6360: nemerle/trunk: ncc/CompilationOptions.n ncc/Makefile ncc/completion/CodeCompletionEngine.n nc...

trupill svnadmin at nemerle.org
Thu Jun 1 21:00:53 CEST 2006


Log:
Start changing of Completion Engine. Change nemerlish to stop using the 
engine until it is finished.


Author: trupill
Date: Thu Jun  1 21:00:44 2006
New Revision: 6360

Added:
   nemerle/trunk/ncc/testsuite/completion-playground/compl3.n
Removed:
   nemerle/trunk/ncc/completion/CompletionEngineTree.n
Modified:
   nemerle/trunk/ncc/CompilationOptions.n
   nemerle/trunk/ncc/Makefile
   nemerle/trunk/ncc/completion/CodeCompletionEngine.n
   nemerle/trunk/ncc/completion/CompletionEngineError.n
   nemerle/trunk/ncc/hierarchy/NamespaceTree.n
   nemerle/trunk/ncc/testsuite/completion-playground/compl2.n
   nemerle/trunk/tools/nemerlish/eval.n
   nemerle/trunk/tools/nemerlish/main.n

Modified: nemerle/trunk/ncc/CompilationOptions.n
==============================================================================
--- nemerle/trunk/ncc/CompilationOptions.n	(original)
+++ nemerle/trunk/ncc/CompilationOptions.n	Thu Jun  1 21:00:44 2006
@@ -179,6 +179,12 @@
       CommandDefines = CommandDefines.Replace (name, true);
     }
     
+    /// Removes given name as a command-line defined constant.
+    public UndefineConstant (name : string) : void
+    {
+      CommandDefines = CommandDefines.Replace (name, false);
+    }
+    
     /// Checks if given name was specified as command-line defined constant.
     public IsConstantDefined (name : string) : bool
     {

Modified: nemerle/trunk/ncc/Makefile
==============================================================================
--- nemerle/trunk/ncc/Makefile	(original)
+++ nemerle/trunk/ncc/Makefile	Thu Jun  1 21:00:44 2006
@@ -141,7 +141,6 @@
 	typing/Typer2.n			 \
 	completion/CodeCompletionEngine.n   \
 	completion/CompletionEngineError.n  \
-	completion/CompletionEngineTree.n   \
 
 
 NCC_EXE_SRC       = main.n

Modified: nemerle/trunk/ncc/completion/CodeCompletionEngine.n
==============================================================================
--- nemerle/trunk/ncc/completion/CodeCompletionEngine.n	(original)
+++ nemerle/trunk/ncc/completion/CodeCompletionEngine.n	Thu Jun  1 21:00:44 2006
@@ -72,33 +72,46 @@
         internal this (eng : Engine)
         {
             defines = [];
-            this.Engine = eng;
+            engine = eng;
         }
         
         internal mutable defines : list[string];
-        Engine : Completion.Engine;
+        engine : Completion.Engine;
         
-        public Add (Define : string) : void
+        public Add (define : string) : void
         {
-            defines ::= Define;
-            this.Engine.set_unparsed_state ();
+            unless (defines.Contains (define))
+            {
+                defines ::= define;
+                engine.Options.DefineConstant (define);
+                engine.Sources.set_unparsed_state ();
+            }
         }
         
-        public Remove (Define : string) : void
+        public Remove (define : string) : void
+        {
+            when (defines.Contains (define))
         {
-            _ = defines.Remove (Define);
-            this.Engine.set_unparsed_state ();
+                _ = defines.Remove (define);
+                engine.Options.UndefineConstant (define);
+                engine.Sources.set_unparsed_state ();
+            }
         }
         
-        public Contains (Define : string) : bool
+        public Contains (define : string) : bool
         {
-            defines.Contains (Define)
+            defines.Contains (define)
         }
         
         public Clear () : void
         {
+            unless (defines.Length == 0)
+            {
+                foreach (define in defines)
+                    engine.Options.UndefineConstant (define);
             defines = [];
-            this.Engine.set_unparsed_state();
+                engine.Sources.set_unparsed_state();
+            }
         }
         
         public GetEnumerator () : Nemerle.Collections.IEnumerator[string]
@@ -112,33 +125,61 @@
         internal this (eng : Engine)
         {
             references = Hashtable ();
-            this.Engine = eng;
+            engine = eng;
         }
         
         internal mutable references : Hashtable[string, InternalReference];
-        Engine : Completion.Engine;
+        engine : Completion.Engine;
         
-        public Add (Key : string, Path : string) : void
+        public Add (key : string, path : string) : void
         {
-            references.Add (Key, InternalReference.Library (Path));
-            this.Engine.set_unparsed_state ();
+            unless (references.Contains (key))
+            {
+                references.Add (key, InternalReference.Library (path));
+                engine.LibrariesManager.AddLibrary (path);
+            }
         }
         
-        public Add (Key : string, LoadedAssembly : System.Reflection.Assembly) : void
+        public Add (key : string, loadedAssembly : System.Reflection.Assembly) : void
+        {
+            unless (references.Contains (key))
         {
-            references.Add (Key, InternalReference.Assembly (LoadedAssembly));
-            this.Engine.set_unparsed_state ();
+                references.Add (key, InternalReference.Assembly (loadedAssembly));
+                engine.LibrariesManager.AddAssembly (loadedAssembly);
+            }
         }
         
-        public Remove (Key : string) : void
+        public Remove (key : string) : void
+        {
+            when (references.Contains (key))
         {
-            references.Remove (Key);
+                references.Remove (key);
+                engine.state = EngineState.Pure;
+                engine.Sources.set_unparsed_state ();
+                
+                foreach (reference in references.Values)
+                {
+                | Library as l => engine.LibrariesManager.AddLibrary (l.path);
+                | Assembly as a => engine.LibrariesManager.AddAssembly (a.assembly);
+                }
+            }
         }
         
         public Clear () : void
         {
             references = Hashtable ();
-            this.Engine.set_unparsed_state();
+            engine.state = EngineState.Pure;
+            engine.Sources.set_unparsed_state ();
+        }
+        
+        public ContainsKey (key : string) : bool
+        {
+            references.ContainsKey (key)
+        }
+        
+        public GetKeys () : System.Collections.Generic.IEnumerable[string]
+        {
+            references.Keys
         }
     }
     
@@ -157,14 +198,17 @@
         
         internal mutable sources : Hashtable[string, ParsedFile];
 
-        public Add (File : string, Contents : string) : void
+        public Add (file : string, contents : string) : void
         {
-            sources.Add (File, ParsedFile.NotParsed (Contents));
+            if (sources.ContainsKey (file))
+                sources [file] = ParsedFile.NotParsed (contents);
+            else
+                sources.Add (file, ParsedFile.NotParsed (contents));
         }
         
-        public Remove (File : string) : void
+        public Remove (dile : string) : void
         {
-            sources.Remove (File);
+            sources.Remove (dile);
             set_unparsed_state ();
         }
         
@@ -187,6 +231,16 @@
                 sources [item [0]] = ParsedFile.NotParsed (item [1]);
             }
         }
+        
+        public ContainsKey (file : string) : bool
+        {
+            sources.ContainsKey (file)
+        }
+        
+        public GetKeys () : System.Collections.Generic.IEnumerable[string]
+        {
+            sources.Keys
+        }
     }
    
     public class Engine : ManagerClass
@@ -196,16 +250,10 @@
         public Sources : SourceCollection;
         
         [Accessor]
-        mutable state : EngineState;
+        internal mutable state : EngineState;
         
         syncObject : object;
 
-        internal set_unparsed_state () : void
-        {
-          state = EngineState.Pure;
-          Sources.set_unparsed_state ();
-        }
-
         mutable is_completion : bool;        
         public override IsInCompletionMode : bool {
           get { is_completion }
@@ -282,14 +330,11 @@
             }
         }
         
-        public RunCompletionEngine (memberInfo : NemerleMemberInfo, contents : string) : CompletionInfo
-        {
-            lock (syncObject)
+        public RunCompletionEngine (member : IMember, contents : string) : array[OverloadPossibility]
             {
                 // Tell the methods we are in completion mode
                 is_completion = true;
-                def theMember = memberInfo._member;
-                def observed_method = theMember :> MethodBuilder;
+            def observed_method = member :> MethodBuilder;
                 
                 mutable completionList  = null;
                 when (observed_method != null) {
@@ -306,21 +351,22 @@
                     }
                     catch
                     {
-                    | e is CompletionResult => completionList = translate_ovpossibility_to_info (e.Overloads);
+                | e is CompletionResult => completionList = e.Overloads;
                     | e => System.Console.WriteLine (e.Message);
                     }
                 }
-                is_completion = false;
-                completionList
-            }
+            
+            if (completionList == null)
+                array (0)
+            else
+                completionList.ToArray ()
         }
         
         mutable listMessages : list[CompilerMessage];
         process_error_message (location : Location, message : string) : void
         {
             mutable error = CompilerMessage();
-            error.Location = CodeLocation(location.File, location.Line, location.Column,
-                location.EndLine, location.EndColumn);
+            error.Location = location;
             if (message.IndexOf ("error: ") != -1)
             {
                 error.Message = message.Substring (message.IndexOf ("error: ")).Replace ("error: ", "");
@@ -341,245 +387,11 @@
             }
         }
         
-        # region Code completion
-        
-        public translate_ovpossibility_to_info (ovpos : list[OverloadPossibility]) : CompletionInfo
-        {
-            mutable info : CompletionInfo = null;
-            if (ovpos.Length == 0)
-                info = null;
-            else
-            {
-                mutable complete_types = false;
-                def first = ovpos.Head;
-                when (first.Member.Name == ".ctor" || first.Member.Name == ".cctor" ||
-                    first.Member is TypeInfo) {
-                   complete_types = true;
-                }
-
-                if (complete_types)
-                {
-                    def cinfo = CompletionTypes ();
-                    
-                    def ns_node = first.from.tycon.NamespaceNode.Parent;
-                    mutable already_added = [];
-                    foreach (child in ns_node.children)
-                    {
-                        match (child.Value.Value) {
-                        | Cached (tycon) => def type_name = child.Key.TrimEnd('*').TrimEnd ('1', '2', '3', '4').TrimEnd('`');
-                            when (!already_added.Contains (type_name))
-                            {
-                                cinfo.AddType (complete_type (tycon));
-                                already_added ::= type_name;
-                            }
-                        //| NotLoaded (tycon) => System.Console.WriteLine ("notloaded " + child.Key);
-                        | NamespaceReference => cinfo.AddNamespace (child.Key);
-                        | _ => ();
-                        }
-                    }
-                    
-                    info = cinfo;
-                }
-                else
-                {
-                    def cinfo = CompletionMembers ();
-                    try {
-                    foreach (possibility in ovpos) {
-                      match (possibility.Member) {
-                      | y is IField => cinfo.AddMember (complete_field (y));
-                      | y is IMethod => cinfo.AddMember (complete_method (y));
-                      | y is IProperty => cinfo.AddMember (complete_property (y));
-                      | y is IEvent => cinfo.AddMember (complete_event (y));
-                      // | y is TypeInfo => cinfo.AddMember (complete_type (y));
-                      | _ => ();
-                      }
-                    }
-                    info = cinfo;
-                    }
-                    catch {
-                    | e => System.Console.WriteLine (e.Message + "\n" + e.StackTrace);
-                    }
-                 }
-            }
-            info
-        }
-        
-        static complete_common_member_props (member : IMember, info : NemerleMemberInfo) : void
-        {
-            info.Name = member.Name;
-            
-            info.IsStatic = member.IsStatic;
-            info.IsPublic = member.Attributes %&& NemerleAttributes.Public;
-            info.IsPrivate = member.Attributes %&& NemerleAttributes.Private;
-            info.IsProtected = member.Attributes %&& NemerleAttributes.Protected;
-            info.IsInternal = member.Attributes %&& NemerleAttributes.Internal;
-        }
-
-        
-        complete_field (field : IField) : FieldInfo
-        {
-            mutable returnField = FieldInfo();
-            complete_common_member_props(field, returnField);
-            
-            if (field is FieldBuilder)
-                returnField.Type = construct_type ((field :> FieldBuilder).GetMemType());
-            else
-                returnField.Type = ConstructedTypeInfo.Class ( 
-                    ReferencedTypeInfo (field.GetFieldInfo ().FieldType), array (0));
- 
-            returnField.IsMutable = field.IsMutable;
-            returnField.IsVolatile = field.IsVolatile;
-            returnField.IsLiteral = field.IsLiteral;
-            
-            if (field.IsLiteral) {
-                def value = field.GetValue();
-                match (value) {
-                    | Void
-                    | Null => returnField.Value = null;
-                    | String as s => returnField.Value = s.val;
-                    | Float as f => returnField.Value = f.val;
-                    | Double as d => returnField.Value = d.val;
-                    | Decimal as dec => returnField.Value = dec.val;
-                    | Char as ch => returnField.Value = ch.val;
-                    | Bool as b => returnField.Value = b.val;
-                    | Integer as i => if (i.is_negative) returnField.Value = - (i.val :> long);
-                                      else returnField.Value = i.val;
-                    | Enum as l => if (l.val.is_negative) returnField.Value = - (l.val.val :> long);
-                                   else returnField.Value = l.val.val;
-                }
-            }
-            else
-                returnField.Value = null;
-            
-            returnField
-        }
-
-        complete_method (method : IMethod) : MethodInfo
-        {
-            mutable returnMethod = MethodInfo();
-            complete_common_member_props(method, returnMethod);
-            
-            def attributes = method.Attributes;
-            returnMethod.IsAbstract = attributes %&& NemerleAttributes.Abstract;
-            returnMethod.IsFinal = attributes %&& NemerleAttributes.Sealed;
-            returnMethod.IsOverride = attributes %&& NemerleAttributes.Override;
-            returnMethod.IsVirtual = attributes %&& NemerleAttributes.Virtual;    
-            returnMethod.IsNew = attributes %&& NemerleAttributes.New;
-            returnMethod.IsExtern = attributes %&& NemerleAttributes.Extern;
-            
-            returnMethod.IsConstructor = false;
-            returnMethod.IsStaticConstructor = false;
-            match (method.GetFunKind()){
-                | FunKind.Constructor => returnMethod.IsConstructor = true;
-                | FunKind.StaticConstructor => returnMethod.IsStaticConstructor = true;
-                | _ => ();
-            }
-            
-            if (method.ReturnType == null)
-                returnMethod.ReturnType = null;
-            else
-                returnMethod.ReturnType = construct_type (method.ReturnType :> MType);
-            
-            def param = method.GetParameters();
-            def listParams = List.Map (param, get_parm);
-            returnMethod.Parameters = listParams.ToArray ();
-            def typarms = method.GetHeader().typarms;
-            def listTyparms = List.Map (typarms, get_typarm);
-            returnMethod.TypeParameters = listTyparms.ToArray ();
-            
-            returnMethod
-        }
-        
-        complete_property (property : IProperty) : PropertyInfo
-        {
-            mutable returnProperty = PropertyInfo();
-            complete_common_member_props (property, returnProperty);
-            if (property is PropertyBuilder)
-                returnProperty.Type = construct_type ((property :> PropertyBuilder).GetMemType());
-            else
-                returnProperty.Type = ConstructedTypeInfo.Class ( 
-                    ReferencedTypeInfo (property.GetPropertyInfo().PropertyType), array(0));
-            returnProperty.IsMutable = property.IsMutable;
-            returnProperty.IsIndexer = property.IsIndexer;
-            
-            def attributes = property.Attributes;
-            returnProperty.IsAbstract = attributes %&& NemerleAttributes.Abstract;
-            returnProperty.IsFinal = attributes %&& NemerleAttributes.Sealed;
-            returnProperty.IsOverride = attributes %&& NemerleAttributes.Override;
-            returnProperty.IsVirtual = attributes %&& NemerleAttributes.Virtual;    
-            returnProperty.IsNew = attributes %&& NemerleAttributes.New;
-            returnProperty.IsExtern = attributes %&& NemerleAttributes.Extern;
-
-            if (property.GetGetter() == null)
-                returnProperty.Getter = null;
-            else
-                returnProperty.Getter = complete_method (property.GetGetter());
-           
-            if (property.GetSetter() == null)
-                returnProperty.Setter = null;
-            else
-                returnProperty.Setter = complete_method (property.GetSetter());
-                
-            returnProperty
-        }
-
-        complete_event (ev : IEvent) : EventInfo
-        {
-            mutable returnEvent = EventInfo();
-            complete_common_member_props (ev, returnEvent);
-            if (ev is EventBuilder)
-                returnEvent.Type = construct_type ((ev :> EventBuilder).GetMemType());
-            else
-                returnEvent.Type = ConstructedTypeInfo.Class ( 
-                    ReferencedTypeInfo (ev.GetEventInfo().EventHandlerType), array(0));
-
-            if (ev.GetAdder() == null)
-                returnEvent.Adder = null;
-            else
-                returnEvent.Adder = complete_method (ev.GetAdder());
-             
-            if (ev.GetRemover() == null)
-                returnEvent.Remover = null;
-            else
-                returnEvent.Remover = complete_method (ev.GetRemover());
-             
-            returnEvent
-        }
-        
-        complete_type (t : TypeInfo) : NemerleTypeInfo
-        {
-        | x is TypeBuilder => get_type (x)
-        | _ => ReferencedTypeInfo (t.SystemType)
-        }
-        
-        # endregion
-        
-        # region Type Tree building
-        /** This section of code is used to build the Type Tree
-            All errors are handled doing nothing. We just try to
-            have the most information we could take, but if there's
-            some error in the code, the engine must continue */
-        mutable listTypes : list[DeclaredTypeInfo];
-        mutable uniqueTypesTable : Hashtable[string, DeclaredTypeInfo];
-        mutable tree : TypeTree;
-        
-        public GetTypeTree () : TypeTree
-        {
-            lock (syncObject)
+        public GetTypeTree () : NamespaceTree.Node
             {
                 Instance = this;
-                tree = TypeTree ();
                 Init ();
             
-                foreach (define in Defines.defines)
-                    Options.DefineConstant (define);
-            
-                foreach (references in References.references.Values)
-                {
-                | Library as l => this.LibrariesManager.AddLibrary (l.path);
-                | Assembly as a => this.LibrariesManager.AddAssembly (a.assembly);
-                }
-    
                 System.Console.WriteLine ("just before lexing");
                 mutable trees = [];
                 try
@@ -610,7 +422,6 @@
                 }
                 
                 System.Console.WriteLine ("just before TypesManager");
-
                 this.Hierarchy = TypesManager (this);
     
                 // create N.C.TypeBuilders for all parsed types and add them to namespace hierarchy
@@ -644,377 +455,8 @@
                       {}
                 }
                 
-                listTypes = [];
-                uniqueTypesTable = Hashtable ();
-                
-                loop (this.NameTree.namespace_tree);
-                tree.Types = listTypes.ToArray ();
-                
-                tree
-             }
-         }
-             
-         loop (x : NamespaceTree.Node) : void
-         {
-             foreach ( pair in x.children )
-             {
-                 def node = pair.Value;
-                 match (node.Value) {
-                 | NamespaceReference => loop(node);
-                 | Cached as c =>
-                     match (c.tycon) {
-                       | tb is TypeBuilder =>
-                         listTypes ::= get_type (tb);
-                       | _ => ();
-                     }
-                 | _ => ()
+            this.NameTree.namespace_tree
                  }
-             }
-         }
-         
-         get_type (t : TypeBuilder) : DeclaredTypeInfo
-         {
-             mutable uniqueName = t.FrameworkTypeName;
-             
-             if (uniqueTypesTable.Contains(uniqueName))
-                 uniqueTypesTable[uniqueName]
-             else 
-             {
-                 mutable returnType = DeclaredTypeInfo();
-                 uniqueTypesTable.Add(uniqueName, returnType);
-                 try
-                 {
-                     def suffixPos = t.Name.IndexOfAny(array['*', '`']);
-                     returnType.Name = 
-                       if (suffixPos >= 0) t.Name.Substring(0, suffixPos);
-                       else                t.Name;
-
-                     if (t.DeclaringType == null) {
-                         returnType.Namespace = t.NamespaceNode.Parent.Name.ToString(".");
-                         returnType.IsNested = false;
-                     }
-                     else {
-                         returnType.Namespace = (t.DeclaringType :> TypeBuilder).NamespaceNode.Parent.Name.ToString(".");
-                         returnType.IsNested = true;
-                     }
-                     
-                     returnType.Location = CodeLocation (t.Location.File, t.Location.Line,
-                         t.Location.Column, t.Location.EndLine, t.Location.EndColumn);
-                     returnType.IsSealed = t.IsSealed;
-                     returnType.IsAbstract = t.IsAbstract;
-                     
-                     returnType.IsInterface = t.IsInterface;
-                     returnType.IsDelegate = t.IsDelegate;
-                     returnType.IsEnum = t.IsEnum;
-                     returnType.IsValueType = t.IsValueType;
-                     returnType.IsModule = t.IsModule;
-                     returnType.IsAlias = t.IsAlias;
-                     returnType.IsStruct = t.IsStruct;
-                     returnType.IsVariant = (t.GetVariantOptions().Length > 0);
-                     
-                     returnType.IsPublic = t.IsPublic;
-                     returnType.IsInternal = t.IsInternal;
-                     returnType.IsProtected = t.IsProtected;
-                     returnType.IsPrivate = t.IsPrivate;
-                     
-                     match (t.DefaultIndexerName) {
-                         | None => returnType.DefaultIndexerName = null;
-                         | Some (x) => returnType.DefaultIndexerName = x;
-                     }
-                     if (t.DeclaringType == null)
-                         returnType.DeclaringType = null;
-                     else
-                         returnType.DeclaringType = get_type(t.DeclaringType :> TypeBuilder);
-                     
-                     mutable listFields = [];
-                     mutable listMethods = [];
-                     mutable listProperties = [];
-                     mutable listEvents = [];
-                     mutable listNestedTypes = [];
-                     
-                     // Add all members to type information
-                     def members = t.GetDirectMembers();
-                     foreach (member in members){
-                         | x is FieldBuilder => listFields ::= get_field (x);
-                         | x is MethodBuilder => listMethods ::= get_method (x);
-                         | x is PropertyBuilder => listProperties ::= get_property (x);
-                         | x is EventBuilder => listEvents ::= get_event (x);
-                         | x is TypeBuilder => listNestedTypes ::= get_type (x);
-                         | x => throw System.Exception (x.ToString ())
-                     }
-                     
-                     returnType.Fields = listFields.ToArray ();
-                     returnType.Methods = listMethods.ToArray ();
-                     returnType.Properties = listProperties.ToArray ();
-                     returnType.Events = listEvents.ToArray ();
-                     returnType.NestedTypes = listNestedTypes.ToArray ();
-                     
-                     def listVarOpts = t.GetVariantOptions();
-                     def listVarOptsReal = listVarOpts.Map (get_type);
-                     returnType.VariantOptions = listVarOptsReal.ToArray ();
-                     
-                     returnType.BaseType = get_type_info (t.BaseType);
-                     def listInterf = t.InterfacesToImplement ();
-                     def listInterfaces = listInterf.Map (get_type_info);
-                     returnType.Interfaces = listInterfaces.ToArray ();
-                     
-                     def typarms = t.GetTyparms ();
-                     def listTyparms = typarms.Map (get_typarm);
-                     returnType.TypeParameters = listTyparms.ToArray ();
-                 }
-                 catch
-                 {
-                     | _ => ();
-                 }
-                 
-                 returnType
-             }
-         }
-         
-         get_type_info (x : TypeInfo) : NemerleTypeInfo
-         {
-             if (x == null)
-                 null
-             else {
-                 match (x) {
-                   | x is TypeBuilder => get_type (x)
-                   | _ => ReferencedTypeInfo (x.SystemType)
-                 }
-             }
-         }
-         
-         static fill_common_member_props (member : MemberBuilder, info : NemerleMemberInfo) : void
-         {
-             info.Name = member.Name;
-             info.Location = CodeLocation (member.BodyLocation.File, member.BodyLocation.Line, 
-                 member.BodyLocation.Column, member.BodyLocation.EndLine, member.BodyLocation.EndColumn);
-             
-             info.IsStatic = member.IsStatic;
-             info.IsPublic = member.IsPublic;
-             info.IsPrivate = member.IsPrivate;
-             info.IsProtected = member.IsProtected;
-             info.IsInternal = member.IsInternal;
-             info._member = member;
-         }
-         
-         construct_type (t : MType) : ConstructedTypeInfo
-         {
-            | Class as c =>
-                 def returnClass = ConstructedTypeInfo.Class();
-                 returnClass.Type = match (c.tycon) {
-                   | x is TypeBuilder => get_type (x)
-                   | x => ReferencedTypeInfo (x.SystemType)
-                 }
-                 def listArgs = List.Map(c.args, fun(x) {
-                   | x is MType => construct_type(x)
-                   | _ => null
-                 });
-                 returnClass.SubstitutedArguments = listArgs.ToArray ();
-                 returnClass
-                 
-             | TyVarRef as r =>
-                 def returnStaTyVar = ConstructedTypeInfo.GenericSpecifier();
-                 returnStaTyVar.Name = r.tyvar.Name;
-                 def listTypes = List.Map(r.tyvar.Constraints, construct_type);
-                 returnStaTyVar.TypeConstraints = listTypes.ToArray ();
-                 returnStaTyVar.SpecialConstraints = (r.tyvar.SpecialConstraints :> int) 
-                     :> Nemerle.Completion.Constraint;
-                 returnStaTyVar
-            
-             | Fun as f =>
-                 def returnFun = ConstructedTypeInfo.Function();
-                 returnFun.From = construct_type (f.from :> MType);
-                 returnFun.To = construct_type (f.to :> MType);
-                 returnFun
-             
-             | Tuple as tuple =>
-                 def returnTuple = ConstructedTypeInfo.Tuple();
-                 def listTypes = List.Map (tuple.args, fun(x) {construct_type (x :> MType)});
-                 returnTuple.Types = listTypes.ToArray ();
-                 returnTuple
-                 
-             | Array as a =>
-                 def returnArray = ConstructedTypeInfo.Array();
-                 returnArray.Type = construct_type (a.t :> MType);
-                 returnArray.Rank = a.rank;
-                 returnArray
-            
-             | Void => ConstructedTypeInfo.Void()
-             | _ => null // Ref and out are only available in parameters,
-                         // so they should never appear here
-         }
-         
-         get_field (field : FieldBuilder) : FieldInfo
-         {
-             mutable returnField = FieldInfo();
-             fill_common_member_props (field, returnField);
-             
-             returnField.Type = construct_type (field.GetMemType());
-             returnField.IsMutable = field.IsMutable;
-             returnField.IsVolatile = field.IsVolatile;
-             returnField.IsLiteral = field.IsLiteral;
-             
-             if (field.IsLiteral) {
-                 def value = field.GetValue();
-                 match (value) {
-                     | Void
-                     | Null => returnField.Value = null;
-                     | String as s => returnField.Value = s.val;
-                     | Float as f => returnField.Value = f.val;
-                     | Double as d => returnField.Value = d.val;
-                     | Decimal as dec => returnField.Value = dec.val;
-                     | Char as ch => returnField.Value = ch.val;
-                     | Bool as b => returnField.Value = b.val;
-                     | Integer as i => if (i.is_negative) returnField.Value = - (i.val :> long);
-                                       else returnField.Value = i.val;
-                     | Enum as l => if (l.val.is_negative) returnField.Value = - (l.val.val :> long);
-                                    else returnField.Value = l.val.val;
-                 }
-             }
-             else
-                 returnField.Value = null;
-             
-             returnField
-         }
-         
-         get_method (method : MethodBuilder) : MethodInfo
-         {
-             mutable returnMethod = MethodInfo();
-             fill_common_member_props(method, returnMethod);
-             
-             returnMethod.IsVarArgs = method.IsVarArgs;
-             def attributes = method.Attributes;
-             returnMethod.IsAbstract = attributes %&& NemerleAttributes.Abstract;
-             returnMethod.IsFinal = attributes %&& NemerleAttributes.Sealed;
-             returnMethod.IsOverride = attributes %&& NemerleAttributes.Override;
-             returnMethod.IsVirtual = attributes %&& NemerleAttributes.Virtual;    
-             returnMethod.IsNew = attributes %&& NemerleAttributes.New;
-             returnMethod.IsExtern = attributes %&& NemerleAttributes.Extern;
-             
-             returnMethod.IsConstructor = false;
-             returnMethod.IsStaticConstructor = false;
-             match (method.GetFunKind()){
-                 | FunKind.Constructor => returnMethod.IsConstructor = true;
-                 | FunKind.StaticConstructor => returnMethod.IsStaticConstructor = true;
-                 | _ => ();
-             }
-             
-             if (method.ReturnType == null)
-                 returnMethod.ReturnType = null;
-             else
-                 returnMethod.ReturnType = construct_type (method.ReturnType :> MType);
-             
-             def param = method.GetParameters();
-             def listParams = List.Map (param, get_parm);
-             returnMethod.Parameters = listParams.ToArray ();
-             def typarms = method.GetHeader().typarms;
-             def listTyparms = List.Map (typarms, get_typarm);
-             returnMethod.TypeParameters = listTyparms.ToArray ();
-             
-             returnMethod
-         }
-         
-         get_parm (parm : Typed.Fun_parm) : ParameterInfo
-         {
-             mutable returnParam = ParameterInfo();
-             returnParam.Name = parm.name;
-             
-             returnParam.IsRefParameter = false;
-             returnParam.IsOutParameter = false;
-             match (parm.ty :> MType) {
-                 | Ref (x) => returnParam.IsRefParameter = true;
-                              returnParam.Type = construct_type (x :> MType);
-                 | Out (x) => returnParam.IsOutParameter = true;
-                              returnParam.Type = construct_type (x :> MType);
-                 | _ as x => returnParam.Type = construct_type (x);
-             }
-             
-             match (parm.default_value) {
-                 | None => returnParam.HasDefaultValue = false;
-                           returnParam.DefaultValue = null;
-                 | Some (value) => returnParam.HasDefaultValue = true;
-                     match (value) {
-                         | Void
-                         | Null => returnParam.DefaultValue = null;
-                         | String as s => returnParam.DefaultValue = s.val;
-                         | Float as f => returnParam.DefaultValue = f.val;
-                         | Double as d => returnParam.DefaultValue = d.val;
-                         | Decimal as dec => returnParam.DefaultValue = dec.val;
-                         | Char as ch => returnParam.DefaultValue = ch.val;
-                         | Bool as b => returnParam.DefaultValue = b.val;
-                         | Integer as i => if (i.is_negative) returnParam.DefaultValue = - (i.val :> long);
-                                           else returnParam.DefaultValue = i.val;
-                         | Enum as l => if (l.val.is_negative) returnParam.DefaultValue = - (l.val.val :> long);
-                                        else returnParam.DefaultValue = l.val.val;
-                     }
-             }
-             
-             returnParam
-         }
-         
-         get_typarm (typarm : StaticTyVar) : TypeParameterInfo
-         {
-             mutable returnTyparm = TypeParameterInfo();
-             returnTyparm.Name = typarm.Name;
-             def listTypes = List.Map (typarm.Constraints, construct_type);
-             returnTyparm.TypeConstraints = listTypes.ToArray ();
-             returnTyparm.SpecialConstraints = (typarm.SpecialConstraints :> int) 
-                 :> Nemerle.Completion.Constraint;
-             returnTyparm
-         }
-         
-         get_property (property : PropertyBuilder) : PropertyInfo
-         {
-             mutable returnProperty = PropertyInfo();
-             fill_common_member_props (property, returnProperty);
-             returnProperty.Type = construct_type (property.GetMemType());
-
-             returnProperty.IsMutable = property.IsMutable;
-             returnProperty.IsIndexer = property.IsIndexer;
-             def listIndexParams = List.Map (property.parms, construct_type);
-             returnProperty.IndexerParameters = listIndexParams.ToArray ();
-             
-             def attributes = property.Attributes;
-             returnProperty.IsAbstract = attributes %&& NemerleAttributes.Abstract;
-             returnProperty.IsFinal = attributes %&& NemerleAttributes.Sealed;
-             returnProperty.IsOverride = attributes %&& NemerleAttributes.Override;
-             returnProperty.IsVirtual = attributes %&& NemerleAttributes.Virtual;    
-             returnProperty.IsNew = attributes %&& NemerleAttributes.New;
-             returnProperty.IsExtern = attributes %&& NemerleAttributes.Extern;
-
-             if (property.GetGetter() == null)
-                 returnProperty.Getter = null;
-             else
-                 returnProperty.Getter = get_method (property.GetGetter() :> MethodBuilder);
-            
-             if (property.GetSetter() == null)
-                 returnProperty.Setter = null;
-             else
-                 returnProperty.Setter = get_method (property.GetSetter() :> MethodBuilder);
-                 
-             returnProperty
-         }
-         
-         get_event (ev : EventBuilder) : EventInfo
-         {
-             mutable returnEvent = EventInfo();
-             fill_common_member_props (ev, returnEvent);
-             returnEvent.Type = construct_type (ev.GetMemType());
-
-             if (ev.GetAdder() == null)
-                 returnEvent.Adder = null;
-             else
-                 returnEvent.Adder = get_method (ev.GetAdder());
-             
-             if (ev.GetRemover() == null)
-                 returnEvent.Remover = null;
-             else
-                 returnEvent.Remover = get_method (ev.GetRemover());
-             
-             returnEvent
-         }
-         # endregion
-         
     } // end class CodeCompletionEngine
 } // end namespace
 

Modified: nemerle/trunk/ncc/completion/CompletionEngineError.n
==============================================================================
--- nemerle/trunk/ncc/completion/CompletionEngineError.n	(original)
+++ nemerle/trunk/ncc/completion/CompletionEngineError.n	Thu Jun  1 21:00:44 2006
@@ -41,7 +41,7 @@
     public class CompilerMessage
     {
         public mutable Message : string;
-        public mutable Location : CodeLocation;
+        public mutable Location : Location;
         public mutable MessageKind : MessageKind;
     }
     

Modified: nemerle/trunk/ncc/hierarchy/NamespaceTree.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/NamespaceTree.n	(original)
+++ nemerle/trunk/ncc/hierarchy/NamespaceTree.n	Thu Jun  1 21:00:44 2006
@@ -52,6 +52,8 @@
       public Parent : Node;
       name : string; // the same as edge from parent to this
       public mutable Value : TypeInfoCache;
+      
+      [Accessor]
       internal mutable children : Hashtable [string, Node];
       
       public this (parent : Node, n : string, v : TypeInfoCache) {

Modified: nemerle/trunk/ncc/testsuite/completion-playground/compl2.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/completion-playground/compl2.n	(original)
+++ nemerle/trunk/ncc/testsuite/completion-playground/compl2.n	Thu Jun  1 21:00:44 2006
@@ -74,3 +74,4 @@
 try_completion ("Q");
 try_completion ("System.");
 try_completion ("System.Reflection.");
+try_completion ("def s = System.Collections.Generic.List (); s.");

Added: nemerle/trunk/ncc/testsuite/completion-playground/compl3.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/ncc/testsuite/completion-playground/compl3.n	Thu Jun  1 21:00:44 2006
@@ -0,0 +1,84 @@
+using Nemerle.Compiler;
+using Nemerle.Completion;
+using Nemerle.Collections;
+using System.IO;
+using System.Console;
+
+def engine = Engine ();
+def files = Hashtable ();
+def rawArgs = List.FromArray (System.Environment.GetCommandLineArgs ());
+def (progName, args) = rawArgs.Head::rawArgs.Tail;
+when (args.Length == 0) {
+	WriteLine($"usage: $progName <filename>\n"+
+		       "       <filename> is the Nemerle source code you want "+
+	           "to pass to the \n"+
+	           "       code completion engine");
+	System.Environment.Exit(1);
+}
+foreach (arg in args) {
+  using (sr = StreamReader (arg)) {
+    def str = sr.ReadToEnd ();
+    engine.Sources.Add (arg, str);
+    files [arg] = str;
+  }
+}
+
+def type_tree = engine.GetTypeTree ();
+def _second_tree = engine.GetTypeTree ();
+// mutable the_method = null;
+
+def loop (x) : void
+{
+    foreach ( node in x.Children.Values )
+    {
+        match (node.Value) {
+          | NamespaceReference => loop(node);
+          | Cached as c =>
+              match (c.tycon) {
+                | tb is TypeBuilder => System.Console.WriteLine (tb.FrameworkTypeName);
+                | _ => ();
+              }
+          | _ => ()
+        }
+    }
+}
+
+System.Console.WriteLine ("FOUND TYPES\n===========");
+loop (type_tree);
+
+/*def try_completion (body) {
+  System.Console.WriteLine ("\nTrying to complete:");
+  System.Console.WriteLine (body);
+  def info = engine.RunCompletionEngine (the_method, body);
+  if (info == null) {
+    System.Console.WriteLine ("NO MEMBER FOUND");
+  }
+  else {
+    if (info.CompletionKind == CompletionKind.Members) {
+      System.Console.WriteLine ("FOUND MEMBERS\n=============");
+      def members = info :> CompletionMembers;
+      foreach (member in members.Members)
+        System.Console.WriteLine (member.Name);
+    }
+    else {
+      System.Console.WriteLine ("FOUND TYPES\n===========");
+      def types = info :> CompletionTypes;
+      foreach (t in types.Types) {
+        if (t.TypeKind == NemerleTypeKind.DeclaredType)
+          System.Console.WriteLine ((t :> DeclaredTypeInfo).Name);
+        else
+          System.Console.WriteLine ((t :> ReferencedTypeInfo).Type.Name);
+      } 
+    }
+  }
+  System.Console.WriteLine ("Finished");
+}
+
+try_completion ("this.Fo");
+try_completion ("def a = \"a\"; a.L");
+try_completion ("string.For");
+try_completion ("string.");
+try_completion ("Q");
+try_completion ("System.");
+try_completion ("System.Reflection.");
+try_completion ("def s = System.Collections.Generic.List (); s.");*/

Modified: nemerle/trunk/tools/nemerlish/eval.n
==============================================================================
--- nemerle/trunk/tools/nemerlish/eval.n	(original)
+++ nemerle/trunk/tools/nemerlish/eval.n	Thu Jun  1 21:00:44 2006
@@ -182,7 +182,8 @@
     // provides a list of possible completion types and members
     mutable static IsCompletionMode : bool = false;
     
-    public Complete (code: string) : Nemerle.Completion.CompletionInfo {
+    // commented out until the new completion engine in finished
+    /*public Complete (code: string) : Nemerle.Completion.CompletionInfo {
       IsCompletionMode = true;
       Evaluator.code = code;
       this.InitOutput (System.IO.StreamWriter (System.IO.MemoryStream ()));
@@ -253,7 +254,7 @@
 
       IsCompletionMode = false;
       completionList
-    }
+    }*/
   
     internal DoTheStuff (_tdecl : Parsetree.TopDeclaration) : void 
     {

Modified: nemerle/trunk/tools/nemerlish/main.n
==============================================================================
--- nemerle/trunk/tools/nemerlish/main.n	(original)
+++ nemerle/trunk/tools/nemerlish/main.n	Thu Jun  1 21:00:44 2006
@@ -148,7 +148,8 @@
         } 
       }
       
-      def get_type_name (t: ConstructedTypeInfo) : string {
+      // Commented out until new completion engine is finished
+      /*def get_type_name (t: ConstructedTypeInfo) : string {
         mutable name = "";
         if (t is ConstructedTypeInfo.Array) {
           def ar = t :> ConstructedTypeInfo.Array;
@@ -234,11 +235,11 @@
             .Replace ("Nemerle.Core.list", "list");
         
         name
-      }
+      }*/
       
       def printcomp (c)
       {
-        def information = e.Complete (c);
+        /*def information = e.Complete (c);
         when (information is CompletionMembers)
         {
           def possibilities = (information :> CompletionMembers); 
@@ -249,9 +250,9 @@
             def reversePossibilities = Nemerle.Collections.List.FromArray (possibilities.Members).Reverse ();
             foreach (possibility in reversePossibilities)
             {
-              /*match (possibility.CompletionKind)
-              {
-              | Member => def minfo = possibility :> CompletionMember;*/
+              // match (possibility.CompletionKind)
+              // {
+              // | Member => def minfo = possibility :> CompletionMember;
                   match (possibility) {
                   | f is FieldInfo => mutable name = f.Name;
                       when (f.IsMutable)
@@ -301,43 +302,10 @@
                       SC.WriteLine (name);
                   | _ => ();
                   }
-    
-              /*| Type => def tinfo = possibility :> CompletionType;
-                  match (tinfo.TypeInfo) {
-                  | decl is DeclaredTypeInfo => mutable name = "";
-                      if (decl.IsNested)
-                        name = decl.Namespace + "." + decl.Name;
-                      else
-                        name = decl.DeclaringType.Namespace + "." 
-                          + decl.DeclaringType.Name + "+" + decl.Name;
-                      when (decl.TypeParameters.Length > 0) {
-                        name += "[";
-                        mutable whereClauses = "";
-                        foreach (typarm in decl.TypeParameters) {
-                          name += typarm.Name + ", ";
-                          when (typarm.TypeConstraints.Length > 0) {
-                            whereClauses += " where " + typarm.Name + " : ";
-                            foreach (constraint in typarm.TypeConstraints) {
-                              whereClauses += get_type_name (constraint) + ", ";
-                            }
-                            whereClauses = whereClauses.TrimEnd (',', ' ');
-                          }
                         }
-                        name += name.TrimEnd (',', ' ') + whereClauses;
-                      }
-                      SC.WriteLine (name);
-                      
-                  | refe is ReferencedTypeInfo => def tyinfo = refe.Type;
-                      mutable name = tyinfo.FullName;
-                      SC.WriteLine (name);
-                  
-                  | _ => ();
                   }
               }*/
             }  
-          }
-        }
-      }
       
       def rl = NativeReadLine.GetInstance ();
       // def rl = ConsoleReadLine ();



More information about the svn mailing list