2010-05-19 Jb Evain <jbevain@novell.com>
[mcs.git] / tools / csharp / repl.txt
blobb56a896c7518fe127dcc92814d31aab0d1c8d4b0
1 Things to do for the REPL support in MCS:
3 Documentation for the REPL mode for MCS can be found here:
5               http://mono-project.com/CsharpRepl
7 * Embedding API
9         * Booting the compiler without Main ()
10         * Expose LoadAssembly/LoadPackage
11         * Register fields?
12         * Register a lookup function for fields?
13         * Register classes to expose to REPL
15 * Embedded Library
17         * Run a REPL on a socket (from Joe Shaw)
18         * Host a REPL on XSP (from Nat).
20 * TODO
22         Clear struct fields inside the clearing code.
24 * Other ideas:
26         MD addin for "csharp"
28 * Mix statements with other top-level declarations.
30 csharp> class Y {static void Main () {Console.WriteLine ("Foo"); }}
31 csharp> typeof (Y);
33 csharp> Y.Main ();
34 Exception caught by the compiler while compiling:
35    Block that caused the problem begin at: Internal(1,1):
36                      Block being compiled: [<interactive>(1,2):,<interactive>(1,11):]
37 System.NotSupportedException: The invoked member is not supported in a dynamic module.
38 Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class2::Host]
39 System.NotSupportedException: The invoked member is not supported in a dynamic module.
40   at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in /second/home/cvs/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs:214 
41   at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00036] in /second/home/cvs/mcs/mcs/report.cs:664 
42   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 
43   at Mono.CSharp.MemberAccess.DoResolve (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side) [0x00230] in /second/home/cvs/mcs/mcs/expression.cs:7426 
44   at Mono.CSharp.MemberAccess.DoResolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/expression.cs:7494 
45   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 
46   at Mono.CSharp.Invocation.DoResolve (Mono.CSharp.EmitContext ec) [0x0000d] in /second/home/cvs/mcs/mcs/expression.cs:4725 
47   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 
48   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 
49   at Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.EmitContext ec) [0x00013] in /second/home/cvs/mcs/mcs/repl.cs:681 
50   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 
51   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 
52   at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:1307 
53   at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x0000b] in /second/home/cvs/mcs/mcs/statement.cs:743 
54   at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x000f0] in /second/home/cvs/mcs/mcs/statement.cs:2254 
55   at Mono.CSharp.ExplicitBlock.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/statement.cs:2550 
56   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 
57 csharp>  
59 * Another one:
61 csharp> class X { X (){ Console.WriteLine ("Called"); } }              
62 csharp> new X ();
63 Exception caught by the compiler while compiling:
64    Block that caused the problem begin at: Internal(1,1):
65                      Block being compiled: [<interactive>(1,2):,<interactive>(1,10):]
66 System.NotSupportedException: The invoked member is not supported in a dynamic module.
67 Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class0::Host]
68 System.NotSupportedException: The invoked member is not supported in a dynamic module.
69   at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in /second/home/cvs/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs:214 
70   at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00036] in /second/home/cvs/mcs/mcs/report.cs:664 
71   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 
72   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 
73   at Mono.CSharp.New.DoResolve (Mono.CSharp.EmitContext ec) [0x002ad] in /second/home/cvs/mcs/mcs/expression.cs:5486 
74   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 
75   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 
76   at Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.EmitContext ec) [0x00013] in /second/home/cvs/mcs/mcs/repl.cs:687 
77   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479 
78   at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506 
79   at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:1307 
80   at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x0000b] in /second/home/cvs/mcs/mcs/statement.cs:743 
81   at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x000f0] in /second/home/cvs/mcs/mcs/statement.cs:2254 
82   at Mono.CSharp.ExplicitBlock.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/statement.cs:2550 
83   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 
84 csharp>  
86 * Important: we need to replace TypeBuidlers with Types after things
87   have been emitted, or stuff like this happens:
89 csharp> public class y  {}
90 csharp> typeof (y); 
91 Class1
94 * Clearing data
96         TODO: when clearing data for variables that have been overwritten
97         we need to check for structs and clear all the fields that contain
98         reference types.
100 * DEBATABLE: Implement auto-insert-semicolon
102         This is easy to implement, just retry the parse with a
103         semicolon, the question is whether this is a good idea to do
104         in the first place or not.
106 * Tab Completion
108         Implement tab completion on names, variables and type lookups.
110         This could be implemented by having the TAB key force the
111         expression to be evaluated with a special COMPLETE token
112         at the end.
114         Then the various productions (one by one) would have to
115         add support for COMPLETE, and having Resolve methods be
116         aware of this.