/NRefactory/ICSharpCode.NRefactory.CSharp/Parser/mcs/repl.txt

http://github.com/icsharpcode/ILSpy · Plain Text · 168 lines · 128 code · 40 blank · 0 comment · 0 complexity · 9e36263d5f33da668b60a137bbc2f9a9 MD5 · raw file

  1. Things to do for the REPL support in MCS:
  2. Documentation for the REPL mode for MCS can be found here:
  3. http://mono-project.com/CsharpRepl
  4. * Embedding API
  5. * Booting the compiler without Main ()
  6. * Expose LoadAssembly/LoadPackage
  7. * Register fields?
  8. * Register a lookup function for fields?
  9. * Register classes to expose to REPL
  10. * Embedded Library
  11. * Run a REPL on a socket (from Joe Shaw)
  12. * Host a REPL on XSP (from Nat).
  13. * TODO
  14. Clear struct fields inside the clearing code.
  15. * Other ideas:
  16. MD addin for "csharp"
  17. * Supporting class-level declarations
  18. Currently the evaluator has this feature disabled, to enable
  19. it edit the eval.cs file and make this be the default:
  20. - parser.Lexer.putback_char = Tokenizer.EvalUsingDeclarationsParserCharacter;
  21. - //parser.Lexer.putback_char = Tokenizer.EvalCompilationUnitParserCharacter;
  22. + //parser.Lexer.putback_char = Tokenizer.EvalUsingDeclarationsParserCharacter;
  23. + parser.Lexer.putback_char = Tokenizer.EvalCompilationUnitParserCharacter;
  24. It currently has a few problems:
  25. * Support for overwritting existing defined
  26. classes is not supported.
  27. * The usability is not as useful, since the defaults
  28. for C# are still to make members private, we should
  29. change this default to be public in those cases.
  30. * The error lookup system lacks information from types, for
  31. example this causes an unsupported call into a TypeBuilder:
  32. csharp>class D { void DD () {} }
  33. csharp>var d = new D ();
  34. csharp>d.DD ();
  35. Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class0::Host]
  36. System.NotSupportedException: The invoked member is not supported in a dynamic module.
  37. at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in <filename unknown>:0
  38. at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00000] in
  39. at Mono.CSharp.MethodGroupExpr.NoExactMatch (Mono.CSharp.ResolveContext ec,
  40. Mono.CSharp.Arguments& Arguments, IDictionary`2 c
  41. The above is caused by TypeManager.LookupDeclSpace (dt)
  42. failing to return a value (it returns null) so our code
  43. assumes we have an Assembly instead of an assemblybuilder.
  44. * Declaring a class twice produces an internal parse error:
  45. class X {}
  46. class X {}
  47. The second declaration will no longer be parsed, so it could even
  48. contain junk, and wont be flagged. We probably need to allow for
  49. type redefinition in REPL modes, the exception from the second is:
  50. csharp -v -v
  51. > class X {}
  52. > class X {}
  53. System.ArgumentException: An element with the same key already exists in the dictionary.
  54. at System.Collections.Generic.Dictionary`2[System.String,Mono.CSharp.DeclSpace].Add (System.String key, Mono.CSharp.DeclSpace value) [0x00000] in <filename unknown>:0
  55. at Mono.CSharp.Namespace.AddDeclSpace (System.String name, Mono.CSharp.DeclSpace ds) [0x00000] in <filename unknown>:0
  56. at Mono.CSharp.ModuleCompiled.AddMemberType (Mono.CSharp.DeclSpace ds) [0x00000] in <filename unknown>:0
  57. at Mono.CSharp.TypeContainer.AddTypeContainer (Mono.CSharp.TypeContainer tc) [0x00000] in <filename unknown>:0
  58. at Mono.CSharp.CSharpParser.push_current_class (Mono.CSharp.TypeContainer tc, System.Object partial_token) [0x00000] in <filename unknown>:0
  59. at Mono.CSharp.CSharpParser.yyparse (yyInput yyLex) [0x00000] in <filename unknown>:0
  60. at Mono.CSharp.CSharpParser.yyparse (yyInput yyLex, System.Object yyd) [0x00000] in <filename unknown>:0
  61. at Mono.CSharp.CSharpParser.parse () [0x00000] in <filename unknown>:0
  62. * Mix statements with other top-level declarations.
  63. csharp> class Y {static void Main () {Console.WriteLine ("Foo"); }}
  64. csharp> typeof (Y);
  65. Y
  66. csharp> Y.Main ();
  67. Exception caught by the compiler while compiling:
  68. Block that caused the problem begin at: Internal(1,1):
  69. Block being compiled: [<interactive>(1,2):,<interactive>(1,11):]
  70. System.NotSupportedException: The invoked member is not supported in a dynamic module.
  71. Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class2::Host]
  72. System.NotSupportedException: The invoked member is not supported in a dynamic module.
  73. at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in /second/home/cvs/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs:214
  74. at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00036] in /second/home/cvs/mcs/mcs/report.cs:664
  75. 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
  76. at Mono.CSharp.MemberAccess.DoResolve (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side) [0x00230] in /second/home/cvs/mcs/mcs/expression.cs:7426
  77. at Mono.CSharp.MemberAccess.DoResolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/expression.cs:7494
  78. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479
  79. at Mono.CSharp.Invocation.DoResolve (Mono.CSharp.EmitContext ec) [0x0000d] in /second/home/cvs/mcs/mcs/expression.cs:4725
  80. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479
  81. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506
  82. at Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.EmitContext ec) [0x00013] in /second/home/cvs/mcs/mcs/repl.cs:681
  83. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479
  84. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506
  85. at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:1307
  86. at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x0000b] in /second/home/cvs/mcs/mcs/statement.cs:743
  87. at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x000f0] in /second/home/cvs/mcs/mcs/statement.cs:2254
  88. at Mono.CSharp.ExplicitBlock.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/statement.cs:2550
  89. 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
  90. csharp>
  91. * Another one:
  92. csharp> class X { X (){ Console.WriteLine ("Called"); } }
  93. csharp> new X ();
  94. Exception caught by the compiler while compiling:
  95. Block that caused the problem begin at: Internal(1,1):
  96. Block being compiled: [<interactive>(1,2):,<interactive>(1,10):]
  97. System.NotSupportedException: The invoked member is not supported in a dynamic module.
  98. Internal compiler error at Internal(1,1):: exception caught while emitting MethodBuilder [Class0::Host]
  99. System.NotSupportedException: The invoked member is not supported in a dynamic module.
  100. at System.Reflection.Emit.AssemblyBuilder.get_Location () [0x00000] in /second/home/cvs/mcs/class/corlib/System.Reflection.Emit/AssemblyBuilder.cs:214
  101. at Mono.CSharp.Report.SymbolRelatedToPreviousError (System.Reflection.MemberInfo mi) [0x00036] in /second/home/cvs/mcs/mcs/report.cs:664
  102. 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
  103. 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
  104. at Mono.CSharp.New.DoResolve (Mono.CSharp.EmitContext ec) [0x002ad] in /second/home/cvs/mcs/mcs/expression.cs:5486
  105. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479
  106. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506
  107. at Mono.CSharp.OptionalAssign.DoResolve (Mono.CSharp.EmitContext ec) [0x00013] in /second/home/cvs/mcs/mcs/repl.cs:687
  108. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, ResolveFlags flags) [0x00075] in /second/home/cvs/mcs/mcs/ecore.cs:479
  109. at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:506
  110. at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/ecore.cs:1307
  111. at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) [0x0000b] in /second/home/cvs/mcs/mcs/statement.cs:743
  112. at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x000f0] in /second/home/cvs/mcs/mcs/statement.cs:2254
  113. at Mono.CSharp.ExplicitBlock.Resolve (Mono.CSharp.EmitContext ec) [0x00000] in /second/home/cvs/mcs/mcs/statement.cs:2550
  114. 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
  115. csharp>
  116. * Important: we need to replace TypeBuidlers with Types after things
  117. have been emitted, or stuff like this happens:
  118. csharp> public class y {}
  119. csharp> typeof (y);
  120. Class1
  121. * Clearing data
  122. TODO: when clearing data for variables that have been overwritten
  123. we need to check for structs and clear all the fields that contain
  124. reference types.
  125. * DEBATABLE: Implement auto-insert-semicolon
  126. This is easy to implement, just retry the parse with a
  127. semicolon, the question is whether this is a good idea to do
  128. in the first place or not.