1 The information on this file is mostly outdated, and its kept here for
7 * Make yyerror show a nice syntax error, instead of the current mess.
12 * Reset should throw not implemented now.
17 Currently when we build a type cache, it contains private members,
18 internal members, and internal protected members; We should trim
19 these out, as it shows up on the profile.
21 We create too many Arraylists; When we know the size, we should create
24 During parsing we use arraylists to accumulate data, like this:
29 : thing { $$ =new ArrayList (); $$.Add ($1); }
30 | thing_list thing { ArrayList a = $1; a.Add ($2); $$ = a; }
32 We probably could start using "Pairs" there:
35 : thing { $$ = new Pair ($1, null); }
36 | thing_list thing { Pair p = $1; $$ = new Pair ($2, $1); }
39 EmitContext.ResolveTypeTree
40 ---------------------------
42 We should investigate its usage. The problem is that by default
43 this will be set when calling FindType, that triggers a more expensive
46 I believe we should pass the current EmitContext (which has this turned off
47 by default) to ResolveType/REsolveTypeExpr and then have the routines that
48 need ResolveType to pass null as the emit context.
53 DeclareLocal is used in various statements. The audit should be done
56 * Identify all the declare locals.
60 * Find if we can make wrapper functions for all of them.
62 Then we can move DeclareLocal into a helper class.
64 This is required to fix foreach in iterators.
69 Drop FindMembers as our API and instead extract all the data
70 out of a type the first time into our own datastructures, and
71 use that to navigate and search the type instead of the
72 callback based FindMembers.
74 Martin has some some of this work with his TypeHandle code
75 that we could use for this.
80 Instead of the hack that *knows* about System.Object not having any children classes,
81 we should just make it simple for a probe to know that there is no need for it.
83 Dead Code Elimination bugs:
84 ---------------------------
86 I should also resolve all the children expressions in Switch, Fixed, Using.
90 Properties and 17.6.3: Finish it.
92 readonly variables and ref/out
97 * Break/Continue statements
99 A finally block should reset the InLoop/LoopBegin/LoopEnd, as
100 they are logically outside the scope of the loop.
102 * Break/continue part 2.
104 They should transfer control to the finally block if inside a try/catch
107 * Method Registration and error CS111
109 The way we use the method registration to signal 111 is wrong.
111 Method registration should only be used to register methodbuilders,
112 we need an alternate method of checking for duplicates.
115 > // CSC sets beforefieldinit
117 > // .cctor will be generated by compiler
118 > public static readonly object O = new System.Object ();
119 > public static void Main () {}
126 * Merge test 89 and test-34
130 The information when registering a method in InternalParameters
131 is duplicated, you can always get the types from the InternalParameters
133 * Emit modreq for volatiles
135 Handle modreq from public apis.
137 * Merge tree.cs, rootcontext.cs
142 * User Defined Conversions is doing way too many calls to do union sets that are not needed
144 * Add test case for destructors
146 * Places that use `Ldelema' are basically places where I will be
147 initializing a value type. I could apply an optimization to
148 disable the implicit local temporary from being created (by using
151 * Dropping TypeContainer as an argument to EmitContext
153 My theory is that I can get rid of the TypeBuilder completely from
154 the EmitContext, and have typecasts where it is used (from
155 DeclSpace to where it matters).
157 The only pending problem is that the code that implements Aliases
158 is on TypeContainer, and probably should go in DeclSpace.
162 Write tests for the various reference conversions. We have
163 test for all the numeric conversions.
165 * Optimizations: variable allocation.
167 When local variables of a type are required, we should request
168 the variable and later release it when we are done, so that
169 the same local variable slot can be reused later on.
171 * Add a cache for the various GetArrayMethod operations.
173 * MakeUnionSet Callers
175 If the types are the same, there is no need to compute the unionset,
176 we can just use the list from one of the types.
178 * Factor the lookup code for class declarations an interfaces
179 (interface.cs:GetInterfaceByName)
184 * Use of lexer.Location in the parser
188 TOKEN nt TERMINAL nt TERMINAL nt3 {
189 $$ = new Blah ($2, $4, $6, lexer.Location);
192 This is bad, because the lexer.Location is for the last item in `nt3'
194 We need to change that to use this pattern:
196 TOKEN { oob_stack.Push (lexer.Location) } nt TERMINAL nt TERMINAL nt3 {
197 $$ = new Blah ($3, $5, $7, (Location) oob_stack.Pop ());
200 Notice how numbering of the arguments changes as the
201 { oob_stack.Push (lexer.Location) } takes a "slot" in the productions.