2001-10-07 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / mcs / TODO
1 * FindMembers
2
3         Move our utility FindMembers from TypeContainer to Decl, because interfaces
4         are also scanned with it.
5
6 * Ordering
7
8         Can a constant_expression invoke overloaded operators?
9         Explicit user-defined conversions?
10
11 * Visibility
12
13         I am not reporting errors on visibility yet.
14
15 * Error handling
16
17         Normalize, and use Tokenizer location 
18
19 * Enumerations
20
21         Currently I am not resolving enumerations.
22
23         Either I track them with `RecordEnum' as I do with classes,
24         structs and interfaces or I rewrite the code to visit type
25         containers and `walk' the enums with this process. 
26
27 * Known problems:
28
29   Cast expressions
30
31         They should should use:
32
33                 OPEN_PARENS type CLOSE_PARENS
34
35         instead of the current production which is wrong, because it
36         only handles a few cases.
37
38         Complex casts like:
39
40                 Array r = (string []) object
41
42         Wont be parsed.
43   
44 * Interfaces
45
46         For indexers, the output of ix2.cs is different from our
47         compiler and theirs.  They use a DefaultMemberAttribute, which
48         I have yet to figure out:
49
50         .class interface private abstract auto ansi INTERFACE
51         {
52                 .custom instance void [mscorlib]System.Reflection.DefaultMemberAttribute::.ctor(string) 
53                 = ( 01 00 04 49 74 65 6D 00 00 )                      // ...Item..
54                 ...
55         }
56
57 * Interface indexers
58
59         I have not figured out why the Microsoft version puts an
60         `instance' attribute, and I am not generating this `instance' attribute.
61
62 * Constructors
63
64         Currently it calls the parent constructor before initializing fields.
65         It should do it the other way around.
66
67 * Use of EmitBranchable
68
69         Currently I use brfalse/brtrue in the code for statements, instead of
70         using the EmitBranchable function that lives in Binary
71
72 * Create an UnimplementedExpcetion
73
74         And use that instead of plain Exceptions.
75
76 * ConvertImplicit
77
78         Currently ConvertImplicit will not catch things like:
79
80         - IntLiteral in a float context to generate a -FloatLiteral.
81         Instead it will perform an integer load followed by a conversion.
82
83 * In class.cs: Method.Define
84
85         Need to use FindMembers to lookup the member for reporting
86         whether a new is needed or not.  
87
88 * virtual-method.cs breaks
89
90         It breaks on the call to: new B ();
91
92         Where B is a class defined in the source code, my guess is that
93         the look for ".ctor" fails
94
95 * Foreach on structure returns does not work
96
97         I am generating invalid code instead of calling ldarga for the
98         structure, I am calling ldarg:
99
100         struct X {
101                 public IEnumerator GetEnumerator ();
102         }
103
104         X x;
105
106         foreach (object a in x){
107                 ...
108         }
109
110         I need to get the address of that bad boy
111
112 * Work todo:
113
114         Understand how methods are invoked on structs