2 I am trying to remove the LocalVariableReference from the code
3 but the compiler does not pass its own self-compilation.
5 The problem is that constructs with embedded_statements like:
10 The ec.CurrentBlock is not updated with the fact that `b' lives
11 in an implicit internal block, and the lookup is attempted on the
12 parent's block, hence rendering the lookup invalid.
17 Pinned and volatile require type modifiers that can not be encoded
20 Properties and 17.6.3: Finish it.
22 Implement base indexer access.
26 These guys should only appear as part of an Invocation, so we
27 probably can afford to have a special callback:
29 Expression.ResolveAllowMemberGroups
31 This is only called by Invocation (or anyone that consumes
34 And the regular DoResolve and DoResolveLValue do emit the error
35 654 `Method referenced without argument list'.
37 Otherwise, a resolution will return a MethodGroupExpr which is
38 not guaranteed to have set its `Expression.Type' to a non-null
41 readonly variables and ref/out
46 * Check for Final when overriding, if the parent is Final, then we cant
49 * Add test case for destructors
51 * Do not declare a .property on things that are just implementations, that
52 comes from the parent, just do the method.
54 * Currently the code path for 108/109 reporting is not being ran for methods
55 as we need to compare method signatures. But since we retrieve the expensive
56 method arguments in the method, we probably should do 108/109 processing there.
58 * Emit warning on hiding members without NEW not only in members.
60 * Implement visibility.
62 * Casts need to trigger a name resolution against types only.
66 We do add variables in a number of places, and this is erroneous:
83 I am not reporting errors on visibility yet.
87 I have not figured out why the Microsoft version puts an
88 `instance' attribute, and I am not generating this `instance' attribute.
90 Explanation: The reason for the `instance' attribute on
91 indexers is that indexers only apply to instances
95 We need to make sure at *compile time* that the arguments in
96 the expression list of an array creation are always positive.
98 * Implement dead code elimination in statement.cs
100 It is pretty simple to implement dead code elimination in
105 the following wont work:
109 if x has indexers, the value of x [N] set is set to void. This needs to be
114 Multi-dim arrays are declared as [,] instead of [0..,0..]
116 * Break/Continue statements
118 A finally block should reset the InLoop/LoopBegin/LoopEnd, as
119 they are logically outside the scope of the loop.
121 * Break/continue part 2.
123 They should transfer control to the finally block if inside a try/catch
126 * Method Registration and error CS111
128 The way we use the method registration to signal 111 is wrong.
130 Method registration should only be used to register methodbuilders,
131 we need an alternate method of checking for duplicates.
135 extern string Property {
139 The get there should only have a semicolon
142 > // CSC sets beforefieldinit
144 > // .cctor will be generated by compiler
145 > public static readonly object O = new System.Object ();
146 > public static void Main () {}
155 Constant Folding does not take into account Enumerations, we should maybe
156 extract the underlying value, and constant fold on it.
160 Primary-expression, as it has now been split into
161 non-array-creation-expression and array-creation-expression.
163 * Static flow analysis
165 Required to warn about reachability of code and definite
166 assignemt as well as missing returns on functions.
170 The information when registering a method in InternalParameters
171 is duplicated, you can always get the types from the InternalParameters
173 * Emit modreq for volatiles
175 Handle modreq from public apis.
177 * Emit `pinned' for pinned local variables.
179 Both `modreq' and pinned will require special hacks in the compiler.
181 * Make sure that we are pinning the right variable
183 * Maybe track event usage? Currently I am not tracking these, although they
190 * Dropping TypeContainer as an argument to EmitContext
192 My theory is that I can get rid of the TypeBuilder completely from
193 the EmitContext, and have typecasts where it is used (from
194 DeclSpace to where it matters).
196 The only pending problem is that the code that implements Aliases
197 is on TypeContainer, and probably should go in DeclSpace.
200 * Use of local temporary in UnaryMutator
202 We should get rid of the Localtemporary there for some cases
206 Do we really need to instanciate this variable all the time?
208 It could be static for all we care, and just use it for making
209 sure that there are no recursive invocations on it.
213 Since AppDomain exists, maybe we can get rid of all the stuff
214 that is part of the `compiler instance' and just use globals
220 Currently it calls the parent constructor before initializing fields.
221 It should do it the other way around.
223 * Use of EmitBranchable
225 Currently I use brfalse/brtrue in the code for statements, instead of
226 using the EmitBranchable function that lives in Binary
230 Currently ConvertImplicit will not catch things like:
232 - IntLiteral in a float context to generate a -FloatLiteral.
233 Instead it will perform an integer load followed by a conversion.
237 Write tests for the various reference conversions. We have
238 test for all the numeric conversions.
240 * Remove the tree dumper, cleanup `public readonly'
242 And make all the stuff which is `public readonly' be private unless
247 In Indexers and Properties, probably support an EmitWithDup
248 That emits the code to call Get and then leaves a this pointer
249 in the stack, so that later a Store can be emitted using that
250 this pointer (consider Property++ or Indexer++)
253 * Optimizations: variable allocation.
255 When local variables of a type are required, we should request
256 the variable and later release it when we are done, so that
257 the same local variable slot can be reused later on.
259 * Add a cache for the various GetArrayMethod operations.
263 Do not use StatementCollections, use ArrayLists of Statements,
264 and then "copy" it out to arrays. Then reuse the existing
265 Statement structures.
267 * TypeManager.FindMembers:
269 Instead of having hundreds of builder_to_blah hash table, have
270 a single one that maps a TypeBuilder `t' to a set of classes
271 that implement an interface that supports FindMembers.
273 * MakeUnionSet Callers
275 If the types are the same, there is no need to compute the unionset,
276 we can just use the list from one of the types.
281 * Use of lexer.Location in the parser
285 TOKEN nt TERMINAL nt TERMINAL nt3 {
286 $$ = new Blah ($2, $4, $6, lexer.Location);
289 This is bad, because the lexer.Location is for the last item in `nt3'
291 We need to change that to use this pattern:
293 TOKEN { oob_stack.Push (lexer.Location) } nt TERMINAL nt TERMINAL nt3 {
294 $$ = new Blah ($3, $5, $7, (Location) oob_stack.Pop ());
297 Notice how numbering of the arguments changes as the
298 { oob_stack.Push (lexer.Location) } takes a "slot" in the productions.
300 * local_variable_declaration
302 Not sure that this grammar is correct, we might have to
303 resolve this during semantic analysis.
308 Investigate what is the right value to return from `Emit' in
309 there (ie, for the `all code paths return')
314 Only create one `This' instance per class, and reuse it.
316 Maybe keep a pool of constants/literals (zero, 1)?
321 We would need to decode the shortname before we lookup members?