3 Do we really need to instanciate this variable all the time?
5 It could be static for all we care, and just use it for making
6 sure that there are no recursive invocations on it.
10 Since AppDomain exists, maybe we can get rid of all the stuff
11 that is part of the `compiler instance' and just use globals
16 Move our utility FindMembers from TypeContainer to Decl, because interfaces
17 are also scanned with it.
21 I am not reporting errors on visibility yet.
25 Currently I am not resolving enumerations.
27 Either I track them with `RecordEnum' as I do with classes,
28 structs and interfaces or I rewrite the code to visit type
29 containers and `walk' the enums with this process.
35 They should should use:
37 OPEN_PARENS type CLOSE_PARENS
39 instead of the current production which is wrong, because it
40 only handles a few cases.
44 Array r = (string []) object
50 For indexers, the output of ix2.cs is different from our
51 compiler and theirs. They use a DefaultMemberAttribute, which
52 I have yet to figure out:
54 .class interface private abstract auto ansi INTERFACE
56 .custom instance void [mscorlib]System.Reflection.DefaultMemberAttribute::.ctor(string)
57 = ( 01 00 04 49 74 65 6D 00 00 ) // ...Item..
63 I have not figured out why the Microsoft version puts an
64 `instance' attribute, and I am not generating this `instance' attribute.
66 Explanation: The reason for the `instance' attribute on
67 indexers is that indexers only apply to instances
71 Currently it calls the parent constructor before initializing fields.
72 It should do it the other way around.
74 * Use of EmitBranchable
76 Currently I use brfalse/brtrue in the code for statements, instead of
77 using the EmitBranchable function that lives in Binary
79 * Create an UnimplementedExpcetion
81 And use that instead of plain Exceptions to flag compiler errors.
85 Currently ConvertImplicit will not catch things like:
87 - IntLiteral in a float context to generate a -FloatLiteral.
88 Instead it will perform an integer load followed by a conversion.
90 * In class.cs: Method.Define
92 Need to use FindMembers to lookup the member for reporting
93 whether a new is needed or not.
95 * virtual-method.cs breaks
97 It breaks on the call to: new B ();
99 Where B is a class defined in the source code, my guess is that
100 the look for ".ctor" fails
102 * Foreach on structure returns does not work
104 I am generating invalid code instead of calling ldarga for the
105 structure, I am calling ldarg:
108 public IEnumerator GetEnumerator ();
113 foreach (object a in x){
117 I need to get the address of that bad boy
121 Need to reset the aliases for each compilation unit, so an
122 alias defined in a file does not have any effect on another one:
129 class Z : X { <-- This X is `Blah'
134 class Y : X { <-- This X Is not `Blah'
138 I think we can implement Aliases by having an `Alias' context in all
139 the toplevel TypeContainers of a compilation unit. The children typecontainers
140 just chain to the parents to resolve the information.
142 The driver advances the Alias for each file compiled, so that each file
143 has its own alias set.
147 Write tests for the various reference conversions. We have
148 test for all the numeric conversions.
150 * Handle destructors specially
152 Turn ~X () { a () } into:
153 void Finalize () { try { a (); } finally { base.Finalize (); } }
157 * Support Re-Throw exceptions:
161 } catch (SomeException e){
166 * Remove the tree dumper
168 And make all the stuff which is `public readonly' be private unless
171 * Use of lexer.Location in the parser
175 TOKEN nt TERMINAL nt TERMINAL nt3 {
176 $$ = new Blah ($2, $4, $6, lexer.Location);
179 This is bad, because the lexer.Location is for the last item in `nt3'
181 We need to change that to use this pattern:
183 TOKEN { $$ = lexer.Location } nt TERMINAL nt TERMINAL nt3 {
184 $$ = new Blah ($3, $5, $7, (Location) $2);
187 Notice how numbering of the arguments changes, as the { $$ =
188 lexer.Location } takes up a number
192 Method names could be; `IFACE.NAME' in the method declaration,
193 stating that they implement a specific interface method.
195 We currently fail to parse it.
207 Is failing to create a single namespace
211 We need to make sure at *compile time* that the arguments in
212 the expression list of an array creation are always positive.
214 * Fix the new parameter mess that we introduced to support ref/outo
216 * Reducer and -Literal
218 Maybe we should never handle -Literal in Unary expressions and let
219 the reducer take care of it always?
221 * Implement dead code elimination in statement.cs
223 It is pretty simple to implement dead code elimination in
226 * Implement short circuit evaluation.
228 Currently our and/or operations do not implement short circuit
233 Support foreach (T t in Array)
235 And optimize to deal with the array rather than getting the enumerator
240 the following wont work:
244 if x has indexers, the value of x [N] set is set to void. This needs to be
247 * Preincrement/pre-decrement is not working on array elements.
249 We are catching this now. But it does not work.
253 The following goes into an infinite loop because of the implicit
254 variable declaration and the initialization, easy to fix:
260 for (int i = 0; i < 10; i++)
265 Set a breakpoint in assign.DoResolve to watch it.