3 Handle if (!x) converting to remove the `!' and instead of using
4 a brfalse use a brtrue to jump to the end.
8 Do we really need to instanciate this variable all the time?
10 It could be static for all we care, and just use it for making
11 sure that there are no recursive invocations on it.
15 Since AppDomain exists, maybe we can get rid of all the stuff
16 that is part of the `compiler instance' and just use globals
21 Move our utility FindMembers from TypeContainer to Decl, because interfaces
22 are also scanned with it.
26 Can a constant_expression invoke overloaded operators?
27 Explicit user-defined conversions?
31 I am not reporting errors on visibility yet.
35 Currently I am not resolving enumerations.
37 Either I track them with `RecordEnum' as I do with classes,
38 structs and interfaces or I rewrite the code to visit type
39 containers and `walk' the enums with this process.
45 They should should use:
47 OPEN_PARENS type CLOSE_PARENS
49 instead of the current production which is wrong, because it
50 only handles a few cases.
54 Array r = (string []) object
60 For indexers, the output of ix2.cs is different from our
61 compiler and theirs. They use a DefaultMemberAttribute, which
62 I have yet to figure out:
64 .class interface private abstract auto ansi INTERFACE
66 .custom instance void [mscorlib]System.Reflection.DefaultMemberAttribute::.ctor(string)
67 = ( 01 00 04 49 74 65 6D 00 00 ) // ...Item..
73 I have not figured out why the Microsoft version puts an
74 `instance' attribute, and I am not generating this `instance' attribute.
76 Explanation: The reason for the `instance' attribute on
77 indexers is that indexers only apply to instances
81 Currently it calls the parent constructor before initializing fields.
82 It should do it the other way around.
84 * Use of EmitBranchable
86 Currently I use brfalse/brtrue in the code for statements, instead of
87 using the EmitBranchable function that lives in Binary
89 * Create an UnimplementedExpcetion
91 And use that instead of plain Exceptions to flag compiler errors.
95 Currently ConvertImplicit will not catch things like:
97 - IntLiteral in a float context to generate a -FloatLiteral.
98 Instead it will perform an integer load followed by a conversion.
100 * In class.cs: Method.Define
102 Need to use FindMembers to lookup the member for reporting
103 whether a new is needed or not.
105 * virtual-method.cs breaks
107 It breaks on the call to: new B ();
109 Where B is a class defined in the source code, my guess is that
110 the look for ".ctor" fails
112 * Foreach on structure returns does not work
114 I am generating invalid code instead of calling ldarga for the
115 structure, I am calling ldarg:
118 public IEnumerator GetEnumerator ();
123 foreach (object a in x){
127 I need to get the address of that bad boy
131 Need to reset the aliases for each compilation unit, so an
132 alias defined in a file does not have any effect on another one:
139 class Z : X { <-- This X is `Blah'
144 class Y : X { <-- This X Is not `Blah'
148 I think we can implement Aliases by having an `Alias' context in all
149 the toplevel TypeContainers of a compilation unit. The children typecontainers
150 just chain to the parents to resolve the information.
152 The driver advances the Alias for each file compiled, so that each file
153 has its own alias set.
157 Write tests for the various reference conversions. We have
158 test for all the numeric conversions.
160 * Handle destructors specially
162 Turn ~X () { a () } into:
163 void Finalize () { try { a (); } finally { base.Finalize (); } }
167 * Support Re-Throw exceptions:
171 } catch (SomeException e){
176 * Remove the tree dumper
178 And make all the stuff which is `public readonly' be private unless
181 * Use of lexer.Location in the parser
185 TOKEN nt TERMINAL nt TERMINAL nt3 {
186 $$ = new Blah ($2, $4, $6, lexer.Location);
189 This is bad, because the lexer.Location is for the last item in `nt3'
191 We need to change that to use this pattern:
193 TOKEN { $$ = lexer.Location } nt TERMINAL nt TERMINAL nt3 {
194 $$ = new Blah ($3, $5, $7, (Location) $2);
197 Notice how numbering of the arguments changes, as the { $$ =
198 lexer.Location } takes up a number
202 Method names could be; `IFACE.NAME' in the method declaration,
203 stating that they implement a specific interface method.
205 We currently fail to parse it.
217 Is failing to create a single namespace
221 We need to make sure at *compile time* that the arguments in
222 the expression list of an array creation are always positive.