4 * Implenment Array Initialization
8 Move our utility FindMembers from TypeContainer to Decl, because interfaces
9 are also scanned with it.
13 I am not reporting errors on visibility yet.
17 They currently can not be defined in terms of other enumerations
24 They should should use:
26 OPEN_PARENS type CLOSE_PARENS
28 instead of the current production which is wrong, because it
29 only handles a few cases.
33 Array r = (string []) object
39 For indexers, the output of ix2.cs is different from our
40 compiler and theirs. They use a DefaultMemberAttribute, which
41 I have yet to figure out:
43 .class interface private abstract auto ansi INTERFACE
45 .custom instance void [mscorlib]System.Reflection.DefaultMemberAttribute::.ctor(string)
46 = ( 01 00 04 49 74 65 6D 00 00 ) // ...Item..
52 I have not figured out why the Microsoft version puts an
53 `instance' attribute, and I am not generating this `instance' attribute.
55 Explanation: The reason for the `instance' attribute on
56 indexers is that indexers only apply to instances
58 * In class.cs: Method.Define
60 Need to use FindMembers to lookup the member for reporting
61 whether a new is needed or not.
63 * Foreach on structure returns does not work
65 I am generating invalid code instead of calling ldarga for the
66 structure, I am calling ldarg:
69 public IEnumerator GetEnumerator ();
74 foreach (object a in x){
78 I need to get the address of that bad boy
80 * Handle destructors specially
82 Turn ~X () { a () } into:
83 void Finalize () { try { a (); } finally { base.Finalize (); } }
87 Method names could be; `IFACE.NAME' in the method declaration,
88 stating that they implement a specific interface method.
90 We currently fail to parse it.
102 Is failing to create a single namespace
106 We need to make sure at *compile time* that the arguments in
107 the expression list of an array creation are always positive.
109 * Fix access to variables of type ref/out
111 * Implement dead code elimination in statement.cs
113 It is pretty simple to implement dead code elimination in
116 * Implement short circuit evaluation.
118 Currently our and/or operations do not implement short circuit
123 Support foreach (T t in Array)
125 And optimize to deal with the array rather than getting the enumerator
130 the following wont work:
134 if x has indexers, the value of x [N] set is set to void. This needs to be
139 Multi-dim arrays are declared as [,] instead of [0..,0..]
145 for (int i = 0; ...; i++){
148 for (int i = 0; i < 10; i++){
151 Currently defines `i' for the rest of the execution after the first
152 loop, so the second loop generates an error.
154 I think we should pop all the blocks until this point.
169 Need to reset the aliases for each compilation unit, so an
170 alias defined in a file does not have any effect on another one:
177 class Z : X { <-- This X is `Blah'
182 class Y : X { <-- This X Is not `Blah'
186 I think we can implement Aliases by having an `Alias' context in all
187 the toplevel TypeContainers of a compilation unit. The children typecontainers
188 just chain to the parents to resolve the information.
190 The driver advances the Alias for each file compiled, so that each file
191 has its own alias set.
195 * Support Re-Throw exceptions:
199 } catch (SomeException e){
204 * Static flow analysis
206 Required to warn about reachability of code and definite
207 assignemt as well as missing returns on functions.
215 Do we really need to instanciate this variable all the time?
217 It could be static for all we care, and just use it for making
218 sure that there are no recursive invocations on it.
222 Since AppDomain exists, maybe we can get rid of all the stuff
223 that is part of the `compiler instance' and just use globals
229 Currently it calls the parent constructor before initializing fields.
230 It should do it the other way around.
232 * Reducer and -Literal
234 Maybe we should never handle -Literal in Unary expressions and let
235 the reducer take care of it always?
237 * Use of EmitBranchable
239 Currently I use brfalse/brtrue in the code for statements, instead of
240 using the EmitBranchable function that lives in Binary
242 * Create an UnimplementedExpcetion
244 And use that instead of plain Exceptions to flag compiler errors.
248 Currently ConvertImplicit will not catch things like:
250 - IntLiteral in a float context to generate a -FloatLiteral.
251 Instead it will perform an integer load followed by a conversion.
255 Write tests for the various reference conversions. We have
256 test for all the numeric conversions.
258 * Remove the tree dumper
260 And make all the stuff which is `public readonly' be private unless
265 In Indexers and Properties, probably support an EmitWithDup
266 That emits the code to call Get and then leaves a this pointer
267 in the stack, so that later a Store can be emitted using that
268 this pointer (consider Property++ or Indexer++)
274 * Use of lexer.Location in the parser
278 TOKEN nt TERMINAL nt TERMINAL nt3 {
279 $$ = new Blah ($2, $4, $6, lexer.Location);
282 This is bad, because the lexer.Location is for the last item in `nt3'
284 We need to change that to use this pattern:
286 TOKEN { $$ = lexer.Location } nt TERMINAL nt TERMINAL nt3 {
287 $$ = new Blah ($3, $5, $7, (Location) $2);
290 Notice how numbering of the arguments changes, as the { $$ =
291 lexer.Location } takes up a number
293 * local_variable_declaration
295 Not sure that this grammar is correct, we might have to
296 resolve this during semantic analysis.