[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