X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Frepl.txt;h=ed3fe9bf48ae89dc864699f8db50a87ebc06dc86;hb=631d194f74cdf9feb8684931805a813d3e6fb40a;hp=119f42fda1025b230d5e28dbc6bf22d7677e4933;hpb=9e1f34dd2d7be45b2a3a6b1c133a4a1de8c3d864;p=mono.git diff --git a/mcs/mcs/repl.txt b/mcs/mcs/repl.txt index 119f42fda10..ed3fe9bf48a 100644 --- a/mcs/mcs/repl.txt +++ b/mcs/mcs/repl.txt @@ -27,125 +27,21 @@ Documentation for the REPL mode for MCS can be found here: * Supporting class-level declarations - It currently has a few problems: + Currently the evaluator has this feature disabled, to enable + it edit the eval.cs file and make this be the default: + +- parser.Lexer.putback_char = Tokenizer.EvalUsingDeclarationsParserCharacter; +- //parser.Lexer.putback_char = Tokenizer.EvalCompilationUnitParserCharacter; ++ //parser.Lexer.putback_char = Tokenizer.EvalUsingDeclarationsParserCharacter; ++ parser.Lexer.putback_char = Tokenizer.EvalCompilationUnitParserCharacter; - * Support for overwritting existing defined - classes is not supported. + + It currently has a few problems: * The usability is not as useful, since the defaults for C# are still to make members private, we should change this default to be public in those cases. - * The error lookup system lacks information from types, for - example this causes an unsupported call into a TypeBuilder: - - csharp>class D { void DD () {} } - csharp>var d = new D (); - csharp>d.DD (); - - Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class0::Host] - System.NotSupportedException: The invoked member is not supported in a dynamic module. - at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in :0 - at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00000] in - at Mono.CSharp.MethodGroupExpr.NoExactMatch (Mono.CSharp.ResolveContext ec, - Mono.CSharp.Arguments& Arguments, IDictionary`2 c - - - The above is caused by TypeManager.LookupDeclSpace (dt) - failing to return a value (it returns null) so our code - assumes we have an Assembly instead of an assemblybuilder. - - - -* Declaring a class twice produces an internal parse error: - - class X {} - class X {} - - The second declaration will no longer be parsed, so it could even - contain junk, and wont be flagged. We probably need to allow for - type redefinition in REPL modes, the exception from the second is: - - csharp -v -v - > class X {} - > class X {} - - System.ArgumentException: An element with the same key already exists in the dictionary. - at System.Collections.Generic.Dictionary`2[System.String,Mono.CSharp.DeclSpace].Add (System.String key, Mono.CSharp.DeclSpace value) [0x00000] in :0 - at Mono.CSharp.Namespace.AddDeclSpace (System.String name, Mono.CSharp.DeclSpace ds) [0x00000] in :0 - at Mono.CSharp.ModuleCompiled.AddMemberType (Mono.CSharp.DeclSpace ds) [0x00000] in :0 - at Mono.CSharp.TypeContainer.AddTypeContainer (Mono.CSharp.TypeContainer tc) [0x00000] in :0 - at Mono.CSharp.CSharpParser.push_current_class (Mono.CSharp.TypeContainer tc, System.Object partial_token) [0x00000] in :0 - at Mono.CSharp.CSharpParser.yyparse (yyInput yyLex) [0x00000] in :0 - at Mono.CSharp.CSharpParser.yyparse (yyInput yyLex, System.Object yyd) [0x00000] in :0 - at Mono.CSharp.CSharpParser.parse () [0x00000] in :0 - -* Mix statements with other top-level declarations. - -csharp> class Y {static void Main () {Console.WriteLine ("Foo"); }} -csharp> typeof (Y); -Y -csharp> Y.Main (); -Exception caught by the compiler while compiling: - Block that caused the problem begin at: Internal(1,1): - Block being compiled: [(1,2):,(1,11):] -System.NotSupportedException: The invoked member is not supported in a dynamic module. -Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class2::Host] -System.NotSupportedException: The invoked member is not supported in a dynamic module. - at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in /second/home/cvs/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs:214 - at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00036] in /second/home/cvs/mcs/mcs/report.cs:664 - at Mono.CSharp.Expression.Error_MemberLookupFailed (System.Type container_type, System.Type qualifier_type, System.Type queried_type, System.String name, System.String class_name, MemberTypes mt, BindingFlags bf) [0x00121] in /second/home/cvs/mcs/mcs/ecore.cs:857 - at Mono.CSharp.MemberAccess.DoResolve (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side) [0x00230] in /second/home/cvs/mcs/mcs/expression.cs:7426 - at Mono.CSharp.MemberAccess.DoResolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/expression.cs:7494 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 - at Mono.CSharp.Invocation.DoResolve (Mono.CSharp.EmitContext ec) [0x0000d] in /second/home/cvs/mcs/mcs/expression.cs:4725 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 - at Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.EmitContext ec) [0x00013] in /second/home/cvs/mcs/mcs/repl.cs:681 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 - at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:1307 - at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x0000b] in /second/home/cvs/mcs/mcs/statement.cs:743 - at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x000f0] in /second/home/cvs/mcs/mcs/statement.cs:2254 - at Mono.CSharp.ExplicitBlock.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/statement.cs:2550 - at Mono.CSharp.EmitContext.ResolveTopBlock (Mono.CSharp.EmitContext anonymous_method_host, Mono.CSharp.ToplevelBlock block, Mono.CSharp.Parameters ip, IMethodData md, System.Boolean& unreachable) [0x00087] in /second/home/cvs/mcs/mcs/codegen.cs:796 -csharp> - -* Another one: - -csharp> class X { X (){ Console.WriteLine ("Called"); } } -csharp> new X (); -Exception caught by the compiler while compiling: - Block that caused the problem begin at: Internal(1,1): - Block being compiled: [(1,2):,(1,10):] -System.NotSupportedException: The invoked member is not supported in a dynamic module. -Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class0::Host] -System.NotSupportedException: The invoked member is not supported in a dynamic module. - at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in /second/home/cvs/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs:214 - at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00036] in /second/home/cvs/mcs/mcs/report.cs:664 - at Mono.CSharp.Expression.Error_MemberLookupFailed (System.Type container_type, System.Type qualifier_type, System.Type queried_type, System.String name, System.String class_name, MemberTypes mt, BindingFlags bf) [0x00121] in /second/home/cvs/mcs/mcs/ecore.cs:857 - at Mono.CSharp.Expression.MemberLookupFinal (Mono.CSharp.EmitContext ec, System.Type qualifier_type, System.Type queried_type, System.String name, MemberTypes mt, BindingFlags bf, Location loc) [0x0002f] in /second/home/cvs/mcs/mcs/ecore.cs:804 - at Mono.CSharp.New.DoResolve (Mono.CSharp.EmitContext ec) [0x002ad] in /second/home/cvs/mcs/mcs/expression.cs:5486 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 - at Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.EmitContext ec) [0x00013] in /second/home/cvs/mcs/mcs/repl.cs:687 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 - at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 - at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:1307 - at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x0000b] in /second/home/cvs/mcs/mcs/statement.cs:743 - at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x000f0] in /second/home/cvs/mcs/mcs/statement.cs:2254 - at Mono.CSharp.ExplicitBlock.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/statement.cs:2550 - at Mono.CSharp.EmitContext.ResolveTopBlock (Mono.CSharp.EmitContext anonymous_method_host, Mono.CSharp.ToplevelBlock block, Mono.CSharp.Parameters ip, IMethodData md, System.Boolean& unreachable) [0x00087] in /second/home/cvs/mcs/mcs/codegen.cs:796 -csharp> - -* Important: we need to replace TypeBuidlers with Types after things - have been emitted, or stuff like this happens: - -csharp> public class y {} -csharp> typeof (y); -Class1 - - * Clearing data TODO: when clearing data for variables that have been overwritten @@ -157,3 +53,18 @@ Class1 This is easy to implement, just retry the parse with a semicolon, the question is whether this is a good idea to do in the first place or not. + +Completion support +================== + + Supported: + + a. to complete members of type `a' + a for types and namespaces + a.W + a for local variables + + Unsupported: + + delegate { FOO. + using statement autocompletion