2007-10-17 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / mcs / OTODO
index aced9a05065903ccbeaa3eee86650751ebd976e4..ee2cc56f831247fa04525e117703712f8ad459ee 100644 (file)
@@ -100,3 +100,140 @@ Major tasks:
 
 * Make sure that we are pinning the right variable
 
+* local_variable_declaration
+
+       Not sure that this grammar is correct, we might have to
+       resolve this during semantic analysis.
+
+* Optimizations
+
+       In Indexers and Properties, probably support an EmitWithDup
+       That emits the code to call Get and then leaves a this pointer
+       in the stack, so that later a Store can be emitted using that
+       this pointer (consider Property++ or Indexer++)
+
+* Use of local temporary in UnaryMutator
+
+       We should get rid of the Localtemporary there for some cases
+
+       This turns out to be very complex, at least for the post-version,
+       because this case:
+
+               a = i++
+
+       To produce optimal code, it is necessary for UnaryMutator to know 
+       that it is being assigned to a variable (the way the stack is laid
+       out using dup requires the store to happen inside UnaryMutator).
+
+* Interface indexers
+
+       I have not figured out why the Microsoft version puts an
+       `instance' attribute, and I am not generating this `instance' attribute.
+
+       Explanation: The reason for the `instance' attribute on
+       indexers is that indexers only apply to instances
+
+* Check for Final when overriding, if the parent is Final, then we cant
+  allow an override.
+
+       Implement base indexer access.
+
+current_container/current_namespace and the DeclSpace
+-----------------------------------------------------
+
+       We are storing fully qualified names in the DeclSpace instead of the node,
+       this is because `current_namespace' (Namepsace) is not a DeclSpace like
+       `current_container'.
+
+       The reason for storing the full names today is this:
+
+       namespace X {
+               class Y {
+               }
+       }
+
+       namespace A {
+               class Y {
+               }
+       }
+
+       The problem is that we only use the namespace stack to track the "prefix"
+       for typecontainers, but they are not typecontainers themselves, so we have
+       to use fully qualified names, because both A.X and A.Y would be entered
+       in the toplevel type container.  If we use the short names, there would be
+       a name clash.
+
+       To fix this problem, we have to make namespaces DeclSpaces.
+
+       The full size, contrasted with the size that could be stored is:
+               corlib:
+                       Size of strings held: 368901
+                       Size of strings short: 147863
+
+               System:
+                       Size of strings held: 212677
+                       Size of strings short: 97521
+               
+               System.XML:
+                       Size of strings held: 128055
+                       Size of strings short: 35782
+               
+               System.Data:
+                       Size of strings held: 117896
+                       Size of strings short: 36153
+               
+               System.Web:
+                       Size of strings held: 194527
+                       Size of strings short: 58064
+               
+               System.Windows.Forms:
+                       Size of strings held: 220495
+                       Size of strings short: 64923
+
+       
+The use of DottedName
+---------------------
+
+       We could probably use a different system to represent names, like this:
+
+       class Name {
+               string simplename;
+               Name parent;
+       }
+
+       So `System.ComponentModel' becomes:
+
+               x: (System, null)
+               y: (ComponentModel, x)
+
+       The problem is that we would still need to construct the name to pass to
+       GetType.
+
+       This has been now implemented, its called "QualifiedIdentifier"
+
+TODO:
+
+       1. Create a "partial" emit context for each TypeContainer..
+
+       2. EmitContext should be partially constructed.  No IL Generator.
+
+       interface_type review.
+
+       parameter_array, line 952: `note: must be a single dimension array type'.  Validate this
+
+Instance idea
+-------------
+
+       It would be nice to have things that can be "instances" to have an
+       EmitInstance method (this would default to nothing).
+
+       The idea is to be able to use efficiently the instance data on stack
+       manipulations, as opposed to the current scheme, where we basically have
+       a few special cases.
+
+       * `yield' is no longer a keyword, it only has special
+         meaning before a return or break keywords.
+
+       * Study side effects with assign
+       * Study TemporaryStorage/LocalStorage -> Merge/rename
+