3 1. Create a "partial" emit context for each TypeContainer..
5 2. EmitContext should be partially constructed. No IL Generator.
9 parameter_array, line 952: `note: must be a single dimension array type'. Validate this
11 Dead Code Elimination bugs:
12 ---------------------------
14 I should also resolve all the children expressions in Switch, Fixed, Using.
19 Pinned and volatile require type modifiers that can not be encoded
22 Properties and 17.6.3: Finish it.
24 Implement base indexer access.
26 readonly variables and ref/out
31 * We suck at reporting what turns out to be error -6. Use the standard error message
34 * Check for Final when overriding, if the parent is Final, then we cant
39 I have not figured out why the Microsoft version puts an
40 `instance' attribute, and I am not generating this `instance' attribute.
42 Explanation: The reason for the `instance' attribute on
43 indexers is that indexers only apply to instances
45 * Break/Continue statements
47 A finally block should reset the InLoop/LoopBegin/LoopEnd, as
48 they are logically outside the scope of the loop.
50 * Break/continue part 2.
52 They should transfer control to the finally block if inside a try/catch
55 * Method Registration and error CS111
57 The way we use the method registration to signal 111 is wrong.
59 Method registration should only be used to register methodbuilders,
60 we need an alternate method of checking for duplicates.
63 > // CSC sets beforefieldinit
65 > // .cctor will be generated by compiler
66 > public static readonly object O = new System.Object ();
67 > public static void Main () {}
74 * IMprove error handling here:
76 public static Process ()
78 THat assumes that it is a constructor, check if its the same name
79 as the class, if not report a different error than the one we use now.
81 * Merge test 89 and test-34
85 Primary-expression, as it has now been split into
86 non-array-creation-expression and array-creation-expression.
88 * Static flow analysis
90 Required to warn about reachability of code and definite
91 assignemt as well as missing returns on functions.
95 The information when registering a method in InternalParameters
96 is duplicated, you can always get the types from the InternalParameters
98 * Emit modreq for volatiles
100 Handle modreq from public apis.
102 * Emit `pinned' for pinned local variables.
104 Both `modreq' and pinned will require special hacks in the compiler.
106 * Make sure that we are pinning the right variable
108 * Maybe track event usage? Currently I am not tracking these, although they
111 * Merge tree.cs, rootcontext.cs
116 * User Defined Conversions is doing way too many calls to do union sets that are not needed
118 * Add test case for destructors
120 * Places that use `Ldelema' are basically places where I will be
121 initializing a value type. I could apply an optimization to
122 disable the implicit local temporary from being created (by using
125 * Dropping TypeContainer as an argument to EmitContext
127 My theory is that I can get rid of the TypeBuilder completely from
128 the EmitContext, and have typecasts where it is used (from
129 DeclSpace to where it matters).
131 The only pending problem is that the code that implements Aliases
132 is on TypeContainer, and probably should go in DeclSpace.
134 * Casts need to trigger a name resolution against types only.
136 currently we use a secret hand shake, probably we should use
137 a differen path, and only expressions (memberaccess, simplename)
138 would participate in this protocol.
140 * Use of local temporary in UnaryMutator
142 We should get rid of the Localtemporary there for some cases
146 Do we really need to instanciate this variable all the time?
148 It could be static for all we care, and just use it for making
149 sure that there are no recursive invocations on it.
153 Currently ConvertImplicit will not catch things like:
155 - IntLiteral in a float context to generate a -FloatLiteral.
156 Instead it will perform an integer load followed by a conversion.
160 Write tests for the various reference conversions. We have
161 test for all the numeric conversions.
165 In Indexers and Properties, probably support an EmitWithDup
166 That emits the code to call Get and then leaves a this pointer
167 in the stack, so that later a Store can be emitted using that
168 this pointer (consider Property++ or Indexer++)
170 * Optimizations: variable allocation.
172 When local variables of a type are required, we should request
173 the variable and later release it when we are done, so that
174 the same local variable slot can be reused later on.
176 * Add a cache for the various GetArrayMethod operations.
178 * TypeManager.FindMembers:
180 Instead of having hundreds of builder_to_blah hash table, have
181 a single one that maps a TypeBuilder `t' to a set of classes
182 that implement an interface that supports FindMembers.
184 * MakeUnionSet Callers
186 If the types are the same, there is no need to compute the unionset,
187 we can just use the list from one of the types.
189 * Factor all the FindMembers in all the FindMembers providers.
191 * Factor the lookup code for class declarations an interfaces
192 (interface.cs:GetInterfaceByName)
197 * Use of lexer.Location in the parser
201 TOKEN nt TERMINAL nt TERMINAL nt3 {
202 $$ = new Blah ($2, $4, $6, lexer.Location);
205 This is bad, because the lexer.Location is for the last item in `nt3'
207 We need to change that to use this pattern:
209 TOKEN { oob_stack.Push (lexer.Location) } nt TERMINAL nt TERMINAL nt3 {
210 $$ = new Blah ($3, $5, $7, (Location) oob_stack.Pop ());
213 Notice how numbering of the arguments changes as the
214 { oob_stack.Push (lexer.Location) } takes a "slot" in the productions.
216 * local_variable_declaration
218 Not sure that this grammar is correct, we might have to
219 resolve this during semantic analysis.