2009-11-03 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2009-11-03  Marek Safar  <marek.safar@gmail.com>
2
3         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
4         constructor arguments.
5
6 2009-10-30  Marek Safar  <marek.safar@gmail.com>
7
8         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
9         codegen.cs: Unary mutator on dynamic member access expression.
10
11 2009-10-29  Marek Safar  <marek.safar@gmail.com>
12
13         A fix for bug #550580   
14         * convert.cs: Don't eliminate explicit precission casts.
15
16 2009-10-28  Marek Safar  <marek.safar@gmail.com>
17
18         A fix for bug #550404
19         
20         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
21         expression.cs, statement.cs, ecore.cs: Quote any nested expression
22         tree.
23
24 2009-10-27  Marek Safar  <marek.safar@gmail.com>
25
26         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
27         constant.
28         
29         * class.cs: Allow nullable binary user operators.
30
31 2009-10-26  Marek Safar  <marek.safar@gmail.com>
32
33         * expression.cs: Move binary expression optimization at the end of
34         resolve.
35
36 2009-10-23  Marek Safar  <marek.safar@gmail.com>
37
38         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
39         Separate NullConstant from NullLiteral.
40
41 2009-10-23  Marek Safar  <marek.safar@gmail.com>
42
43         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
44         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
45         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
46         ModuleContainer. Add common unclosed member check routine.
47
48 2009-10-22  Marek Safar  <marek.safar@gmail.com>
49
50         * argument.cs: Use literal flag for real literals only.
51
52         * dynamic.cs: Use correct return type for custom delegates.
53
54 2009-10-22  Marek Safar  <marek.safar@gmail.com>
55
56         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
57         resolver.
58
59 2009-10-22  Marek Safar  <marek.safar@gmail.com>
60
61         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
62
63 2009-10-21  Marek Safar  <marek.safar@gmail.com>
64
65         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
66         conversion.
67
68 2009-10-21  Marek Safar  <marek.safar@gmail.com>
69
70         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
71         binder flags.
72
73 2009-10-20  Marek Safar  <marek.safar@gmail.com>
74
75         * argument.cs, dynamic.cs, expression.cs: Latest API update.
76
77 2009-10-19  Marek Safar  <marek.safar@gmail.com>
78
79         * typemanager.cs, expression.cs: Dynamic array initializer.
80
81 2009-10-16  Marek Safar  <marek.safar@gmail.com>
82
83         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
84         is imported.
85
86 2009-10-16  Marek Safar  <marek.safar@gmail.com>
87
88         A fix for bug #493523, #507067
89         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
90         standard nullable conversion using underlying standard conversion
91         and not full conversion.
92
93 2009-10-15  Marek Safar  <marek.safar@gmail.com>
94
95         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
96         type in VerifyArgumentsCompat.
97
98 2009-10-15  Marek Safar  <marek.safar@gmail.com>
99
100         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
101         Reject variable used with type arguments.
102
103 2009-10-14  Marek Safar  <marek.safar@gmail.com>
104
105         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
106         Implement dynamic expressions assignment.
107
108 2009-10-14  Marek Safar  <marek.safar@gmail.com>
109
110         * expression.cs: Build underlying expression when resolving unary
111         mutators.
112
113 2009-10-14  Marek Safar  <marek.safar@gmail.com>
114
115         * expression.cs: Emit enum array initializer using binary blob.
116
117 2009-10-08  Marek Safar  <marek.safar@gmail.com>
118
119         * typemanager.cs, constant.cs: Optimize decimal constants which fit
120         to long range.
121
122 2009-10-07  Marek Safar  <marek.safar@gmail.com>
123
124         * typemanager.cs: Reset object_type.
125         
126         * assign: Made SimpleAssign public.
127
128 2009-10-06  Marek Safar  <marek.safar@gmail.com>
129
130         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
131         invocation assembly to IsThisOrFriendAssembly.
132
133 2009-10-05  Marek Safar  <marek.safar@gmail.com>
134
135         * expression.cs: Equality comparison of generic parameter with
136         class constraint.
137
138 2009-10-05  Marek Safar  <marek.safar@gmail.com>
139
140         A fix for bug #543570
141         * generic.cs: Import predefined constraints correctly.
142
143 2009-10-02  Marek Safar  <marek.safar@gmail.com>
144
145         * ecore.cs: Don't crash on overloads with optional paremeters where
146         arguments count overflows.
147         
148         * parameter.cs: Import optional parameter constants using optional
149         value type.
150
151 2009-10-01  Marek Safar  <marek.safar@gmail.com>
152
153         * Makefile: Default is gmcs compiler.
154
155 2009-10-01  Marek Safar  <marek.safar@gmail.com>
156
157         * cs-parser.jay: Fixed few NRE.
158
159 2009-10-01  Marek Safar  <marek.safar@gmail.com>
160
161         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
162
163 2009-09-30  Marek Safar  <marek.safar@gmail.com>
164
165         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
166         ShimExpression, ImplicitCast.
167
168 2009-09-30  Marek Safar  <marek.safar@gmail.com>
169
170         A fix for bug #542959
171         * delegate.cs: Emit correct delegate instance variable when there
172         are static and non-static overloads.
173
174 2009-09-29  Marek Safar  <marek.safar@gmail.com>
175
176         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
177         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
178
179 2009-09-28  Marek Safar  <marek.safar@gmail.com>
180
181         A fix for bug #542487
182         * ecore.cs: Resolve extension methods hidden by properties.
183
184 2009-09-25  Marek Safar  <marek.safar@gmail.com>
185
186         * expression.cs, ecore.cs: More dynamic binary expressions.
187
188 2009-09-22  Marek Safar  <marek.safar@gmail.com>
189
190         * nullable.cs, expression.cs: Fixed null lifted conversion for
191         bitwise enum operations.
192
193 2009-09-22  Marek Safar  <marek.safar@gmail.com>
194
195         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
196         values in checked context.
197
198 2009-09-22  Marek Safar  <marek.safar@gmail.com>
199
200         * expression.cs, ecore.cs: Fixed array index constant conversion.
201
202 2009-09-20  Miguel de Icaza  <miguel@novell.com>
203
204         * expression.cs: Do not crash when MemberLookup returns something
205         that is not a MemberExpr here.   Report error 582 instead. 
206
207         Fixes #499988.
208
209 2009-09-18  Marek Safar  <marek.safar@gmail.com>
210
211         * decl.cs, class.cs: Check protected property accessors.
212
213 2009-09-18  Marek Safar  <marek.safar@gmail.com>
214
215         * dynamic.cs, assign.cs: Dynamic compound assignment.
216
217 2009-09-17  Marek Safar  <marek.safar@gmail.com>
218
219         * expression.cs: Fixed compound assignment explicit conversion.
220
221 2009-09-17  Marek Safar  <marek.safar@gmail.com>
222
223         * expression.cs, ecore.cs: Cannot infer variables from method group.
224
225 2009-09-16  Marek Safar  <marek.safar@gmail.com>
226
227         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
228         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
229         codegen.cs: Dynamic binary operations scaffolding.
230
231 2009-09-15  Marek Safar  <marek.safar@gmail.com>
232
233         * expression.cs: Fixes nullable promotion for enum type variables.
234
235 2009-09-11  Marek Safar  <marek.safar@gmail.com>
236
237         * driver.cs, dynamic.cs: Reset more static variables.
238
239 2009-09-11  Marek Safar  <marek.safar@gmail.com>
240
241         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
242         driver.cs: Introduced Expression::MakeExpression.
243
244 2009-09-11  Marek Safar  <marek.safar@gmail.com>
245
246         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
247
248 2009-09-09  Marek Safar  <marek.safar@gmail.com>
249
250         * eval.cs, report.cs: Use Console.Out for all eval error or warning
251         output.
252
253 2009-09-09  Marek Safar  <marek.safar@gmail.com>
254
255         A fix for bug #518707
256         * expression.cs (Is): Optimize only generic parameter type
257         expression probing value type generic parameter.
258
259 2009-09-09  Marek Safar  <marek.safar@gmail.com>
260
261         A fix for bug #532571
262         * ecore.cs: Check for simple name type arguments used with
263         non-generic type.
264
265 2009-09-08  Marek Safar  <marek.safar@gmail.com>
266
267         A fix for bug #497421
268         * generic.cs (CheckConstraint): Don't use buildin types to check for
269         parameterless constructor.
270
271 2009-09-08  Marek Safar  <marek.safar@gmail.com>
272
273         A fix for bug #537402
274         * generic.cs (CheckConstraint): Correctly inflate generic type
275         arguments when checking generic method. 
276
277 2009-09-08  Marek Safar  <marek.safar@gmail.com>
278
279         A fix for bug #536463
280         * decl.cs (AddToContainer): Don't report collision between explicit
281         and parameterless non-explicit members.
282
283 2009-09-08  Marek Safar  <marek.safar@gmail.com>
284
285         * eval.cs: Reset more static stuff.
286
287 2009-09-07  Marek Safar  <marek.safar@gmail.com>
288
289         A fix for bug #324625
290         * expression.cs, ecore.cs: Create nested generic type expression
291         using declaring and not current type.
292
293 2009-09-07  Marek Safar  <marek.safar@gmail.com>
294
295         * *.cs: Changed Report class to accept various output printers and
296         be an instance class. An expression resolver can now use different
297         message reporter for each call and Report.Error can safely throw
298         an exception. Part of ongoing work to turn mcs into proper library.
299
300 2009-09-04  Marek Safar  <marek.safar@gmail.com>
301
302         * statement.cs, ecore.cs: Removed error reporting from emit code.
303
304 2009-09-04  Marek Safar  <marek.safar@gmail.com>
305
306         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
307
308 2009-09-03  Marek Safar  <marek.safar@gmail.com>
309
310         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
311         parser checks out of constructors.
312
313 2009-09-02  Marek Safar  <marek.safar@gmail.com>
314
315         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
316
317 2009-09-02  Marek Safar  <marek.safar@gmail.com>
318
319         A fix for bug #535448
320         * anonymous.cs, class.cs: Copy return label between all contexts.
321
322 2009-09-02  Marek Safar  <marek.safar@gmail.com>
323
324         A fix for bug #535395
325         * namespace.cs: Resolve context can be null.
326
327 2009-08-25  Marek Safar  <marek.safar@gmail.com>
328
329         A fix for bug #533912
330         * generic.cs: Use correct context for constraints resolving.
331
332 2009-08-25  Marek Safar  <marek.safar@gmail.com>
333
334         A fix for bug #532630
335         * driver.cs: Trim conditional symbols.
336
337 2009-08-25  Marek Safar  <marek.safar@gmail.com>
338
339         * context.cs: New file.
340         
341         * *.exe.sources, *.csproj: Updated.
342
343 2009-08-25  Marek Safar  <marek.safar@gmail.com>
344
345         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
346         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
347         IMembercontext, some small cleanups.
348
349 2009-08-24  Marek Safar  <marek.safar@gmail.com>
350
351         * *.cs: Split ResolveContext and EmitContext.
352
353 2009-08-24  Marek Safar  <marek.safar@gmail.com>
354
355         * *.cs: Only ResolveContext implements IMemberContext.
356
357 2009-08-21  Marek Safar  <marek.safar@gmail.com>
358
359         * *.cs: Renamed IResolveContext to IMemberContext.
360
361 2009-08-21  Marek Safar  <marek.safar@gmail.com>
362
363         * *.cs: Detached ResolveContext from EmitContext.
364
365 2009-08-21  Marek Safar  <marek.safar@gmail.com>
366
367         * codegen.cs: Moved flow-analysis to BlockContext.
368
369 2009-08-21  Marek Safar  <marek.safar@gmail.com>
370
371         * *.cs: Detached BlockContext from EmitContext.
372
373 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
374
375         * statement.cs: avoid nullref when the return value of GetEnumerator()
376         does not contain any MoveNext() method.
377
378 2009-08-19  Marek Safar  <marek.safar@gmail.com>
379
380         * *.cs: Removed IResolveContext::GenericDeclContainer.
381
382 2009-08-19  Marek Safar  <marek.safar@gmail.com>
383
384         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
385
386 2009-08-19  Marek Safar  <marek.safar@gmail.com>
387
388         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
389         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
390
391 2009-08-18  Marek Safar  <marek.safar@gmail.com>
392
393         * *.cs: Removed boolean fields from EmitContext.
394
395 2009-08-18  Marek Safar  <marek.safar@gmail.com>
396
397         * *.cs: Add IResolveContext::IsStatic.
398
399 2009-08-18  Marek Safar  <marek.safar@gmail.com>
400
401         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
402
403 2009-08-17  Marek Safar  <marek.safar@gmail.com>
404
405         * *.cs: Removed DeclContainer from EmitContext.
406
407 2009-08-17  Marek Safar  <marek.safar@gmail.com>
408
409         * *.cs: Add IResolveContext::CurrentTypeParameters.
410
411 2009-08-14  Marek Safar  <marek.safar@gmail.com>
412
413         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
414
415 2009-08-14  Marek Safar  <marek.safar@gmail.com>
416
417         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
418         codegen.cs: Add IResolveContext::LookupExtensionMethod.
419
420 2009-08-13  Marek Safar  <marek.safar@gmail.com>
421
422         * decl.cs: Look in PartialContainer for parent type parameters.
423
424 2009-08-13  Marek Safar  <marek.safar@gmail.com>
425
426         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
427         codegen.cs: Add IResolveContext::LookupTypeParameter.
428
429 2009-08-13  Marek Safar  <marek.safar@gmail.com>
430
431         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
432         Moved resolved logic from Emit to Resolve.
433
434 2009-08-13  Marek Safar  <marek.safar@gmail.com>
435
436         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
437         codegen.cs: Reworked atttributes handling of ResolveContext.
438
439 2009-08-12  Marek Safar  <marek.safar@gmail.com>
440
441         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
442         LookupNamespaceOrType to ResolveContext.
443
444 2009-08-12  Marek Safar  <marek.safar@gmail.com>
445
446         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
447         class.cs: Removed unused parameters and methods.
448
449 2009-08-11  Marek Safar  <marek.safar@gmail.com>
450
451         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
452         codegen.cs: Finding the best common type of a set of expressions for
453         lambda statements.
454
455 2009-08-07  Marek Safar  <marek.safar@gmail.com>
456
457         * dynamic.cs, expression.cs: More dynamic conversions.
458
459 2009-08-06  Miguel de Icaza  <miguel@novell.com>
460
461         * generic.cs: This loop was incorrect, it was increment ii, but
462         checking for `i'.  This was a change introduced to fix #327497,
463         now we fix #424012.
464  
465         * class.cs: Catch another case for cs0533 error, fixes #324782.
466
467 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
468
469         * typemanager.cs (GetGenericArguments): SRE returns null for
470         generic methods on type builder instances if they are not generic
471         themselves. For example, for Foo<int>::Bar() it returns null, but
472         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
473
474 2009-08-05  Marek Safar  <marek.safar@gmail.com>
475
476         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
477         delegate.cs: Work on dynamic binding.
478
479 2009-08-04  Marek Safar  <marek.safar@gmail.com>
480
481         A second fix for bug #525342
482         * class.cs: Attach partial method attributes to method
483         implementation.
484
485 2009-08-03  Marek Safar  <marek.safar@gmail.com>
486
487         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
488         restrictions.
489         
490         * rootcontext.cs: Default to langversion v4.
491
492 2009-08-03  Marek Safar  <marek.safar@gmail.com>
493
494         * pending.cs: Check return type before member info is set.
495
496 2009-08-03  Marek Safar  <marek.safar@gmail.com>
497
498         * anonymous.cs: Fully initialize generic hoisted field expression.
499
500 2009-08-02  Miguel de Icaza  <miguel@novell.com>
501
502         * cs-parser.jay: Flag variables declared on the interactive shell
503         as used to prevent the 168 warning about local variable not being
504         used. 
505
506 2009-07-31  Marek Safar  <marek.safar@gmail.com>
507
508         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
509         attribute.cs: Emit dynamic export attribute.
510
511 2009-07-30  Marek Safar  <marek.safar@gmail.com>
512
513         * expression.cs: More verifier work.
514
515 2009-07-29  Marek Safar  <marek.safar@gmail.com>
516
517         * nullable.cs: Fixed SRE crash during corlib compilation.
518
519 2009-07-29  Marek Safar  <marek.safar@gmail.com>
520
521         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
522         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
523         More TypeManager.TypeToCoreType needed.
524
525 2009-07-29  Marek Safar  <marek.safar@gmail.com>
526
527         * anonymous.cs: Update after recent SRE fixes.
528
529 2009-07-28  Marek Safar  <marek.safar@gmail.com>
530
531         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
532         version of GetFieldHandle for fields of generic types.
533
534 2009-07-27  Marek Safar  <marek.safar@gmail.com>
535
536         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
537         ecore.cs: Add TypeManager.IsDynamicType,
538         PredefinedAttributes.Dynamic.
539
540 2009-07-27  Marek Safar  <marek.safar@gmail.com>
541
542         A fix for bug #415375
543         * expression.cs: Fixed object and reference type parameter
544         comparison.
545
546 2009-07-27  Marek Safar  <marek.safar@gmail.com>
547
548         A fix for bug #525342
549         * class.cs: Attach partial method attributes to method
550         implementation.
551
552 2009-07-24  Marek Safar  <marek.safar@gmail.com>
553
554         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
555         Dynamic arguments.
556
557 2009-07-24  Marek Safar  <marek.safar@gmail.com>
558
559         * anonymous.cs (MutateField): Add imported types handling.
560
561 2009-07-23  Marek Safar  <marek.safar@gmail.com>
562
563         * expression.cs, delegate.cs: Moved arguments resolve into their
564         counterparts expressions. Removed argument resolve from
565         CollectionElementInitializer.
566
567 2009-07-23  Marek Safar  <marek.safar@gmail.com>
568
569         A fix for bug #523683
570         * convert.cs, delegate.cs: Use common overload mechanism for method
571         group conversion check.
572
573 2009-07-22  Marek Safar  <marek.safar@gmail.com>
574
575         A fix for bug #523899
576         * generics.cs: Exact type inference with other bound types.
577
578 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
579
580         Don't complain when the same type is implemented by the output
581         assembly as well as multiple referenced assemblies
582         * namespace.cs (RootNamespace.LookupTypeReflection): Add
583         'must_be_unique' flag.
584         (GlobalRootNamespace): Update to changes.
585         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
586         already have a type in hand.
587
588 2009-07-22  Marek Safar  <marek.safar@gmail.com>
589
590         * expression.cs: More verifier instrumentation.
591         
592         * statement.cs: Do proper throw expression conversion.
593
594 2009-07-22  Marek Safar  <marek.safar@gmail.com>
595
596         A fix for bug #522789
597         * expression.cs: Mutate invocation return type.
598
599 2009-07-16  Marek Safar  <marek.safar@gmail.com>
600
601         * anonymous.cs: Split assignable and readonly generated variable
602         references.
603
604 2009-07-16  Marek Safar  <marek.safar@gmail.com>
605
606         A fix for bug #521671
607         * statement.cs: Fixed crash when checking missing type.
608
609 2009-07-16  Marek Safar  <marek.safar@gmail.com>
610
611         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
612         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
613         class.cs, driver.cs: Work on dynamic binding.
614
615         * dynamic.cs: New file.
616
617         * *.sources, *.proj: Updated.
618
619 2009-07-15  Marek Safar  <marek.safar@gmail.com>
620
621         * expression.cs (Conditional): Avoid double Resolve.
622
623 2009-07-13  Marcus Griep  <marcus@griep.us>
624
625         * ecore.cs: Fix obscure bug with resolving members of interfaces
626         that hide parent interface members. Fixes bug #444388 and corrects
627         bug #323096
628
629 2009-07-13  Marek Safar  <marek.safar@gmail.com>
630
631         * expression.cs (LocalVariableReference): Bounce resolve.
632
633 2009-07-10  Marek Safar  <marek.safar@gmail.com>
634
635         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
636         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
637         types to new class.
638         
639         * support.cs: New dynamic type wrapper.
640
641 2009-07-08  Marek Safar  <marek.safar@gmail.com>
642
643         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
644         typed local variable.
645
646 2009-07-06  Marek Safar  <marek.safar@gmail.com>
647
648         A fix for bug #519005
649         * anonymous.cs: Use null_type as no return type placeholder.
650
651 2009-07-02  Marek Safar  <marek.safar@gmail.com>
652
653         * generic.cs: Handle type inference of identical type parameters
654         with different bounds.
655
656 2009-07-01  Marek Safar  <marek.safar@gmail.com>
657
658         * expression.cs, class.cs: Events variance.
659         
660         * cs-parser.jay: Interface events error messages.
661
662 2009-07-01  Marek Safar  <marek.safar@gmail.com>
663
664         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
665
666 2009-06-29  Marek Safar  <marek.safar@gmail.com>
667
668         * parameter.cs, convert.cs, expression.cs, class.cs: Default
669         parameter expression can be value-type New.
670
671         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
672
673 2009-06-26  Marek Safar  <marek.safar@gmail.com>
674
675         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
676         Implemented C# 4.0 named arguments.
677
678 2009-06-24  Marek Safar  <marek.safar@gmail.com>
679
680         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
681         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
682         parameter modifier. Also fixes bug #515497.
683
684 2009-06-24  Marek Safar  <marek.safar@gmail.com>
685
686         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
687         arguments expression to be implemented.
688         
689         *.sources: Add argument.cs
690
691 2009-06-23  Marek Safar  <marek.safar@gmail.com>
692
693         * parameter.cs: Moved GetParameterIndexByName to base class.
694         
695         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
696         unused AType. Use argument's version of GetExpressionTree.
697
698 2009-06-22  Marek Safar  <marek.safar@gmail.com>
699
700         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
701         arguments grammar.
702
703 2009-06-17  Marek Safar  <marek.safar@gmail.com>
704
705         A fix for bug #514096
706         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
707
708 2009-06-17  Marek Safar  <marek.safar@gmail.com>
709
710         * expression.cs: The first multi-dimensional array nested array
711         initializers was not checked.
712         
713         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
714
715 2009-06-17  Marek Safar  <marek.safar@gmail.com>
716
717         A fix for bug #513400
718         * nullable.cs (EmitEquality): Operands emit could be simplified for
719         built-in types when we now emit user operators differently.
720
721 2009-06-16  Marek Safar  <marek.safar@gmail.com>
722
723         * ecore.cs: Report inaccessible delegate methods correctly.
724
725 2009-06-16  Marek Safar  <marek.safar@gmail.com>
726
727         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
728         cs-parser.jay: Implemented C# 4.0 optional parameters.
729
730 2009-06-16  Marek Safar  <marek.safar@gmail.com>
731
732         * driver.cs: Removed broken DefineManifestResource.
733
734 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
735
736         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
737         Use $(BOOTSTRAP_PROFILE) instead.
738
739 2009-06-12  Jb Evain  <jbevain@novell.com>
740
741         * rootcontext.cs: add a Platform field.
742         * driver.cs: handle /platform.
743         * codegen.cs: pass the proper flags according to
744         the platform when saving the assembly.
745
746 2009-06-11  Marek Safar  <marek.safar@gmail.com>
747
748         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
749         Add optional parameters grammar.
750
751 2009-06-10  Marek Safar  <marek.safar@gmail.com>
752
753         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
754         driver.cs: Split lang version and metadata version.
755
756 2009-06-10  Marek Safar  <marek.safar@gmail.com>
757
758         * decl.cs: Better overload ctor collision error message.
759
760 2009-06-05  Jb Evain  <jbevain@novell.com>
761
762         * driver.cs (EmbededResource): avoid using an internal method
763         in gmcs to embed manifest resources.
764
765 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
766
767         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
768         the compiler from older mono versions (like moon's bots)
769
770 2009-06-04  Marek Safar  <marek.safar@gmail.com>
771
772         * namespace.cs (LookupTypeReflection): Ignore collisions between
773         forwarded types.
774
775 2009-06-04  Marek Safar  <marek.safar@gmail.com>
776
777         * codegen.cs: Enabled generic type forwarders.
778
779 2009-06-04  Marek Safar  <marek.safar@gmail.com>
780
781         * dmcs.*: Add another version of SRE compiler.
782
783 2009-06-03  Marek Safar  <marek.safar@gmail.com>
784
785         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
786         generic-mcs.cs: Fixed variant type conversions.
787
788 2009-06-02  Marek Safar  <marek.safar@gmail.com>
789
790         A fix for bug #507863
791         * codegen.cs: Fixes a crash on invalid string value attribute.
792
793 2009-06-01  Marek Safar  <marek.safar@gmail.com>
794
795         A fix for bug #508334
796         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
797         cs-parser.jay: Fully import __arglist modifier.
798
799 2009-05-29  Marek Safar  <marek.safar@gmail.com>
800
801         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
802         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
803         actually work with closed generic types.
804
805 2009-05-27  Alan McGovern  <amcgovern@novell.com>
806
807         * class.cs, decl.cs, delegate.cs, parameter.cs: 
808         Fix the build by replacing the use of 'var' with the actual type.
809
810 2009-05-27  Marek Safar  <marek.safar@gmail.com>
811
812         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
813     cs-parser.jay, generic-mcs.cs: Report wrong variant types
814         declarations.
815           
816         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
817         filter.
818
819 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
820                         Marek Safar  <marek.safar@gmail.com>
821
822         A fix for bug #377509
823         * parameter.cs: Use predefined and not empty name for implicit
824         setters.
825
826 2009-05-21  Marek Safar  <marek.safar@gmail.com>
827
828         * class.cs: Don't report wrong warnings for event fields.
829
830 2009-05-21  Marek Safar  <marek.safar@gmail.com>
831
832         A fix for bug #504667
833         * class.cs: Check for static class using parent container instead of
834         parent type.
835
836 2009-05-08  Marek Safar  <marek.safar@gmail.com>
837
838         A fix for bug #496922
839         * expression.cs: Always use temporary variable when using object
840         initializer.
841
842 2009-04-28  Marek Safar  <marek.safar@gmail.com>
843
844         A fix for bug #495112
845         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
846         local cache.
847
848 2009-04-27  Miguel de Icaza  <miguel@novell.com>
849
850         * driver.cs: Add a flag to work as a replacement for CSC in VS.
851
852 2009-04-24  Miguel de Icaza  <miguel@novell.com>
853
854         * complete.cs: No idea how gonzalo got a null in the list, but
855         avoid crashing.
856
857 2009-04-24  Miguel de Icaza  <miguel@novell.com>
858
859         * complete.cs (CompletionElementInitializer): New completion class
860         to support completing inside a C# 3 element initializer, so this
861         allows completion for Silverlight situations where it is very
862         common to do:
863
864         new TextBlock () { Fo<TAB>
865
866         (CompletionSimpleName): Expose the prefix that was
867         passed to the simple name.
868
869         * cs-parser.jay (object_or_collection_initializer): Add support
870         for element_initializers.
871
872         * expression.cs (CollectionOrObjectInitializers.DoResolve):
873         special case completion expressions as this method aggressively
874         collects data before it operates, and errors were being thrown
875         earlier than we were able to complete.
876
877 2009-04-23  Miguel de Icaza  <miguel@novell.com>
878
879         * eval.cs: Make getcompletions silent and enable debugging output
880         if the -v option is passed.
881
882         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
883         Consider looking up the namespace that matches the prefix being
884         used. 
885
886         This is part of the support for allowing completions like:
887         `System.Co<TAB>' to complete to System.Console.
888
889         * complete.cs (CompletionSimpleName.AppendResults): Make this
890         routine reusable.
891
892 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
893
894         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
895         COMPLETE_COMPLETION as internal.
896
897 2009-04-17  Miguel de Icaza  <miguel@novell.com>
898
899         * complete.cs: Include namespace resolution in simple names as
900         well as global types and types in the using scope in the
901         resolution. 
902
903         * namespace.cs: Supporting infrastrcture to provide completions
904         based on the current using scope. 
905
906         * eval.cs: Introduce an entry point that allows for initialization
907         to return a list of the files passed on the command line.
908
909 2009-04-14  Marek Safar  <marek.safar@gmail.com>
910
911         A fix for bug #494243
912         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
913
914 2009-04-13  Marek Safar  <marek.safar@gmail.com>
915
916         A fix for bug #493887
917         * statement.cs: Don't skip string multi-section with default or
918         null label when populating string hashtable.
919
920 2009-04-06  Marek Safar  <marek.safar@gmail.com>
921
922         A fix for bug #492329
923         * expression.cs (New): Load variable when assigning type parameter
924         to ref variable.
925
926 2009-04-06  Marek Safar  <marek.safar@gmail.com>
927
928         A fix for bug #488960
929         * decl.cs: Compare MVAR types using non-null values.
930
931 2009-03-27  Marek Safar  <marek.safar@gmail.com>
932
933         * typemanager.cs, expression.cs: Removed unused nullable checks.
934
935 2009-03-27  Marek Safar  <marek.safar@gmail.com>
936
937         * *.cs: Removed some gmcs conditionals.
938
939 2009-03-26  Marek Safar  <marek.safar@gmail.com>
940
941         * generic.cs, support.cs: Moved generics stuff out of support.cs
942
943 2009-03-24  Marek Safar  <marek.safar@gmail.com>
944
945         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
946         DeclaringType.
947
948 2009-03-23  Marek Safar  <marek.safar@gmail.com>
949
950         * attribute.cs: Consider all members for error reporting when
951         checking named arguments.
952
953 2009-03-23  Marek Safar  <marek.safar@gmail.com>
954
955         A fix for bug #487625
956         * namespace.cs: Use a warning for all predefined type conflicts.
957
958 2009-03-23  Marek Safar  <marek.safar@gmail.com>
959
960         A fix for bug #485706
961         * statement.cs: Explicitly type catch type argument to pass verifier
962         check.
963
964 2009-03-22  Miguel de Icaza  <miguel@novell.com>
965
966         Initial support to provide code completion facilities to consumers
967         of the evaluator API.
968         
969         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
970         support the completion engine.   When we reach the end of the
971         input stream instead of returning EOF, when this flag is true the
972         tokenizer instead produces:
973
974                 One GENERATE_COMPLETION token: this token then must be
975                 handled in the grammar at every point where the user
976                 would likely request a completion.
977
978                 As many COMPLETE_COMPLETION tokens as necessary.   These
979                 tokens are generated to assist the parser in unwinding and
980                 producing a valid parse tree.    
981
982         The parser rules do not have to be perfect, the parser needs to be
983         augmented with judicious use of GENERATE_COMPLETION tokens to
984         improve the areas where we can provide completion and the parser
985         needs to add support for COMPLETE_COMPLETION tokens in productions
986         to make them work.
987
988         It is common to not have enough support for COMPLETE_COMPLETION
989         under certain rules and that even if we generated the
990         GENERATE_COMPLETION token that the resulting tree will be invalid
991         due to the missing rules that support COMPLETE_COMPLETION.
992
993         The final EOF token is produced by having the parser notify the
994         tokenizer when it reaches the root production that the next token
995         should be EOF.
996
997         * support.cs (CompletionResult): New Exception.   This exception
998         is thrown to return the completion results when one of the special
999         completion expressions is reached.
1000
1001         This exception is thrown by the completing ExpressionStatements
1002         classes that live in complete.cs
1003
1004         * complete.cs (CompletingExpression): a new base class for
1005         completing expressions.   This derives from the
1006         ExpressionStatement class and not from Expression as it allows
1007         completion to happen not only where expressions are expected in
1008         the grammar, but also where statements are expected.
1009
1010         (CompletionSimpleName): A new class used to provide completions
1011         for SimpleNames.     This currently only resolves to local
1012         variables from the evaluator context (GetVars call).
1013
1014         (CompletionMemberAccess): Implements support for completing member
1015         access patterns. 
1016
1017         * cs-parser.jay: Add support for completion in a few places. 
1018
1019         * eval.cs (GetCompletions): New public API for the evaluator that
1020         returns a list of possible completions given the input.   The
1021         return value is an array of completions 
1022
1023         * anonymous.cs (Compatible): If the exception thrown from the
1024         resolved expression is a CompletionResult exception let that one
1025         through instead of printing a diagnostic error in the try/catch. 
1026 <       
1027 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1028
1029         * 
1030
1031         * driver.cs (Main): Use Environment.Exit to quit quickly and
1032         prevent the compiler from doing the usual wait for helper thread
1033         to terminate.  
1034
1035         This is to prevent a slowdown that was reported by Gonzalo on
1036         ASP.NET 
1037
1038 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1039
1040         * ecore.cs: Load build-in types directly instead of accessing
1041         an internal field.
1042
1043 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1044
1045         * ecore.cs: Always use unbox.any when available.
1046
1047 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1048
1049         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1050
1051 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1052
1053         * generic.cs: Removed obsolete version of type inference.
1054
1055 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1056
1057         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1058         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1059         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1060         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1061
1062 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1063
1064         A fix for bug #482996
1065         * anonymous.cs: Make sure we are not infering return type when
1066         checking type compatibility.
1067
1068 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1069
1070         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1071         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1072         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1073         attributes in their own structure. Needed when accessing their
1074         properties before they are resolved.
1075
1076 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1077
1078         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1079         hashtable (~10x faster).
1080         
1081         * driver.cs: Removed wrong Reset.
1082
1083 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1084
1085         * class.cs: Use correct common base type for unmanaged delayed
1086         check.
1087
1088         * rootcontext.cs: Wrap unhandled exception.
1089
1090 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1091
1092         Make SeekableStreamReader self-tuning and arbitrarily seekable
1093         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1094         the buffer.
1095         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1096         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1097         buffer size when the stream needs to be re-read from the beginning.
1098
1099 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1100
1101         A fix for bug #480100
1102         * parameter.cs: A parameter is not hoisted when used directly as ET.
1103
1104 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1105
1106         * statement.cs: Fixed an issue when using variable is of interface
1107         type.
1108
1109 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1110
1111         A fix for bug #480319
1112         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1113
1114 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1115
1116         A fix for bug #480867
1117         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1118         expression to have no valid type.
1119
1120 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1121
1122         A fix for bug #481258
1123         * class.cs: Set extension method flag in partial container.
1124
1125 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1126
1127         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1128         
1129         * attribute.cs: Add sanity check.
1130
1131 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1132
1133         * class.cs: Add external constructor error.
1134
1135 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1136
1137         A fix for bug #475354
1138         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1139         correctly user defined nullable equality operators.
1140
1141 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1142
1143         A fix for bug #479532
1144         * expression.cs: Implement NewInitialize::AddressOf.
1145
1146 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1147
1148         A fix for bug #413633
1149         * expression.cs: Iterate all base class-constraint types.
1150
1151 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1152
1153         A fix for bug #479209
1154         * literal.cs: Mutate null underlying type.
1155
1156 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1157
1158         A fix for bug #476295
1159         * convert.cs: Avoid wrapping implicitly convertible reference type.
1160
1161 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1162
1163         * iterators.cs: Create MemberName correctly.
1164
1165 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1166
1167         A fix for bug #478655
1168         * literal.cs: Check also underlying null type conversion.
1169
1170 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1171
1172         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1173
1174 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1175
1176         A fix for bug #477447
1177         * statement.cs: Add reference to correct parent storey when this
1178         is accessible from deep children storey (more than 1 level).
1179
1180 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1181
1182         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1183         * class.cs: Define base type members before setting up member cache.
1184
1185 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1186
1187         A fix for bug #477378
1188         * nullable.cs, expression.cs, statement.cs: More precise null type
1189         sanity checks.
1190
1191 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1192
1193         A fix for bug #472805
1194         * typemanager.cs, namespace.cs: Import only visible extension method
1195         types.
1196
1197 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1198
1199         A fix for bug #476895
1200         * attribute.cs: Use correct resolve context for attribute type.
1201
1202 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1203
1204         A fix for bug #476266
1205         * anonymous.cs: Mutate multi-dimensional arrays.
1206
1207 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1208
1209         A fix for bug #476400
1210         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1211
1212 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1213
1214         A fix for bug #476811
1215         * generics.cs: Fixed null-literal check.
1216
1217 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1218
1219         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1220         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1221         messing with static variables.
1222
1223 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1224
1225         A fix for bug #475965
1226         * generics.cs: Check generic parameter type after extracting from
1227         Expression<T>.
1228
1229 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1230
1231         A fix for bug #475823
1232         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1233         typed-null support.
1234
1235 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1236
1237         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1238         Simplified event field definition using backing field and not
1239         field builder directly.
1240
1241         * expression.cs (EmitLdArg): Optimize fast paths.
1242
1243 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1244
1245         A fix for bug #475327
1246         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1247
1248 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1249
1250         A fix for bug #475342
1251         * cs-parser.jay: Using 'super' instead of 'base' to call base
1252         constructor crashes compiler.
1253
1254 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1255
1256         A fix for bug #475354
1257         * expression.cs (Constantify): Add nullable types.
1258         
1259         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1260
1261 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1262
1263         A fix for bug #475246
1264         * expression.cs: More broken flowanalysis hacking needed.
1265
1266 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1267
1268         * attribute.cs: Compare only ref/out array modifiers. 
1269
1270 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1271
1272         * statement.cs: Use member cache when looking for foreach members.
1273
1274 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1275
1276         * expression.cs: Don't expose internal initializer types.
1277         
1278         * statement.cs: Check also explicit conversions for goto case.
1279
1280 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1281
1282         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1283
1284 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1285
1286         * *.cs: Replace null-type with NullLiteral where appropriate.
1287
1288 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1289
1290         * expression.cs: Initializer of reference argument use temporary
1291         variable to be verifiable.
1292         
1293         * parameter.cs: Share EmitLdArg.
1294
1295 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1296
1297         A fix for bug #473559
1298         * class.cs: Fixed: Not reporting error about nested class with the
1299         same name.
1300
1301 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1302
1303         Contributed under the MIT/X11 license.
1304
1305         * generic.cs: Added VerifyVariantTypeParameters which performs new
1306         variance verification logic. The old logic, based on the spec, was
1307         wrong because the spec is full of LIES!
1308
1309         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1310
1311         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1312
1313         * class.cs:
1314         * ecore.cs: Added calls to the new variance verification logic.
1315
1316         * parameter.cs:
1317         * delegate.cs: Removed calls to the old variance verification logic.
1318
1319 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1320
1321         * delegate.cs: Use cached Invoke method directly.
1322
1323 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1324
1325         * expression.cs: Emit expression tree for hoisted variable access.
1326
1327 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1328
1329         * namespace.cs: Add better extension class check.
1330
1331 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
1332
1333         * generic.cs: Fixed typeo (TypeParameter.Variacne).
1334
1335 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
1336
1337         This patch adds initial generic variance support to the compiler.
1338         It is contributed under the MIT/X11 license.
1339
1340         * typemanager.cs: Modified ImplementsInterface to check variance.
1341         Added VerifyVariantTypeParameters which checks the specified type to see
1342         if it uses a variant type parameter as a type argument (which is not
1343         allowed). Added IsVariantOf which determins if the first type is a
1344         variant of the second. NOTE: This only supports reference types at
1345         the moment to conform with the current level of VM support. When the
1346         VM supports value types, this will follow step.
1347
1348         * generic.cs: Added the Variance enum. Added a Variance property to
1349         TypeParameter and added variance support to definition phase. Added a
1350         Variance property to TypeParameterName. Also check to make sure that
1351         no variant types appear in generic method parameters.
1352
1353         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
1354         keywords if the langversion supports it.
1355
1356         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
1357         that variant types are only used in legal positions. Also added
1358         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
1359         parameters.
1360
1361         * decl.cs: Construct TypeParameter with the variance information.
1362
1363         * convert.cs: Checks variance in ImplicitReferenceConversionExists
1364         and ImplicitConversionStandard.
1365
1366         * rootcontext.cs: Added new "Future" language version.
1367
1368         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
1369         type parameters are not used as type arguments in interface inheritance.
1370         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
1371         parameters are not used as method return types. In MemberBase.
1372         ResolveMemberType, ensure that variant type parameters are not used
1373         as type arguments. Also call VerifyNoVariantTypeParameters on every
1374         set of parameters which are resolved.
1375
1376         * delegate.cs: Modified Delegate.Define to ensure that variant
1377         parameters are not used as type arguments and that a contravariant
1378         parameter is not used as the return type. Also call
1379         VerifyNoVariantTypeParameters on the delegate parameters.
1380
1381         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
1382         to specify generic variance.
1383
1384         * driver.cs: Added support for LanguageVersion.Future in the form of
1385         "-langversion:future".
1386
1387         * generic-mcs.cs: Stubbed out new members in generic.cs.
1388
1389 2009-02-03  Marek Safar  <marek.safar@gmail.com>
1390
1391         * class.cs, generic.cs: Emit type parameter constraints for nested
1392         types.
1393
1394 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1395
1396         A fix for bug #471213
1397         * class.cs: Avoid emitting backing field for abstract event fields.
1398
1399 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1400
1401         A fix for bug #359731
1402         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1403         expressions.
1404
1405 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1406
1407         A fix for bug #470767
1408         * statement.cs: Introduced BlockScopeExpression, needed when 
1409         expression tree conversion has to emit scope variables.
1410
1411 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1412
1413         * class.cs: Remove duplicate CallingConvention.
1414
1415 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1416
1417         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1418         when I finally found the right naming convention.
1419
1420 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1421
1422         * cs-tokenizer.cs: Put back different open parens optimization.
1423
1424 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1425
1426         A fix for bug #470227
1427         * cs-tokenizer.cs: Remove too agressive parser optimization.
1428
1429 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1430
1431         A fix for bug #324319
1432         * class.cs: Remove too early base type resolve.
1433
1434 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1435
1436         A fix for bug #324319
1437         * ecore.cs: Explicitly type null when assigning to type argument to
1438         make pass verifier check.
1439
1440 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1441
1442         * anonymous.cs: Fixed recent regression when initializing captured 
1443         this.
1444
1445 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1446
1447         A fix for bug #469019
1448         * anonymous.cs: Use all parent type parameters when instantiating
1449         nested generic storey.
1450
1451 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1452
1453         * expression.cs: Check for null instance methodgroup expression.
1454
1455 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1456
1457         A fix for bug #469244
1458         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1459         instance inside a conditional expression.
1460
1461 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1462
1463         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1464         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1465         GetElementType and HasElementType. IsValueType clean up.
1466
1467 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1468
1469         * nullable.cs: Use common EmitCall.
1470         
1471         * expression.cs: Emit constraint. for virtual calls only.
1472
1473 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1474
1475         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1476         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1477         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1478         checks.
1479
1480 2009-01-22  Jb Evain  <jbevain@novell.com>
1481
1482         * anonymous.cs: make anonymous types' ToString implementation
1483         match what csc outputs.
1484
1485 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1486
1487         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1488         up.
1489
1490 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1491
1492         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1493         verifier checks.
1494
1495 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1496
1497         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1498         expressions.
1499
1500 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1501
1502         A fix for bug #466634
1503         * statement.cs: Add reference for nested storey when only this
1504         is captured.
1505
1506 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1507
1508         A fix for bug #466474
1509         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1510         was specified.
1511
1512 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1513
1514         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1515         Fixed nested stories parent referencing process. Also fixes #463985.
1516
1517 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1518
1519         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1520         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1521         implementation. Also fixes #463108.
1522
1523 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1524
1525         A fix for bug #416109
1526         * decl.cs: Issue correct CLSAttribute warning location.
1527
1528 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1529
1530         A fix for bug #456775
1531         * attribute.cs: Use attribute owner scope when resolving attribute
1532         arguments.
1533
1534 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1535
1536         A fix for bug #457257
1537         * decl.cs: Fixed incorrect member declaring type comparison.
1538
1539 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1540
1541         A fix for bug #460896
1542         * driver.cs: Handle /RES resources as embeddable.
1543
1544 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1545
1546         A fix for bug #462515
1547         * ecore.cs: Report inacessible members upwards.
1548
1549 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1550
1551         A fix for bug #463190, #463192
1552         * decl.cs, namespace.cs: Also import internal extension classes.
1553
1554 2009-01-04  Marek Safar  <marek.safar@gmail.com>
1555
1556         A fix for bug #463415
1557         * generic.cs: Use right index for RemoveDependentTypes.
1558
1559 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1560
1561         A fix for bug #463196
1562         * expression.cs: Fixed enum to null comparison.
1563
1564 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1565
1566         A fix for bug #463121
1567         * nullable.cs: Fixed nullable user equality operator comparison.
1568
1569 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1570
1571         A fix for bug #462950
1572         * class.cs, decl.cs: Use full explicit name when defining automatic
1573         property backing field.
1574
1575 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1576
1577         A fix for bug #462592
1578         * pending.cs: Emit type arguments for generic proxy method.
1579
1580 2008-12-30  Marek Safar  <marek.safar@gmail.com>
1581
1582         * expression.cs (As): Mutate all type arguments.
1583
1584 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1585
1586         A fix for bug #462622
1587         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
1588         context.
1589
1590 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1591
1592         A fix for bug #450782
1593         * ecore.cs: Consider more variables of form V.I to be fixed.
1594
1595 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1596
1597         A fix for bug #460712
1598         * typemanager.cs: Core types could be imported.
1599
1600 2008-12-28  Marek Safar  <marek.safar@gmail.com>
1601
1602         A fix for bugs #460847, #460772, #458049, #457339, #447807
1603         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
1604         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
1605         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
1606         user lambdas used inside query clauses.
1607
1608 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1609
1610         A fix for bug #460229
1611         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
1612
1613 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1614
1615         A fix for bug #459952
1616         * decl.cs, namespace.cs: Use common CheckAccessLevel.
1617
1618 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1619
1620         A fix for bug #459630
1621         * convert.cs: Enum to valuetype conversion is not allowed.
1622
1623 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1624
1625         A fix for bug #457087
1626         * generic.cs: Don't crash when constraint comes from type
1627         declaration.
1628
1629 2008-12-16  Marek Safar  <marek.safar@gmail.com>
1630
1631         A fix for bug #459221
1632         * anonymous.cs, statement.cs: Delay only captured this
1633         initialization.
1634
1635 2008-12-12  Marek Safar  <marek.safar@gmail.com>
1636
1637         A fix for bug #457489
1638         * anonymous.cs, statement.cs: Split anonymous storey instantiation
1639         and initialization to capture scope initializers correctly.
1640
1641 2008-12-11  Marek Safar  <marek.safar@gmail.com>
1642
1643         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
1644         ParameterReference refactoring.
1645
1646 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1647
1648         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
1649         to be imported from any assembly.
1650
1651 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1652
1653         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
1654         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
1655         from anonymous method and lambda expression.
1656
1657 2008-12-01  Marek Safar  <marek.safar@gmail.com>
1658
1659         A fix for bug #448560
1660         * expression.cs (As): Box any generic type arguments to be
1661         verifiable.
1662
1663 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1664
1665         Add tripwire for implicit conversion bugs
1666         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
1667         for CS1501 error.
1668         (MethodGroupExpr.OverloadResolve): Add sanity check between
1669         IsApplicable and VerifyArgumentsCompat.
1670         (VerifyArgumentsCompat): Report CS1501 where appropriate.
1671
1672 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1673
1674         Fix build break in System.Data_test
1675         * convert.cs (ImplicitConversionExists): Move NullLiteral
1676         conversions ...
1677         (ImplicitStandardConversionExists): ... here.
1678
1679 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1680
1681         * literal.cs: Emit correctly explicit null to nullable cast.
1682
1683 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1684
1685         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
1686         resolve.
1687
1688 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1689
1690         A fix for bug #449005
1691         * convert.cs, nullable.cs: Use only one implicit nullable
1692         conversion.
1693
1694 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1695
1696         * convert.cs, literal.cs: More Convert cleanup is needed.
1697
1698 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1699
1700         * decl.cs, class.cs: Fixed misleading error message.
1701
1702 2008-11-26  Marek Safar  <marek.safar@gmail.com>
1703
1704         A fix for bug #449005
1705         * nullable.cs (EmitEquality): Disable optimization for user operator
1706         operands.
1707
1708 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1709
1710         A fix for bug #447027
1711         * anonymous.cs (HoistedVariable): Cache also outer access to deal
1712         with context variables stored as expression instances.
1713
1714 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1715
1716         A fix for bug #447027
1717         * delegate.cs: Fixed delegate VerifyMethod logic.
1718
1719 2008-11-24  Marek Safar  <marek.safar@gmail.com>
1720
1721         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
1722         but not verifiable.
1723
1724 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1725
1726         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
1727         member type resolve to follow normal flow, instead of random
1728         property access.
1729
1730 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1731
1732         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
1733         type.
1734
1735 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1736
1737         * const.cs: Emit decimal array constant as literal.
1738
1739 2008-11-20  Marek Safar  <marek.safar@gmail.com>
1740
1741         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
1742
1743 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1744
1745         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
1746         into real property (saves 8 MB for corlib compilation).
1747
1748 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1749
1750         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
1751         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
1752         generic-mcs.cs: Small cleanup of TypeArguments.
1753
1754 2008-11-18  Marek Safar  <marek.safar@gmail.com>
1755
1756         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
1757         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
1758         of ConstructedType expression, renamed to GenericTypeExpr.
1759
1760 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1761
1762         A fix for bug #445303
1763         * location.cs (IsConditionalDefined): Handle undefined global
1764         defines.
1765
1766 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1767
1768         A fix for bug #444678
1769         * expression.cs (TryReduceConstant): Always create new constant
1770         instance.
1771
1772 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1773
1774         A fix for bug #444673
1775         * ecore.cs: Ignore open generic types when used as generic type
1776         instance fields.
1777
1778 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1779
1780         A fix for bug #445458
1781         * expression.cs, cs-parser.jay: Don't crash when an expression
1782         statement is null.
1783
1784 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1785
1786         A fix for bug #445464
1787         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
1788         inside unbound type.
1789
1790 2008-11-14  Jb Evain  <jbevain@novell.com>
1791
1792         * driver.cs: ignore empty -nowarn argument such as
1793         the one in -nowarn:12,13,,.
1794
1795 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1796
1797         A fix for bug #444271
1798         * anonymous.cs: Rescan parent storeys when best candidate was
1799         undone.
1800
1801 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1802
1803         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
1804         useless UnboundTypeExpression.
1805         
1806         * attribute.cs: Do check obsolete attribute on generic types.
1807
1808 2008-11-12  Marek Safar  <marek.safar@gmail.com>
1809
1810         A fix for bugs #425680, #400139
1811         * ecore.cs, expression.cs: Trying to do some almost_matched_members
1812         refactoring.
1813
1814 2008-11-11  Marek Safar  <marek.safar@gmail.com>
1815
1816         A fix for bug #435747
1817         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
1818         compound value types assignment. Few micro optimizations added.
1819
1820 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1821
1822         A fix for bug #442610
1823         * anonymous.cs (MutateConstructor): More SRE hacking.
1824
1825 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1826
1827         A fix for bug #442579
1828         * ecore.cs: Also initialize expanded form of a method with 1 params
1829         parameter.
1830
1831 2008-11-06  Marek Safar  <marek.safar@gmail.com>
1832
1833         * expression.cs (UnaryMutator): Do early l-side check.
1834
1835 2008-11-05  Miguel de Icaza  <miguel@novell.com>
1836
1837         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
1838         Init, otherwise we would crash later on when checking for friend
1839         assemblies. 
1840
1841         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
1842         Otherwise we never get any meaningful information as to what
1843         failed. 
1844
1845 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1846
1847         A fix for bug #436318
1848         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
1849
1850 2008-11-05  Miguel de Icaza  <miguel@novell.com>
1851
1852         * namespace.cs: Turns out that it was a really bad idea to hide
1853         the errors for namespaces not found here in eval mode.    
1854
1855         * eval.cs: When we process using clauses, only enter those into
1856         the list of valid using clauses after they have been validated.   
1857
1858         The above change gives the proper semantics: it does not
1859         senselessly report the same errors with broken using statements by
1860         never storing them in the first place when they are invalid.
1861
1862 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1863
1864         A fix for bug #421839
1865         * cs-parser.jay: Remove expression from coalesce rule to force lower
1866         priority than the assignment operator.
1867
1868 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1869
1870         A fix for bug #437875
1871         * nullable.cs: Compile correctly method group operand used with null
1872         coalescing operator.
1873
1874 2008-11-04  Marek Safar  <marek.safar@gmail.com>
1875
1876         A fix for bug #434589
1877         * expression.cs (Binary): Ignore lifted conversions when at least
1878         one operand is of reference type.
1879
1880 2008-11-04  Marek Safar  <marek.safar@gmail.com>
1881
1882         * cs-parser.jay: Better syntax error report.
1883
1884 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1885
1886         A fix for bug #436792
1887         * cs-parser.jay: Use GetLocation to access location.
1888
1889 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1890
1891         A fix for bug #440774
1892         * cs-parser.jay: Also set current_array_type when parsing local
1893         variables types.
1894
1895 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1896
1897         A fix for bug #440785
1898         * expression.cs (As): Don't resolve self modifing expression
1899         multiple times.
1900
1901 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1902
1903         A fix for bug #439447
1904         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
1905
1906 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1907
1908         A fix for bug #437571
1909         * cs-parser.jay: Fixes internal error for invalid expression
1910         statements.
1911
1912 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1913
1914         * ecore.cs: Resolve correctly ambiguous params delegate methods.
1915
1916 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1917
1918         * generic.cs, anonymous.cs: Simplified GetDeclarations.
1919
1920 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1921
1922         * cs-tokenizer.cs: More precise cast parsing.
1923
1924 2008-10-16  Martin Baulig  <martin@ximian.com>
1925
1926         * anonymous.cs (AnonymousMethodStorey): Put back the
1927         `hoisted_locals' hashtable and use it in EmitType().
1928
1929 2008-10-15  Marek Safar  <marek.safar@gmail.com>
1930
1931         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
1932         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
1933         ~5MB for corlib.
1934
1935 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1936
1937         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
1938
1939 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1940
1941         * statement.cs: Mutate scope initializers.
1942
1943 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1944
1945         * expression.cs: Use typeless value for This constant.
1946         
1947         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
1948
1949 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1950
1951         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
1952         tokenizer.
1953
1954 2008-10-13  Marek Safar  <marek.safar@gmail.com>
1955
1956         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
1957         type to type cast.
1958
1959 2008-10-13  Marek Safar  <marek.safar@gmail.com>
1960
1961         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
1962         parser and tokenizer. Fixes many ambiguities including #433258.
1963
1964 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1965
1966         * cs-parser.jay: Fixed missing accessor recovery.
1967
1968 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1969
1970         A fix for bug #433701
1971         * expression.cs: Better error message.
1972
1973 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1974
1975         * cs-parser.jay, expression.cs: Start reporting real parser errors.
1976         
1977         * Makefile: Disabled unused debug symbols.
1978
1979         Also fixes: #320556, #321097, #321656, #321876, #351316
1980
1981 2008-10-09  Miguel de Icaza  <miguel@novell.com>
1982
1983         * eval.cs: rename "<interactive>" to "{interactive}", to work
1984         around a requirement in the compiler that this be a valid
1985         filename, and in Windows it is not (433886).
1986
1987 2008-10-09  Marek Safar  <marek.safar@gmail.com>
1988
1989         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
1990
1991 2008-10-08  Marek Safar  <marek.safar@gmail.com>
1992
1993         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
1994         cs-parser.jay: Generic type declaration and type arguments cleanup.
1995
1996 2008-10-05  Marek Safar  <marek.safar@gmail.com>
1997
1998         * cs-parser.jay: Allow parsing weird array creation construct.
1999
2000 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2001
2002         * cs-parser.jay: Conflicts reduction.
2003
2004 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2005
2006         * cs-parser.jay: Conflicts reduction.
2007
2008 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2009
2010         Fix #398325
2011         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2012         property.  Add a 'count' hint about the use of the shared vector.
2013         Ensure that we don't leak out dirty bits.
2014         (UsageVector.MergeChild): Throw away information about variables
2015         in child vectors.
2016         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2017
2018 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2019
2020         A fix for bug #431746
2021         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2022         parameters when iterator is created.
2023
2024 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2025
2026         A fix for bug #431827
2027         * expression.cs: Fixed right based pointer arithmetic operations
2028         emit.
2029
2030 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2031
2032         A fix for bug #353779
2033         * assign.cs, expression.cs: Fixed compound assignment conversions.
2034
2035 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2036
2037         A fix for bug #375262
2038         * statement.cs: Refactor ArrayForeach to be usable with string
2039         indexer. Optimized single dimentional arrays foreach.
2040
2041 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2042
2043         A fix for bug #431255
2044         * anonymous.cs, expression.cs: Removed broken optimization.
2045
2046 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2047
2048         * anonymous.cs: Use full type parameters of parent generic
2049         containers. Removed unnecessary AddParentStoreyReference call.
2050
2051 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2052
2053         A fix for bug #324702
2054         * class.cs: Use better shorter names for explicit interface member
2055         implementations.
2056
2057         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2058
2059 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2060         
2061         * expression.cs: Use new interface to check fixed expression.
2062
2063 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2064
2065         A fix for bug #421101
2066         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2067         interface to check for fixed fixed-buffers.
2068
2069 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2070
2071         A fix for bug #429264
2072         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2073         
2074         * delegate.cs: Removed unnecessary casts.
2075
2076 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2077
2078         A fix for bug #352151
2079         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2080         class.cs: Fixed already defined explicit interface members check.
2081
2082 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2083
2084         cs-tokenizer.cs: Fix typo.
2085
2086 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2087
2088         * eval.cs (InteractiveBase): The quit command now just sets a
2089         flag, instead of calling Environment.Exit(), it is milder on
2090         embedded hosts. 
2091
2092         CompiledMethod is now in Mono.CSharp, not nested inside
2093         the Evaluator, it was inconvenient to use.
2094
2095 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2096
2097         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2098         code to be invoked without having to reparse.
2099
2100 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2101
2102         * ecore.cs: The recent changes to FieldExpr broke this as well.
2103         Fixes LINQ queries in the interactive shell.
2104
2105         * Multiple files: indentation fixing for the Mono coding
2106         guidelines for the switch statement.
2107
2108         * eval.cs: Make the Evaluator API thread safe.
2109
2110 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2111
2112         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2113         constructor parsing.
2114
2115 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2116
2117         A fix for bug #325326
2118         * statement.cs: Check possible mistaken empty statement using
2119         explicit blocks only.
2120
2121 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2122
2123         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2124         RootNamespace.ComputeNamespaces to update the internal list of
2125         namespaces, this is no longer done for us.
2126
2127         (InteractiveBase): Use the Evaluator APIs instead of calling into
2128         Driver directly
2129
2130 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2131
2132         A fix for bug #429264
2133         * expression.cs: Missing mutator for access to multidimensional
2134         arrays.
2135
2136 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2137
2138         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2139         entry wrapper.
2140         
2141         * driver.cs: Missing input argument check.
2142
2143 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2144
2145         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2146         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2147         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2148         DefineMembers.
2149
2150 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2151
2152         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2153         fully constructed FieldExpr, fixes the regression introduced in
2154         the last commit.
2155         
2156         * ecore.cs, expression.cs: Plug back the eclass initialization as
2157         otherwise it regresses `csharp'. 
2158
2159 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2160
2161         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2162         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2163         phase to resolve phase. It resolves problems with expression trees
2164         and fixes bugs #323796, #325156.
2165
2166 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2167
2168         * codegen.cs: Report better error when symbol writer is missing.
2169
2170 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2171
2172         * codegen.cs: Set .NET symbol writer.
2173         
2174         * decl.cs: Guard against null generic arguments.
2175         
2176         * report.cs: Don't report exactly same additional details.
2177
2178 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2179
2180         A fix for bug #324917
2181         * cs-parser.jay: Add missing multidimensional non-expression type
2182         ranks.
2183         
2184 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2185
2186         A fix for bug #428191
2187         * anonymous.cs: Create an outer generic fields also for non-storey
2188         anonymous methods.
2189
2190 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2191
2192         A fix for bug #378294
2193         * class.cs: Make fixed size buffers gmcs feature only.
2194
2195 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2196
2197         A fix for bug #355622, #324993
2198         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2199         field initializer.
2200
2201 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2202
2203         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2204         error reporting.
2205
2206 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2207
2208         A fix for bug #416110
2209         * generic.cs: Struct constraint results in default ctor and
2210         ValueType base type constraint to be set.
2211
2212 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2213
2214         A fix for bug #423791
2215         * generic.cs: Fixed params output type type-inference.
2216
2217 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2218
2219         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2220         
2221 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2222
2223         * cs-tokenizer.cs: Don't break on extra partial modifier.
2224
2225 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2226
2227         A fix for bug #427592
2228         * generic.cs: Use common parameter resolve method.
2229
2230 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2231
2232         A fix for bug #414758
2233         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2234         property.
2235
2236 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2237
2238         * driver.cs, namespace.cs: Read types and namespaces after all
2239         requested assemblies are loaded, fixes issues with System.Core
2240         auto-reference, and #419888.
2241
2242 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2243
2244         A fix for bug #417705
2245         * cs-parser.jay: Fixed as/is operator expression split.
2246
2247 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2248
2249         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2250         Fixed expression tree representation of empty new expression and
2251         new initializer expression.
2252
2253 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2254
2255         * eval.cs: Remove warning, keep reference to driver around.
2256
2257         * Hide fields that do not need to be public.
2258
2259 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2260
2261         A fix for bug #426385
2262         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2263         conversion for array elements.
2264
2265 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2266
2267         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2268         void parsing conflicts.
2269
2270 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2271
2272         A fix for bug #425601
2273         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2274         System.Core only when there is no custom ExtensionAttribute
2275         implementation.
2276
2277 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2278
2279         * namespace.cs: Do not report CS0246 (name
2280
2281 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2282
2283         A fix for bug #425669
2284         * generic.cs: Don't cache generic static anonymous method 
2285         containers.
2286
2287 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2288
2289         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2290         conflicting constraints.
2291
2292 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2293
2294         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2295         mcs too.
2296
2297 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2298
2299         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2300         to null pointer conversion fixes.
2301
2302 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2303
2304         * cs-parser.jay, expression.cs: An implicitly typed local variable
2305         declarator cannot use an array initializer.
2306
2307 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2308
2309         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2310
2311 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2312
2313         * generic.cs (InflatedConstraints): Don't crash when constraints
2314         are different.
2315         
2316         * cs-parser.jay: const_declarator is a block.
2317
2318         * constant.cs: Check for not allowed NaN conversions.
2319
2320 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2321
2322         * driver.cs: Drop --shell argument, the compiler is no longer a
2323         REPL. 
2324
2325         * eval.cs: Move most of the code that deals with evaluation into
2326         this file and document the public API from repl.cs
2327
2328         * repl.cs: Remove from here.
2329         
2330 2008-09-10  Marek Safar  <marek.safar@gmail.com>
2331
2332         A fix for bug #424684
2333         * generic.cs: Generic class constraints must come first.
2334
2335 2008-09-09  Miguel de Icaza  <miguel@novell.com>
2336
2337         * cs-parser.jay: Improve error reporting for syntax errors in
2338         statements and expressions, we now report the expected tokens
2339         instead of reporting the useless "; expected".
2340
2341         Drop the strings from the token declaration, it turns out that
2342         they did not do what I thought they did.  Instead they were adding
2343         two sets of tokens to the tables.
2344
2345 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2346
2347         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
2348         delegate.cs: Share special type check.
2349
2350 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2351
2352         A fix for bug #423981
2353         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
2354
2355 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2356
2357         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
2358         ConvertImplicitly.
2359
2360 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2361
2362         A fix for bugs: #324750, #335946
2363         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
2364         lookup rule to determine ?-based tokens.
2365
2366 2008-09-08  Miguel de Icaza  <miguel@novell.com>
2367
2368         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
2369         expressions (like event adding or removing) end up here, so we
2370         need to treat those as statements.
2371
2372         Add LoadAssembly method.
2373
2374 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2375
2376         * repl.cs: Add Time method.
2377
2378 2008-09-05  Marek Safar  <marek.safar@gmail.com>
2379
2380         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
2381
2382 2008-09-05  Miguel de Icaza  <miguel@novell.com>
2383
2384         * repl.cs: Add workaround for old compilers.
2385
2386 2008-09-04  Jb Evain  <jbevain@novell.com>
2387
2388         * repl.cs (PrettyPrint): pretty print everything that
2389         implements IDictionary, as well as IEnumerables. Also,
2390         add a quit helper property.
2391
2392 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2393
2394         * constant.cs: Better error reporting for decimal literals.
2395         
2396         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2397         field attributes.
2398         
2399 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2400                         Miguel de Icaza  <miguel@novell.com>
2401
2402         A fix for bug #422951
2403         * assign.cs (Assign.DoResolve): Perform the type conversions
2404         checks before we attempt to initialize `New' initializers. 
2405
2406 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2407
2408         A fix for bug #422853
2409         * delegate.cs (DelegateCreation): Add special handling for
2410         EmptyExpression.Null instance expression which is just another
2411         hack for undecided member instance exression.
2412
2413 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2414
2415         * expression.cs, ecore.cs: Emit full expression tree for reduced
2416         binary expressions.
2417
2418 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2419
2420         * expression.cs (This): Guard against multi-resolving.
2421         
2422         * ecore.cs, statement.cs (Throw): Simplified.
2423         
2424         * flowanalysis.cs: Also verify event fields.
2425
2426 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2427
2428         * assign.cs (Assign.DoResolve): Perform the type conversions
2429         checks before we attempt to initialize `New' initializers. 
2430
2431         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2432
2433         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2434         public. 
2435
2436         * repl.cs: Update help.
2437
2438 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2439
2440         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2441         handling of the default config handling, including the special
2442         treatment of System.Core assembly. 
2443
2444         Fixes the REPL processing for LINQ.
2445
2446 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2447
2448         A fix for bug #422507
2449         * expression.cs (UnboxCast): Add missing child expression mutator.
2450
2451 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2452
2453         * driver.cs: Don't self reference System.Core assembly.
2454
2455 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2456
2457         A fix for bug #422507
2458         * expression.cs (StringConcat): Add missing type mutator.
2459
2460 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2461
2462         * generic.cs (TypeInferenceContext): Follow equality rule for
2463         constructed type lower bound type inference.
2464
2465 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2466
2467         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2468         <dblank@cs.brynmawr.edu> which updates the cursor position on
2469         refresh.
2470         
2471 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2472
2473         A fix for bug #367145
2474         * driver.cs: Fixed import of extension methods when using -noconfig
2475         option.
2476
2477 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2478
2479         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2480         version from non-generic implementation instead.
2481
2482 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2483
2484         A fix for bug #418908
2485         * class.cs: Use AddScopeStatement for field initializers.
2486
2487 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2488
2489         A fix for bug #415385
2490         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2491
2492 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2493
2494         A fix for bug #421736
2495         * iterators.cs: Don't crash on unreachable iterators.
2496
2497 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2498
2499         A fix for bug #421628
2500         * parameter.cs, attribute.cs: Clone also parameter attributes.
2501
2502 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2503
2504         * namespace.cs (LookupType): In EvalMode, try to replace
2505         the TypeBuilder from our cache with a Type as Reflection.Emit does
2506         not  like to mix code from older assemblies emitted and new
2507         assemblies emitted. 
2508
2509         This sounds like a serious Mono bug that prevents multiple
2510         assemblies to be generated and consumed at the same time.
2511
2512         * cs-parser.jay (push_current_class): Do not make interactive
2513         classes internal or private, make them public as we currently
2514         generate each new class in a new assembly.   
2515
2516 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2517
2518         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2519         remove types that are entered into the global namespace during
2520         parsing so that we can remove them on failure.
2521  
2522         * cs-parser.jay: Parsing: we now keep track of types that are
2523         entered into global variables and queue those in case the parsing
2524         or resolution fail.
2525  
2526         This happens in a few situations: during partial-input, we invoke
2527         the parser repeatedly for example with the string "class X", this
2528         would cause X to be registed, and we need to remove this
2529         registration so that another parse attempt later with say "class X {"
2530         would actually work.
2531  
2532         Additionally, if there is an error in the resolution phase, for
2533         example: "class X : NonExistant {}" th
2534         
2535         * cs-parser.jay: Be more precise with the errors being raised,
2536         instead of flagging all exceptions during parsing to be attributed
2537         to the parsing process, distinguish those from errors happening in
2538         the actions and hint that using -v would produce the actual
2539         exception. 
2540
2541         * repl.cs: Do not load all compiler references on each reset,
2542         doing the partial reset takes care of this.
2543         
2544 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2545
2546         * repl.cs: Add support for loading all the files from
2547         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2548         as shell libraries.
2549
2550         Introduce a micro-parser that is able to deambiguate on its input
2551         whether we are dealing with a compilation unit (namespace, class,
2552         interface, struct, delegate) declaration or a statement.   This
2553         allows both declarations and statements to be entered. 
2554
2555         Set history size by default to 300 lines.
2556
2557         Instead of distinguishing based on the parser.InteractiveResult,
2558         have only two cases: statements were parsed, or a compilation unit
2559         was.   Always pull the Using statement additions from the
2560         compilation unit parse.
2561         
2562         * cs-tokenizer.cs: Rename tokens to better describe their intent
2563         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
2564         
2565         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
2566         EvalMode is used to trigger the lookup of global variables while
2567         StatementMode is used turn variable declarations into static
2568         fields.
2569
2570         * getline.cs: Allow history size to be set.
2571         
2572 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2573
2574         A fix for bug #360755
2575         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
2576
2577 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2578
2579         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
2580         
2581         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
2582         member name, it is too confusing
2583         
2584         * decl.cs, class.cs: Don't report unused fields with attached attribute.
2585         
2586         * rootcontext.cs: Finally default to warning level 4.
2587
2588 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2589
2590         * class.cs (CheckBase): Ignore overloaded operators.
2591
2592 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2593
2594         A fix for bug #420830
2595         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
2596
2597 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2598
2599         A fix for bug #420832
2600         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
2601
2602 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2603
2604         A fix for bug #420386
2605         * nullables.cs: Fixed logic of nullable user comparison operators involving
2606         null values.
2607
2608 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2609         
2610         * attribute (IsClsCompliant): Use FALSE value for pointer types.
2611
2612 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2613
2614         * repl.cs: Add support for aborting the running code with C-c. 
2615
2616 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
2617
2618         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
2619
2620 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2621
2622         * cs-parser.jay (interactive_statement_list): A new set of rules
2623         for hosting statements that uses the "interactive_" prefix.   
2624
2625         * repl.cs: Add support for parsing `using' as a statement or as a
2626         directive.  Deambiguating before passing this to the parser.
2627
2628         We need to distinguish statement_expressions that occur at the
2629         toplevel vs those that occur embedded into expressions.
2630
2631         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
2632         that fixes the cursor key handling, and a history bug.
2633         
2634 2008-08-26  Miguel de Icaza  <miguel@novell.com>
2635
2636         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
2637         limitations in Console, instead the 2.0 bootstrap libraries now
2638         include the Console bits.
2639
2640         Also, remove the use of Nullables from getline.cs
2641
2642         ------------
2643         
2644         Interactive support for the C# compiler.   Use gmcs --shell to
2645         enter a read-eval-print loop shell.
2646
2647         Docs: http://www.mono-project.com/CsharpRepl
2648         
2649         * sources: include repl.cs here and getline.cs for gmcs.exe,
2650         everything else is getline.cs impaired.
2651
2652         * Makefile: when bootstrapping pass a special flag
2653         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
2654         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
2655         This distinguishes those two cases.
2656
2657         * repl.cs: Support for a read-eval-print loop.   Will be soon
2658         refactored into eval support and then REPL on top of it.
2659
2660         * ecore.cs: If a simplename lookup fails, before erroring out,
2661         if we are in EvalMode to resolve the name to a declaration in the
2662         Eval-land.    
2663
2664         This means that variable declarations that happened in previous
2665         classes (as repl puts every statement in a separate class) are
2666         made visible in this way.
2667
2668         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
2669         triggered an error due to the end of file being reached.   This is
2670         used to do multi-line input, and notify the caller that the user
2671         needs to provide more text before a successful parse.
2672
2673         Add new grammar rules after the INTERACTIVE_PARSER token is seen
2674         to drive the evaluation with a custom wrapper. 
2675
2676         * driver.cs: Add support for --shell, and refactor some code to be
2677         reused from repl.cs
2678         
2679         * namespace.cs: Add support for serializing the contents of the
2680         namespaces and reloading them.  
2681
2682         * getline.cs: A managed implementation of ReadLine under
2683         X11/Apache2 license terms.  Easy to embed in other applications as
2684         well.
2685
2686         * namespace.cs: Add some functions to save and restore the
2687         namespace state.
2688
2689         * rootcontext.cs: New public field.
2690
2691         * cs-tokenizer.cs: Add support for one of the possible characters
2692         we introduce into the token stream.  
2693
2694         This patch does not affect the regular tokenization process, the
2695         only performance hit would happen if there is an invalid character
2696         on the input string.
2697
2698         * support.cs: Move isatty helper routine here.
2699
2700         * codegen.cs: Small cleanup, and add a mechanism to initialize the
2701         code generator for in-memory assemblies.
2702
2703 2008-08-26  Marek Safar  <marek.safar@gmail.com>
2704
2705         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
2706         parameter cannot be always used as a type.
2707
2708 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2709
2710         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
2711
2712 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2713
2714         * convert.cs: Implement explicit array to IList<T> conversion.
2715
2716 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2717
2718         A fix for bug #362740
2719         * cs-tokenizer.cs: Handle UTF-16 surrogates.
2720
2721 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2722         
2723         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
2724         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
2725         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
2726         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
2727         handling to use just one type of infrastructure and deal with generics
2728         more effectivelly.
2729
2730 2008-07-23  Martin Baulig  <martin@ximian.com>
2731
2732         *** Merged this from trunk revision 108527 ***
2733
2734         * statement.cs
2735         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
2736         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
2737         scope variable.
2738
2739 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2740         
2741         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
2742         error checks.
2743
2744 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2745         
2746         * delegate.cs: Fixed compiler crash when creating delegate using partial
2747         method.
2748         
2749         * typemanager.cs: MulticastDelegate is not a delegate.
2750
2751 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2752         
2753         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
2754         checks.
2755
2756 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
2757
2758         * cs-parser.jay (type): Allow 'var' in mcs too.
2759         (local_variable_type): Likewise.
2760
2761 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2762         
2763         * driver.cs: Removed broken -noconfig variants.
2764
2765 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2766         
2767         A fix for bug #417078
2768         * expression.cs: Emit correctly left side pointer operators.
2769
2770 2008-08-13  Marek Safar  <marek.safar@gmail.com>
2771
2772         * generic.cs, lambda.cs: Inflate method generic arguments only.
2773
2774 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2775
2776         * class.cs: Fixed struct layout check regression.
2777
2778 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2779
2780         * cs-parser.jay, enum.cs: Simplified enum parsing.
2781         
2782         * decl.cs: Check all type parameters conflicts.
2783         
2784         * expression.cs, statement.cs, attribute.cs: More expression checks.
2785
2786 2008-08-11  Marek Safar  <marek.safar@gmail.com>
2787
2788         * generic.cs: Add type inference types restriction.
2789         
2790         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
2791         anonymous.cs, expression.cs: Allocate less accessor parameters.
2792
2793 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2794
2795         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
2796         classes.
2797
2798 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2799
2800         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
2801
2802 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2803
2804         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
2805         Also fixes #362146 and #381592.
2806
2807 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2808
2809         * ecore.cs: Reduced constant cannot be used as an attribute value.
2810         
2811         * cs-parser.jay: Base expression has to be a type.
2812         
2813         * expression.cs (Conditional): Uses ReducedExpression.
2814
2815 2008-08-06  Marek Safar  <marek.safar@gmail.com>
2816
2817         A fix for bug #376826
2818         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
2819         address of hoisted local variable or parameter cannot be taken.
2820
2821 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2822
2823         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
2824         anonymous method inside checked/unchecked expression.
2825
2826 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2827
2828         * typemanager.cs (IsEqual): Guard against null.
2829         
2830         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
2831         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
2832         routine. Fixed few misleading conversion errors.
2833
2834 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2835
2836         * class.cs: Consider generics when checking cycles in struct layout.
2837
2838 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
2839
2840         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
2841
2842 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2843
2844         A fix for bug #414165
2845         * anonymous.cs: Use same anonymous implementation method for all anonymous
2846         method emits.
2847
2848 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2849
2850         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
2851         constraints.
2852
2853 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2854
2855         * cs-parser.jay: Typeof argument has to be a type expression.
2856         
2857         * namespace.cs: Check alias and namespace definitions collisions.
2858         
2859         * class.cs, pending.cs: Moved explicit interface accessor implementation
2860         check.
2861         
2862         * delegate.cs, expression.cs: Verify special name invocations.
2863         
2864 2008-08-01  Marek Safar  <marek.safar@gmail.com>
2865
2866         * cs-parser.jay: Don't choke on empty generic type arguments.
2867         
2868         * cs-tokenizer.cs: Handle escaped preprocessor directives.
2869         
2870         * expression.cs, ecore.cs: Minor expressions bugs.
2871
2872 2008-08-01  Marek Safar  <marek.safar@gmail.com>
2873
2874         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
2875         and added more error handling.
2876         
2877         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
2878         
2879         *  modifiers.cs, enum.cs: Fixed.
2880
2881 2008-07-31  Jb Evain  <jbevain@novell.com>
2882
2883         * driver.cs: remove -pkg ability of smcs.
2884
2885 2008-07-30  Marek Safar  <marek.safar@gmail.com>
2886
2887         * statement.cs (Switch): Correctly set empty default target for single
2888         blocks.
2889
2890 2008-07-30  Marek Safar  <marek.safar@gmail.com>
2891
2892         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
2893         string switch statement implementation to use string dictionary which
2894         significantly (2-8x) improves performance of generated code.
2895
2896 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2897
2898         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
2899         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
2900         
2901 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2902
2903         A fix for bug #412595
2904         * typemanager.cs, convert.cs, expression.cs: Some types are never
2905         convertible to each other.
2906
2907 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2908
2909         * nullable.cs (CreateNullConstant): An error messages update.
2910
2911 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2912
2913         A fix for bug #412595
2914         * cfold.cs: Don't cast undefined bool constant.
2915
2916 2008-07-29  Martin Baulig  <martin@ximian.com>
2917
2918         * symbolwriter.cs
2919         (SymbolWriter.Reset): New public static method.
2920
2921         * driver.cs
2922         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
2923
2924 2008-07-28  Marek Safar  <marek.safar@gmail.com>
2925
2926         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
2927         
2928         * expression.cs (ElementAccess): Exact size allocation.
2929
2930 2008-07-26  Marek Safar  <marek.safar@gmail.com>
2931
2932         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
2933
2934 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2935
2936         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
2937         
2938         * class.cs: Removed $PRIVATE$ field hack which caused problems during
2939         flow analysis.
2940
2941 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2942
2943         A fix for bug #412217
2944         * assign.cs: Mutate also assignment type.
2945
2946 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2947
2948         A fix for bug #323644
2949         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
2950         indexers.
2951
2952 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2953
2954         A fix for bug #412134
2955         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
2956         non-enumerable operands when overloading equality or bitwise operators.
2957
2958 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2959
2960         * anonymous.cs: Cache closed generic anonymous method delegates.
2961
2962 2008-07-24  Marek Safar  <marek.safar@gmail.com>
2963
2964         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
2965         anonymous.cs, statement.cs: Always emit anonymous method as static method
2966         when is instance free. Use nesting for nested anynomous methods blocks.
2967         
2968 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2969
2970         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
2971         types.
2972
2973 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2974
2975         * expression.cs: Removed MakeSimpleCall.
2976
2977 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2978
2979         A fix for bug #323012
2980         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
2981         Base method implementing interface has to be public.
2982
2983 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2984
2985         * cs-parser.jay: Don't break on missing argument.
2986
2987 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2988
2989         A fix for bug #320993
2990         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
2991           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
2992
2993 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2994
2995         A fix for bug #320748
2996         * convert.cs: Implicit user operators cannot convert to interfaces
2997
2998 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2999
3000         A fix for bug #312686
3001         * driver.cs: Ignore empty assembly references.
3002
3003 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3004
3005         A fix for bug #387040
3006         * ecore.cs: Skip constrains check for an explicit implementation.
3007
3008 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3009
3010         A fix for bug #409045
3011         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3012           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3013           identifiers are file specific unless passed as input arguments.
3014
3015 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3016
3017          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3018          to emit UnmanagedMarshal data under 2.0 profile.
3019
3020 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3021
3022         A fix for bug #410369
3023         * parameter.cs: Clone correctly ParamsParameter.
3024
3025 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3026
3027         * expression.cs (Argument): Always report type for type based expressions
3028         errors.
3029
3030 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3031
3032         A fix for bug #410666
3033         * anonymous.cs: Correctly initialize generic storey reference.
3034
3035 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3036
3037         * convert.cs: Don't box same type arguments.
3038
3039 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3040
3041         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3042         Finished missing generic type mutators.
3043
3044 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3045
3046         * iterators.cs, statement.cs: Finished statements CloneTo.
3047
3048 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3049
3050         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3051         
3052         * expression.cs: Emit optimized default value expressions in expression tree
3053         array initializer.
3054
3055 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3056
3057         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3058
3059 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3060
3061         A fix for bug #367536
3062         * cs-parser.jay: Check static constructor of generic types for an access
3063         modifier.
3064
3065 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3066
3067         A fix for bug #353800
3068         * lambda.cs: Emit ret for contextual statements.
3069         
3070         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3071         up emitting redundant ret for all anonymous methods with return.
3072
3073 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3074
3075         A fix for bug #365188
3076         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3077         create anonymous method storey in unreachable block.
3078
3079 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3080
3081         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3082         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3083         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3084         statement.cs: Fixed relevant defects found by Gendarme.
3085
3086 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3087
3088         A fix for bug #325291
3089         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3090         statement.cs: Replaced IAnonymousHost with top level block flag.
3091
3092 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3093
3094         * cs-parser.jay: Clean up unused open_parens.
3095
3096 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3097
3098         * ecore.cs: Custom error message for a range variable assignment.
3099
3100 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3101
3102         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3103         load.
3104
3105 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3106
3107         * literal.cs: Null literal is of object type.
3108
3109 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3110
3111         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3112         expression of nullable equality comparison.
3113
3114 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3115
3116         * expression.cs(PointerArithmetic): Removed redundant assignment.
3117
3118 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3119
3120         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3121
3122 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3123
3124         A fix for bug #408361
3125         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3126         they are replaced by GetMethod.
3127
3128 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3129
3130         A fix for bug #408721 by jeremie.laval@gmail.com
3131         * expression.cs (Indirection): Implemented CloneTo.
3132
3133 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3134
3135         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3136         assert check.
3137
3138 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3139
3140         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3141
3142 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3143
3144         * linq.cs: Reset tranparent parameter counter in probing mode.
3145
3146 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3147
3148         * anonymous.cs: Mutate anonymous method type.
3149
3150 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3151
3152         * ecore.cs, anonymous.cs: Mutate field expressions.
3153
3154 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3155
3156         A fix for bug #369670
3157         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3158
3159 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3160
3161         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3162
3163 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3164
3165         Fix bug #314902
3166         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3167         only one '>', and finds a '>>', abort the generic lookahead.
3168
3169 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3170
3171         A fix for bug #319902
3172         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3173
3174 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3175
3176         A fix for bug #406371
3177         * statement.cs: Moved EmitSymbolInfo to Block.
3178
3179 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3180
3181         * ecore.cs: Report better error for extension method overload failures.
3182
3183 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3184
3185         * expression.cs (Is): No need to box reference values.
3186
3187 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3188
3189         * class.cs: Use event resolve context when initializing CreateEmitContext.
3190
3191 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3192
3193         A fix for bug #394436
3194         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3195         method used inside expression trees. Added more LINQ to expression tree
3196         conversions.
3197
3198 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3199
3200         A fix for bug #378189, #370577
3201         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3202         from expression.
3203
3204 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3205
3206         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3207         hierarchically.
3208
3209 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3210
3211         A fix for bug #406702
3212         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3213
3214 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3215
3216         A fix for bug #406648
3217         * cs-parser.jay: Report nullable use in mcs for some cases.
3218
3219 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3220
3221         * ecore.cs: Improved argument mismatch error messages.
3222
3223 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3224
3225         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3226
3227 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3228
3229         * expression.cs (TypeOf): Mutate type argument.
3230
3231 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3232
3233         * class.cs: Report missing partial modifier for correct type.
3234
3235 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3236
3237         * ecore.cs, expression.cs (VariableReference): Variable property is 
3238         protected.
3239
3240 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3241
3242         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3243         
3244 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3245
3246         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3247         method delegates.
3248
3249 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3250
3251         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3252         anonymous method storey to an instance method when only "this" is hoisted.
3253
3254 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3255
3256         A fix for bug #321615
3257         * expression.cs: Pointer comparisons use unsigned operator.
3258
3259 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3260
3261         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3262
3263 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3264
3265         A fix for bug #404905
3266         * class.cs: Always initialize local unsafe variables.
3267
3268 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3269
3270         A fix for bug #396987
3271         * expression.cs (NewInitialize): Clear local temporary variable for next run
3272
3273 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3274
3275         A fix for bug #401020
3276         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3277
3278 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3279
3280         A fix for bug #398319
3281         * cs-parser.jay: Implemented undocumented base access expression inside
3282         anonymous types.
3283
3284 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3285
3286         A fix for bug #404227
3287         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3288
3289 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3290
3291         A fix for bug #404227
3292         * convert.cs: Fixed explicit array to interface cast.
3293
3294 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3295
3296         A fix for bug #403894
3297         * delegate.cs: Mutate DelegateInvocation type.
3298
3299 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3300
3301         A fix for bug #379348
3302         * delegate.cs: Box a load of generic parameters.
3303
3304 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3305
3306         * expression.cs: Add an array creation arguments mutate.
3307
3308 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3309
3310         A fix for bug #386068
3311         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3312         parameter.
3313
3314 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3315
3316         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3317         CloneTo.
3318
3319 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3320
3321         A fix for bug #403518
3322         * delegate.cs: Type correctly anonymous method new invocation.
3323
3324 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3325
3326         A fix for bug #394826
3327         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3328         calls.
3329
3330 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3331
3332         A fix for bug #394826
3333         * anonymous.cs, iterators.cs: Construct generic storey only when is really
3334         needed.
3335
3336 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3337
3338         * class.cs: Clone indexer parameters for localized capturing.
3339
3340 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3341
3342         A fix for bug #402379
3343         * expression.cs: Don't crash when an object initializer resolve fails.
3344
3345 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3346
3347         A fix for bug #402888
3348         * expression.cs: Mutate conditional expression.
3349
3350 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3351
3352         A fix for bug #401012
3353         * class.cs: Keep StructLayout in shared container.
3354
3355 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3356
3357         A fix for bug #400438
3358         * decl.cs, class.cs: Only properties can be automatically implemented.
3359
3360 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3361
3362         * statement.cs (ChangeToIterator): Copy also labels.
3363
3364 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3365
3366         * ecore.cs: Pass type argument details to parent extension method.
3367
3368 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3369
3370         A fix for bug #375966
3371         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
3372
3373 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
3374
3375         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
3376
3377 2008-06-22  Marek Safar  <marek.safar@gmail.com>
3378
3379         A fix for bug #394347
3380         * anonymous.cs: Cache compatible delegates as compatibility check produces
3381         a new method every time.
3382
3383 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3384
3385         * anonymous.cs: Propagate storey reference for single references.
3386
3387 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3388
3389         A fix for bug #387615
3390         * assign.cs, expression.cs: Correctly clone compound assignment.
3391
3392 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3393
3394         A fix for bug #359611, #359604
3395         * anonymous.cs: Mutate all types of hoisted parameters.
3396
3397 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3398
3399         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3400         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3401         expression.cs, codegen.cs, statement.cs
3402         
3403         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3404         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3405         
3406         ** Anonymous methods, lambda expressions rewrite **
3407         
3408         Anonymous expressions are now resolved when an explicit block is resolved 
3409         and they don't require any registration procedure anymore. Further,
3410         anonymous methods are defined when explicit block is emitted which allows
3411         better control of whole process and opens possibilities for more
3412         optimizations as well as alternative to reverse whole process.
3413         
3414         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3415         process consistent and to correctly emit hoisted generic methods when they
3416         have at least 1 hoisted variable.
3417         
3418 2008-06-17  Martin Baulig  <martin@ximian.com>
3419
3420         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3421         iterator method.
3422         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3423         virtual property; check it in Emit().
3424         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3425         an iterator.
3426         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3427         an iterator.
3428         (Indexer.Define): Likewise.
3429
3430 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3431
3432         * convert.cs: Don't use IsInterface on type arguments.
3433         
3434         * delegate.cs: DelegateInvocation uses MethodInfo.
3435         
3436         * parameter.cs: Removed IsTypeParameter.
3437         
3438         * generic-mcs.cs: More missing stuff.
3439
3440 2008-06-16  Martin Baulig  <martin@ximian.com>
3441
3442         * modifiers.cs
3443         (Modifiers.DEBUGGER_HIDDEN): New public const.
3444
3445         * typemanager.cs
3446         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3447
3448         * class.cs
3449         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3450         (AbstractPropertyEventMethod): Likewise.
3451         (Constructor.Emit): Likewise.
3452         (SourceMethod.SetCompilerGenerated): Removed.
3453
3454         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3455         on MoveNext().
3456
3457         * anonymous.cs
3458         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3459         if we're an `IteratorHost'.
3460         (AnonymousMethodMethod..ctor): Don't set
3461         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3462         not on the method.
3463
3464 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3465
3466         * statement.cs: Clean-up foreach statements.
3467
3468 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3469
3470         * class.cs: Stop using public method which should not exist
3471         (MethodBuilder.SetGenericMethodSignature).
3472
3473 2008-06-11  Martin Baulig  <martin@ximian.com>
3474
3475         * location.cs
3476         (Location.LookupFile): Add `CompilationUnit' argument; when given
3477         a relative file name, make it relative to the directory the .cs
3478         file is located in instead of using the current directory.
3479
3480 2008-06-11  Martin Baulig  <martin@ximian.com>
3481
3482         * class.cs
3483         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3484         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3485         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3486         (SourceMethod.SetCompilerGenerated): Likewise.
3487
3488 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3489
3490         * codegen.cs, driver: Only write symbol file when it's asked for.
3491
3492 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3493
3494         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3495
3496 2008-06-10  Martin Baulig  <martin@ximian.com>
3497
3498         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3499
3500 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3501
3502         A fix for bug #316290
3503         * expression.cs: Include decimal operators in predefined table.
3504         
3505         * parameters.cs: More readonlyness.
3506
3507 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3508
3509         A fix for bug #397213
3510         * cs-parser.jay: One more missing current_local_parameters reset.
3511
3512 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3513
3514         A fix for bug #396633
3515         * class.cs: Host backing field in partial container.
3516
3517 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3518
3519         A fix for bug #397068
3520         * expression.cs: Check both operand types when predefined operator is used.
3521
3522 2008-06-05  Martin Baulig  <martin@ximian.com>
3523
3524         Merged the `debugger-kahalo' branch.
3525
3526         * class.cs
3527         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3528         we're an iterator method.
3529         (SourceMethod): Reflect latest symbol writer changes;
3530         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3531         now `start_row' and `end_row'.
3532         (Constructor.Emit): Fix the logic whether to emit symbol information.
3533
3534         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3535         generated methods.
3536
3537         * location.cs
3538         (CompilationUnit): New public class; derives from `SourceFile'.
3539         (SourceFileEntry.DefineSymbolInfo): New public method.
3540         (SourceFileEntry.SetChecksum): New public method.
3541         (Location): Encode hidden line numbers by using `column == 255';
3542         the .ctor now accepts `column == -1' to mark a hidden line number.
3543         (Location.Hidden): New public property.
3544         (Location.CheckPoint): Add `CompilationUnit'.
3545         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3546         (Location.Push): Add `CompilationUnit compile_unit' argument.
3547         (Location.CompilationUnit): New public property.
3548
3549         * statement.cs
3550         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
3551
3552         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
3553
3554         * driver.cs: `SourceFile' -> `CompilationUnit'.
3555
3556         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
3557
3558         * namespace.cs: `SourceFile' -> `CompilationUnit'.
3559
3560         * cs-tokenizer.cs: Add support for `#pragma checksum' and
3561         `#line hidden'.
3562
3563         * symbolwriter.cs
3564         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
3565         new symbol writer API to also pass the file.
3566
3567 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3568
3569         * statement.cs: Emit catch variable assignment using variable expression.
3570         
3571 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3572
3573         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
3574         with other variable types.
3575
3576 2008-06-04  Marek Safar  <marek.safar@gmail.com>
3577
3578         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
3579         GetLength method emit, it breaks resolve rules.
3580         
3581 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
3582             Marek Safar  <marek.safar@gmail.com>
3583                         
3584         A fix for bug #395542
3585         * cs-parser.jay: The trailing comma is allowed in anonymous type member
3586         declaration.
3587         
3588 2008-06-02  Marek Safar  <marek.safar@gmail.com>
3589
3590         A fix for bug #395287
3591         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
3592
3593 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3594
3595         A fix for bug #395845
3596         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
3597         non-nullable parameter type.
3598         
3599 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3600
3601         * class.cs: Handle contructor initializer as a statement in top-level block.
3602
3603 2008-05-30  Marek Safar  <marek.safar@gmail.com>
3604
3605         * attribute.cs: Don't mix old and new corlib types when emitting corlib
3606         security attributes.
3607
3608 2008-05-24  Marek Safar  <marek.safar@gmail.com>
3609
3610         * ecore.cs, expression.cs: Small IVariable refactoring.
3611
3612 2008-05-22  Marek Safar  <marek.safar@gmail.com>
3613
3614         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
3615
3616 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3617
3618         * cs-parser.jay: Removed redundant catch type check.
3619
3620 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3621
3622         A fix for bug #390372
3623         * nullable.cs: Set correct return type.
3624
3625 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3626
3627         A fix for bug #391062
3628         * typemanager.cs: Fixed crash when comparing null types.
3629
3630 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3631
3632         A fix for bug #391871
3633         * cs-parser.jay: Better error handling for invalid catch type.
3634
3635 2008-05-20  Marek Safar  <marek.safar@gmail.com>
3636
3637         A fix for bug #392155
3638         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
3639
3640 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3641
3642         A fix for bug #390666
3643         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
3644         expressions.
3645
3646 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3647
3648         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
3649         in getter.
3650
3651 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3652
3653         A fix for bug #389625
3654         * delegate.cs, generic.cs: Some progress on method group return type
3655         inference.
3656
3657 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3658
3659         A fix for bug #378419
3660         * namespace.cs: Inspect also parent namespaces not only namespace entries.
3661
3662 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3663
3664         * class.cs (Constructor): Added IsCompilerGenerated.
3665
3666 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3667
3668         * expression.cs: Enum binary operators can accept non-enum operand only when
3669         is implicitly convertible to underlying type.
3670
3671 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3672
3673         A fix for bug #389272
3674         * support.cs: Workaround System.InvalidOperationException for enums.
3675
3676 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3677
3678         A fix for bug #389073
3679         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
3680
3681 2008-05-10  Marek Safar  <marek.safar@gmail.com>
3682
3683         * driver.cs: Split Parse.
3684         
3685         * location.cs (LookupFile): Uses string.Empty.
3686
3687 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3688
3689         * expression.cs, parameter.cs: Small ParameterReference clean up.
3690
3691 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3692
3693         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
3694         hack. Fixes #387502.
3695
3696 2008-05-06  Martin Baulig  <martin@ximian.com>
3697
3698         * class.cs (Constructor.Emit): Fix the logic whether to emit
3699         symbol information.
3700
3701 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
3702
3703         Fix #385503
3704         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
3705         InvalidOperationException when the iterator is before the start or
3706         after the end.
3707
3708 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3709
3710         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
3711         when left is nullable type.
3712
3713 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3714
3715         A fix for bug #386628
3716         * expression.cs (LocalVariableReference): Continue in resolving when
3717         variable is not assigned.
3718
3719 2008-05-05  Marek Safar  <marek.safar@gmail.com>
3720
3721         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
3722         nullable operations.
3723
3724 2008-05-04  Marek Safar  <marek.safar@gmail.com>
3725
3726         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
3727         it saves many redundant temporary variables for nullable operations.
3728
3729 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3730
3731         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
3732         
3733         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
3734         method.
3735         
3736         * nullable.cs: Constant coalescing operator optimizations.
3737
3738 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3739
3740         * constant.cs: Use unsigned conversion for values which are unsigned only.
3741
3742 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3743
3744         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
3745         coalescing operator as it should be.
3746
3747 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3748
3749         A fix for bug #371016
3750         * expression.cs: All predefined delegate operators require implicit method
3751         group conversion.
3752         
3753 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3754
3755         * constant.cs: Emit long constant as uint when fits the range.
3756         
3757         * convert.cs, expression.cs: Fixed few unsafe conversions.
3758
3759 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3760
3761         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
3762
3763 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
3764
3765         Fix #385758
3766         * convert.cs (ImplicitNumericConversion): Don't modify the type of
3767         'expr'.
3768         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
3769
3770 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3771
3772         * constant.cs, literal.cs: IsLiteral property for error reporting.
3773         
3774         * ecore.cs, expression.cs: Implemented Property expression.
3775
3776 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3777
3778         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
3779         
3780         * nullable.cs: Implemented nullable coalescing null operator.
3781
3782         * ecore.cs, expression.cs: Expression trees work.
3783
3784 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3785
3786         * ecore.cs: CreateExpressionTree is finally abstract.
3787
3788         * expression.cs, linq.cs: Updated.
3789
3790 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3791
3792         * expression.cs, ecore.cs: Block base access expression inside expression
3793         tree.
3794
3795 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3796
3797         A fix for bug #385058
3798         * expression.cs: User-defined operator implementations always take
3799         precedence over predefined operator implementations.
3800
3801 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3802
3803         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
3804         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
3805         expression tree conversions.
3806         
3807 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3808
3809         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
3810         operators method details to Operator class.
3811
3812 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3813
3814         * anonymous.cs: Pass unsafe flags to anonymous container.
3815         
3816         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
3817         inside expression tree.
3818
3819 2008-04-29  Martin Baulig  <martin@ximian.com>
3820
3821         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
3822         (Tokenizer.PopPosition): Also restore the `line'.
3823
3824 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3825
3826         * delegate.cs: Implemented Invoke expression.
3827
3828 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3829
3830         * expression.cs: Fixed equality reference comparison regression.
3831
3832 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3833
3834         * ecore.cs: Clean up EmptyCast hack.
3835         
3836         * expression.cs, nullable.cs: Implemented enum binary and unary operations
3837         using correct conversion rules. Also fixes #383993.
3838
3839 2008-04-28  Martin Baulig  <martin@ximian.com>
3840
3841         * class.cs (Constructor.Emit): Don't emit debugging information
3842         for generated default .ctor's.
3843
3844 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3845
3846         * convert.cs: Empty-cast ushort to int conversion.
3847
3848 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3849
3850         A fix for bug #384191
3851         * ecore.cs, expression.cs: Fixed expression cloning.
3852
3853 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3854
3855         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
3856
3857 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
3858
3859         Fix #381559, test-638.cs, test-639.cs
3860         * assign.cs (CompoundAssign.Helper): New wrapper.
3861         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
3862         access.
3863         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
3864         Pass unconverted expressions to the params array creation expression.
3865         (FieldExpr.EmitAssign): Don't special-case StringConcat.
3866         (PropertyExpr.EmitAssign): Likewise.
3867         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
3868         element if it is of kind CompoundAssign.Helper.
3869         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
3870         first before anything else.
3871         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
3872         (ArrayAccess.LoadArrayAndArguments): Simplify.
3873
3874 2008-04-27  Marek Safar  <marek.safar@gmail.com>
3875
3876         * expression.cs: Fixed cloning of typeof(void).
3877
3878 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
3879
3880         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
3881         (Assign.Emit): Likewise.  Move it to ...
3882         (CompoundAssign.DoResolve): ... here and ...
3883         (CompoundAssign.Emit): ... here.
3884         (EventAddOrRemove): New helper to handle += and -= on events, and
3885         avoid the use of BinaryDelegates.
3886         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
3887         (EventExpr.EmitAddOrRemove): Improve.
3888         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
3889
3890         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
3891         create VarExprs for 'foo.bar.var'.
3892         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
3893         is a highly inappropriate name for its functionality.
3894
3895 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
3896
3897         Simplify handling of multiple assignments
3898         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
3899         inheritable-only.
3900         (SimpleAssign): New.  Class to be used for normal assignments.
3901         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
3902         * expression.cs, parameter.cs, statement.cs: Likewise.
3903
3904 2008-04-25  Marek Safar  <marek.safar@gmail.com>
3905
3906         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
3907         for incompatible underlying types, more to come, uff.
3908
3909 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
3910
3911         Fix gtest-388.cs
3912         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
3913         Handle 'leave_copy'.
3914
3915 2008-04-25  Marek Safar  <marek.safar@gmail.com>
3916
3917         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
3918
3919 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
3920
3921         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
3922         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
3923         * statement.cs (While, Do, For): Allow test to have side effects.
3924         (For.DoEmit): Always emit InitStatement.
3925
3926         Fix test-635.cs
3927         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
3928         Always create SideEffectConstant.
3929         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
3930         of type EnumConstant.
3931
3932         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
3933         Handle 'right' being SideEffectConstant of type 'bool'.
3934
3935         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
3936         Use left.EmitBranchable instead of open coding it, so as to
3937         improve optimization opportunities.
3938
3939         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
3940
3941         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
3942         assumptions.
3943         (Expression.EmitSideEffect): Document.
3944
3945 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3946
3947         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
3948
3949 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3950
3951         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
3952
3953 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3954
3955         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
3956         conversion to expression tree.
3957
3958 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3959
3960         * ecore.cs: Removed unused expression.
3961
3962 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3963
3964         * expression.cs: Implemented NegateChecked and New expressions.
3965
3966 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3967
3968         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
3969
3970 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
3971
3972         Fix #351102
3973         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
3974         needing final 'ret' instruction.
3975
3976 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3977
3978         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
3979
3980 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3981
3982         * expression.cs: Emit ldnull and not null expression as an instance argument
3983          of static method expression calls.
3984
3985 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3986
3987         A fix for bug #378200
3988         * expression.cs: Fixed crash when creating parameterless expression tree
3989         method call.
3990
3991 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3992
3993         A fix for bug #375297
3994         * anonymous.cs: Fixed crash when inferring from null argument anonymous
3995         method.
3996
3997 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3998
3999         A fix for bug #377596
4000         * decl.cs, class.cs: Emit delegate type argument attributes.
4001
4002 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4003
4004         A fix for bug #365314
4005         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4006         
4007 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4008
4009         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4010         only.
4011
4012 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4013
4014         * generic.cs (TypeParameter): Removed redundant location.
4015
4016 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4017
4018         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4019         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4020         FullNamedExpression in all declaration type expression, statements will come
4021         later.
4022
4023 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4024
4025         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4026         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4027
4028 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4029
4030         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4031         code.
4032
4033 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4034
4035         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4036         constraints.
4037
4038 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4039
4040         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4041         name expressions.
4042         Also fixes #340463.
4043
4044 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4045
4046         Hook up 'EmitSideEffect'
4047         * constant.cs (Constant.EmitSideEffect): New.
4048         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4049         (SideEffectConstant.EmitSideEffect): New.
4050         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4051         unconditional branch in EmitBranchable.
4052         (FieldExpr.EmitBranchable): New.
4053         * expression.cs (Unary.EmitSideEffect): New.
4054         (Binary.EmitSideEffect): New.
4055         (VariableReference.EmitSideEffect): New.  Do nothing.
4056
4057 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4058
4059         Introduce 'EmitSideEffect'
4060         * ecore.cs (Expression.EmitSideEffect): New.
4061         (TypeCast): Rename from EmptyCast.
4062         (EmptyCast): New.
4063         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4064         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4065         * convert.cs, nullable.cs: Update to changes.
4066
4067 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4068
4069         * class.cs, cs-parser.jay: Early check for base types expression.
4070
4071 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4072
4073         * decl.cs (MemberName): Declare PrettyName as obsolete.
4074
4075 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4076
4077         * namespace.cs: Use MemberName comparison.
4078
4079 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4080
4081         Fix build break
4082         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4083         FullName.
4084         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4085         (MemberName.FullyQualifiedName): New.  Provides the functionality
4086         that users assume FullName would have.
4087         * ecore.cs, namespace.cs: Update to changes.
4088
4089         * statement.cs (Using.assign): Make into ExpressionStatement.
4090         (Using.EmitPreTryBody): Simplify.
4091
4092 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4093
4094         * report.cs: ColorFormat is protected.
4095         
4096         * rootcontext.cs: Unused fields clean-up.
4097         
4098         * namespace.cs: Made UsingEntry name private.
4099
4100 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4101
4102         * cs-tokenizer.cs, location.cs: Removed unused field.
4103
4104 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4105             Raja R Harinath  <harinath@hurrynot.org>
4106
4107         Fix #379822
4108         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4109         (SideEffectConstant.side_effect): Rename from 'right'.
4110         (SideEffectConstant..ctor): Normalize 'side_effect'.
4111         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4112         value of this constant.
4113         * cfold.cs: Update to changes.
4114
4115 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4116
4117         * cs-paser.jay: Removed unused variable.
4118         
4119         * driver.cs: Made Compile instance method.
4120
4121 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4122
4123         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4124
4125 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4126
4127         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4128
4129 2008-04-13  Jb Evain  <jbevain@novell.com>
4130
4131         * namespace.cs: update the System.Core fullname for 2.1
4132         * driver.cs: update the list of required assemblies for 2.1.
4133         Merged from the Moonlight 2 branch.
4134
4135 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4136
4137         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4138         types and user defined operators. User operators arguments has to be checked
4139         for null value before invocation, which also means no operator is called
4140         when any argument is not convertible to unwrapped nullable type.
4141         
4142 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4143
4144         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4145         of Unary expressions to follow operator overloading rules precisely.
4146         Also fixes #321794, #323794
4147         
4148 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4149
4150         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4151         expression.
4152         
4153 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4154
4155         * expression.cs, ecore.cs: Implemented MemberInit expression.
4156         
4157 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4158
4159         Fix mono/tests/exception4.cs
4160         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4161         ec.NeedReturnLabel () rather emitting a 'nop'.
4162
4163         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4164         simple heuristic.
4165         (TryCatch.SomeCodeFollows): Likewise.
4166         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4167         for 'break', 'continue' and 'return' statements inside a try.
4168         We're fairly sure that the generated IL stream will have more
4169         instructions textually following the try.
4170         (FlowBranchingTryCatch): Likewise.
4171
4172         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4173         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4174         overrides.
4175
4176         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4177         wrapper -- forward everything to CollectionForeach.
4178         (CollectionForeach.NonDisposableWrapper): New.
4179         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4180         instead of a pop + branch to end.
4181
4182 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4183
4184         A fix for bug #377485
4185         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4186         Propagate location for extension method groups. Report conversion failure at
4187         right place.
4188
4189 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4190
4191         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4192         ListInit and Field expressions.
4193
4194 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4195
4196         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4197         Since $PC is always -1 inside the body of MoveNext, the fault
4198         handler is a no-op.
4199         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4200         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4201         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4202
4203         The denouement!  Fix #324708
4204         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4205         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4206         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4207         'finally' inside the finally clause.
4208
4209         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4210         inside an iterator.  Don't emit the body of the 'finally' inside
4211         the finally clause yet.
4212
4213         Use the ResumableStatement infrastructure for MoveNext ()
4214         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4215         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4216         'old_resume_points'.  Move dispatcher upfront.
4217         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4218         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4219         in an enumerator.  This encodes the main fix in this patch series
4220         -- we can only jump into the first instruction of a try from the
4221         outside, but we want to emit try/finally regions in iterators and
4222         resume in the middle of them.
4223
4224 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4225
4226         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4227         of NeedReturnLabel here.
4228
4229         Introduce a common point for emitting try/finally to IL
4230         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4231         features of the various subclasses, which are now driven by ...
4232         (ExceptionStatement.EmitPreTryBody): ... this and ...
4233         (ExceptionStatement.EmitTryBody): ... this and the original
4234         EmitFinallyBody.
4235         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4236         Remove DoEmit and update to follow above protocol.
4237
4238         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4239         of the dispatcher are the same, skip emitting the 'switch'.
4240         * iterator.cs (Iterator.EmitDispose): Update to changes.
4241
4242         Clean up handling of 'using' statement
4243         * statement.cs (UsingTemporary): New.  Carved out of ...
4244         (Using): ... this.  Simplify drastically.  Handle exactly
4245         one variable.
4246         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4247         or Using as appropriate.  If there are multiple variable declared,
4248         create nested Using statements.
4249         (resource_acquisition): Kill.
4250
4251         * statement.cs (ExceptionStatement.EmitForDispose): Use
4252         EmitFinallyBody, not EmitFinally.
4253
4254         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4255         * iterator.cs: Update to changes.
4256
4257         Start using the ResumableStatement infrastructure
4258         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4259         (ResumableStatement.EmitForDispose): New.
4260         (ExceptionStatement): Override them.
4261         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4262         EmitForDispose to create the body of the Dispose method.  Don't
4263         use OldResumePoint.
4264
4265         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4266         * statement.cs (Toplevel.AddResumePoint): ... here.
4267         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4268         * flowanalysis.cs (FlowBranchingIterator): New.
4269         * codegen.cs (EmitContext): Update to changes.
4270
4271         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4272         (Iterator.old_resume_points): Rename from 'resume_points'.
4273         (Iterator.MoveNextStatement): Remove unused class.
4274
4275         New infrastructure for try/finally in iterators (still unused)
4276         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4277         (FlowBranchingToplevel.AddResumePoint): Hook into
4278         ToplevelBlock.AddResumePoint.
4279         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4280         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4281         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4282         resume points and assign program-counter values.
4283         (ExceptionBlock.AddResumePoint): Collect resume points for
4284         de-muxer at the top of try block.
4285         * iterators.cs (Yield.CheckContext): Simplify.
4286         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4287
4288 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4289
4290         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4291         argument to an ExitStatement.
4292         (FlowBranchingException): Refactor saved origins code.
4293         * statement.cs (ExitStatement): Update to cahges.
4294         * iterator.cs (YieldBreak): Likewise.
4295
4296         * statement.cs (ResumableStatement): New.  Common base class for
4297         YieldReturn and ExceptionStatement.
4298         (ExitStatement): New.  Common base class for Return and YieldBreak.
4299         (Return): Update to changes.
4300         * iterator.cs (YieldBreak): Likewise.
4301         * lambda.cs (ContextualReturn): Likewise.
4302
4303         Fix #377028
4304         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4305         emit a meaningful error message.
4306
4307         Fix #324765, #319508
4308         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4309         (VariableInfo.SetAssigned): Set it.
4310         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4311         determine if CS0219 or CS0168 is appropriate.  Don't use
4312         flow-analysis information.
4313         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4314         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4315         (EmitContext.EndFlowBranching): ... this.
4316
4317 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4318
4319         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4320
4321 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4322
4323         A fix for bug #376508
4324         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4325         ImplicitConversionExists.
4326
4327 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4328
4329         * expression.cs (Binary): Added remaining binary operators to expression
4330         tree builder.
4331
4332         * nullable.cs: Optimize shift with null argument.
4333
4334 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
4335
4336         Fix minor IL regression
4337         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
4338         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
4339         * cs-parser.jay (try_statement): Update to changes.
4340
4341         * statement.cs (TryFinally.need_exc_block): Delete.
4342         (TryFinally): Update to changes.
4343
4344         Now all ExceptionStatements are unconditional
4345         * statement.cs (CollectionForeach.DisposableWrapper): New.
4346         Extract out the try/finally code into a new wrapper.
4347         (CollectionForeach.Resolve): Use it to simplify the code.
4348
4349 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
4350
4351         Start at simplifying ExceptionStatement semantics a bit
4352         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
4353         * cs-parser.jay (try_statement): Update to changes.
4354         (opt_catch_clauses): Remove.
4355         * flowanalysis.cs: Update to changes.
4356         (FlowBranching.BranchingType.TryCatch): New.
4357         (FlowBranchingTryCatch): New.
4358
4359         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
4360         (FlowBranching.CreateBranching): Update to changes.
4361         (FlowBranchingBlock.AddSibling): Add sanity check.
4362         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
4363         Update to changes.
4364
4365         * iterators.cs (Iterator.MarkFinally): Remove.
4366         * statement.cs (ExceptionStatement): Update to changes.
4367
4368         Add support for skipping over finally blocks at runtime.  First
4369         in a series to fix #324708
4370         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
4371         (Iterator.EmitMoveNext): Initialize it.
4372         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
4373         branch over the body of the 'finally' clause.
4374
4375 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
4376
4377         Avoid lopsided use of Foo/DoFoo names
4378         * statement.cs (ExpressionStatement.EmitFinallyBody):
4379         Rename from EmitFinally.
4380         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
4381         * iterator.cs: Update to changes.
4382
4383 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4384
4385         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
4386         based on UserOperatorCall. More binary nullable operators clean up.
4387
4388 2008-04-02  Martin Baulig  <martin@ximian.com>
4389
4390         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
4391
4392 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4393
4394         * nullable.cs: Merge user and empty conversions when lifting expression
4395         trees.
4396         
4397         * expression.cs (StringConcat): Implemented expression tree representation.
4398
4399 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4400
4401         * nullable.cs: When lifting null literal and a user operator exists, no call 
4402         is made.
4403         
4404 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4405
4406         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4407         null.
4408
4409 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4410
4411         * nullable.cs, expression.cs: Use namespace instead heavily nested
4412         monster abstract class.
4413
4414 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4415
4416         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4417         lifting of null literal and user operators. Clean up of some temporary
4418         nullable hacks.
4419
4420 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4421
4422         Fix #368224, test-629.cs
4423         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4424         if it crossed an unwind-protect boundary.
4425         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4426         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4427         inside an unwind-protected region.
4428         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4429         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4430         'leave' instead of a 'br' if unwind-protected.
4431         (Iterator.EmitYieldBreak): Likewise.
4432
4433 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4434
4435         * driver.cs: Only define versioninfo resources if no win32 resource
4436         file was specified.
4437
4438 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4439
4440         A fix for bug #372375
4441         * convert.cs: Fixed boxing of nullable types.
4442
4443 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4444
4445         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4446         type.
4447
4448 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4449
4450         A fix for bug #374619
4451         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4452         
4453 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4454
4455         * lambda.cs: Check return type only for invocation.
4456         
4457 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4458
4459         A fix for bug #374214
4460         * ecore.cs: Correctly report argument type mismatch.
4461
4462 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4463
4464         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4465         and not rely on broken IsEnum.
4466
4467 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4468
4469         * nullable.cs: New file, extracted from generic.cs.
4470         
4471         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4472
4473 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4474
4475         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4476         predefined comparison operators and null literals.
4477         
4478         * report.cs: New warning ID.
4479         
4480 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4481
4482         A fix for bug #370577
4483         * lambda.cs: Check return type too.
4484
4485 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4486
4487         A fix for bug #372846
4488         * class.cs: Automatic properties can be declared as unsafe.
4489
4490 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4491
4492         * location.cs: Use string based concatenation.
4493         
4494         * expression.cs: LiftedBinaryOperator is gmcs only.
4495         
4496 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4497
4498         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4499         conversions rules and expression trees.
4500
4501 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4502
4503         * delegate.cs: Use extension method source as delegate target.
4504
4505 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4506
4507         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4508         binary operations to be purely based on binary operations and optimized
4509         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4510         and other ET refactoring.
4511         
4512         * typemanager.cs: Fixed warning.
4513         
4514 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4515
4516         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4517         
4518         * symbolwriter.cs: Fixed.
4519
4520 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4521
4522         * anonymous.cs, driver.cs: Reset anonymous types counters.
4523
4524 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4525
4526         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4527         
4528         * class.cs: Use fullname for all type member definitions.
4529         
4530 2008-02-19  Martin Baulig  <martin@ximian.com>
4531
4532         * class.cs
4533         (IMethodData.EmitExtraSymbolInfo): New interface method.
4534         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4535         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4536         interface method here as an empty public virtual method.
4537
4538         * anonymous.cs
4539         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4540         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4541         CodeGen.SymbolWriter.SetRealMethodName().       
4542
4543 2008-02-18  Martin Baulig  <martin@ximian.com>
4544
4545         * anonymous.cs
4546         (ScopeInfo.EmitType): Override this and emit debugging
4547         information for captured variables.
4548         (RootScopeInfo.EmitType): Override this and emit symbol
4549         information for a captured `this'.
4550
4551 2008-02-15  Martin Baulig  <martin@ximian.com>
4552
4553         * iterators.cs: Emit debugging info.
4554
4555         * codegen.cs
4556         (EmitContext.Flags): Add `OmitDebuggingInfo'.
4557         (EmitContext.OmitDebuggingInfo): New public property.
4558
4559         * statement.cs
4560         (While): Override Emit() and don't emit symbol info there; do it
4561         inside DoEmit() instead.
4562         (Block.Emit): Omit symbol information while emitting the scope
4563         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
4564         block logic.
4565         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
4566         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
4567         .ctor to make `IsIterator' work.
4568
4569 2008-03-14  Martin Baulig  <martin@ximian.com>
4570
4571         * symbolwriter.cs: Added the new symbol writer function from the
4572         debugger's `terrania' branch; temporarily enclose them inside
4573         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
4574         my vacations.
4575
4576 2008-03-14  Martin Baulig  <martin@ximian.com>
4577
4578         * symbolwriter.cs
4579         (SymbolWriter): Make this a public static class.
4580
4581         * codegen.cs
4582         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
4583         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
4584
4585 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4586
4587         A fix for bug #370577
4588         * statement.cs, lambda.cs: Added extra limitations when dealing with void
4589         return type.
4590         
4591 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4592
4593         * typemanager.cs (CSharpName): Made 250 times faster.
4594
4595 2008-03-13  Marek Safar  <marek.safar@gmail.com>
4596
4597         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
4598         
4599 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4600
4601         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
4602         crash when predefined field does not exist.
4603         
4604 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4605
4606         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
4607         
4608 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4609
4610         * class.cs (FixedField): Don't crash when contructors are missing.
4611
4612 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4613
4614         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
4615         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
4616         check internal types accessibility for internal and external types.
4617         Replaced EnumToUnderlying by GetEnumUnderlyingType.
4618
4619 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4620
4621         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
4622         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
4623         attribute.cs, statement: Use corect instance of predefined types (work
4624         related to #364674).
4625
4626 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4627
4628         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
4629         
4630 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4631
4632         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
4633         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
4634         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
4635         predefined types clean up, delayed predefined types members initialization
4636         (work related to #364674).
4637
4638 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4639
4640         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
4641         
4642 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4643
4644         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
4645         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
4646         predefined types clean up (work related to #364674).
4647
4648 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4649
4650         * ecore.cs: Print an error message instead of throwing exception.
4651         
4652 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4653
4654         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
4655         expression.cs, statement.cs: Unififed null literal representation.
4656
4657 2008-03-03  Marek Safar  <marek.safar@gmail.com>
4658
4659         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
4660         expression.cs: Refactored binary operators resolve phase and improved speed.
4661         The nullable code is still missing and won't work correctly, more fixes
4662         required.
4663
4664         It also fixes #323726, #324312, #324248, and many other unreported issues.
4665
4666 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
4667
4668         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
4669         instead of 'gmcs'.
4670
4671 2008-02-27  Marek Safar  <marek.safar@gmail.com>
4672
4673         * ecore.cs: Clean-up and split BetterConversion.
4674         
4675 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
4676
4677         Fix #363791
4678         * enum.cs (EnumMember.Value): Only access 'value' if
4679         ResolveValue says it's ok.
4680         (EnumMember.DoResolveValue): Don't set prev_member.value.
4681         (Enum.GetDefinition): Reverse arguments of Equals --
4682         EnumMember.Value can return 'null'.
4683
4684         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
4685
4686 2008-02-22  Marek Safar  <marek.safar@gmail.com>
4687
4688         * generic.cs, expression.cs: More ongoing work on expression trees.
4689         
4690 2008-02-21  Marek Safar  <marek.safar@gmail.com>
4691
4692         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
4693         handle missing matches when mutiple operators exist.
4694         
4695 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4696
4697         A fix for bug #363218
4698         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
4699         initializers.
4700         
4701 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4702
4703         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
4704         update. This time to deal correctly with SideEffectConstant expression used
4705         as an argument for another constant folding.
4706
4707 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
4708
4709         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
4710         MethodBuilder.
4711
4712 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4713
4714         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
4715
4716 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4717
4718         A fix for bug #328136
4719         * expression.cs: Do not fold immediately LogicalAnd operators when the left
4720         side is a false constant, because we still need to evaluate the right-hand
4721         side.
4722
4723         * statement.cs (If): Emit two types of boolean constants (simple constant,
4724         side-effect constant).
4725
4726 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4727
4728         * constant.cs (SideEffectConstant): Don't emit boolean constant.
4729
4730         * expression.cs: Fold immediately LogicalAnd operators when both sides are
4731         constants.
4732
4733 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4734
4735         A fix for bug #361457
4736         * ecore.cs (IsApplicable): Params methods have lower priority.
4737
4738         * support.cs: Return correct parameter modifier for params types.
4739
4740 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4741
4742         * generic.cs (TypeParameter): Cache attribute target name.
4743
4744         * support.cs: Removed unused variable.
4745
4746         * typemanager.cs: Removed debugging leftover.
4747
4748         * ecore.cs: Use local type instead of a property;
4749
4750         * class.cs (VerifyMembers): Consider also parent to test whether type member
4751         is local or public.
4752
4753         * expression.cs (FullMethodDesc): Removed.
4754
4755         * attribute.cs (IsValidArgumentType): Made static.
4756
4757 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
4758
4759         Cleanup to be more readable.
4760         * Makefile (GMCS_PROFILE): Remove.
4761         (COMPILER_NAME): New helper.
4762
4763 2008-02-15  Miguel de Icaza  <miguel@novell.com>
4764
4765         * cs-tokenizer.cs: if a conditional expression happens inside a
4766         (...) this also means that we do not need to de-ambiguate between
4767         an parenthesized expression and a cast.
4768
4769         Fixes 346484.
4770
4771         * constant.cs (SideEffectConstant): a constant value that happens
4772         to have a side effect.
4773
4774         Fixes the build regressions introduced by the fix for #359789
4775
4776 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
4777
4778         * expression.cs (Conditional.Emit): when emitting the ternary
4779         operator, use local variables to generate code verifiable code.
4780
4781         The verifier cannot infer that the type on stack before the
4782         stloc.0 is executed is of type ParentB. This happens because the
4783         stack merge algorithm uses only parent types when deciding which
4784         is the common type.  This is described in Part III 1.8.1.3 of ECMA
4785         335.
4786
4787         This code compiled with mcs is not verifiable under MS. The MS
4788         verifier picks the first common interface of Foo and Bar, which is
4789         wrong, but doesn't use a full join type of the 2 interfaces.
4790
4791         CSC uses a clever hack to compile such code in a verifiable
4792         way. It stores the intermediate values in a local variable with
4793         the expected type.
4794
4795         Fixes: #358102
4796
4797 2008-02-14  Miguel de Icaza  <miguel@novell.com>
4798
4799         * expression.cs: Do not fold BitwiseAnd operators when the left
4800         side is a false constant, because we still need to evaluate the
4801         right-hand side.
4802
4803         Fixes #359789
4804
4805         * support.cs: Instead of throwing an InternalErrorException when
4806         the position of the stream is outside the boundary of our buffer,
4807         reset the state of the reader, and restart the reading from the
4808         beginning of the file.
4809
4810 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4811
4812         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
4813
4814 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4815
4816         A fix for bug #361686
4817         * decl.cs: A protected types used inside a private class which parents
4818         derives from the protected class are accessible.
4819
4820 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4821
4822         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
4823         the parameterless constructor.
4824
4825 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4826
4827         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
4828         lookup methods to use standard member cache when doing member lookup.
4829
4830 2008-02-12  Marek Safar  <marek.safar@gmail.com>
4831
4832         * driver.cs: Don't report full path for referenced module as assembly error.
4833
4834 2008-02-12  Marek Safar  <marek.safar@gmail.com>
4835
4836         * Makefile: Fixed `qh' target to work on all machines.
4837
4838         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
4839         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
4840         and HasElementType with TypeManager implementation.
4841
4842 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4843
4844         A fix for bugs #325134, #359749
4845         * expression.cs, ecore.cs: Try to resolve an extension method even if the
4846         first binds point to non-method member expression.
4847
4848 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4849
4850         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
4851
4852 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4853
4854         A fix for bugs #321394, #323028
4855         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
4856         Reworked naive IsAccessibleAs implementation to handle nested types.
4857
4858 2008-02-05  Jb Evain  <jbevain@novell.com>
4859
4860         * class.cs: use generic type comparison for parameters
4861         as well.
4862
4863 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4864
4865         A fix for bug #325372
4866         * class.cs: Use generic type comparison when testing method signatures.
4867
4868 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4869
4870         A fix for bug #357047
4871         * ecore.cs: Applied C# 3.0 changes to better conversion.
4872
4873 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4874
4875         A fix for bug #358374
4876         * cs-parser.jay: Correctly set modifiers for all constructor types.
4877
4878 2008-02-04  Marek Safar  <marek.safar@gmail.com>
4879
4880         A fix for bug #355251
4881         * generic.cs: Added base class constraint based type inference.
4882
4883 2008-02-01  Marek Safar  <marek.safar@gmail.com>
4884
4885         A fix for bug #357255
4886         * decl.cs: One more missing visibility check.
4887
4888 2008-02-01  Marek Safar  <marek.safar@gmail.com>
4889
4890         * support.cs: Fixed broken return.
4891
4892 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4893
4894         * report.cs: Correctly reset warnings count after probing.
4895
4896 2008-01-25  Martin Baulig  <martin@ximian.com>
4897
4898         * namespace.cs
4899         (NamespaceEntry.SymbolFileID): Make this work again after
4900         MemberName.ToString() is gone.
4901
4902 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4903
4904         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
4905         expressions.
4906
4907 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4908
4909         * generic.cs: Use full implicit conversion for type inference fixing.
4910
4911 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4912
4913         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
4914         Fixed user operator conversions.
4915
4916 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4917
4918         * generic.cs: Do nullable type to null comparison optimization during
4919         resolve phase.
4920
4921 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4922
4923         A fix for bug #355163
4924         * generic.cs: Enabled l-value resolve on nullable expressions.
4925
4926 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4927
4928         A fix for bug #353986
4929         * class.cs: Ingore static ctors with parameters for any further checks.
4930
4931 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4932
4933         A fix for bug #354310
4934         * namespace.cs: Removed redundant check.
4935
4936 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4937
4938         A fix for bug #354928
4939         * expression.cs: ElementInitializers can be resolved only once.
4940
4941 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4942
4943         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
4944         Condition expressions.
4945
4946 2008-01-23  Marek Safar  <marek.safar@gmail.com>
4947
4948         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
4949
4950 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4951
4952         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
4953         not allowed.
4954
4955         * generic.cs: Implemented coalesce expression.
4956
4957 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4958
4959         A fix for bug #355145
4960         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
4961         expression tree type inference.
4962
4963 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
4964
4965         Fix #354663
4966         * expression.cs (Binary.IsUnsignedType): Fix typo.
4967
4968 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4969
4970         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
4971
4972 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4973
4974         A fix for bug #355161
4975         * ecore.cs, expression.cs: Wider range of extension method supported
4976         expressions.
4977
4978 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
4979
4980         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
4981         AssemblyBuilder to operate in compiler context. Fixes mcs part of
4982         bug #354970.
4983
4984 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4985
4986         A fix for bug #355148
4987         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
4988
4989 2008-01-22  Miguel de Icaza  <miguel@novell.com>
4990
4991         * expression.cs (CreateExpressionTree): Add support for or and
4992         logical or, and indent following the coding conventions.
4993
4994         * typemanager.cs (LinqExpression): renamed from
4995         ExpressionTreeManager, for a shorter name.
4996
4997         Use TypeManager.CoreLookupType to lookup types from our core
4998         assemblies and turn those into "Type" variables.
4999
5000         Consumers that previously used "Namespace" and "Type" from this
5001         class should instead use the TypeExpression which is a type that
5002         is fully resolved (without involving the regular C# resolution
5003         rules). 
5004
5005         This typically looks like this:
5006
5007         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5008         new MemberAccess (texpr, name, type_arguments, loc)
5009
5010         This avoids the problem in: #355178
5011
5012 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5013
5014         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5015         feature in parser only as we do in other cases.
5016         
5017 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5018
5019         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5020         typemanager.cs: A refactoring of params arguments to reuse existing
5021         expressions (params -> array initializer) to emit params argument instead
5022         of specialized handling.
5023         It was required by expression tree implementation and it has other benefits
5024         as well, we now apply same optimization for params arguments as we do for
5025         array initializers.
5026         
5027 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5028
5029         A fix for bug #353526
5030         * generic.cs: A type inference of params arguments may not required any
5031         temporary array creation.
5032         
5033 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5034
5035         A fix for bug #353534
5036         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5037         supported for delegates only.
5038         
5039 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5040
5041         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5042         type for more than 1 candidates.
5043         
5044 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5045
5046         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5047         expressions.
5048         
5049 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5050
5051         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5052         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5053         operator) expressions. 
5054                 
5055 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5056
5057         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5058         not accessed from the generated IL.
5059
5060 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5061
5062         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5063         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5064         statement.cs: The first expression tree implementation drop, mostly
5065         infrastructure work.
5066
5067 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5068
5069         * ecore.cs (IsNestedChild): Refactored.
5070
5071 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5072
5073         * lambda.cs: Don't use a cast on unknown expression statement.
5074
5075 2008-01-10  Geoff Norton  <gnorton@novell.com>
5076
5077         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5078         arguments
5079
5080 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5081
5082         * doc.cs: Report better /doc crash details.
5083         
5084 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5085
5086         A fix for bug #352536
5087         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5088
5089 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5090
5091         A fix for bug #352287
5092         * ecore.cs, expression.cs: Do `this' access checking in all member access
5093         expressions.
5094         
5095 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5096
5097         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5098         
5099         * report.cs: Reset message stacks.
5100         
5101 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5102
5103         * generic.cs (InferInPhases): Correctly calculate params position.
5104         
5105 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5106
5107         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5108         arguments.
5109
5110 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5111
5112         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5113         
5114         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5115         
5116         * driver.cs: Updated --help option.
5117         
5118 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5119
5120         * generic.cs (InferParamsTypeArguments): Removed.
5121         (InferInPhases): Add params type inference.
5122         (LowerBoundInference): Fixed scoring mechanism.
5123         
5124         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5125         
5126 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5127
5128         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5129         byte array for unsigned "baked" assemblies.
5130
5131 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5132
5133         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5134         array for assemblies that are not strongnamed.
5135
5136 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5137
5138         A fix for bug #351481
5139         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5140         declaring type for nested generic types.
5141         
5142 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5143
5144         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5145         instead of ToString.
5146         
5147 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5148
5149         A fix for bug #351047
5150         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5151         null and structs only when equality and inequality operators are defined
5152         either as an user-operators or predefined operators.
5153         
5154 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5155
5156         A fix for bug #351047
5157         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5158         
5159 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5160
5161         A fix for bug #351257
5162         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5163         
5164 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5165
5166         A fix for bug #351157
5167         * class.cs (Using): Fixed yet another broken cloning.
5168         
5169         (Block): Put back more sensible default value for statements.
5170         
5171 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5172
5173         * codegen.cs: Allow AssemblyVersion with only major version component.
5174         Fixes bug #351055.
5175
5176 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5177
5178         A fix for bug #324654
5179         * class.cs: Use FullName property as member name.
5180
5181 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5182
5183         A fix for bug #342117
5184         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5185         constructor constraint.
5186
5187 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5188
5189         A fix for bug #338273
5190         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5191         only.
5192
5193 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5194
5195         A fix for bug #350839
5196         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5197
5198 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5199
5200         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5201         GHOP:
5202         
5203         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5204
5205         * statement.cs: Changed some Hashtables to use HybridDictionaries
5206         instead. It was observed that some HashTables only contained a few
5207         items in the vast majority of cases. Since HybridDictionary is
5208         more efficient on small sets (<10 elements), "known_variables"
5209         from class ExplicitBlock as well as "labels" and "constants " from
5210         class Block were changed to HybridDictionaries. 
5211
5212         Atsai results: (56216kb->54987kb)
5213
5214         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5215
5216
5217 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5218
5219         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5220         GHOP:
5221         
5222         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5223         
5224         * expression.cs: foreach loop to for loop, saved on allocation of
5225         enumerator (59333kb->59141kb)
5226
5227         * statement.cs. Changed foreach loops to for loops, saved on
5228         allocation of enumerator (59141kb->59006kb)
5229
5230         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5231         when constructed with no specified capacity. This was causing a
5232         few ArrayLists to allocate more memory than they would potentially
5233         need in the Block class and MemberCache class. Setting the
5234         ArrayLists to construct with a capacity of 1 saves some
5235         memory. (56216kb->55585kb)
5236
5237 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5238
5239         A fix for bug #347189 (2nd issue)
5240         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5241         type.
5242
5243 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5244         
5245         * report.cs: Do not use colors if stdout and stderr are not a
5246         terminal.
5247
5248 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5249
5250         A fix for bug #346998
5251         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5252         overloads.
5253
5254 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5255
5256         A fix for bug #343465
5257         * class.cs: Explicit method name for nested types uses dots only.
5258
5259 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5260
5261         A fix for bug #343707
5262         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5263
5264 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5265
5266         * ecore.cs: Report type inference errors only when arguments count matches
5267         parameter count.
5268         
5269         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5270         
5271         * expression.cs, report.cs: New warning.
5272         
5273         * typemanager.cs: Catch anonymous method type too.
5274
5275 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5276
5277         A fix for bug #346379
5278         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5279
5280 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5281
5282         A fix for bug #347359
5283         * expression.cs (Invocation): Don't resolve already resolved expression.
5284
5285 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5286
5287         A fix for bug #347189
5288         * class.cs (FixedField): Use non-dependent code only in the define phase.
5289
5290 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5291
5292         A fix for bug #348076
5293         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5294
5295 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5296
5297         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5298         discovered extension methods.
5299
5300 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5301
5302         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5303         method.
5304
5305 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5306
5307         * report.cs (ErrorMessage): Add support for using colors on
5308         terminals that support it. 
5309
5310 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5311
5312         * ecore.cs: Use information about expanded params for error reporting.
5313
5314 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5315
5316         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5317         and logic for params overloads.
5318         
5319 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5320
5321         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5322         as this is also created from the parser.  Fixes #349034
5323
5324 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5325
5326         * statement.cs (Throw.CloneTo): it is valid to have empty
5327         expressions for throw. 
5328
5329 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5330
5331         * cs-parser.jay: Set delegate constraint parsing region correctly.
5332
5333 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5334
5335         A fix for bug #345467
5336         * typemanager.cs (IsEqual): Compare generic parameters position only.
5337         
5338 2007-11-28  Marek Safar  <marek.safar@gmail.com>
5339
5340         * expression.cs (BaseAccess): Type arguments can be null.
5341
5342 2007-11-27  Raja R Harinath  <harinath@gmail.com>
5343
5344         * statement.cs (Block.Resolve): Ensure flow-branching tree is
5345         consistent even when an error has occured.
5346         (Switch.Resolve): Likewise.
5347
5348 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5349
5350         A fix for bug #334505
5351         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
5352         overrides.
5353         
5354 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5355
5356         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
5357         refactorings required to resolve extension methods correctly when mixing
5358         generics and non-generics members.
5359         
5360 2007-11-20  Marek Safar  <marek.safar@gmail.com>
5361
5362         A fix for bug #342584
5363         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
5364         conversion.
5365         
5366 2007-11-19  Marek Safar  <marek.safar@gmail.com>
5367
5368         A fix for bug #342512
5369         * delegate.cs: Use delegate argument expression when is available. Don't
5370         emit virtual call when class is sealed.
5371         
5372 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5373
5374         A fix for bug #325423
5375         * assign.cs (FieldInitializer): Use resolved expression for emit.
5376         
5377         * class.cs: Print less confusing error message.
5378         
5379 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5380
5381         * cs-tokenizer.cs: Removed GMCS ifdefs.
5382         
5383         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
5384         mcs.
5385         
5386         * cs-parser.jay: Disabled nullable check.
5387         
5388         * generic-mcs: Copied more generic stuff.
5389                 
5390 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5391
5392         * gcs-parser.jay: Merged to cs-parser.jay.
5393         
5394         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5395         * *.csproj, *.sources: Updated to use only jay parser file.
5396
5397 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5398
5399         * gcs-parser.jay: Added nullable and default expression feature checks.
5400         
5401 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5402
5403         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5404         it fixes many TODOs and hidden bugs.
5405         
5406         * expression: Removed duplicate error check.
5407
5408 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5409
5410         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5411         implicitly type local variable only when it is used in a declaration.
5412
5413 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5414
5415         * attribute.cs: Use CS0612 for empty strings.
5416
5417 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5418
5419         * lambda.cs, statement.cs: Contextual return may act as a statement.
5420
5421 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5422
5423         A fix for a regression cause by #324222
5424         * class.cs: Don't report unused even when it implements an interface.
5425         
5426 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5427
5428         A fix for bug #341205
5429         * ecore.cs, expression.cs: Method group expression cannot do static
5430         method access with an instance reference check before overloading takes
5431         a place.
5432         
5433 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5434
5435         A fix for bug #325359
5436         * class.cs: Use predictable name for automatically generated property.
5437         
5438 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5439
5440         A fix for bug #324996
5441         * expression.cs (Is): Handle case where D is nullable and T is not
5442         correctly.
5443         
5444         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5445         
5446 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5447
5448         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5449         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5450         Flush small error reporting changes.
5451         
5452 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5453
5454         A fix for bug #324996
5455         * expression.cs: Rewrote Is expression implementation to work with
5456         generics, nullable types, anonymous method. A const result expression 
5457         uses existing infrastructure instead of custom not fully-featured one.
5458         
5459 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5460
5461         A fix for bug #340202
5462         * class.cs: Consider generics for volatile field.
5463
5464 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5465
5466         A fix for bug #335594
5467         * expression.cs: Use conversion rules when handling string addition.
5468         
5469 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5470
5471         A fix for bug #336651
5472         * expression.cs: Fixed a crash when probing is on.
5473         
5474 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5475
5476         A fix for bug #324242
5477         * covert.cs: Added a conversion from any nullable-type with an 
5478         underlying enum-type to the type System.Enum.
5479         
5480 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5481
5482         A fix for bug #324222
5483         * class.cs: Report all non-used event fields.
5484         
5485 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5486
5487         A fix for bug #325161
5488         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5489         qualifier for generic types.
5490         
5491 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5492
5493         A fix for bug #322971
5494         * expression.cs, ecore.cs: Added intermediate result value check for
5495         indexers. 
5496         
5497 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5498
5499         A fix for bug #324754
5500         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5501         when it was requested.
5502
5503 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5504
5505         A fix for bug #325101
5506         * expression.cs: Do type not value comparison for `is' expression.
5507
5508 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5509
5510         A fix for bug #320236
5511         * convert.cs: Don't apply user conversion on underlying target type.
5512
5513 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5514
5515         * expression.cs: Don't use unresolved expression for error reporting.
5516  
5517 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5518
5519         A fix for bugs #337712, #324490
5520         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5521         overloading resolution too.
5522         
5523         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5524         the process consistent and more robust.
5525         
5526         * expression.cs, linq.cs, report.cs: Update.
5527
5528 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5529
5530         A fix for bug #332909
5531         * attribute.cs: Resolve attributes in correct context using error
5532         handling procedure.
5533         
5534         * rootcontext.cs: Define Obsolete attribute members as core members.
5535         
5536 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5537
5538         * statement.cs: Removed unused methods.
5539         
5540 2007-10-31  Wade Berrier  <wberrier@novell.com>
5541
5542         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5543         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5544         during 'make dist')
5545
5546 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5547
5548         A fix for bug #338102
5549         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
5550         methods registered as non-generics.
5551         
5552 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5553
5554         A fix for bugs #337712, #324490
5555         * delegate.cs: Delegate covariance and contravariance is not allowed for
5556         value types.
5557         
5558 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5559
5560         A fix for bug #337719 
5561         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
5562         `from' keyword.
5563         
5564 2007-10-30  Marek Safar  <marek.safar@gmail.com>
5565  
5566         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
5567
5568 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5569  
5570         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
5571         query expressions.
5572
5573 2007-10-29  Raja R Harinath  <rharinath@novell.com>
5574
5575         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
5576
5577 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5578  
5579         A fix for bug #334652
5580         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
5581         extension methods when we have not found the best candidate in normal
5582         container.
5583
5584 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5585
5586         * AssemblyInfo.cs: Keep up-to-date.
5587
5588 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5589
5590         * Makefile: Fixed generics compiler name.
5591         
5592 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5593
5594         * lambda.test: removed, lambda parsing is done differently.
5595         
5596         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
5597
5598 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
5599
5600         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
5601
5602 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5603
5604         * Makefile, *.sources : All C# compilers are in mcs folder.
5605         
5606         * *.cs: Use existing 2_1 define for smcs.
5607
5608 2007-10-26  Marek Safar  <marek.safar@gmail.com>
5609
5610         A fix for bug #335847
5611         * assign.cs, expression.cs: Couple of changes to avoid creating a
5612         temporary variable for each object initializer assignment statement. It
5613         simplifies struct initialization too, otherwise two temporary variables
5614         would be required.
5615         Implemented optimization of redundant default element initializers.
5616         
5617 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5618
5619         A fix for bug #336766
5620         * expression.cs (Class.CheckBase): Use generic name when method is
5621         generic.
5622         
5623 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5624
5625         A fix for bug #334737
5626         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
5627         variable and not variable argument for prepared copies.
5628
5629 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5630
5631         A fix for bug #325110
5632         * class.cs, expression.cs, attribute.cs: Use open generic method when
5633         checking conditional attribute.
5634         
5635 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5636
5637         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
5638         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
5639         FeatureIsNotAvailable.
5640
5641 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5642
5643         ** C# 3.0 Partial methods
5644         
5645         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
5646         methods support. Because of member cache issue with generics only
5647         non-generics partial methods are fully supported.
5648         
5649 2007-10-23  Marek Safar  <marek.safar@gmail.com>
5650         
5651         * class.cs, decl.cs: Rewrote member overloads check to cope with 
5652         generics and to use member cache for member checking. It also improves
5653         performance and fixes remaining overloads issues.
5654         
5655 2007-10-20  Marek Safar  <marek.safar@gmail.com>
5656         
5657         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
5658         roottypes.cs, typemanager.cs:
5659                 
5660         A member cache creation logic changed to add members immediately and
5661         not rely on fallback. The member cache is now only prefered way
5662         how to access and find type declaration members. It saves 5 MB of memory
5663         during MWF compilation and makes code ready for more optimizations and
5664         clean-ups, it's also a pre-requirement for partial methods.
5665         
5666 2007-10-18  Raja R Harinath  <harinath@gmail.com>
5667
5668         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
5669         handling for generic parameters.
5670
5671 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5672         
5673         * class.cs (FixedField): Removed redundant volatile check.
5674         
5675 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5676         
5677         * class.cs, decl.cs: Fixed overload members verification to do only one
5678         check per possible collision.
5679         
5680 2007-10-13  Marek Safar  <marek.safar@gmail.com>
5681         
5682         A fix for bug #325478
5683         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
5684         and create only one disposable flags container.
5685         
5686 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5687         
5688         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
5689         * statement.cs (Fixed): Fixed variables cloning.
5690         
5691 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5692         
5693         A fix for bug #333342
5694         * class.cs (EventField): Don't mark value type event as synchronized. 
5695         
5696 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5697         
5698         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
5699         inference to identify best candidate method correctly.
5700         (ProperyExpr): A range variable is read only and cannot be modified.
5701         
5702 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5703         
5704         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
5705         logic to identify best candidate method correctly.
5706         
5707 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5708         
5709         * location.cs (Equals, GetHashCode): Removed.
5710         
5711 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5712         
5713         * report.cs: Implemented message recorder. It is used mainly for lambda
5714         expressions to capture otherwise swallowed error messages.
5715         
5716         * anonymous.cs, lambda.cs.cs: Do full parameters check.
5717
5718         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
5719         and not at the top.
5720         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
5721                 
5722         * expression.cs (MemberAccess): Always report lookup failure.
5723         
5724         * location.cs: Implemented Equals, GetHashCode.
5725         
5726         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
5727         
5728 2007-10-10  Jb Evain  <jbevain@novell.com>
5729
5730         * codegen.cs: re-enable assembly version check.
5731
5732 2007-10-09  Marek Safar  <marek.safar@gmail.com>
5733         
5734         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
5735         checks.
5736         
5737         * namespace.cs (UsingAlias): Do correct version check.
5738         
5739 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5740         
5741         * expresison.cs, ecore.cs: Issue extension method error message when
5742         appropriate.
5743         
5744         * rootcontext.cs: Added ISO_2 compiler mode option.
5745
5746 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5747         
5748         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
5749          message.
5750         
5751 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5752         
5753         * attribute.cs (GetString, GetBoolean): Work with both literal and
5754         constant.
5755         
5756         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
5757         Moved method overload specific methods to MethodGroupExpr.
5758         
5759         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
5760         it should be less memory consuming.
5761         
5762 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
5763
5764         * codegen.cs: remove the assembly version check until the buildbot is
5765         fixed.
5766
5767 2007-10-07  Jb Evain  <jbevain@novell.com>
5768
5769         * attribute.cs (Attribute.GetString): if the value
5770         expression is a StringConstant, return its string value.
5771
5772 2007-10-07  Jb Evain  <jbevain@novell.com>
5773
5774         * typemanager.cs: add `assembly_version_attribute_type`.
5775         * codegen.cs: on attribute emission, check that the
5776         AssemblyVersionAttribute doesn't overflow.
5777
5778 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5779         
5780         A fix for bug #324677
5781         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
5782         parent container of a scope container with currently resolved one. 
5783         
5784 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5785         
5786         A fix for bug #325534
5787         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
5788         only.
5789         
5790 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5791         
5792         A fix for bug #327504
5793         * class.cs (Operator.Define): Refactored implicit and explicit user
5794         operator conversion rules.
5795         
5796 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5797         
5798         A fix for bug #327520
5799         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
5800         
5801 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5802         
5803         A fix for bug #328022
5804         * class.cs (MethodData.Define): Use correct method to check whether
5805         a method implementents an accessor.
5806         
5807 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5808         
5809         A fix for bug #330069
5810         * statement.cs (Fixed.Resolve): Read the first array element only when
5811         an array is instantiated. 
5812         
5813 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5814         
5815         * expression.cs, assign.cs, generics.cs: Print correct operator when
5816         compound assignment is used.
5817         
5818 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5819         
5820         A fix for bug #325841
5821         * expression.cs (ArrayAccess): Use full argument cloning only for
5822         string compound concatenation.
5823         
5824 2007-10-03  Marek Safar  <marek.safar@gmail.com>
5825         
5826         A fix for bug #328774
5827         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
5828         assignment.
5829         (PropertyExpr.EmitAssign): Fixed string concatenation compound
5830         assignment.
5831
5832 2007-10-03  Raja R Harinath  <rharinath@novell.com>
5833
5834         Fix #328490
5835         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
5836         Event accessibility checks here.  Remove some bogus code that
5837         accidently made GenericMethods work.
5838         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
5839
5840 2007-09-25  Marek Safar  <marek.safar@gmail.com>
5841         
5842         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
5843         
5844         * statement.cs (Block): Refactored AddVariable to allow error handling
5845         customization.
5846         
5847         * generic.cs: New stub.
5848         
5849 2007-09-23  Marek Safar  <marek.safar@gmail.com>
5850         
5851         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
5852         flag.
5853         
5854 2007-09-17  Marek Safar  <marek.safar@gmail.com>
5855
5856         * class.cs: Use partial container to record whether any partial part
5857         contains static field initializer and therefore default contructor has
5858         to be defined.
5859         
5860 2007-09-14  Marek Safar  <marek.safar@gmail.com>
5861
5862         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
5863         mono-list when only one of two partial parts has defined accessibility
5864         modifier.
5865         
5866 2007-09-14  Marek Safar  <marek.safar@gmail.com>
5867
5868         A fix for bug #82845
5869         
5870         * class.cs (TypeContainer): Set correct resolve context for all field
5871         initializers.
5872         
5873 2007-09-13  Marek Safar  <marek.safar@gmail.com>
5874
5875         * assign.cs: Fixed a crash when field is resolved twice with an error.
5876         
5877         * codegen.cs: Changed InFieldInitializer to be flag.
5878         
5879         * anonymous.cs, ecore.cs, expression.cs: Update after
5880         IsInFieldInitializer rename.
5881         
5882         * const.cs: Removed unused parameter.
5883         
5884         * class.cs: Changed the way how we resolve and emit field initializers.
5885         The field initilizers have to have access to contructor block to emit
5886         compiler generated code.
5887
5888 2007-09-13  Marek Safar  <marek.safar@gmail.com>
5889
5890         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
5891         generics use TypeContainer instead.
5892         
5893 2007-09-12  Marek Safar  <marek.safar@gmail.com>
5894         
5895         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
5896
5897         * lambda.cs (ResolveParameters): Use more powerful
5898         InflateGenericArgument.
5899         
5900         * parameters.cs: Better exception message.
5901                 
5902 2007-09-10  Marek Safar  <marek.safar@gmail.com>
5903
5904         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
5905         correct expression block type. 
5906         
5907         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
5908         
5909         * expression.cs (Invocation): Extracted method group resolve to
5910         DoResolveOverload.
5911         
5912 2007-09-07  Marek Safar  <marek.safar@gmail.com>
5913
5914         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
5915         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
5916         
5917         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
5918         generic extension methods.
5919
5920 2007-09-06  Marek Safar  <marek.safar@gmail.com>
5921
5922         A fix for bug #82676 (Do I get it right now?)
5923         * convert.cs (Binary.ResolveOperator): An interface is converted to the
5924         object before a standard conversion is applied.
5925         
5926 2007-09-06  Marek Safar  <marek.safar@gmail.com>
5927
5928         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
5929         #82676.
5930         
5931 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5932
5933         A fix for bug #82676
5934         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
5935         non-generic interface types.
5936         
5937 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5938
5939         A fix for bug #82690
5940         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
5941         
5942 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5943
5944         A fix for bug #82571
5945         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
5946         modifier for container based methods.
5947         
5948 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5949
5950         A fix for bug #82676
5951         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
5952         any interface-type T means to any of interface type T.
5953
5954 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5955
5956         * namespace.cs: We have 2 versions of System.Core assembly.
5957
5958 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5959
5960         A fix for bug #82652
5961         * class.cs (Class.GetClassBases): Compare types and not expressions.
5962
5963 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5964
5965         A fix for bug #82620
5966         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
5967         actually never worked before.
5968         (IndexerAccess): Emit prepared arguments before they are modified.
5969         
5970 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5971
5972         A fix for bug #82563
5973         * assign.cs: Revert wrong fix.
5974         
5975         * expression.cs (VariableReference.EmitAssign): Handle ref reference
5976         correctly.
5977         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
5978         Instead of ldelema/stdind we have to use temporary variables to handle
5979         cases like String.Concat (params string[]).
5980         
5981 2007-08-31  Marek Safar  <marek.safar@gmail.com>
5982
5983         * class.cs: EmitAttributes to Emit rename.
5984         
5985         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
5986         null.
5987         (MemberCore.HasClsCompliantAttribute): Don't depend on 
5988         GetClsCompliantAttributeValue execution.
5989         
5990 2007-08-31  Marek Safar  <marek.safar@gmail.com>
5991
5992         * anonymous.cs: Use shorter type prefix.
5993         
5994         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
5995         when exist.
5996         
5997         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
5998         variables when probing is on.
5999         
6000         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6001         unresolved variables.
6002         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6003         handle transparent identifiers.
6004         
6005 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6006
6007         * attribute.cs (IsClsCompliant): Add nullable types test.
6008         
6009 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6010
6011         * doc.cs : catch other types of exception than XmlException to
6012           report CS1570. Fixed bug #82565.
6013
6014 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6015
6016         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6017         The number of delegate parameters has to match.
6018         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6019         arrays.
6020
6021 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6022
6023         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6024         to fix problem with private arguments.
6025
6026 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6027
6028         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6029         
6030         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6031         
6032         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6033         empty. Add cloning suport.
6034         
6035         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6036
6037 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6038
6039         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6040         to create EmptyCast. It handles EmptyConstantCast specialization for
6041         constants.
6042         
6043 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6044
6045         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6046         (EmitArrayArgument): One routine for array arguments.
6047         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6048         
6049 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6050
6051         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6052
6053 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6054
6055         * anonymous.cs: MemberLookupFinal update.
6056
6057         * class.cs (ConstructorInitializer): Is expression based.
6058         
6059         * delegate.cs: MethodGroupExpr update.
6060         
6061         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6062         messages.
6063         (Error_MemberLookupFailed): Customizable error override.
6064         (MethodGroupExpr): Keep queried type for later usage.
6065         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6066         resolve.
6067         
6068         * expression.cs: Error_MemberLookupFailed refactoring.
6069         (New.DoResolve): Resolve as much as possible.
6070         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6071         customization for invalid member types.
6072
6073         * statement.cs: MethodGroupExpr update.
6074         
6075 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6076
6077         * modifier.cs (Check): Check all modifiers and not only accessibility
6078         ones.
6079
6080 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6081
6082         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6083         type and not an expression.
6084
6085 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6086
6087         * statement.cs (Catch.Clone): Type and variable can be null.
6088
6089 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6090
6091         A fix for bug #81979
6092         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6093         I am really not sure whether this is the best fix.
6094         
6095         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6096         only once.
6097         
6098 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6099
6100         ** C# 3.0 Object and collection initializers (major re-write)
6101         
6102         * assign.cs (DoResolve): Initializers are not assign related.
6103         
6104         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6105         used during collection or object initialization.
6106         
6107         * expression.cs (Error_InvalidArguments): Add initializers specific
6108         messages. More will come later because it requires some general
6109         refactoring.
6110         (New.DoResolve): Better error handling for unsafe types.
6111         (EmptyExpressionStatement): New class.
6112         (ElementInitializer): An object initializer expression.
6113         (CollectionElementInitializer): A collection initializer expression.
6114         (CollectionOrObjectInitializers): A block of object or collection
6115         initializers.
6116         (NewInitialize): New expression with element/object initializers.
6117         
6118         * statement.cs: Reverted object/collection initializer hacks.
6119         
6120         * typemanager.cs (CSharpName): Filter __arglist type.
6121         
6122 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6123
6124         ** C# 3.0 Anonymous Types (update to the latest standard)
6125         
6126         * expression.cs (Binary.ResolveOperator): Threat all null based types
6127         same.
6128         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6129         (AnonymousTypeParameter): Updated.
6130         
6131         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6132         (AnonymousTypeClass): New anonymous type container.
6133         
6134         * class.cs (AddField): Return operation result.
6135         
6136         * generic.cs: Another empty TypeArguments overload.
6137         
6138         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6139         are stored at top of normal hierarchy.
6140         
6141         * typemanager.cs (CSharpName): Filter anonymous types.
6142         
6143 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6144
6145         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6146         as single Concat call. How could we miss that :-(
6147         
6148 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6149
6150         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6151         
6152 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6153
6154         * expression.cs: Fix the previous commit, the creation of the
6155         arguments array list needs also to be conditional on the arguments
6156         not being null.
6157
6158         * class.cs: Add a little bit of help to help narrow down problems.
6159
6160         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6161         not try to copy in that case. 
6162
6163         * driver.cs: When building SMCS, include a new different set of
6164         default assemblies here.   Do this here so we can control whether
6165         to include the default assemblies with /noconfig.
6166
6167 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6168
6169         A fix for bug #81979
6170         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6171         only.
6172
6173 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6174
6175         A fix for bug #82300
6176
6177         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6178         we are in probing scope.
6179
6180 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6181
6182         A fix for bug #82301
6183
6184         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6185         (Statement.CloneTo): Clone and not map children blocks.
6186
6187 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6188
6189         A fix for bug #82299
6190
6191         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6192         variable too.
6193         
6194         * statement.cs (Statement.CloneTo): Clone variables before statements
6195         to allow remaping of local variables.
6196
6197 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6198
6199         A fix for bug #82296
6200
6201         * anonymous.cs,
6202         * report.cs: Log crash details for future clone problems.
6203         
6204         * statement.cs (Return.Clone): Don't clone non-existent expression.
6205
6206 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6207
6208         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6209         (Class.AddBasesForPart): Move CS0537 check here from ...
6210         * cs-parser.jay (class_declaration): ... here.  Move calling of
6211         'AddBasesForPart' to ...
6212         (class_bases): ... here.
6213         (struct_declaration, interface_declaration): Update to changes.
6214
6215 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6216
6217         A fix for bug #81923
6218
6219         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6220         conversion is allowed.
6221
6222 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6223
6224         A fix for bug #81564
6225
6226         * ecore.cs (EventExpr): Add IsBase handling.
6227
6228         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6229         too.    
6230         
6231 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6232
6233         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6234         * cs-parser.jay: Some whitespace cleanups.
6235         (current_delegate): New.
6236         (type_name): New.
6237         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6238         a dummy code block, and use 'type_name' instead of 'member_name'.
6239         (interface_declaration, class_declaration): Likewise.
6240         (delegate_declaration): Likewise.  Rearrange slightly and use
6241         'current_delegate'.
6242         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6243         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6244
6245 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6246
6247         A fix for bug #82039
6248
6249         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6250         available.
6251
6252         * typemanager.cs (CSharpName): Split to string overload.
6253
6254 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6255
6256         * expression.cs,
6257         * report.cs: Updated warning CS0472.
6258
6259 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6260
6261         A fix for bug #82181
6262         * cs-parser.jay,
6263         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6264
6265 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6266
6267         A fix for bug #82277
6268         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6269
6270 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6271
6272         ** C# 3.0 Type Inference (major bits are working)
6273         
6274         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6275         (.ImplicitStandardConversionExists): Uses compatible.
6276         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6277         (.InferReturnType): New method.
6278         (.Compatible): Refactored.
6279         (.ResolveParameters): Uses factory to create resolved parameters.
6280         (.CompatibleMethod): Add probing mode support.
6281         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6282         clearly distinguish between 2 different operations.
6283         (LambdaMethod): Moved to lambda.cs.
6284         (AnonymousMethod): Removed unused fields and methods.
6285         (AnonymousDelegate): Simplified.
6286         
6287         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6288         
6289         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6290         
6291         * delegate.cs (Delegate): New mehods to reduce code duplication.
6292         (.GetConstructor): New method.
6293         (.GetInvokeMethod): New method.
6294         (DelegateCreation): Updated.
6295         
6296         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6297         does not exist.
6298         (OverloadResolve): Made probing little bit faster.
6299         
6300         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6301         when probing is on.
6302         
6303         * generic.cs (TypeInferenceContext): Dummy implementation.
6304         
6305         * iterators.cs: Updated after Resolve/Define rename.
6306         
6307         * lambda.cs (LambdaExpression)
6308         (.ResolveParameters): Handles both type of arguments and type inference too.
6309         
6310         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6311         (InflateTypes): Updated.
6312         
6313         * support.cs (InflateTypes): Changed signature and updated.
6314         
6315         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6316         (MemberLookup_FindMembers): More MS tricks.
6317         (GetParameterData): Ditto.
6318         (GetDelegateParameters): Uses quick path for dynamic types.
6319         
6320 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6321
6322         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6323         only.
6324
6325 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6326
6327         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6328         syntax.
6329         
6330 2007-07-26  Jb Evain  <jbevain@novell.com>
6331
6332         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
6333         which takes a boolean 'report_errors', similar to the GetMethod.
6334         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
6335         in .net 2.1, do not report errors here.
6336
6337         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
6338         System.Runtime.CompilerServices.RequiredAttributeAttribute and
6339         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
6340         in .net 2.1.
6341
6342         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
6343         of the type InternalsVisibleToAttribute before the first call
6344         to CoreLookupType which is allowed to fail (third boolean parameter
6345         to true). Because, during the resolution for a type that is not
6346         immediately found, we try to check if the type is not defined in
6347         a friend assembly, and to do so, we need the
6348         InternalVisibleToAttribute.
6349
6350 2007-07-23  Miguel de Icaza  <miguel@novell.com>
6351
6352         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
6353         feature that allows structs to be compared against null and inline
6354         the result as true or false.
6355
6356         Notice that the same code is not permitted inside a generic block
6357         of code that would do:
6358
6359         class Foo<T> where T : struct {
6360             bool Eval (T x)
6361             {
6362                  return x == null;
6363             }
6364         }
6365
6366         It is only allowed if the type of T is not bound (no where
6367         clause).   In my opinion, this CSC 2 behavior is broken but people
6368         seem to be using it (IronRuby does, a few bug reports on bugzilla
6369         have it and some people have complained about it).
6370
6371         All of the users that depend on this behavior have code that is
6372         very likely broken. 
6373         
6374         * report.cs (Warning, Error): make these take object arguments,
6375         not strings, as that allows us to take advantage of Format.
6376
6377 2007-07-20  William Holmes  <billholmes54@gmail.com>
6378
6379         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
6380           Left member variable for the Count.
6381         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
6382           MemberName.CountTypeArguments to avoid a NRE. 
6383
6384         This code is contributed under the MIT X11 license
6385
6386 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6387
6388         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
6389
6390 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6391
6392         * doc.cs : generic method arguments are written as ``x while generic
6393           type arguments are `x. Combined with the previous change, fixed bug
6394           #79706.
6395
6396 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6397
6398         Fix #82120
6399         * expression.cs (Binary.ResolveOperator): When converting
6400         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6401
6402 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6403
6404         * doc.cs : when T: or whatever x: is specified, it does not really
6405           check the doc comment's syntax correctness. Fixed bug #82006.
6406
6407 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6408
6409         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6410         LambdaExpression better.
6411         
6412         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6413         
6414         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6415         
6416         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6417         as it can be generated.
6418         
6419         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6420         modifiers.
6421         
6422         * lambda.cs (LambdaExpression): Refactored to share same code with
6423         AnonymousMethodExpression.
6424         
6425 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6426
6427         * anonymous.cs (MakeName): Include host name for easier debugging.
6428         (LambdaMethod): New class for lambda spcecific stuff.
6429         
6430         * attribute.cs: Set EmitContext return type.
6431
6432         * class.cs: Set EmitContext return type.
6433         
6434         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6435         with null/void meaning.
6436         
6437         * iterators.cs (ContainerType): Implemented.
6438         
6439         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6440         
6441         * statement.cs (Return): Updated to lambda expressions.
6442         (Block.CloneTo): Parent can be null.
6443                 
6444 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6445
6446         A fix for bug #81917
6447         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6448         
6449         * class.cs (FixedField): Check whether field is in unsafe scope.
6450
6451         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6452         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6453
6454         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6455         FieldExpr.
6456         
6457         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6458                 
6459 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6460
6461         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6462         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6463         from Report class.
6464
6465 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6466
6467         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6468         
6469 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6470
6471         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6472         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6473         
6474         * codegen.cs(EmitContext): Add ProbingMode flag.
6475         
6476         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6477         
6478         * driver.cs: For now set both warning values.
6479         
6480         * ecore.cs (SimpleName): Name is readonly.
6481         (MethodGroup.OverloadResolve): One quick path for probing.
6482         
6483         * expression.cs (Unary): Set Oper r/o.
6484         (Binary): Set Oper r/o.
6485         (ParameterReference): Set few instance variables as r/o.
6486         (ParameterReference.DoResolveBase): Don't capture aruments when 
6487         the probing is on.
6488         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6489         (Arglist): arguments are private.
6490         (SizeOf): type is private and r/o.
6491         (MemberAccess): arguments are private.
6492
6493         * report.cs: Enhanced reporting on/off capabilities.
6494         
6495         * lambda.cs: Uses ec.IsInProbingMode.
6496         (ContextualReturn): Derives from return.
6497         
6498         * rootcontext.cs: For now set both warning values.
6499         
6500         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6501         copy if one exists.
6502         (Return.Resolve): Don't die immediately.
6503         (Block.Resolve): Speed-up probing.
6504         (Block.CloneTo): Clone only child blocks.
6505
6506 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6507
6508         * iterators.cs: reverted Miguel's latest change (r81925) as it
6509         breaks the build in System.
6510
6511 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6512
6513         * iterators.cs (Yield.CheckContext): Check for the iterator type
6514         also here as we can call into Yield even in codepaths that are not
6515         directly checked by
6516         (MethodOrOperator is the only path that was checked).
6517
6518         In addition to the standard check, use a more specific check for
6519         constructors to report a more verbose error. 
6520
6521 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6522
6523         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6524         report the warning and continue 
6525
6526         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6527         values on the stack on the call to Emit.   Use EmitStatement if
6528         possible, or using Emit + Pop if not possible.   Fixes #82064
6529
6530 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6531
6532         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6533         avoid try...finally in some cases.
6534
6535 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6536
6537         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6538         
6539         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6540         instead of method. Re-use standard error handling.
6541         (ConstructorInitializer.Emit): Simplified.
6542         
6543         * delegate.cs: Updated after Invocation.EmitCall change.
6544         
6545         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6546         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6547         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6548         method and don't permanently changing input arguments.
6549         (MethodGroupExpr): Introduced resolved best_candidate, when method group
6550         is resolved it has one of the candidates is the best one which is later
6551         used to emit. Removed a few unused method.
6552         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
6553
6554         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
6555         (Binary.ResolveOperator): Ditto.
6556         (ConditionalLogicalOperator.DoResolve): Ditto.
6557         (Invocation): Uses method group.
6558         (Invocation.DoResolve): Simplified.
6559         (Invocation.EmitCall): Removed useless is_static.
6560         (Invocation.Emit): Delegate to method group.
6561         (Invocation.EmitStatement): Simplified.
6562         (New): Uses method group.
6563         (MemberAccess.DoResolve): Don't destroy original expression.
6564         
6565         * statement.cs (ForEach.Resolve): Use null for no method arguments.
6566         
6567 2007-07-04  Marek Safar  <marek.safar@gmail.com>
6568
6569         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
6570         
6571         * anonymous.cs,
6572         * lambda.cs: Add custom error message type.
6573
6574 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6575
6576         * lambda.cs: Simplified little bit.
6577         
6578         * parameter.cs: Introduced ImplicitLambdaParameter.
6579         (Parameters.CreateFullyResolved): New factory instead of ctor.
6580         
6581         * anonymous.cs,
6582         * class.cs,
6583         * delegate.cs: Updated parameter creation.
6584         
6585 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6586
6587         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
6588         arguments.
6589         
6590         * generic.cs: Synchronized with gmcs.
6591         
6592 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6593
6594         * class.cs (Indexer): Check return type as soon as possible.
6595         
6596         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
6597         members too.
6598         
6599         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
6600         
6601         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
6602         
6603         * parameter.cs (Parameter): Use expression type when it is available.
6604         
6605         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
6606         method modifier for the first parameter only.
6607
6608 2007-06-24  Marek Safar  <marek.safar@gmail.com>
6609
6610         A fix for bug #81938
6611         * typemanager.cs (ChangeType): Fixed couple of char conversions.
6612         
6613         * constant.cs: Tide up an exception message.
6614
6615 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6616
6617         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
6618         an uninitialized variable is used.
6619         
6620         * expression.cs (LocalVariableReference.DoResolve): Ditto.
6621
6622 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6623
6624         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
6625         not found error handling.
6626
6627         * expression.cs (ArrayCreation): Removed redundant fields and little bit
6628         simplified.
6629         (ArrayCreation.ResolveArrayElement): To be ready to customization.
6630         (ArrayCreation.DoResolve): Simplified.
6631         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
6632         its own resolve process.
6633         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
6634
6635 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6636
6637         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
6638         more error details.
6639         
6640 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6641
6642         * cs-tokenizer.cs: Removed var related stuff.
6643         
6644         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
6645         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
6646         a type and a keyword at same time.
6647         
6648         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
6649         matches to "var".
6650         
6651         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
6652         implicitly typed arrays, more changes will follow.
6653         
6654         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
6655         
6656 2007-06-19  Marek Safar  <marek.safar@gmail.com>
6657
6658         * ecore.cs (VarExpr): Removed Handled field.
6659         
6660         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
6661         build-in assign functionality.
6662         (ForEach.Resolve): Removed all implicitly typed local variable code and
6663         simplified.
6664         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
6665         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
6666
6667 2007-06-18  Marek Safar  <marek.safar@gmail.com>
6668
6669         * assign.cs: Removed implicitly typed local variable check.
6670         
6671         * expression.cs (LocalVariableReference.DoResolve): Add check for self
6672         referencing implicitly typed local variable.
6673         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
6674         variable here.
6675         
6676         * statement.cs (Fixed): Removed unsupported implicitly typed local
6677         variable code.
6678
6679 2007-06-15  Marek Safar  <marek.safar@gmail.com>
6680
6681         * decl.cs (MemberName): Moved all Unbound stuff to parser.
6682
6683 2007-06-14  Marek Safar  <marek.safar@gmail.com>
6684
6685         A fix for bugs #81855 and #76274
6686         * attribute.cs (AttachTo): Always set owner for global attributes to
6687         prefined owner.
6688         
6689         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
6690         usefull too.
6691         
6692         * cs-parser.jay: Assembly and module attributes must precede all other
6693         elements except using clauses and extern alias declarations.
6694
6695 2007-06-13  Marek Safar  <marek.safar@gmail.com>
6696
6697         A fix for bug #81748
6698         * cs-tokenizer.cs,
6699         * expression.cs: More checks for non ISO-1 features.
6700
6701 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6702
6703         A fix for bug #81807
6704         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
6705         present inside switch statement and it is required by nullable check.
6706
6707 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6708
6709         A fix for bug #81840
6710         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
6711         when type matching fails.
6712         
6713         * namespace.cs: Tiny error message change.
6714
6715 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6716
6717         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
6718         reporting. Added automatic property check.
6719         
6720         * class.cs: Updated after CheckAbstractAndExtern relocation.
6721         (AEventPropertyAccessor.GetSignatureForError): Customized.
6722         
6723 2007-06-11  Marek Safar  <marek.safar@gmail.com>
6724
6725         * class.cs (DefineBaseTypes): Base type can be undefined.
6726         
6727         * ecore.cs (TypeLookup): Minor refactoring.
6728         (DoResolveAsTypeStep): Removed redundant check.
6729
6730         * namespace.cs (Lookup): Removed redundant check.
6731                 
6732         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
6733         ResolveAsTypeTerminal step.
6734         (BootstrapCorlib_*): Simplified.
6735         (PopulateCoreType): Core types can be now external.
6736
6737 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6738
6739         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
6740          verification only.
6741          (InferTypeArguments): Infers anonymous expression type arguments.
6742          (Compatible): Split to Compatible and InferTypeArguments. 
6743         
6744         * lambda.cs: Updated.
6745
6746 2007-06-08  Marek Safar  <marek.safar@gmail.com>
6747
6748         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
6749
6750 2007-06-07  Raja R Harinath  <harinath@gmail.com>
6751
6752         Fix #80477, cs0135-2.cs, cs0135-3.cs
6753         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
6754         names to the "known" variables list.
6755         (Block.CheckInvariantMeaningInBlock): Handle the fact the
6756         parameter names are also "known".
6757         (Block.CheckError136): Remove.
6758         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
6759         null.
6760
6761 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6762
6763         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
6764
6765 2007-06-06  Marek Safar  <marek.safar@gmail.com>
6766
6767         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
6768         internal error not an user error.
6769          
6770         * expression.cs (IsApplicable): Refactored to make debugging easier.
6771
6772         * support.cs: More tricks for non-mono runtimes.
6773         
6774         * typemanager.cs (CoreLookupType): Made public.
6775         (InitSystemCore): All linq specific stuff moved to linq.cs
6776
6777 2007-06-05  Marek Safar  <marek.safar@gmail.com>
6778
6779         * typemanager.cs (CSharpSignature): One more missing build-in types
6780         replacement.
6781         More tricks for non-mono runtime.
6782
6783 2007-06-05  Raja R Harinath  <harinath@gmail.com>
6784
6785         * statement.cs (Block.CheckError136_InParents): Remove.
6786         (Block.AddVariable): Use GetParameterInfo instead.
6787         (ToplevelBlock.ProcessArguments): Likewise.
6788
6789 2007-06-04  Raja R Harinath  <rharinath@novell.com>
6790
6791         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
6792         information too.
6793         (ToplevelBlock.GetParameterInfo): Split out of ...
6794         (ToplevelBlock.GetParameterRefernce): ... this.
6795         (ToplevelBlock.ParameterMap): Remove.
6796         * expression.cs (ParameterReference): Update to use
6797         ToplevelParameterInfo.
6798
6799         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
6800         regression.
6801
6802         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
6803         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
6804
6805         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
6806         (ToplevelBlock.ProcessParameters) ... here.
6807         (ToplevelBlock..ctor): Invoke it.
6808
6809         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
6810         new parameters.
6811
6812         * statement.cs (IKnownVariable): New interface.
6813         (LocalInfo): Implement it.
6814         (ToplevelParameterInfo): New class.
6815         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
6816         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
6817         GetKnownVariableInfo.
6818
6819 2007-06-03  Raja R Harinath  <harinath@gmail.com>
6820
6821         Partly speed up CS0136 error checks.
6822         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
6823         'recurse' parameter.
6824         (Block.DoCheckError136): Only check errors in parameters.  Move
6825         local variable checks ...
6826         (Block.AddVariable): ... here, and ...
6827         (ToplevelBlock.ResolveMeta): ... here.
6828
6829 2007-06-02  Raja R Harinath  <harinath@gmail.com>
6830
6831         * statement.cs (Block.IsChildOf): Remove.
6832
6833         * statement.cs (Statement.Clone): Move special case code ...
6834         (Block.CloneTo): ... here.
6835
6836 2007-05-29  Raja R Harinath  <rharinath@novell.com>
6837
6838         * statement.cs (ToplevelBlock.container): Remove field.  It's
6839         redundant with 'Parent'.
6840         (ToplevelBlock.ContainerBlock): Remove accessor.
6841         (ToplevelBlock..ctor): Update to changes.  Register anonymous
6842         child with parent here, ...
6843         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
6844         current_block.
6845         (start_anonymous): Don't save current_block.
6846         (top_current_block): Remove.
6847
6848         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
6849         (Block.Resolve): Update to changes.
6850         (Block..ctor): Move setting of "correct" 'Toplevel'
6851         and 'Explicit' fields to ...
6852         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
6853
6854 2007-05-27  Raja R Harinath  <harinath@gmail.com>
6855
6856         Kill Block.Implicit
6857         * statement.cs (Block.Implicit): Remove.
6858         (Block): Update to changes.
6859         * flowanalysis.cs: Likewise.
6860
6861         Mildly speed up CheckInvariantMeaningInBlock
6862         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
6863         Recursively call AddKnownVariable to all enclosing blocks.
6864         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
6865         Remove recursive calls.
6866         (Block): Update to changes.
6867
6868         New ExplicitBlock invariants
6869         * statement.cs (Block.Explicit): New field.  It points to the
6870         immediately enclosing non-implicit block.
6871         (Block..ctor): Maintain the invariant.
6872         * cs-parser.jay: Take advantage of invariant.
6873
6874         Introduce ExplicitBlock
6875         * statement.cs (ExplicitBlock): New.
6876         (ToplevelBlock): Derive from it.
6877         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
6878         sense of flag.
6879         (Block.Implicit): Update to changes.
6880         * cs-parser.jay: Update to changes.
6881
6882         Remove unused field
6883         * codegen.cs (EmitContext.IsLastStatement): Remove.
6884         * statement.cs (Block.DoEmit): Update to changes.
6885
6886 2007-05-25  Raja R Harinath  <rharinath@novell.com>
6887
6888         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
6889         modifying current_block directly.
6890
6891 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
6892         
6893         * class.cs: Implemented automatic properties (C# 3.0)
6894           Thanks to Marek for the help.
6895
6896 2007-05-23  Raja R Harinath  <rharinath@novell.com>
6897
6898         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
6899         variable as assigned, note also that all its components are
6900         assigned too.
6901         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
6902
6903 2007-05-19  Marek Safar  <marek.safar@gmail.com>
6904
6905         * anonymous.cs, class.cs: Emit Compiler generated attribute when
6906         member is marked as compiler generated.
6907         
6908         * decl.cs (MemberCore): Refactored ModFlags into property.
6909
6910         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
6911         (Check): Check only accessibility modifiers.
6912
6913 2007-05-18  Raja R Harinath  <rharinath@novell.com>
6914
6915         Track all assignable slots in one bit array
6916         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
6917         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
6918         logic from VariableMap constructor here.  Use the same 'offset'
6919         variable that's later used for computing offsets of local
6920         variables.
6921         * flowanalysis.cs (UsageVector.parameters): Remove.
6922         (UsageVector): Update to changes.
6923         (VariableMap): Remove.
6924
6925         Avoid creating ParameterMap in every block
6926         * statement.cs (Block.ParameterMap): Move ...
6927         (ToplevelBlock.ParameterMap): ... here.
6928         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
6929         only once.
6930         * flowanalysis.cs (FlowBranching.param_map): Remove.
6931         (FlowBranching.UsageVector): Update to changes.
6932         (FlowBranchingToplevel.CheckOutParameters): Likewise.
6933
6934         * statement.cs (Block.CloneTo): Clone Toplevel field too.
6935
6936         * expression.cs (ParameterReference): Distinguish between block
6937         where parameter was referenced and declared.
6938
6939 2007-05-18  Marek Safar  <marek.safar@gmail.com>
6940
6941         * flowanalysis.cs, statement.cs: Put back improved error handling.
6942
6943 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
6944         
6945         * assign.cs:
6946         * expression.cs:
6947           Imporved object and collection initialization (C# 3.0).
6948
6949 2007-05-15  Marek Safar  <marek.safar@gmail.com>
6950
6951         A fix for bug #81380
6952         * expression.cs (Is.DoResolve): Only value types have constant `is'
6953         behaviour.
6954
6955 2007-05-15  Raja R Harinath  <rharinath@novell.com>
6956
6957         * statement.cs (ToplevelBlock.child): Remove.
6958
6959 2007-05-15  Raja R Harinath  <harinath@gmail.com>
6960
6961         Rationalize ResolveMeta: refactoring
6962         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
6963         out constant handling code into ...
6964         (Block.DoResolveConstants): ... this.
6965
6966         Rationalize ResolveMeta: kill local_map
6967         * statement.cs (Block.local_map, Block.LocalMap): Remove.
6968         (Block.AssignableSlots): New.
6969         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
6970         for locals -- move code from VariableMap here.  Avoid unnecessary
6971         allocations.
6972         * flowanalysis.cs (FlowBranching.local_map): Remove.
6973         (FlowBranching..ctor): Use Block.AssignableSlots.
6974         (VariableMap): Remove unused constructors.
6975
6976 2007-05-11  Raja R Harinath  <rharinath@novell.com>
6977
6978         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
6979
6980 2007-05-11  Marek Safar  <marek.safar@gmail.com>
6981
6982         * typemanager.cs (IsFriendAssembly): Should not be called for building
6983         assembly.
6984
6985 2007-05-09  Marek Safar  <marek.safar@gmail.com>
6986
6987         * literal.cs (NullConstant): Print null in all cases.
6988         
6989         * expression.cs (Binary.ResolveOperator): Implemented delegate
6990          comparison based on C# 2.0 changes.
6991
6992 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
6993
6994         This code is contributed under the MIT X11 license
6995         
6996         The following enables support for several C# 3.0 language features:
6997         
6998         * cs-tokenizer.cs: Added support for the "var" keyword.
6999         
7000         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7001           Added VarExpr class to facilitate type inferencing.
7002         
7003         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7004           to support anonymous types.
7005         
7006         * assign.cs: Added support for type inferencing and initialization.
7007         
7008         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7009         
7010         * expression.cs: Added implicit array support to ArrayCreation.
7011           Added 5 types and 1 interface:
7012           
7013           IInitializable                Implementing classes can inject initializing
7014                                         statements after object instantiation.
7015           
7016           Initializer                   Stores data for object initialization.
7017           
7018           AnonymousType                 An expression for anonymous types.
7019           
7020           AnonymousTypeParameter        Stores data about an anonymous type's field.
7021           
7022           NewInitialize                 An expression for object initialization.
7023           
7024           CollectionInitialize          An expression for collection initialization.
7025         
7026         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7027           statements.
7028
7029 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7030
7031         A fix for bug #81500
7032         * cs-tokenizer.cs: Add special handling for coalescing operator.
7033
7034 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7035
7036         A fix for bug #81529
7037         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7038         its value from base class until it is redefined.
7039
7040 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7041
7042         Fix regression in cs0631-3.cs
7043         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7044         fallback.  Make error fallback catch more cases.
7045
7046 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7047
7048         * cs-parser.jay: Allow parameters in operator declarations to have
7049         attributes. 
7050
7051 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7052
7053         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7054         exists. 
7055
7056         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7057         inside the ContextualReturn, it does not have to be an
7058         ExpressionStatement. 
7059
7060 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7061
7062         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7063         set, set it.
7064
7065 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7066
7067         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7068         method in two methods: ResolveNoDefine and Resolve.
7069
7070         ResolveNoDefine will stop just after ResolveTopBlock has been
7071         called.   
7072
7073         Resolve will then continue by creating a method and issuing the
7074         call to method.Define ().
7075
7076         (AnonymousMethod): Split and implement the new Resolve and
7077         ResolveNoDefine as well.
7078
7079         * lambda.cs (LambdaExpression): Split the anonymous method
7080         resolution code into a separate routine (CoreCompatibilityTest)
7081         from DoCompatibleTest.
7082
7083         (LambdaExpression.TryBuild): New method, this method tries to
7084         build the LambdaExpression with the given set of types to be used
7085         as the types for the various parameters of the lambda expression. 
7086
7087         If the compilation succeed with the given types, the infered type
7088         of the Anonymous method is returned, otherwise null is returned.
7089
7090 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7091
7092         A fix for bug #81414
7093         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7094
7095 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7096
7097         * cs-tokenizer.cs: Change various identifiers here from the
7098         camelCasing to the recommended Linux-like style for instance
7099         variables from the Coding Guidelines. 
7100
7101 2007-04-19  Martin Baulig  <martin@ximian.com>
7102
7103         * convert.cs
7104         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7105         System.Enum to System.ValueType.
7106
7107 2007-04-13  Martin Baulig  <martin@ximian.com>
7108
7109         Rewrote implicit reference conversions.  We need to distinguish
7110         between implicit reference conversions (13.1.4) and implicit
7111         boxing conversions (13.1.5).
7112
7113         According to the spec, there's an an implicit conversion
7114         "From a one-dimensional array-type S[] to IList<T> and base
7115         interfaces of this interface, provided there is an implicit
7116         reference conversion from S to T."  Note that this does not
7117         include boxing conversions.
7118
7119         * convert.cs
7120         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7121         (Convert.ImplicitReferenceConversion): Split into
7122         ImplicitReferenceConversionCore() and
7123         ImplicitBoxingConversionExist().
7124         (Convert.ImplicitReferenceConversionExists): Use the new
7125         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7126
7127 2007-04-12  Martin Baulig  <martin@ximian.com>
7128
7129         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7130         `TypeManager.null_type' checks up to the top of the method.
7131
7132 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7133
7134         A fix for bug #81350
7135         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7136         extension methods.
7137
7138 2007-04-11  Martin Baulig  <martin@ximian.com>
7139
7140         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7141         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7142         to make this work for generic classes; fixes #79561.
7143
7144 2007-04-11  Martin Baulig  <martin@ximian.com>
7145
7146         * expression.cs (As): Add support for nullable types; fixes #79371.
7147
7148 2007-04-11  Martin Baulig  <martin@ximian.com>
7149
7150         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7151         `type.FullName' is null; fixes #80243.
7152
7153 2007-04-11  Martin Baulig  <martin@ximian.com>
7154
7155         * expression.cs (Invocation.IsApplicable): Don't modify the method
7156         if type inference succeeded, but the method was not applicable.
7157         Fixes #81250.
7158
7159 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7160
7161         A fix for bug #81324
7162         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7163         internal and external namespaces containers.
7164
7165 2007-04-10  Martin Baulig  <martin@ximian.com>
7166
7167         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7168         TypeManager.DropGenericMethodArguments() so we also call
7169         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7170
7171 2007-04-10  Martin Baulig  <martin@ximian.com>
7172
7173         * iterators.cs (Iterator.CreateIterator): Don't crash if
7174         `method.ReturnType' is null.  This happens if something went wrong
7175         while resolving that typ (we already reported an error in this case).
7176
7177 2007-04-10  Martin Baulig  <martin@ximian.com>
7178
7179         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7180         generic interfaces; report the CS0144 directly.
7181
7182 2007-04-10  Martin Baulig  <martin@ximian.com>
7183
7184         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7185         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7186
7187 2007-04-10  Martin Baulig  <martin@ximian.com>
7188
7189         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7190
7191 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7192
7193         A better fix
7194         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7195         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7196
7197         Fix #81338
7198         * statement.cs (For.Resolve): If resolution fails, use
7199         KillFlowBranching.
7200
7201 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7202
7203         * anonymous.cs (MakeName): Make faster and zero-based.
7204         (VerifyExplicitParameterCompatibility): Back to mode where generic
7205         parameter is ignored.
7206         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7207
7208         * class.cs (EmitType): Method can emit another new method.
7209
7210         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7211
7212         * driver.cs: Updated.
7213
7214         * lambda.cs: Reuse predefined empty parameters.
7215
7216         * parameter.cs: Updated
7217
7218         * support.cs: Implemented InflateTypes.
7219
7220         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7221         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7222
7223 2007-04-03  Martin Baulig  <martin@ximian.com>
7224
7225         Fix #80632.
7226
7227         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7228         version of TypeManager.IsOverride() which also works with generic
7229         types.  
7230
7231 2007-04-03  Martin Baulig  <martin@ximian.com>
7232
7233         Fix #81044.
7234
7235         * convert.cs
7236         (Convert.ExplicitReferenceConversion): We need to cast when
7237         converting from IList<T> to S[].
7238
7239 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7240
7241         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7242         at this level.
7243         
7244         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7245
7246 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7247
7248         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7249         argument and return type inferring.
7250
7251         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7252         (ReturnType): Turned to property.
7253
7254         * statement.cs (Return): Implemented return type inferring.
7255
7256         * support.cs (ReflectionParameters): Use local types if possible.
7257
7258 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7259
7260         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7261         (FlowBranching.UsageVector): Update to changes.
7262
7263         Prepare to kill 'Reachability'
7264         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7265         argument of constructor.
7266
7267 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7268
7269         Prepare to kill 'Reachability'
7270         * flowanalysis.cs (UsageVector.is_unreachable): New.
7271         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7272         'reachability', and verify they're consistent.
7273
7274         Fix #81121
7275         * expression.cs (New.EmitStatement): Handle type parameters here too.
7276
7277 2007-03-29  Martin Baulig  <martin@ximian.com>
7278
7279         Fix #79148.
7280
7281         * anonymous.cs
7282         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7283         CompilerGeneratedClass.
7284         (ScopeInfo.EmitScopeInstance): Make this protected.
7285         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7286         `ec.CurrentAnonymousMethod.Scope == Scope'.
7287
7288         * statement.cs (Block.ScopeInfo): Make this a property.
7289
7290 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7291
7292         Prepare to kill 'Reachability'
7293         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7294         (FlowBranching.UsageVector.Reachability): Remove property.
7295         (FlowBranching.UsageVector.IsUnreachable): New property.
7296         (FlowBranching.UsageVector.ResetBarrier): New.
7297         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7298         * codegen.cs, statement.cs: Update to changes.
7299
7300 2007-03-27  Martin Baulig  <martin@ximian.com>
7301
7302         Fix #81209.
7303
7304         * decl.cs
7305         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7306         generic types.
7307
7308 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7309
7310         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7311         instead of TriState.  Remove all mention of TriState.
7312
7313         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7314         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7315         and maintain invariants.
7316
7317 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7318
7319         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7320
7321 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7322
7323         * expression.cs: Stop using obsolete 2.0 opcodes.
7324
7325 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7326
7327         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7328         one of the latests Martin's fixes.
7329
7330 2007-03-23  Miguel de Icaza  <miguel@novell.com>
7331
7332         * expression.cs: On BigEndian systems, swap the bytes, temporary
7333         solution until we get a new bitconverter class.
7334
7335 2007-03-23  Martin Baulig  <martin@ximian.com>
7336
7337         Fix #81158.
7338
7339         * decl.cs (MemberCache.AddMembers): Add generic methods both as
7340         "Method" and "Method`1".  Normally, a cache lookup is done on the
7341         "Method" form (ie. without the generic arity), but this one makes
7342         lookups on the full form work as well.
7343
7344 2007-03-22  Raja R Harinath  <rharinath@novell.com>
7345
7346         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
7347         unused properties.
7348
7349 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
7350         * class.cs: 
7351         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
7352         ordered_member_list, to TypeBuilder to store members to be defined
7353         in the order they were parsed in.
7354         - ordered_explicit_member_list contains all properties indexers
7355           and methods that are defined as explicit implementation of an
7356           interface or base class.
7357         - ordered_member_list contains all properties indexers and methods
7358           that are not defined as explicit implementation of an interface
7359           or base class.
7360
7361         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
7362         functionality in these removed classes has been replaced with 
7363         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
7364         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
7365
7366         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
7367         to CheckForDuplications inside GetMethod and SetMethod Define Method
7368         to handle method property and indexer name conflicts.
7369
7370         Fixes #79434
7371
7372         All code is contributed under the MIT/X11 license.
7373
7374 2007-03-20  Martin Baulig  <martin@ximian.com>
7375
7376         * class.cs (TypeContainer.Interfaces): Removed; they're now
7377         included in `TypeContainer.Types'.
7378
7379 2007-03-20  Martin Baulig  <martin@ximian.com>
7380
7381         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
7382
7383         * class.cs (TypeContainer.CreateType): New public method.  This is
7384         now called before DefineType() to create the TypeBuilders.
7385         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
7386         has already been created by CreateType().
7387         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
7388         don't resolve our base classes here; this has been moved into
7389         DefineBaseTypes().  We're now called from CreateType().
7390         (TypeContainer.DefineBaseTypes): New private method; resolve our
7391         base classes here.  We're now called from DefineType().
7392
7393         * rootcontext.cs
7394         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7395         our types first to create all the TypeBuilders.  After that, call
7396         TypeContainer.DefineType() on all the types which'll resolve their
7397         base classes and setup the resolve order.
7398
7399 2007-03-20  Martin Baulig  <martin@ximian.com>
7400
7401         * class.cs (TypeContainer.Enums): Removed; they're now included in
7402         `TypeContainer.Types'.  
7403
7404 2007-03-20  Martin Baulig  <martin@ximian.com>
7405
7406         * class.cs
7407         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7408         (TypeContainer.DoResolveMembers): Call DefineType() on our
7409         `compiler_generated' classes; moved here from DefineNestedTypes().
7410
7411         * rootcontext.cs
7412         (RootContext.ResolveTree): Call ResolveMembers() on all
7413         TypeContainer's in the `type_container_resolve_order'.
7414
7415 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7416
7417         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7418
7419 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7420
7421         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7422         implementation flags.
7423
7424 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7425
7426         * class.cs: More optimizations for type parameters.
7427
7428 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7429
7430         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7431
7432         * ecore.cs, parameter.cs: More common code for both corlibs.
7433
7434         * typemanager.cs (IsGenericMethod): Simplified.
7435
7436 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7437
7438         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7439         'returns'.
7440         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7441
7442         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7443         unconditionally.  Simplify explanation.
7444         (Try.Resolve, Using.Resolve): Likewise.
7445
7446 2007-03-15  Martin Baulig  <martin@ximian.com>
7447
7448         Fix #80731.
7449
7450         * decl.cs (DeclSpace): If we're a partial class, use our
7451         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7452
7453 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7454
7455         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7456         'throws'.
7457         (FlowBranching.UsageVector): Update to changes.
7458         (FlowBranching.MergeSiblings): Likewise.
7459         * statement.cs: Likewise.
7460
7461 2007-03-15  Martin Baulig  <martin@ximian.com>
7462
7463         Fix #79302.
7464
7465         * decl.cs
7466         (MemberCache): Added a special .ctor for type parameters.
7467
7468         * typemanager.cs
7469         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7470         `MemberCache'.  
7471
7472 2007-03-09  Martin Baulig  <martin@ximian.com>
7473
7474         * enum.cs (Enum): Make this a TypeContainer.
7475         (EnumMember): Derive from `Const'.
7476
7477         * const.cs
7478         (Const.DoResolveValue): New protected virtual method; move most of
7479         the functionality of ResolveValue() here so we can override it in
7480         `EnumMember'.
7481         (Const.CreateConstantReference): Make this virtual.
7482
7483         * class.cs (Kind): Add `Kind.Enum'.
7484         (TypeContainer.Emit): Don't emit the enums here; they're already
7485         in the `RootContext.typecontainer_resolve_order'.
7486
7487         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7488         here; they're already in the `typecontainer_resolve_order'.
7489
7490         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7491         TypeManager.DropGenericTypeArguments().
7492
7493         * typemanager.cs
7494         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7495         (TypeManager.IsEnumType): Likewise.
7496         (TypeManager.EnumToUnderlying): Likewise.
7497         (TypeManager.IsEqual): Add support for enums.
7498
7499 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7500
7501         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7502         DefaultParameterValueAttribute to be undefined, say if System.dll
7503         is not referenced.
7504
7505 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7506
7507         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7508         any mscorlib.
7509
7510 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7511
7512         * class.cs, parameter.cs: Unified parameters verification.
7513
7514 2007-03-08  Martin Baulig  <martin@ximian.com>
7515
7516         * cs-parser.jay (constructor_header): Pass the location to the
7517         newly created TopLevelBlock.
7518
7519 2007-03-07  Martin Baulig  <martin@ximian.com>
7520
7521         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7522
7523 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7524
7525         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7526         with the changes from David, fixes the build.
7527
7528 2007-03-05  David Mitchell  <dmitchell@logos.com>
7529
7530         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7531         and its base interfaces to a one-dimensional array type S[],
7532         provided there is an implicit or explicit reference conversion
7533         from S to T.
7534
7535 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7536
7537         * cs-tokenizer.cs: Implemented basic linq grammar.
7538
7539         * driver.cs: Set linq lang version on demand.
7540
7541 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7542
7543         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7544
7545 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7546
7547         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7548         (Fixes #80455)
7549
7550         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
7551         here.
7552         Check property and event extern attributes.
7553
7554         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
7555         charset.
7556
7557 2007-02-24  Marek Safar  <marek.safar@gmail.com>
7558
7559         A fix for bug #80407
7560         * ecore.cs: Don't report ambiguity error when methods have same parent.
7561
7562 2007-02-23  Marek Safar  <marek.safar@gmail.com>
7563
7564         A fix for bug #80878
7565         * class.cs, cs-parser.jay: Event property can host anonymous methods.
7566
7567 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7568
7569         * attribute.cs: Enable ExtensionAttribute presence test.
7570
7571 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7572
7573         * class.cs: Warn about missing GetHashCode only when Equals is override.
7574
7575         * decl.cs: Check accessibility of type arguments.
7576
7577         * typemanager.cs: Correctly report nullable array.
7578
7579 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7580
7581         * class.cs, report.cs: Capture more details when things go wrong.
7582
7583 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7584
7585         A fix for bug #80650
7586         * cs-parser.jay: Anonymous container starts at constructor declaration
7587         and not at block beginning because it has to be usable in constructor
7588         initializer.
7589
7590         * statement.cs: Use context location and not block one for error reporting.
7591
7592 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7593
7594         A fix for bug #78712
7595         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
7596         too.
7597
7598 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7599
7600         A fix for bug #80493 by Atsushi Enomoto
7601         * cs-parser.jay: Ignore invalid attribute target.
7602
7603 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7604  
7605         * cs-tokenizer.cs: Ignore '\0' as white space character.
7606
7607 2007-02-17  Miguel de Icaza  <miguel@novell.com>
7608
7609         * cs-parser.jay: Add support for lambda expressions to the mcs
7610         compiler as well.
7611
7612         * lambda.cs: Only clone when we are probing, not on the final call
7613         (Compatible is the final call). 
7614
7615         * statement.cs (CloneContext): Introduce class to provide block
7616         remapping during clone.
7617
7618         All statements Clone themselves now.
7619
7620         (Clone): special handling for blocks, when we clone a block, we
7621         register the block inside this routine, as children of the block
7622         might trigger a lookup. 
7623         
7624         * expression.cs: Add support for CloneContext in all expressions. 
7625         
7626 2007-02-17  Marek Safar  <marek.safar@gmail.com>
7627  
7628         A fix for bug #80493
7629         * statement.cs: Report ambiguous warning when interfaces are not related.
7630
7631 2007-02-15  Marek Safar  <marek.safar@gmail.com>
7632
7633         C# 3.0 extension methods.
7634
7635         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
7636         cannot be used directly.
7637
7638         * class.cs (Class.Emit): Emit extension attribute if any class method
7639         is extension method.
7640         (Method.Define): Add basic extension method validation conditions.
7641         (Method.Emit): Emit extension attribute for method.
7642
7643         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
7644         extension method exists. Currently we follow same approach as Microsoft
7645         does, emit even if a method or a class are private but this can change
7646         later.
7647
7648         * cs-parser.jay: Add handling of `this' keyword in method parameters
7649         context.
7650
7651         * decl.cs (DeclSpace.IsStaticClass): New property.
7652         (MemberCache.FindExtensionMethods): Looks for extension methods with
7653         defined name and extension type.
7654
7655         * doc.cs: Updated after OverloadResolve changes.
7656
7657         * driver.cs: Add new soft reference to System.Core.dll.
7658
7659         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
7660         (ExtensionMethodGroupExpr): Represents group of extension methods.
7661
7662         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
7663         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
7664         to MethodGroupExpr and made non-static for easier customization.
7665         (Invocation.DoResolve): Add extension method lookup when no standard
7666         method was found.
7667         (MemberAccess.DoResolve): Try extension methods if no member exists.
7668
7669         * modifiers.cs: Add METHOD_EXTENSION modifier.
7670
7671         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
7672         as well as candidate extension type.
7673         (ComputeNamespaces): When assembly constains extension methods registers
7674         them.
7675         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
7676         extension method lookup.
7677         (Namespace.LookupExtensionMethod): Looks for extension method in this
7678         namespace.
7679         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
7680         find a method which matches name and extensionType.
7681
7682         * parameter.cs (Parameter): Add This modifer.
7683         (HasExtensionMethodModifier): New property.
7684         (Resolve): Add extension parameter check.
7685         (ModFlags): turned to property to exclude this modifier as it is not real
7686         parameter modifier.
7687         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
7688
7689         * support.cs (ParameterData): Add ExtensionMethodType.
7690         (ReflectionParameters): Implemented ExtensionMethodType interface property.
7691
7692         * typemanager.cs: Add type and ctor extension attribute type.
7693
7694 2007-02-15  Miguel de Icaza  <miguel@novell.com>
7695
7696         * report.cs (DisableErrors, EnableErrors): used to prevent error
7697         output when we are "trying" to compile various methods with
7698         different types. 
7699
7700         * ecore.cs (Expression): Add Clone method that calls the virtual
7701         CloneTo method.  The current CloneTo method in Expression throws
7702         an exception so we can track down all the places where this must
7703         be implemented (not using abstract, because that would be a lot of
7704         up-front-work before we can start testing the implementation
7705         idea). 
7706
7707         Important: we only need Clone capabilities for expressions created
7708         by the parser, as the expressions we will be cloning are
7709         expressions in the pre-resolved state.   This vastly simplifies
7710         the work required. 
7711         
7712         (SimpleName): Add CloneTo that does nothing.
7713         (EmptyCast): Add CloneTo.
7714         
7715         * expression.cs (Binary): Implement CloneTo.
7716         (Invocation.IsApplicable): Store the current ec in
7717         EmitContext.TempEc and restore it on return.  This is used so we
7718         do not have to sprinkle hundres of methods with an extra
7719         EmitContext, we know that the only user is the lambda expression
7720         ImplicitConversionExists code. 
7721         
7722         (Argument): Add Cloning capabilities.
7723         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
7724         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
7725         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
7726         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
7727         IndexerAccess): Add Clone capability.
7728
7729         (LocalVariableReference, This): TODO: needs cloned Block mapping.
7730
7731         (Argument): Add cloning capability.
7732
7733         * assign.cs (Assign): Implement CloneTo.
7734
7735         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
7736         
7737         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
7738         version by calling Convert with the EmitContext (that we are
7739         currently storing in ec, this is not great, but will do for now,
7740         to avoid passing EmitContext parameters to hundreds of functions
7741         that do not need them now).
7742
7743         (SetExpression): Remove, it is not needed.
7744         
7745         (ContextualReturn): Implement CloneTo.
7746
7747         * statement.cs (Statement): Implement cloning infrastructure,
7748         similar to expressions.
7749
7750         (Block): Partial implementation of Clone for statements.
7751
7752         (Return): Implement clone.
7753         
7754         * constant.cs (Constant.CloneTo): New method, does nothing.
7755
7756         * codegen.cs (TempEc): Add a static EmitContext as a temporary
7757         solution, until we decide how to exactly do this.  
7758         
7759 2007-02-14  Marek Safar  <marek.safar@gmail.com>
7760  
7761         A fix for bug #80493
7762         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
7763         a property is override we need to use second accessor.
7764
7765 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7766  
7767         A fix for bug #80418
7768         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
7769         methods.
7770
7771 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7772
7773         Another fix for bug #80749
7774         * pending.cs: Abstract class has priority over interfaces.
7775
7776 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7777
7778         Another fix for bug #80749
7779         * pending.cs: Abstract class has priority over interfaces.
7780
7781 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7782
7783         Another fix for bug #80749
7784         * pending.cs: Abstract class has priority over interfaces.
7785
7786 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7787
7788         Another fix for bug #80749
7789         * pending.cs: Abstract class has priority over interfaces.
7790
7791 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7792
7793         * class.cs Better error message.
7794
7795         * driver.cs: Add shorter versions of -optimize option.
7796
7797 2007-02-13  Martin Baulig  <martin@ximian.com>
7798
7799         * class.cs (Constructor.Emit): Check the return value of
7800         ec.ResolveTopBlock() and return on error.
7801
7802 2007-02-13  Raja R Harinath  <rharinath@novell.com>
7803
7804         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
7805         message to fix error message regression.
7806
7807 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7808
7809         * delegate.cs: Delegate creation expression cannot be of Nullable type.
7810
7811 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7812
7813         A fix for bug #80749
7814         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
7815         its parent container.
7816
7817         * class.cs (DefineFieldInitializers): Each initializer can has different
7818         resolve context.
7819
7820         * const.cs: Updated.
7821
7822 2007-02-11  Miguel de Icaza  <miguel@novell.com>
7823
7824         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
7825         now all the heavy lifting to check that embedded statements or
7826         expressions have the right form is done in the ContextualReturn.
7827
7828         (ContextualReturn): New class.  
7829
7830         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
7831         method that can be invoked to report 201, so we do not replicate
7832         this everywhere.
7833
7834         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
7835         
7836         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
7837         treating tabs as spaces. 
7838
7839 2007-02-09  Marek Safar  <marek.safar@gmail.com>
7840
7841         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
7842         * assign.cs: Use full implicit conversion for right side check.
7843
7844 2007-02-09  Marek Safar  <marek.safar@gmail.com>
7845
7846         * statement.cs (Switch): Switch over boolean type is not standardized.
7847
7848 2007-02-08  Marek Safar  <marek.safar@gmail.com>
7849
7850         A fix for bug #80755
7851         * decl.cs (FindBaseEvent): Don't use method cache for events.
7852
7853 2007-02-07  Marek Safar  <marek.safar@gmail.com>
7854
7855         * cs-parser.jay: Better syntax error handling.
7856
7857         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
7858         instead of underlying type value.
7859
7860 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7861
7862         * driver.cs: Check define identifier before is registered.
7863
7864         * namespace.cs: Use existing error message.
7865
7866         * report.cs: New warning.
7867
7868 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7869
7870         A fix for bug #80742
7871         * expression.cs: Delegate Invoke method can be called directly.
7872
7873 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7874
7875         A fix for bug #80676
7876         * class.cs (IsEntryPoint): The Main method can have params modifier.
7877
7878 2007-02-04  Miguel de Icaza  <miguel@novell.com>
7879
7880         * parameter.cs (Parameter, Parameters): Add Clone method.
7881
7882         * anonymous.cs (Compatible): Turn method into virtual method, so
7883         LambdaExpression can implement a different behavior.
7884
7885         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
7886         out the basic checking here, so it can be used by
7887         LambdaExpressions.
7888         
7889         * lambda.cs: Introduce "Compatible" function that will do the
7890         heavy lifting.
7891
7892 2007-02-02  Marek Safar  <marek.safar@gmail.com>
7893
7894         * attribute.cs: Unified one error message.
7895
7896         * class.cs (Class): Use type attributes and not properties to test static
7897         class.
7898         (IsEntryPoint): Don's pass local variable.
7899
7900         * convert.cs: Removed duplicate check.
7901
7902         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
7903
7904         * driver.cs: Don't crash when soft reference does not exist.
7905
7906         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
7907         (UsingEntry): Removed redundant allocation.
7908
7909         * parameter.cs: Add fast path for type parameters.
7910
7911         * support.cs: Don't allocate attribute when it's not used.
7912
7913 2007-01-30  Miguel de Icaza  <miguel@novell.com>
7914
7915         * anonymous.cs
7916         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
7917         this into a virtual method, so we can override it in LambdaExpression.
7918
7919         * driver.cs: Improve diagnostics in case of failure. 
7920
7921         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
7922         write a function that is slightly more complex and that parses:
7923
7924         type identifier [, type identifier]* )
7925
7926         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
7927         this expression:
7928
7929                 (canEmpty ? i >= 0 : i > 0)
7930
7931 2007-01-30  Raja R Harinath  <rharinath@novell.com>
7932
7933         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
7934         exception on possibly valid code.
7935
7936 2007-01-29  Raja R Harinath  <rharinath@novell.com>
7937
7938         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
7939         Push/PopPosition.
7940         (parse_opt_type_arguments): Remove.  It's almost the same as
7941         parse_less_than.
7942         (parse_namespace_or_typename): Use parse_less_than.
7943
7944 2007-01-28  Miguel de Icaza  <miguel@novell.com>
7945
7946         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
7947         this bug took a few hours to find, because the state saved and
7948         restored by PushPosition and PopPosition was ignoring the state of
7949         parse_generic_less_than.
7950
7951         I can also now remove the handling of OP_LT and OP_GT, this solves
7952         the big mistery.
7953         
7954         * cs-tokenizer.cs: store the location for the ARROW token, we use
7955         that in the parser.
7956
7957         (PushPosition, PopPosition): save/restore also `current_token',
7958         restore `parse_generic_less_than' (was missing).
7959
7960         (parse_opt_type_arguments): use parse_type, not
7961         parse_namespace_or_typename to parse types.
7962
7963         * lambda.cs: Empty new file, will eventually have the lambda
7964         expression implementation.
7965
7966         * lambda.test: used to test the internal tokenizer. 
7967
7968         * report.cs (FeatureIsNotISO1): Rename from
7969         FeatureIsNotStandardized, because it was about the language level
7970         (1 vs 2) it was not about standarization.
7971
7972         (FeatureRequiresLINQ): New.
7973
7974         * support.cs (SeekableStreamReader): Only require that the reader
7975         is a TextReader, not a StreamReader, so we can plug StringReader. 
7976
7977         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
7978         given position in the input stream the following tokens can be
7979         parsed as a type followed by an identifier.
7980
7981         (is_punct): after a '(' if parse_type_and_parameter returns true,
7982         then return a special token OPEN_PARENS_LAMBDA which is used to
7983         avoid reduce/reduce errors in the grammar for the
7984         lambda_expression rules.
7985
7986         (parse_type): implement a type parser inside the
7987         tokenizer, the parser only returns true or false depending on
7988         whether the input at a given position can be parsed as a type.
7989
7990         (peek_token): new method used during type parsing.
7991
7992 2007-01-28  Raja R Harinath  <rharinath@novell.com>
7993
7994         Fix #80531
7995         * anonymous.cs (ScopeInfo.InflateParameters): New.
7996         (AnonymousContainer.Resolve): Use it to redirect types of
7997         delegate parameters.
7998
7999 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8000
8001         Fix #80530
8002         * expression.cs (Error_InvalidArguments): Don't use two different
8003         messages for CS1503.  Use ExtraInformation and
8004         SymbolRelatedToPreviousError instead.
8005
8006         Fix #80358
8007         * decl.cs (DeclSpace.initialize_type_params): Don't access
8008         'type_params' of a partial class directly.
8009
8010 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8011
8012         * constant.cs: Removed a handful of out-of-range checks that were
8013         not necessary. 
8014
8015 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8016
8017         * expression.cs (CheckUselessComparison): Add additional check for char
8018         constants.
8019
8020         * namespace.cs: Fixed typo.
8021
8022 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8023
8024         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8025         gone, instead we inline the test, preventing the needless casts to
8026         longs, ulongs and doubles for the parameters, avoiding calls to
8027         methods that overchecked stuff, and instead inlined things
8028         nicely. 
8029
8030 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8031
8032         * cs-parser.jay: Better parameter error handling.
8033
8034 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8035
8036         A fix for bug #80368, #80522
8037         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8038         whether array initializer contains constants only.
8039         (ArrayCreation.Emit): Use better formula to decide when
8040         are array initializers for static initialization.
8041         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8042         have to emit even constants otherwise they are pre-initialized.
8043
8044 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8045             Raja R Harinath  <rharinath@novell.com>
8046
8047         Fix emit order of 'get' vs. 'set'.
8048         * support.cs (Accessors): New.
8049         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8050         Note the order in which accessors are declared in the source.
8051         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8052         Refactored from Property.Define and Indexer.Define.
8053         (PropertyBase.DefineAccessors): New helper that calls the above in
8054         appropriate order as noted by the parser.
8055         (Property.Define, Indexer.Define): Update to changes.
8056         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8057
8058 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8059
8060         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8061         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8062         there's an implicit conversion from the current type to the target
8063         type before converting the underlying constant.
8064
8065 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8066
8067         * const.cs (ResolveValue): Updated after constant conversion was made more
8068         generic.
8069
8070         * constant.cs (GetAttributableValue): constant to object conversion is
8071         used for attributes only.
8072         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8073         constant conversions.
8074         (LongConstant.ConvertImplicitly): Ditto.
8075
8076         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8077         (ImplicitConversionStandard): Handle constant conversion as extra step.
8078         It solves the issue when constant conversion was called indirectly like
8079         inside array initializer and constant folding was skipped.
8080
8081         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8082         this change.
8083
8084         * statement.cs(ImplicitConversionStandard): Updated after constant
8085         conversion was made more generic.
8086
8087 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8088
8089         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8090         Constraints, solves the problem where the compiler incorrectly
8091         reported that a type parameter was not constrained to a class (Bug
8092         80518)
8093
8094 2007-01-14  Marek Habersack  <grendello@gmail.com>
8095
8096         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8097
8098 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8099
8100         A fix for bug #80368
8101         * assign.cs (FieldInitializer): New class implements field
8102         initializer statement.
8103
8104         * attribute.cs: Update after FieldMember rename.
8105
8106         * class.cs (PropertyBasedMember): New common class for property based
8107         types.
8108         (InterfaceMemberBase): New base class for all members which can be used as
8109         an interface members.
8110         (MethodCore): Moved really common code to InterfaceMemberBase.
8111         (Method.Define): Equal and GetHasCode detection is relevant for methods
8112         only.
8113         (MethodData.Define): Don't assume that public event implements an
8114         interface automatically.
8115         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8116         modifier is used.
8117         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8118         (FieldMember): Merged with FieldBase.
8119         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8120         event extern modifier can be used.
8121         (EventField.EventFieldAccessor): Moved event field specific code here.
8122         (Event.AllowedModifiers): Even event can be extern.
8123         (Event.FindOutBaseMethod): New override specific to events.
8124         (Indexer.parameters): Reintroduce parameters because base class holds
8125         only properties common data.
8126         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8127         need do extra parameters check.
8128
8129         * const.cs: Update after FieldMember rename.
8130
8131         * decl.cs (MemberCache.FindBaseEvent): New method.
8132
8133         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8134         to reflect that indexer is now derived from PropertyBased.
8135
8136         * ecore.cs (GetMemberType): Made public.
8137         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8138         obsolete event.
8139
8140         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8141         
8142         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8143         (RegisterEvent): Removed.
8144         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8145         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8146
8147 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8148
8149         Fix #80249
8150         * statement.cs (CollectionForeach.TryType): Prefer generic
8151         GetEnumerator over non-generic variant.  Fix code to follow comments.
8152
8153 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8154
8155         Fix #80446
8156         * support.cs (ReflectionParameter): Don't use an invalid index on
8157         the generic parameter data.
8158
8159 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8160
8161         * driver.cs: Just add a tiny bit of infrastructure.
8162
8163 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8164
8165         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8166         where field type is struct from current assembly.
8167         
8168         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8169         it is possible.
8170
8171 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8172
8173         A fix for bug #80381
8174         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8175         the core types.
8176
8177         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8178         messages.
8179         (Namespace.LookupType): Always use core types from corlib when speficied.
8180
8181         * report.cs: A new warning.
8182
8183         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8184         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8185         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8186
8187         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8188         (InitCoreTypes): Set expression type of object_type and value_type
8189         immediately after lookup.
8190
8191 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8192
8193         * cs-tokenizer.cs: Accept Pc class characters (Connector
8194         Punctuation) as valid identifiers.  Fixes #78259
8195
8196         * expression.cs (Invocation.DoResolve): Moved the check for the
8197         use of `this' for doing method calls to the Invocation resolution
8198         step, after overload resolution has taken place instead of doing
8199         the check at the low-level `This.DoResolve' level.
8200
8201         The `This.DoResolve'(appens before overload resolution, so it has
8202         no way of knowing if the method that will be called will be
8203         instace or static, triggering an erroneous report for cs0188 (Bug
8204         78113).
8205
8206         We now do the check for instance method invocations after we know
8207         what method will be called.
8208
8209         (This.CheckThisUsage): Move the actual use of this structure
8210         checking into its own method and expose it. 
8211
8212         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8213         EmitContext.
8214
8215         Exceptions: Null.ConvertImplicitly,
8216         Constant.ImplicitConversionRequired as there are too many call
8217         sites for passing the ec. 
8218
8219         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8220         EmitContext, if the value is null, then we do not try to provide
8221         the extra information from the error (If a userdefined conversion
8222         exists, as UserDefinedConversion requires a non null-EmitContext).
8223
8224         Fixes: #80347
8225
8226 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8227
8228         * flowanalysis.cs (MyBitVector): Document some invariants.
8229         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8230         introduced below, and add a couple of others, 
8231
8232 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8233
8234         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8235         GetPropertyFromAccessor and GetEventFromAccessor.
8236         
8237         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8238         overrides non-obsolete one.
8239         (Indexer.Define): Error message has been moved to the parser.
8240
8241         * cs-parser.jay: Better syntax errors handling.
8242
8243         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8244         when an invocation has no arguments.
8245
8246         * ecore.cs: Removed not used caching.
8247
8248         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8249         implementation.
8250
8251         * report.cs: Add a new warning.
8252
8253         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8254
8255         * typemanager.cs (enumeration_type): Removed.
8256         (CSharpSignature): Reuses IsSpecialMethod.
8257         (IsEqual): Hack for MS BCL.
8258         (GetPropertyFromAccessor): New method.
8259         (GetEventFromAccessor): New method.
8260         (IsSpecialMethod): Fixed to handle more cases.
8261
8262 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8263
8264         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8265         Made white spaces array static.
8266
8267         * ecore.cs (RemoveGenericArity): Optimized.
8268
8269         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8270         10 times faster).
8271         (MyBitVector.initialize_vector): Simplified.
8272
8273 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8274
8275         * ecore.cs: Am not entirely happy with this hack, but it seems to
8276         address the issue in 80257 (a small test case for
8277         CreativeDocs.NET). 
8278
8279         I set the MethodGroupExpr.Type to an internal compiler type
8280         (itself in this case) to force the resolution to take place.   Why
8281         it does not take place with a null is beyond me.
8282
8283 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8284
8285         A fix for bug #80288
8286         * expression.cs (ResolveOperator): Consider user defined conversion for
8287         logical and operator too.
8288         (EmitBranchable): Optimization for logical and when full constant folding
8289         could not be applied but one operand is constant.
8290
8291 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8292
8293         * class.cs (GetClassBases): Write 5 times every day, will never use
8294         FullName for error reporting.
8295
8296         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8297
8298 2006-12-19  Martin Baulig  <martin@ximian.com>
8299
8300         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8301         the symbol file info here.
8302
8303 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8304
8305         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8306         of `elseif' is taking then following sections are not taking.
8307         Fixes an issue reported on mono mailing list.
8308
8309 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8310
8311         A fix for bug #80300
8312         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8313         a caller is not taking.
8314
8315 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8316
8317         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8318         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8319         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8320         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8321         * class.cs: Update to changes.
8322
8323 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8324
8325         A fix for bug #79934
8326         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8327         partial container.
8328
8329         * class.cs (ResolveMembers): Register an iterator in current container and
8330         not in shared one.
8331
8332 2006-12-16  Raja R Harinath  <rharinath@novell.com>
8333
8334         Fix test-543.cs
8335         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
8336         satisfy a params annotated parameter.
8337
8338 2006-12-16  Marek Safar  <marek.safar@gmail.com>
8339
8340         A fix for bug #77014
8341         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
8342         paramters correctly and not rely on hacks in Parameters class.
8343         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
8344         at any possition.
8345         (Invocation.VerifyArgumentsCompat): Ditto.
8346         (Invocation.EmitArguments): Changed to correctly emit params arguments at
8347         any possition.
8348
8349         * parameter.cs (HasParams): Don't assume that params is the last one.
8350
8351         * support.cs (ReflectionParameters.ctor): Look for params attribute
8352         correctly.
8353         (ReflectionParameters.ParameterType): Removed hack when we returned last
8354         parameter for out of range parameters.
8355         (ParameterName, ParameterModifier): Ditto.
8356
8357 2006-12-14  Marek Safar  <marek.safar@gmail.com>
8358
8359         A fix for bug #79987
8360         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
8361         when assembly is not CLS compliant but type is. I have no idea why is this
8362         allowed.
8363
8364         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
8365
8366 2006-12-13  Miguel de Icaza  <miguel@novell.com>
8367
8368         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
8369         in struct constructors, they are basically no-ops.
8370
8371 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8372
8373         * cs-tokenizer.cs (Position): Save preprocessor status too.
8374
8375 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8376
8377         A fix for bug #77794
8378         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
8379
8380 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8381
8382         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
8383         Fixes #69299.
8384         (pp_expr): Report error for an invalid expression.
8385         (handle_preprocessing_directive): Simplified; add more error checking.
8386
8387 2006-12-11  Marek Safar  <marek.safar@gmail.com>
8388
8389         A fix for bug #74939
8390         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
8391         directives handling.
8392
8393 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8394
8395         A fix for bugs #80093, and #75984
8396         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8397         logic, it seems to me as it worked before "by coincidence".
8398         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8399         (cleanup): Enabled endif check.
8400
8401 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8402
8403         A fix for bug #80162
8404         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8405         enumerators are never ambiguous.
8406
8407 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8408
8409         Fix #80060
8410         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8411
8412 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8413
8414         A fix for bug #80144
8415         * class.cs (EventProperty.Define): Explicit implementation means
8416         that an even is used.
8417
8418 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8419
8420         Fixes the operators implementation (part II)
8421
8422         * cfold.cs (DoConstantNumericPromotions): Renamed to
8423         DoBinaryNumericPromotions and simplified.
8424         (BinaryFold): Couple of conversion fixes; simplified.
8425
8426         * constant.cs, ecore.cs, literal.cs
8427         (ToType): Renamed to ConvertImplicitly.
8428         (Reduce): Renamed to ConvertExplicitly.
8429
8430         * class.cs, convert.cs: Updated.
8431
8432         * expression.cs: TryReduce doesn't throw an exception.
8433
8434 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8435
8436         A fix for bug #80108
8437         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8438         compatible.
8439
8440 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8441
8442         Fixes unary operators implementation (part I)
8443         Also fixes #80026
8444
8445         * cfold.cs (Error_CompileTimeOverflow): Made internal
8446
8447         * const.cs (IConstant): Changed to use reference to constant and
8448         not constant itself.
8449         Updated IConstant implementations.
8450
8451         * constant.cs (CreateConstant): New factory method.
8452         Updated IConstant implementation.
8453
8454         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8455
8456         * ecore.cs: Updated to use CreateConstantReference.
8457
8458         * enum.cs: Reflects IConstant changes.
8459
8460         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8461
8462         * literal.cs (NullConstant): Change to be independently usable.
8463
8464 2006-11-29  Martin Baulig  <martin@ximian.com>
8465
8466         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8467         we need to emit the scope initializer before calling the base .ctor.
8468
8469         * anonymous.cs: Merged back from the new anonymous methods branch.
8470         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8471
8472         * expression.cs (ParameterReference.DoResolveBase): Create a
8473         "normal" ScopeInfo when capturing parameters rather than using the
8474         root scope; this makes things work with anonymous methods having
8475         parameters.
8476
8477         * statement.cs
8478         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8479
8480 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8481
8482         A fix for bug #79987
8483         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8484         check to a base class.
8485         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8486         only when assembly has missing attribute.
8487         * report.cs: Update.
8488
8489 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8490
8491         * cs-tokenizer.cs: Merged with gmcs version.
8492
8493 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8494
8495         * cs-tokenizer.cs,
8496         * cs-parser.jay: Better error message when partial keyword is misplaced.
8497
8498 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8499
8500         A fix for bug #79810
8501         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8502         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8503         a RuntimeWrappedException by default.
8504
8505 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8506
8507         A fix for bug #79843
8508         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8509         implementation.
8510         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8511
8512 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8513
8514         * driver.cs, namespace.cs: Uses faster IndexOf version.
8515
8516 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8517
8518         A fix for bug #79941
8519         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8520         operators.
8521         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8522         even if internal name is different.
8523         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8524         (UserDefinedConversion): Simplified as the operators cannot be internal.
8525         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8526         conversions.
8527         (MethodLookup): Replaced EmitContext with parentType.
8528         * expression.cs: Updated.
8529
8530 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8531
8532         * driver.cs (BadAssembly): Handle all the ugliness of
8533         DefineDynamicAssembly.
8534
8535 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8536
8537         Address parts of #58244 -- most of what's left is in the runtime
8538         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8539         CS1509 error checks, and handle them for all assembly loads, not
8540         just the first invocation.
8541         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8542         * codegen.cs (AssemblyClass.AddModule): ... here.
8543
8544 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8545
8546         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8547         IEnumerable<T> is ambiguous.
8548
8549 2006-10-31  Marek Safar  <marek.safar@gmail.com>
8550
8551         A fix for bug #67689
8552         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
8553         GetEnumerator is ambiguous.
8554
8555         * report.cs: Add new warning.
8556
8557 2006-10-29  Marek Safar  <marek.safar@gmail.com>
8558
8559         A fix for bug #78602
8560         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8561         to protected member can be nested type.
8562
8563 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8564
8565         A fix for bug #78965
8566         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8567         to protected member must derive from current type.
8568
8569 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8570
8571         assign.cs: Reuses error method.
8572
8573         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
8574         instead of type for constants.
8575         (Expression.Error_ValueAssignment): Common error method.
8576
8577         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
8578         for any assignment.
8579
8580 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8581
8582         A fix for bug #79081
8583         * expression.cs (MemberAccess.DoResolve): Check nested type
8584         accessibility.
8585
8586 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
8587
8588         * doc.cs : nested delegates were not handled. Fixed bug #79754.
8589
8590 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8591
8592         A fix for bug #76591
8593         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
8594
8595 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8596
8597         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
8598         type forwarder of the same type multiple times.
8599
8600 2006-10-26  Raja R Harinath  <rharinath@novell.com>
8601
8602         Fix #78820
8603         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
8604         instance as an rvalue, even when we later resolve as an lvalue.
8605
8606 2006-10-25  Martin Baulig  <martin@ximian.com>
8607
8608         * anonymous.cs: Fix #79673.
8609
8610 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
8611
8612         A fix for bug #79666
8613         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
8614         ignored when is optimized (= default value) as its value is already set.
8615
8616 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8617
8618         A fix for bug #79724
8619         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
8620         TypeContainer for type lookup.
8621
8622 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8623
8624         A fix for bug #79231
8625         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
8626         * expression.cs (OverloadResolve): Always convert type name for
8627         an error message.
8628         (ResolveNamespaceOrType): Don't confuse a nested type with any 
8629         other member.
8630
8631 2006-10-18  Martin Baulig <martin@ximian.com>
8632
8633         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
8634
8635 2006-10-17  Miguel de Icaza  <miguel@novell.com>
8636
8637         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
8638         an int32, but requesting an int64 from the conversion
8639
8640 2006-10-12  Martin Baulig  <martin@ximian.com>
8641
8642         * anonymous.cs
8643         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
8644         
8645 2006-10-12  Martin Baulig  <martin@ximian.com>
8646
8647         * statement.cs
8648         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
8649
8650 2006-10-11  Miguel de Icaza  <miguel@novell.com>
8651
8652         * convert.cs: Remove broken code: I was doing the "Existance"
8653         tests for Implicit conversions.
8654
8655 2006-10-10  Miguel de Icaza  <miguel@novell.com>
8656
8657         * convert.cs: Added one missing case in
8658         ImplicitStandardConversionExists uint64 to intptr.
8659
8660         Fixes #59800
8661         
8662         * typemanager.cs (uintptr_type): another core known type.   
8663
8664         * ecore.cs (OperatorCast): routine used to do cast operations that
8665         depend on op_Explicit.  We could change some of the Decimal
8666         conversions to use this.
8667
8668         This one has a probe mechanism that checks both types for an op_
8669         which it coudl be used to eliminate two classes: CastToDecimal
8670         and CastFromDecimal.
8671
8672         * convert.cs: Implement the conversions documented in #59800
8673         
8674 2006-10-10  Martin Baulig  <martin@ximian.com>
8675
8676         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
8677         before RootScope.ResolveMembers().
8678
8679         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
8680         `CurrentType' if appropriate.
8681
8682 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
8683
8684         A fix for bug #78568
8685         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
8686         when contains binary operators.
8687         * cs-parser.jay: Updated.
8688
8689 2006-10-09  Martin Baulig  <martin@ximian.com>
8690
8691         * delegate.cs
8692         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
8693         moved that into Define() and also do the other type parameter
8694         checks there.  Fixes #79094.  Added gtest-292.cs.
8695
8696         * expression.cs
8697         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
8698         since that doesn't include type parameters; don't use `Ldelema'
8699         for type parameters.  Fixes #78980.  Added gtest-293.cs.
8700
8701 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
8702
8703         A fix for #77796
8704         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
8705         conversion is allowed.
8706
8707 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8708
8709         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
8710         error reporting when no error occurs.
8711
8712 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8713
8714         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
8715         does not exist.
8716
8717 2006-10-06  Raja R Harinath  <rharinath@novell.com>
8718
8719         Fix #79584
8720         * class.cs (DefineTypeBuilder): Check circular dependencies before
8721         setting the parent of the TypeBuilder.
8722         (CheckRecursiveDefinition): Don't use 'BaseType', since
8723         it may not be valid until after DefineTypeBuilder.  Use
8724         'base_type' instead.
8725
8726 2006-10-04  Martin Baulig  <martin@ximian.com>
8727
8728         Merged the Anonymous Methods patch.
8729
8730         * anonymous.cs, iterators.cs: The new anonymous methods code.
8731
8732         * statement.cs (Variable): New public abstract class.
8733         (LocalInfo.Variable): New public property.
8734         (LocalInfo.ResolveVariable): New public method.
8735         (Block.Flags): Add `IsIterator'.
8736         (Block.AddVariable): Improved the CS0136 check.
8737         (Block.AnonymousChildren): New public property.
8738         (Block.AddAnonymousChild): New public method.
8739         (ToplevelBlock): Update to use the new anonymous method framework.
8740         (ToplevelBlock.ctor): `container' is now a `Block' and not a
8741         `ToplevelBlock'; this is required to correctly implement the
8742         CS0136 check.
8743         (Fixed, Using): Use `TemporaryVariable' instead of directly
8744         creating the `LocalBuilder'.
8745
8746         * parameter.cs (Parameter.ResolveVariable): New public method.
8747         (Parameters.ResolveVariable): Likewise.
8748
8749         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
8750
8751         * class.cs (TypeContainer): Replaced the `iterators' list and
8752         corresponding methods with a list of `CompilerGeneratedClass'es.
8753         (TypeContainer.ResolveMembers): New public method.
8754         (Method): `IIteratorContainer' has been replaced by
8755         `IAnonymousHost'.
8756
8757         * expression.cs (VariableReference): New public abstract base
8758         class for `LocalVariableReference', `ParameterReference' and
8759         `This'.
8760
8761         * codegen.cs (EmitContext): Removed `capture_context',
8762         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
8763         (EmitContext.EmitThis): Removed.
8764
8765         * cs-parser.jay: Replace `iterator_container' with
8766         `anonymous_host'.       
8767
8768 2006-10-04  Martin Baulig  <martin@ximian.com>
8769
8770         * generic.cs (GenericMethod): Don't make this abstract.
8771         (Constraints.Clone): Added dummy implementation.
8772
8773 2006-10-04  Raja R Harinath  <harinath@gmail.com>
8774
8775         Fix #79577
8776         * namespace.cs (LookForAnyGenericType): Avoid nullref on
8777         'declspaces'.  Avoid allocating arrays willy-nilly.
8778
8779         Fix #79553
8780         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
8781         cases out of the switch.
8782
8783 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8784
8785         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
8786         message when non-generic type is used with the type arguments.
8787         * expression.cs: Updated.
8788
8789 2006-09-28  Raja R Harinath  <rharinath@novell.com>
8790
8791         Fix #79013
8792         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
8793         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8794         Change semantics slightly.  Don't insist on having only one
8795         temporary EmptyExpression -- just throttle the creation of new ones.
8796
8797         Fix #79451
8798         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
8799         non-interfaces too.  If no methods are found, don't try to create
8800         a MethodGroupExpr.
8801
8802 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8803
8804         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
8805         generic type.
8806
8807         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
8808         us produce better error message.
8809
8810 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
8811
8812         * expression.cs (Binary.ResolveOperator): Warn about a side effect
8813         of the `|' operator.
8814
8815         * report.cs: A new warning added.
8816
8817 2006-09-27  Martin Baulig  <martin@ximian.com>
8818
8819         * generic.cs (GenericMethod): Don't make this abstract.
8820
8821 2006-09-27  Martin Baulig  <martin@ximian.com>
8822
8823         * report.cs
8824         (InternalErrorException): Added overloaded ctor taking a params array.
8825
8826 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
8827
8828         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
8829         Fixed the cases when same error was reported twice.
8830
8831         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
8832         now report symbol information.
8833
8834 2006-09-25  Martin Baulig  <martin@ximian.com>
8835
8836         * class.cs: Completely unified with the gmcs version.
8837
8838 2006-09-25  Martin Baulig  <martin@ximian.com>
8839
8840         * typemanager.cs (TypeManager.IsNullableType): New public function.
8841         (TypeManager.IsNullableTypeOf): Likewise.
8842         (TypeManager.IsNullableValueType): Likewise.
8843
8844         * class.cs (MethodCore): Added the `GenericMethod' argument from
8845         gmcs and also unified all classes derived from `MethodCore' with gmcs.
8846
8847 2006-09-24  Raja R Harinath  <harinath@gmail.com>
8848
8849         * convert.cs: Unify with gmcs version.
8850
8851 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8852
8853         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
8854         verify them as well.
8855
8856         * report.cs: New warning.
8857
8858 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8859
8860         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
8861         for anonymous block with out argument.
8862
8863 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8864
8865         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
8866         not used private events only.
8867
8868 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
8869
8870         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
8871
8872         * const.cs (Const.Define): Check for constant type.
8873         (Const.IsConstantTypeValid): Looks for valid constant types.
8874
8875         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
8876
8877         * ecore.cs (EmptyConstantCast): New common class for all constant based
8878         EmptyCast(s).
8879
8880         * expression.cs (Is.DoResolve): Handle null constant especially.
8881         (New.DoResolve): Check for new void().
8882         (MemberAccess.DoResolve): Cope with all kind of nulls.
8883
8884         * literal.cs (NullConstant): Uses EmptyConstantCast.
8885         (NullDefault): Based on EmptyConstantCast.
8886         (NullLiteral): Uses EmptyConstantCast.
8887
8888         * statement.cs (Block.ResolveMeta): Check for constant type.
8889
8890 2006-09-22  Martin Baulig  <martin@ximian.com>
8891
8892         * delegate.cs, attribute.cs: Merged with the gmcs versions.
8893
8894 2006-09-22  Raja R Harinath  <rharinath@novell.com>
8895
8896         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
8897         not the null type.
8898
8899         Fix part of #79451
8900         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
8901         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
8902         code slightly.
8903
8904 2006-09-22  Martin Baulig  <martin@ximian.com>
8905
8906         * ecore.cs: Merged with the gmcs version.
8907
8908         * generic.cs (ConstructedType): New dummy class.
8909         (TypeArguments): Don't make this abstract.
8910
8911         * typemanager.cs
8912         (TypeManager.IsGenericTypeDefinition): New method.
8913         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
8914
8915 2006-09-22  Raja R Harinath  <rharinath@novell.com>
8916
8917         * expression.cs (ComposedCast): Check for arrays of TypedReference
8918         before creating the type, not after.
8919
8920 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
8921
8922         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
8923         after ToType change.
8924
8925         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
8926         when constant must be implicitly convertible.
8927
8928         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
8929
8930         * ecore.cs (NullCast): Derives from NullConstant.
8931
8932         * expression.cs (Is.DoResolve): Removed useless variables.
8933         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
8934         (New.Constantify): Add enum support.
8935         (MemberAccess.DoResolve): Add warning when accessing null constant or
8936         variable.
8937
8938         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
8939         property.
8940
8941         * literal.cs (NullConstant): New abstract class with common
8942         functionality for all null specializations.
8943         (NullDefault): Represents default(X) when result can be
8944         reduced to null.
8945         (NullLiteral): Updated.
8946
8947         * report.cs: Add new warning.
8948
8949 2006-09-21  Martin Baulig  <martin@ximian.com>
8950
8951         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
8952
8953 2006-09-21  Martin Baulig  <martin@ximian.com>
8954
8955         * generic.cs (GenericConstraints): New dummy class.
8956         (Constraints): Likewise.
8957         (TypeParameter): Likewise.
8958         (TypeParameterName): Likewise.
8959         (GenericMethod): Likewise.
8960
8961         * typemanager.cs (TypeManager.GetGenericArguments): New method.
8962
8963         * decl.cs: Merged with the gmcs version.
8964
8965 2006-09-21  Raja R Harinath  <rharinath@novell.com>
8966
8967         * generic.cs (TypeParameter): Implement IMemberContainer.
8968         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
8969
8970         * rootcontext.cs: Unify with gmcs version.
8971
8972         * report.cs: Unify with gmcs version.
8973         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
8974         from gmcs/generics.cs.
8975         * generics.cs (TypeParameter): New dummy class.
8976
8977         * support.cs: Unify with gmcs version.
8978
8979 2006-09-20  Raja R Harinath  <rharinath@novell.com>
8980
8981         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
8982         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
8983
8984         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
8985         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
8986         * mcs.exe.sources: Add generic.cs.
8987
8988         * codegen.cs: Unify with gmcs version.
8989
8990         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
8991         (EmitContext): Add GenericDeclContainer implementation.
8992         * decl.cs (MemberCore, DeclSpace): Likewise.
8993         * namespace.cs: Remove #ifdef GMCS_SOURCE.
8994
8995         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
8996         MCS TypeManager has a corresponding dummy method.
8997
8998 2006-09-19  Martin Baulig  <martin@ximian.com>
8999
9000         * expression.cs: Completely merged with the gmcs version.
9001
9002 2006-09-19  Martin Baulig  <martin@ximian.com>
9003
9004         * expression.cs (Invocation): Merged with the gmcs version.
9005         (ArrayAccess.GetStoreOpcode): Likewise.
9006
9007 2006-09-19  Martin Baulig  <martin@ximian.com>
9008
9009         * typemanager.cs
9010         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9011         (TypeManager.IsGenericMethodDefinition): Likewise.
9012
9013 2006-09-19  Martin Baulig  <martin@ximian.com>
9014
9015         * typemanager.cs
9016         (TypeManager.IsEqual): Moved the gmcs implementation here.
9017         (TypeManager.DropGenericTypeArguments): Likewise.
9018         (TypeManager.DropGenericMethodArguments): Likewise.
9019         (TypeManager.GetTypeArguments): Moved here from gmcs.
9020         (TypeManager.HasGenericArguments): Likewise.
9021
9022 2006-09-19  Martin Baulig  <martin@ximian.com>
9023
9024         * expression.cs (Binary): Merged with the gmcs version.
9025
9026 2006-09-19  Martin Baulig  <martin@ximian.com>
9027
9028         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9029
9030 2006-09-19  Martin Baulig  <martin@ximian.com>
9031
9032         * typemanager.cs: Merged with the gmcs version.
9033
9034 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9035
9036         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9037         * driver.cs: Likewise.
9038
9039 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9040
9041         A fix for #79401
9042         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9043         only if parent type is class.
9044         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9045         update.
9046
9047 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9048
9049         * cs-parser.jay,
9050         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9051         keywords are used.
9052         * typemanager.cs(CSharpName): Converts NullType to null.
9053
9054 2006-09-15  Martin Baulig  <martin@ximian.com>
9055
9056         * typemanager.cs
9057         (TypeManager.GetMethodName): Added mcs implementation.
9058         (TypeManager.IsEqual): Likewise.
9059
9060         * ecore.cs
9061         (SimpleName.RemoveGenericArity): Added dummy implementation.
9062
9063         * pending.cs: Merged with the gmcs version.     
9064
9065 2006-09-15  Martin Baulig  <martin@ximian.com>
9066
9067         * statement.cs: Merge with the gmcs version.
9068
9069 2006-09-15  Martin Baulig  <martin@ximian.com>
9070
9071         * statement.cs (Switch): Merge with the gmcs implementation
9072         (without nullables), which is newer.
9073
9074 2006-09-15  Martin Baulig  <martin@ximian.com>
9075
9076         * statement.cs (Block.Variables): Make this public.
9077         (ToplevelBlock.Parameters): Make this a property.
9078         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9079
9080 2006-09-15  Martin Baulig  <martin@ximian.com>
9081
9082         * namespace.cs: Merge with the gmcs version.
9083
9084 2006-09-15  Martin Baulig  <martin@ximian.com>
9085
9086         * decl.cs (MemberName): Minor code cleanups.
9087
9088 2006-09-15  Martin Baulig  <martin@ximian.com>
9089
9090         * parameter.cs: Merge with the gmcs version.
9091
9092 2006-09-15  Martin Baulig  <martin@ximian.com>
9093
9094         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9095         and an error in mcs.
9096
9097 2006-09-15  Martin Baulig  <martin@ximian.com>
9098
9099         * flowanalysis.cs: Merged from GMCS; added the generics code into
9100         a `GMCS_SOURCE' conditional so we can share this file.
9101
9102 2006-09-08  Martin Baulig  <martin@ximian.com>
9103
9104         * typemanager.cs (TypeManager.interlocked_type): New public field.
9105         (TypeManager.int_interlocked_compare-exchange): New public field.
9106         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9107         enumerator types here and call InitGenericCoreTypes().
9108         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9109         after calling InitEnumUnderlyingTypes().
9110
9111         * rootcontext.cs
9112         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9113         `classes_second_stage'. 
9114
9115 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9116
9117         * assign.cs, ecore.cs, expression.cs: Share error message text.
9118         * class.cs (FieldMember.Define): Check for varible of static type.
9119         * driver.cs (LoadAssembly): Uses error output for errors.
9120         * statement.cs: Updated.
9121
9122 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9123
9124         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9125         type instance.
9126
9127 2006-09-07  Martin Baulig  <martin@ximian.com>
9128
9129         * driver.cs
9130         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9131
9132 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9133
9134         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9135         
9136 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9137
9138         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9139         #52019 and #79064, the use of the \uXXXX sequence in source code
9140         to represent unicode characters.
9141
9142 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9143
9144         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9145         support.
9146         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9147
9148 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9149
9150         * assign.cs: Catch attempts to assign to a method groups in += and
9151         report as 1656
9152
9153 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9154
9155         A fix for #79056
9156         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9157
9158 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9159
9160         * class.cs (Method.Define): Issue a warning when generic method looks like
9161         an entry point.
9162         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9163         as well.
9164
9165 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9166  
9167         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9168         looking for ctor.
9169         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9170         search all base interfaces as a member can be ambiguous.
9171         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9172         Constructor member type filter. 
9173         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9174         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9175         reporting for returned memberinfos.
9176         * report.cs: Updated.
9177         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9178         version to work on all runtimes.
9179         (TypeManager.RealMemberLookup): Removed members filtering.
9180
9181 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9182
9183         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9184         (PropertyExpr.EmitAssign): Likewise.
9185         * expression.cs (Indirection.EmitAssign): Likewise.
9186         (LocalVariableReference.EmitAssign): Likewise.
9187         (ParameterReference.EmitAssign): Likewise.
9188         (Invocation.EmitArguments): Likewise.
9189         (ArrayAccess.EmitAssign): Likewise.
9190         (IndexerAccess.EmitAssign): Likewise.
9191         (This.EmitAssign): Likewise.
9192         (ConditionalLogicalOperator.Emit): Likewise.
9193
9194         Fix #79026
9195         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9196         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9197         leave it in after returning it.
9198         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9199
9200 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9201
9202         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9203         message.
9204
9205 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9206
9207         Fix cs0146-3.cs and cs0146-4.cs.
9208         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9209         enclosing types don't depend on the current type.
9210
9211 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9212
9213         Fix #77963
9214         * class.cs (TypeContainer.DoDefineMembers): Use
9215         FindBaseMemberWithSameName on Parent, since we're interested in
9216         whether we hide inherited members or not.
9217         (FindBaseMemberWithSameName): Make slightly more robust.
9218
9219         Fix the non-generic testcase from #77396
9220         * decl.cs (DeclSpace.DeclContainer): Remove override.
9221
9222         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9223         declspaces for doppelgangers too.
9224         (UsingEntry): Implement IResolveContext.
9225         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9226         'this' as the resolve context.
9227         (LocalAliasEntry): Likewise.
9228
9229         Implement parts of #77403
9230         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9231         toplevel declaration space.  Each namespace declaration introduces
9232         a "partial" root declaretion space.
9233         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9234         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9235         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9236         from 'current_namespace.SlaveDeclSpace'.
9237         (namespace_declaration): Likewise.
9238         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9239         check.  It can't happen now.
9240         * decl.cs (DeclSpace.LookupType): Likewise.
9241         * driver.cs (MainDriver): Sanity check.
9242
9243 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9244
9245         * decl.cs (DeclSpace.FindNestedType): Remove.
9246         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9247         LookupTypeContainer to get the container of the nested type.
9248         * class.cs (TypeContainer.FindNestedType): Make non-override.
9249
9250 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9251
9252         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9253         * class.cs (TypeContainer.PartialContainer): ... here.
9254         (TypeContainer.AddBasesForPart): New helper.
9255         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9256         instead.
9257         * cs-parser.jay (current_class): Convert to DeclSpace.
9258         (struct_declaration, interface_declaration, class_declaration):
9259         Use AddBasesForPart instead of .Bases directly.
9260         * const.cs, iterators.cs: Update to changes.
9261
9262 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9263
9264         * class.cs (TypeContainer.AddMemberType): Rename from
9265         AddToTypeContainer.
9266         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9267         (AddTypeContainer): New.  Combine AddClassOrStruct and
9268         AddInterface.
9269         (AddPartial): Update.  Add 'is_partial' argument.
9270         * roottypes.cs: Update to changes.
9271         * cs-parser.jay (push_current_class): New helper for handling
9272         current_container and current_class.
9273         (struct_declaration, interface_declaration, class_declaration):
9274         Use it.
9275
9276 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9277
9278         * roottypes.cs: Rename from tree.cs.
9279
9280         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9281         * tree.cs (Tree, ITreeDump): Remove types.
9282         * rootcontext.cs (tree, Tree): Remove fields.
9283         (root, ToplevelTypes): New.
9284         * *.cs: Update to rename.
9285
9286         * tree.cs (Tree.RecordDecl): Remove.
9287         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9288         namespace here.
9289         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9290
9291 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9292
9293         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9294         DoFlowAnalysis and OmitStructFlowAnalysis here.
9295         (ec.With): Rename from WithUnsafe and generalize.
9296         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9297         (ec.WithFlowAnalyis): New.
9298         * ecore.cs, expression.cs, statement.cs: Update.
9299
9300 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9301
9302         * statement.cs (Block.ResolveMeta): Simplify slightly.
9303
9304         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9305         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9306         check_state to flags.
9307         (CheckState, ConstantCheckState): Update.
9308         (InUnsafe): New read-only property.
9309         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9310         arbitrary flags.
9311         (WithUnsafe): New helper similar to WithCheckState.
9312         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9313         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9314
9315 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9316
9317         Make comparisons use the same IL irrespective of whether they're
9318         in a 'checked' or 'unchecked' context: one of the issues in #78899
9319         * codegen.cs (EmitContext.CheckState): Make read-only property.
9320         (EmitContext.ConstantCheckState): Likewise.
9321         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9322         helper that implement a save/restore stack for CheckState
9323         values.  This is the only way to change check-state.
9324         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9325         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9326         (CheckedExpr.EmitBranchable): New forwarding method.
9327         (UnCheckedExpr): Likewise.
9328         * statement.cs (Block.ResolveMeta): Use WithCheckState.
9329         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
9330         (Checked.Resolve, checked.DoEmit): Likewise.
9331
9332 2006-07-20  Miguel de Icaza  <miguel@novell.com>
9333
9334         * anonymous.cs: Cache the resolved anonymous delegate, and return
9335         this so that the ResolveTopBlock is only triggered once, not
9336         twice.
9337
9338         Currently we trigger ResolvetopBlock twice due to a first pass of
9339         argument check compatibility, and a second pass that does the
9340         actual resolution.   
9341         
9342 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9343
9344         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
9345         modifiers.
9346         * rootcontext.cs (Reset): Add helper_classes.
9347
9348 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9349
9350         A fix for #78860
9351         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
9352         correctly.
9353
9354 2006-07-13  Miguel de Icaza  <miguel@novell.com>
9355
9356         * statement.cs (Lock): Handle expressions of type
9357         TypeManager.null_type specially.  Fixes #78770
9358
9359 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9360
9361         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
9362         to an event.
9363
9364 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9365
9366         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
9367         for accessors as well.
9368         * ecore.cs (EventExpr): Add AccessorTable.
9369
9370 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
9371
9372         A fix for #78738
9373         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
9374         for CS0122 where appropriate.
9375         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
9376         level attributes.
9377         (Filter): Assembly can be null in the case of top level attributes.
9378
9379 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
9380
9381         A fix for #78690
9382
9383         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
9384         is done at global level.
9385
9386 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9387
9388         A fix for #77002, Implemented TypeForwarder support.
9389
9390         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
9391         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
9392         * typemanager.cs (): Add type_forwarder_attr_type.
9393
9394 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9395
9396         * report.cs: Add CS0469 warning.
9397
9398 2006-06-21  Martin Baulig  <martin@ximian.com>
9399
9400         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9401         the `try'-block, so we also report CS0016 etc. there.
9402
9403 2006-06-21  Martin Baulig  <martin@ximian.com>
9404
9405         * delegate.cs
9406         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9407
9408 2006-06-21  Martin Baulig  <martin@ximian.com>
9409
9410         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9411         also report CS1686 for parameters.
9412
9413 2006-06-21  Martin Baulig  <martin@ximian.com>
9414
9415         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9416         instead of an error if the value is not implicitly convertible to
9417         the switch types; fixes #77964.
9418
9419 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9420
9421         Fix #78673
9422         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9423         FieldBuilder is null.
9424
9425         Fix #78662
9426         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9427         'left' and 'right' before error-checking.
9428
9429 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9430
9431         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9432         Fixed bug #78601.
9433         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9434         (FieldExpr.DoResolve): likewise.
9435         (PropertyExpr.InstanceResolve): likewise.
9436         (EventExpr.InstanceResolve): likewise. 
9437
9438 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9439
9440         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9441         attribute applicable tests for attribute argument.
9442
9443 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9444
9445         Fix #78079
9446         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9447         (Binary.OverloadResolve_PredefinedIntegral): New.
9448         (Binary.OverloadResolve_PredefinedFloating): New.
9449         (Binary.OverloadResolve_PredefinedString): New.
9450         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9451         Follow the standard more closely, and treat numeric promotions in
9452         terms of overload resolution.
9453         (Binary.CheckShiftArguments): Simplify.
9454
9455 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9456
9457         * flowanalysis.cs (MyBitVector): Simplify representation.
9458         (MyBitVector.Clone): Avoid allocating BitArray.
9459         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9460         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9461         (*): Update.  Change all references to MyBitVector.And and
9462         MyBitVector.Or to &= and |=.
9463
9464 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9465
9466         Fix cs0231-[34].cs.
9467         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9468         to param arguments too.
9469
9470 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9471
9472         * cs-parser.jay: Catch another parsing form for arglist being
9473         followed by other arguments.  Fixes #78313.
9474
9475 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9476
9477         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9478         checking of out parameters to ...
9479         (FlowBranchingToplevel.Merge): ... here.
9480         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9481         set, propagate the origin upward, and only complain if there was
9482         no other error.
9483         (FlowBranchingException.AddContinueOrigin): Likewise.
9484         (FlowBranchingException.AddReturnOrigin): Likewise.
9485         (FlowBranchingException.AddGotoOrigin): Likewise.       
9486
9487 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9488
9489         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9490         unreachable, skip it.
9491         (FlowBranchingException.Merge): Always propagate jumps, even if
9492         the finally block renders subsequent code unreachable.
9493
9494 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9495
9496         Fix #77601
9497         * statement.cs (Goto.Resolve): Move responsibility for resolving
9498         'goto' to FlowBranching.AddGotoOrigin.
9499         (Goto.SetResolvedTarget): New.  Callback to set the
9500         LabeledStatement that's the target of the goto.
9501         (Goto.DoEmit): Use Leave instead of Br when crossing an
9502         unwind-protect boundary.
9503         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9504         LookupLabel and adjust to new semantics.
9505         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9506         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9507         Goto.SetResolvedTarget to update target.
9508         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9509         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9510         AddBreakOrigin & co.  Delay propagation until ...
9511         (FlowBranchingException.Merge): ... this.
9512
9513         * statement.cs (Block.Resolve): Always depend on flow-branching to
9514         determine unreachability.  Kill workaround that originally emitted
9515         only one statement after an "unreachable" label (see infloop in
9516         test-515.cs).
9517
9518         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9519         This is still "wrong", but anything better would probably need a
9520         multi-pass algorithm.
9521         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9522         usage vector.  Force current usage vector to be reachable, to
9523         optimistically signify backward jumps.
9524         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9525         detected.
9526         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9527         detected, return the original salted-away usage vector instead,
9528         updated with appropriate changes.  Print unreachable warning if
9529         necessary.
9530         * statement.cs (Block.Resolve): Don't print unreachable warning on
9531         a labeled statement.
9532
9533 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9534
9535         * driver.cs: Pass filename without path to AssemblyBuilder's 
9536         AddResourceFile. Fixes bug #78407.
9537
9538 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9539
9540         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9541         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9542         (FlowBranching.MergeChild): Overwrite
9543         reachability information from Labeled branchings too.
9544
9545 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9546
9547         * statement.cs (Goto.Resolve): Merge jump origins here ...
9548         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9549
9550         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
9551         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
9552         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
9553         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
9554         here, ...
9555         * statement.cs (Goto.Resolve): ... not here.
9556         (Goto.Emit): Remove CS1632 check.
9557
9558 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
9559
9560         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
9561         error message.
9562
9563 2006-05-11  Raja R Harinath  <rharinath@novell.com>
9564
9565         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
9566         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
9567         (FlowBranchingException.Label): Likewise.
9568
9569         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
9570         given value.
9571         (MyBitVector.Or): Use it to avoid losing information (Count).
9572         (FlowBranching.MergeOrigins): Likewise.
9573
9574         * flowanalysis.cs (UsageVector.IsDirty): Remove.
9575         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
9576         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
9577         (UsageVector.ToString): Simplify.
9578         (UsageVector.MergeSiblings): Move here from ...
9579         (FlowBranching.Merge): ... here.
9580         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
9581         not a MyBitVector.
9582
9583 2006-05-10  Raja R Harinath  <rharinath@novell.com>
9584
9585         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
9586         null bitvector is treated as all-true.
9587
9588         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
9589         (MyBitVector): Rationalize invariants.  'vector != null' implies
9590         that we have our own copy of the bitvector.  Otherwise,
9591         'InheritsFrom == null' implies all inherited bits are true.
9592
9593 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
9594
9595         * statement.cs (LocalInfo): Add IsConstant.
9596         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
9597         local variable for constants.
9598
9599 2006-05-09  Raja R Harinath  <rharinath@novell.com>
9600
9601         * flowanalysis.cs (MyBitVector.Empty): New.
9602         (MyBitVector): Don't allow InheritedFrom to be null.
9603         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
9604         (UsageVector, FlowBranching): Update to changes.
9605
9606         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
9607         recursion.  The 'Parent == null' condition isn't sufficient for
9608         anonymous methods.
9609         (FlowBranching.AddBreakOrigin): Likewise.
9610         (FlowBranching.AddContinueOrigin): Likewise.
9611         (FlowBranching.AddReturnOrigin): Likewise.
9612         (FlowBranching.StealFinallyClauses): Likewise.
9613         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
9614         (FlowBranching.CheckOutParameters): Likewise.
9615         (FlowBranchingToplevel): Terminate all the above recursions here.
9616         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
9617         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
9618
9619         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
9620         toplevel block.
9621         (FlowBranchingToplevel): New.  Empty for now.
9622         (FlowBranching.MergeTopBlock): Update.
9623         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
9624         branching for the anonymous delegate.
9625         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
9626
9627         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
9628         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
9629         information at the start of the merge.  Reorganize.
9630
9631 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9632
9633         * class.cs (MethodData.Define): Method cannot implement interface accessor.
9634
9635 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9636
9637         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
9638         to newly introduced ctor.
9639
9640         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
9641         message to one place.
9642         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
9643         global namespace.
9644
9645 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9646
9647         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
9648
9649         * ecore.cs (Expression.ResolveAsConstant): Updated.
9650
9651         * statement.cs (ResolveMeta): Updated.
9652
9653 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9654
9655         * cs-parser.jay: __arglist cannot be used in initializer.
9656
9657 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9658
9659         A fix for #77879
9660         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
9661         private types.
9662
9663 2006-05-05  Raja R Harinath  <rharinath@novell.com>
9664
9665         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
9666         (LabeledStatement): Add 'name' parameter.
9667         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
9668         (Block.AddLabel): Update to changes.
9669         * cs-parser.jay (labeled_statement): Likewise.
9670
9671         * flowanalysis.cs (BranchingType.Labeled): New.
9672         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
9673         (FlowBranchingLabeled): New.  Does nothing for now, but will
9674         eventually handle 'goto' flows.
9675         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
9676         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
9677         that's terminated ...
9678         (Block.Resolve): ... here.
9679
9680         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
9681         (UsageVector.MergeFinallyOrigins): Likewise.
9682         (FlowBranching.InTryOrCatch): Likewise.
9683         (FlowBranching.AddFinallyVector): Likewise.
9684         (FlowBranchingException): Update to changes.
9685
9686         Fix #78290
9687         * statement.cs (Return.Resolve): Move error checking to ...
9688         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
9689         (FlowBranchingException): Handle return origins like break and
9690         continue origins.
9691         (FlowBranching.UsageVector.CheckOutParameters): Remove.
9692
9693 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9694
9695         A fix for #76122
9696         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
9697         filter.
9698
9699 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9700
9701         A fix for #77543
9702         * class.cs (MethodData.Define): Do public accessor check only when method
9703         implements an interface.
9704
9705 2006-05-04  Raja R Harinath  <rharinath@novell.com>
9706
9707         Remove special handling of 'break'
9708         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
9709         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
9710         (UsageVector.Break): Remove.
9711         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
9712         reachability.
9713         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
9714
9715         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
9716         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
9717
9718 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9719
9720         A fix for #75726
9721         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
9722         be the interface member.
9723
9724 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9725
9726         A fix for #60069
9727         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
9728         for emitting small (int) values.
9729
9730 2006-05-03  Raja R Harinath  <rharinath@novell.com>
9731
9732         Fix #59427
9733         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
9734         control-flow passes through the 'finally' after merging-in all the
9735         control-flows from 'try' and the 'catch' clauses.
9736
9737         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
9738         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
9739         always true at the only non-recursive entry point.
9740         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
9741         FlowBranchingBreakable.
9742         (FlowBranchingLoop): Remove.
9743         * statement.cs (Return.DoResolve): Update to changes.
9744
9745         Fix #76471, #76665
9746         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
9747         (FlowBranching.CreateBranching): Handle it: create a
9748         FlowBranchingContinuable.
9749         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
9750         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
9751         except that it handles the 'continue' command.
9752         (FlowBranching.UsageVector.MergeOrigins): Rename from
9753         MergeBreakOrigins.
9754         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
9755         except that it overrides AddContinueOrigin.
9756         (FlowBranchingException): Override AddContinueOrigin, similar to
9757         AddBreakOrigin.
9758         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
9759         Create a new branching around the embedded statement.
9760         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
9761         control flow after the embedded statement.
9762         (Continue.Resolve): Move all error checking to AddContinueOrigin.
9763
9764         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
9765         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
9766         FlowBranchingBreakable.
9767         (FlowBranchingSwitch): Remove.
9768
9769         Fix test-503.cs
9770         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
9771         error reporting to ...
9772         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
9773         Rename from 'AddBreakVector'.  Add new location argument.  Return
9774         a bool indicating whether the 'break' crosses an unwind-protect.
9775         (FlowBranchingException.AddBreakOrigin): Add.
9776         (FlowBranchingException.Merge): Propagate 'break's to surrounding
9777         flowbranching after updating with the effects of the 'finally'
9778         clause.
9779         (FlowBranchingBreakable): New common base class for
9780         FlowBranchingLoop and FlowBranchingSwitch.
9781
9782         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
9783         embedded statement.
9784         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
9785
9786 2006-05-02  Raja R Harinath  <rharinath@novell.com>
9787
9788         * statement.cs (Do.Resolve): If the loop is infinite, set the
9789         barrier.
9790         (While.Resolve, For.Resolve): Set a barrier after the embedded
9791         statement.  There's no direct control flow that goes from the end
9792         of the embedded statement to the end of the loop.
9793         * flowanalysis.cs (FlowBranching.Infinite): Remove.
9794         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
9795         above ensure that the reachability is correctly computed.
9796
9797         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
9798         (UsageVector.MergeBreakOrigins): If the current path is
9799         unreachable, treat it as if all parameters/locals are initialized.
9800         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
9801         infinite loops before merging-in break origins.
9802
9803         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
9804         (Reachability.Reachable): Split part into ...
9805         (Reachability.Unreachable): ... this.  Simplify.
9806         (Reachability.IsUnreachable): Use 'Unreachable' instead.
9807
9808         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
9809         (Reachability.SetThrowsSometimes): Likewise.
9810         (FlowBranchingBlock.MergeTopBlock): Don't compare against
9811         TriState.Always, use corresponding property.
9812         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
9813         (Block.Resolve): Likewise.  Remove some redundant checks.
9814
9815 2006-05-02  Raja R Harinath  <harinath@gmail.com>
9816
9817         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
9818         (Reachability.Meet): Don't bother checking AlwaysThrows --
9819         barrier is always set.
9820         (FlowBranchingBlock.Merge): Likewise.
9821
9822 2006-05-01  Raja R Harinath  <harinath@gmail.com>
9823
9824         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
9825         checks for unreachable.
9826
9827 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
9828
9829         A fix for #77980
9830         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
9831
9832         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
9833         whether field is really assigned.
9834
9835 2006-04-30  Raja R Harinath  <harinath@gmail.com>
9836
9837         * flowanalysis.cs (Reachability): Make 4-argument constructor
9838         private.
9839         (Reachability.Meet): Rename from 'And'.  Remove static variant.
9840         (Reachability.Always): Rename from the highly misleading
9841         'Reachability.Never'.
9842         (FlowBranching.Merge): Update to changes.  Mark an impossible
9843         situation with a 'throw'.
9844         (*): Update to changes.
9845
9846 2006-04-29  Raja R Harinath  <harinath@gmail.com>
9847
9848         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
9849         Remove 'Undefined'.
9850         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
9851         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
9852         (*): Update to changes.
9853         * statement.cs: Update to changes.
9854
9855 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
9856
9857         A fix for #78049
9858         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
9859
9860 2006-04-28  Raja R Harinath  <harinath@gmail.com>
9861
9862         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
9863         dummy UsageVector.
9864
9865         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
9866         argument to two arguments: an usage-vector and a bool.  Move call
9867         to FlowBranching.Merge () ...
9868         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
9869
9870         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
9871         handling of loop and switch reachability to ...
9872         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
9873
9874 2006-04-27  Raja R Harinath  <harinath@gmail.com>
9875
9876         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
9877         handling to FlowBranchingLoop.InLoop.
9878         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
9879
9880 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
9881
9882         A fix for #78115
9883         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
9884         anonymous method is allowed from AnonymousContainer here.
9885
9886         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
9887
9888 2006-04-24  Raja R Harinath  <rharinath@novell.com>
9889
9890         Fix #78156
9891         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
9892
9893 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
9894
9895         A fix for #49011.
9896         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
9897         (DoubleConstant.Reduce): Ditto.
9898
9899 2006-04-23  Raja R Harinath  <rharinath@novell.com>
9900
9901         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
9902         Remove 'lvalue_right_side' argument.  Move parts to ...
9903         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
9904         (LocalVariable.DoResolveLValue): ... these.
9905
9906 2006-04-21  Raja R Harinath  <rharinath@novell.com>
9907
9908         Fix cs1655.cs
9909         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
9910         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
9911         (LocalVariableReference.DoResolveBase): Use it to implement new
9912         CS1655 check.
9913         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
9914         (Argument.Resolve): Simplify.  Move CS1510 check ...
9915         * ecore.cs (Expression.ResolveLValue): ... here.
9916         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
9917         (PropertyExpr.DoResolveLValue): Likewise.
9918         (FieldExpr.Report_AssignToReadonly): Likewise.
9919         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
9920         LValueMemberAccess or LValueMemberOutAccess on instance depending
9921         on it.
9922         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
9923         DoResolve as appropriate.
9924
9925 2006-04-20  Raja R Harinath  <rharinath@novell.com>
9926
9927         Fix #75800
9928         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
9929         implicit conversions on 'out' and 'ref' arguments.
9930
9931         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
9932         improve clarity.  Remove dead code.
9933
9934         Fix #66031
9935         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
9936         (Catch.Resolve): Resolve VarBlock if it exists.
9937
9938 2006-04-19  Miguel de Icaza  <miguel@novell.com>
9939
9940         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
9941         twice, this was some residual code, the enumerator was emitted
9942         properly in the two branche of if later.
9943
9944 2006-04-19  Raja R Harinath  <rharinath@novell.com>
9945
9946         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
9947         cast is never an lvalue.
9948         (Cast.DoResolve, Cast.ResolveRest): Combine.
9949         (Argument.Emit): Simplify slightly.  Move 'Expr is
9950         IMemoryLocation' check ...
9951         (Argument.Resolve): ... here.
9952         (Argument.Error_LValueRequired): Remove.  Inline into only user.
9953
9954         Simplifications.  Fix cs0191-2.cs
9955         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
9956         CS1649 and CS1651 to ...
9957         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
9958         the actual selection of the error code and message to a lookup
9959         table.  Add a dummy return value to simplify callsites.
9960         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
9961         readonly fields of other instances of the same type.  Move CS0197
9962         warning from ...
9963         * expression.cs (Argument.Resolve): ... here.  Simplify code.
9964         Ensure that ec.InRefOutArgumentResolving is only set during LValue
9965         resolution of an out or ref argument.  The code simplification
9966         above uses this invariant.
9967
9968 2006-04-18  Raja R Harinath  <rharinath@novell.com>
9969
9970         Possibly fix #77752.  Fix cs1690-[4-7].cs.
9971         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
9972         CheckMarshallByRefAccess.  Drop parameter.
9973         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
9974         warning.
9975         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
9976         InstanceExpression.
9977         * report.cs (AllWarnings): Add CS1690.
9978         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
9979         for ref access too.
9980         (LocalVariableReference.DoResolveBase): Update.
9981
9982 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9983
9984         * class.cs (MethodOrOperator): Moved common parts from method class.
9985         detect obsolete attributes.
9986         (Method.Define): Simplified as it reuses code from base.
9987         (Constructor.ValidAttributeTargets): Fixed issue found during
9988         refactoring.
9989         (Destructor.ValidAttributeTargets): Fixed issue found during
9990         refactoring.
9991         (Operator): Finished refactoring set off by #78020. Operator class is now
9992         ordinary method class.
9993
9994         * anonymous.cs: Updated.
9995
9996         * decl.cs (DeclSpace): Add IsGeneric
9997
9998 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9999
10000         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10001
10002 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10003
10004         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10005         detect obsolete attributes.
10006         (Method.CreateEmitContext): Moved to MethodOrOperator.
10007
10008 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10009
10010         A fix for #78048.
10011         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10012         customized exception to make crash detection easier.
10013         (MethodOrOperator): Started to work on new base class for methods and
10014         operators.
10015         (Method): Derives from MethodOrOperator.
10016         (Constructor.Emit): Emits its own attributes.
10017         (AbstractPropertyEventMethod.Emit): Ditto.
10018         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10019         patch.
10020         (Operator.Emit): It's temporary more tricky than should be.
10021         
10022         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10023
10024         * report.cs (InternalErrorException): Add ctor with inner exception.
10025
10026 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10027
10028         A fix for #76744.
10029         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10030         only not visible.
10031
10032 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10033
10034         A fix for #77916.
10035         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10036         array.
10037
10038 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10039
10040         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10041         attribute is present and Guid not.
10042         (Interface.ApplyAttributeBuilder): Ditto.
10043
10044         * attribute.cs: Add error message.
10045
10046 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10047
10048         A fix for #78020.
10049
10050         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10051         sources (it's composite) so hold them in extra array as they are used in
10052         Emit phase only. It worked in the previous versions by mistake.
10053         (Attribute.Emit): Emit attribute for more owners when exist.
10054
10055         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10056         it has now different behaviour.
10057
10058 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10059
10060         * constant.cs (Constant.IsDefaultInitializer): New method.
10061
10062         * class.cs: Updated.
10063
10064         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10065         re-initialize default values. It saves KBs almost for every assembly.
10066         Thanks Zoltan for the idea.
10067         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10068         (ArrayCreation.DoResolve): Resolve only once.
10069         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10070         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10071
10072 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10073
10074         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10075         From #77961.
10076
10077 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10078
10079         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10080         in an embedded statement too.
10081
10082 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10083
10084         Fix #77958
10085         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10086
10087 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10088
10089         A fix for #77966.
10090
10091         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10092         was not specified.
10093
10094         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10095
10096 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10097
10098         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10099         phase.
10100
10101         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10102         LocalTemporary change.
10103
10104         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10105         TypeContainer.
10106         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10107         initializers optimization.
10108         (ClassOrStruct.TypeAttr): Moved from modifiers.
10109         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10110         (FieldBase.ResolveInitializer): Resolves initializer.
10111         (FieldBase.HasDefaultInitializer): New property.
10112
10113         * cs-parser.jay: Removed message.
10114
10115         * expression.cs (CompilerGeneratedThis): New specialization.
10116
10117         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10118
10119 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10120
10121         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10122
10123 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10124
10125         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10126         be now EnumConstants only.
10127
10128 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10129
10130         * attribute.cs, driver.cs: Reset more caches.
10131
10132 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10133
10134         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10135
10136 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10137
10138         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10139         for easier reuse. Updated all overrides.
10140         (IntegralConstant): New base class for all integral constants.
10141         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10142         of the constant range, report custom error.
10143         (UIntConstant.Reduce): Fixed uint conversion.
10144
10145         * ecore.cs, literal.cs: Reduce updates.
10146
10147 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10148
10149         A fix for #75813.
10150
10151         * class.cs (Constructor.Define): Removed extra if for default ctors.
10152         A patch from Atsushi Enomoto.
10153
10154 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10155
10156         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10157         GetAttributableValue.
10158
10159         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10160         when required.
10161
10162         * convert.cs (ImplicitConversionRequired): Error message moved to
10163         DoubleLiteral.
10164
10165         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10166         automatic implicit conversion of an output value.
10167         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10168
10169         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10170         conversion.
10171         (TypeOf.GetAttributableValue): Add extra handling for object type.
10172
10173         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10174         special error message.
10175
10176 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10177
10178         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10179         InternalCall.
10180         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10181         compatible with MS runtime.
10182
10183 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10184
10185         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10186         attribute arguments here.
10187
10188         * class.cs (Indexer.Define): The check was moved to attribute class.
10189
10190 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10191
10192         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10193         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10194         easier.
10195
10196 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10197
10198         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10199         mcs to keep code differences small.
10200         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10201         * typemanager.cs (parameter_default_value_attribute_type): New.
10202         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10203         CS1908 check.
10204
10205 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10206
10207         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10208
10209 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10210
10211         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10212
10213         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10214         the blocks too.
10215
10216 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10217
10218         * doc-bootstrap.cs : fix build.
10219
10220 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10221
10222         * expression.cs (StringConcat.Append): Issue a warning when empty string
10223         is going to append.
10224
10225 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10226
10227         * assign.cs (CompoundAssign.ResolveSource): Removed.
10228
10229         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10230         clean up.
10231
10232         * class.cs (TypeContainer.FindMethods): Removed.
10233         (TypeContainer.CheckMemberUsage): Made static.
10234
10235         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10236
10237         * constant.cs (CheckRange): Removed unused type argument.
10238         (CheckUnsigned): Removed unused type argument.
10239
10240         * cs-parser.jay: Updated after MemberAccess clean up.
10241         Uses Length for empty string test.
10242
10243         * cs-tokenizer.cs: Uses Length for empty string test.
10244         (IsCastToken): Made static.
10245         (is_hex): Made static.
10246         (real_type_suffix): Made static.
10247
10248         * decl.cs (SetupCache): Made static.
10249         (OnGenerateDocComment): Removed unused ds argument.
10250
10251         * delegate.cs (VerifyDelegate): Removed unused argument.
10252
10253         * doc.cs: Uses Length for empty string test.
10254
10255         * driver.cs: Uses Length for empty string test.
10256
10257         * enum.cs (IsValidEnumType): Made static
10258
10259         * expression.cs (EnumLiftUp): Removed unused argument.
10260         (ResolveMethodGroup): Ditto.
10261         (BetterConversion): Ditto.
10262         (GetVarargsTypes): Ditto.
10263         (UpdateIndices): Ditto.
10264         (ValidateInitializers): Ditto.
10265         (MemberAccess.ctor): Ditto.
10266         (GetIndexersForType): Ditto.
10267
10268         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10269
10270         * iterators.cs: Updated after MemberAccess clean up.
10271
10272         * location.cs: Uses Length for empty string test.
10273
10274         * namespace.cs: Uses Length for empty string test.
10275
10276          * report.cs (CheckWarningCode): Made static.
10277
10278         * statement.cs (LabeledStatement): Removed unused argument.
10279
10280         * typemanager.cs (FilterNone): Removed.
10281
10282 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10283
10284         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10285         obsolete.
10286
10287         * class.cs: Updated.
10288
10289 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10290
10291         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10292
10293 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10294
10295         A fix for #77822.
10296
10297         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10298         reporting, it's more tricky than I thought.
10299
10300 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10301
10302         A fix for #77816.
10303
10304         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10305         host container.
10306         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10307         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10308         Add more error reporting; Fixed issue with params.
10309
10310         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10311
10312         * cs-parser.jay: AnonymousMethod requires host container.
10313
10314         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10315
10316 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10317
10318         * class.cs: Change 'TypeContainer ds' constructor argument to
10319         'DeclSpace parent'.  Some classes were missed below due to
10320         different naming convention.
10321
10322         * class.cs (MemberCore.Parent): Delete.  This makes the
10323         ParentContainer changes below enforceable by the compiler.
10324
10325         Treat pointers to enclosing declaration space as 'DeclSpace', not
10326         'TypeContainer'.
10327         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10328         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
10329
10330         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
10331         of TypeContainer.
10332         (Block.AddThisVariable): Likewise.
10333         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
10334         (AbstractPropertyEventMethod.Emit): Likewise.
10335         (AbstractPropertyEventMethod.EmitMethod): Likewise.
10336         (GetMethod.Define, SetMethod.Define): Likewise.
10337         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
10338         (DelegateMethod.EmitMethod): Likewise.
10339
10340         Fix regression test-partial-13.cs.
10341         Rationalize use of PartialContainer.  Ensure that the partial
10342         class semantics can be tied to type-correctness, i.e., any
10343         violation will cause a compile error.
10344         * class.cs, const.cs: Access all fields that belong to class
10345         TypeContainer via ParentContainer.  Arguments of EmitContexts and
10346         Resolve()-like functions still use 'Parent'.
10347
10348         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
10349         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
10350         (PropertyMethod.CheckModifiers): Remove unused argument.
10351         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
10352         DeclSpace.
10353
10354 2006-03-17  Raja R Harinath  <harinath@gmail.com>
10355
10356         Make semantics of PartialContainer simpler.
10357         * decl.cs (DeclSpace.IsPartial): Remove.
10358         * class.cs (TypeContainer.IsPartial): Likewise.
10359         (TypeContainer..ctor): Set PartialContainer to point to self.
10360         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
10361         (TypeContainer.FindNestedType): Likewise.
10362         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
10363
10364 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
10365
10366         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
10367
10368 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10369
10370         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
10371         classes.
10372
10373 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10374
10375         * class.cs (Operator.Define): An error for base conversion was not
10376         reported correctly.
10377
10378 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
10379
10380         * iterator.cs : yield break is allowed in try statement which has
10381           catch clauses. Fixed bug #77767.
10382
10383 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
10384
10385         A fix for #77593, #77574.
10386
10387         * class.cs (MethodCore.CheckBase): Another if for operator.
10388
10389 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
10390
10391         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
10392         were not resolved
10393
10394         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10395         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10396         conversion test.
10397         
10398         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10399         not needed.
10400
10401         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10402         Updated after another emitcontext usage was clean up. It should help us to
10403         synchronize with gmcs easier.
10404
10405 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10406
10407         A fix for #77353.
10408
10409         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10410         (Event.Define): ditto
10411         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10412
10413         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10414         Removed redundant code and set NewSlot for Invoke method too.
10415
10416         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10417         (Parameters.MergeGenerated): New method. Use this method when you merge
10418         compiler generated argument with user arguments.
10419
10420 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10421
10422         * attribute.cs (ResolveAsTypeTerminal): Removed.
10423
10424         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10425         specialization for predefined types; 30% speed up.
10426         Finally placed obsolete check to right place.
10427         (Expression.ResolveType): Removed.
10428
10429         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10430         Updated after ResolveType was removed.
10431
10432         * expression.cs (Cast.ctor): Check void cast.
10433         (Binary.ResolveAsTypeTerminal): Is never type.
10434         (Conditional.ResolveAsTypeTerminal): Is never type.
10435
10436         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10437
10438 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10439
10440         Fix #77679.
10441         * expression.cs (ParameterReference.DoResolveBase): Change return
10442         type to bool.
10443         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10444         Update.
10445
10446         Fix #77628.
10447         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10448
10449         Fix #77642.
10450         * typemanager.cs (GetFullNameSignature): Don't nullref on
10451         protected accessors.
10452
10453 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10454
10455         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10456         these two separated members to simplify the code.
10457         (Attribute.Resolve): Refactored to use new fields and methods.
10458         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10459         implemented obsolete attribute checking.
10460         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10461         implemented obsolete checking again. It look line never ending quest ;-)
10462         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10463
10464         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10465
10466         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10467
10468         *class.cs (Property.Define): Add RegisterProperty call.
10469
10470         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10471         argument groups (only 2).
10472
10473         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10474         encoding expression to arguments.
10475         (Expression.ExprClassToResolveFlags): Just turned to property.
10476
10477         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10478         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10479         optimized as well as implemented support for zero-length attributes.
10480
10481         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10482         Add caching of PropertyInfo's.
10483
10484 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10485
10486         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10487         error multiple times.
10488
10489 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10490
10491         New partial class implementation.
10492         A fix for #77027, #77029, #77403
10493
10494         * attribute.cs (Attributable): Made attributes protected.
10495
10496         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10497         the replacements of ClassPart and PartialContainer.
10498         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10499         (TypeContainer.AddInterface): Ditto.
10500         (TypeContainer.AddPartial): The main method for partial classes. It checks
10501         for errors and merges ModFlags and attributes. At the end class is added to
10502         partial_parts list.
10503         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10504         required here.
10505         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10506         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10507         from the rest of partial classes.
10508         (TypeContainer.GetClassBases): Simplified.
10509         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10510         DefineType.
10511         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10512         (TypeContainer.HasExplicitLayout): Uses Flags now.
10513         (PartialContainer): Removed.
10514         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10515         (StaticClass): Was merged with Class.
10516         (Class.GetClassBases): class and static class bases are verified here.
10517         (Class.TypeAttr): Added static attributes when class is static.
10518         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10519         (MemberBase): In some cases we need to call parent container for partial
10520         class. It should be eliminated but it's not easy now.
10521
10522         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10523
10524         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10525         partial classed to accumulate class comments.
10526         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10527
10528         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10529
10530         * driver.cs (MainDriver): Tree.GetDecl was removed.
10531
10532         * modifiers.cs (Modifiers): Add partial modifier.
10533
10534         * tree.cs (Tree.decl): Removed.
10535         (RootTypes): Started to use this class more often for root types
10536         specializations.
10537
10538 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10539
10540         A fix for #77615
10541
10542         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10543         external interface does not have an attribute.
10544
10545 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10546
10547         Another prerequisites for new partial classs implementation.
10548         
10549         * attribute.cs (Attribute.Equal): Implemented.
10550         (Attribute.Emit): Changed as attributes can be applied more than twice.
10551         (Attributes.Emit): Check for duplicate attributes here.
10552
10553         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
10554         as a parameter, clean-up.
10555
10556 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10557
10558         A fix for #77485
10559
10560         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
10561         contains obsolete attribute check which can in some cases look for base
10562         type of current class which is not initialized yet.
10563         (TypeContainer.BaseType): Replacement of ptype.
10564
10565         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
10566
10567 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10568
10569         First of prerequisites for new partial classs implemention.
10570         
10571         * attribute.cs (Attributable): Extended by ResolveContext;
10572         Attributes finally have correct context for resolving in all cases.
10573         (AttachTo): Attribute owner is assigned here.
10574
10575         * codegen.cs (IResolveContext): Introduce new interface to hold
10576         all information needed in resolving phase.
10577         (EmitContext): Implements IResolveContext; more clean-up needed here.
10578         
10579         * decl.cs (MemberCore): Implemented IResolveContext.
10580
10581         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
10582         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
10583         parameter.cs, statement.cs, tree.cs, typemanager.cs:
10584         Refactored to use new IResolveContext instead of EmitContext; cleanup
10585
10586 2006-02-06  Miguel de Icaza  <miguel@novell.com>
10587
10588         * codegen.cs (EmitScopeInitFromBlock): check here the
10589         capture_context, there is no need to make two calls to the
10590         EmitContext. 
10591
10592         * anonymous.cs: Add some debugging messages that might help me
10593         track other instances of this problem in the future (the
10594         regression of test 467).
10595
10596         * cs-parser.jay: track the variable block, as we need to initalize
10597         any captured variables declared in this block for the "catch"
10598         portion of the "Try" statement.
10599
10600         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
10601         scope initialization for captured variables. 
10602
10603         Also, move the emit for the variables after the block location has
10604         been marked.
10605
10606 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
10607
10608         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
10609
10610 2006-02-02  Miguel de Icaza  <miguel@novell.com>
10611
10612         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
10613         commit yesterday, the initialization for the roots is necessary.
10614         What is not necessary is the scope activation.
10615
10616 2006-02-02  Raja R Harinath  <rharinath@novell.com>
10617
10618         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
10619         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
10620         CS0206 checks.
10621         (Argument.Resolve): Remove CS0206 checks.
10622
10623 2006-02-01  Miguel de Icaza  <miguel@novell.com>
10624
10625         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
10626         scopes for all the roots, the scopes will now be emitted when the
10627         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
10628
10629         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
10630         code.  This reduces a lot of existing cruft.
10631         
10632         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
10633         that the ScopeInfo is generated as we enter the scope, not at the
10634         time of use, which is what we used to do before.
10635
10636         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
10637         every time a Block is about to be emitted if we have a
10638         CaptureContext. 
10639
10640 2006-02-01  Raja R Harinath  <rharinath@novell.com>
10641
10642         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
10643         (Reset): Update.
10644         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
10645
10646         * typemanager.cs (cons_param_array_attribute): Make private.
10647         (Reset): Set it to null.
10648         (InitCoreHelpers): Don't initialize it.
10649         (ConsParamArrayAttribute): New.  Initialize it as needed.
10650         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
10651
10652 2006-01-31  Miguel de Icaza  <miguel@novell.com>
10653
10654         * expression.cs: There might be errors reported during the
10655         selection of applicable methods.  If there are errors, do not
10656         continue execution as it will lead the compiler to crash.
10657
10658 2006-01-30  Miguel de Icaza  <miguel@novell.com>
10659
10660         * expression.cs: Member access is not allowed on anonymous
10661         methods.  Fixes #77402.
10662
10663 2006-01-30  Raja R Harinath  <rharinath@novell.com>
10664
10665         Fix #77401
10666         * cs-parser.jay (VariableDeclaration): Don't set
10667         current_array_type to null.
10668         (field_declaration, event_declaration, declaration_statement):
10669         Set it to null here.
10670
10671 2006-01-28  Raja R Harinath  <harinath@gmail.com>
10672
10673         * typemanager.cs (GenericParameterPosition): New.
10674         * doc.cs: Use it.
10675
10676 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
10677
10678         * doc.cs : To process "include" elements, first we should create
10679           another list than XmlNodeList, because it could result in node
10680           removal, which could result in that the XmlNodeList gives up
10681           yielding next node.
10682
10683           (Also made code identical to gmcs again.)
10684
10685 2006-01-25  Miguel de Icaza  <miguel@novell.com>
10686
10687         * ecore.cs: Introduce an error report that we were not catching
10688         before, if not silent, we must report the error.  Gonzalo ran into
10689         it.
10690
10691 2006-01-23  Miguel de Icaza  <miguel@novell.com>
10692
10693         A fix for bug: #76957
10694         
10695         * iterators.cs (MoveNextMethod.CreateMethodHost): call
10696         ComputeMethodHost before creating the method, this is a new
10697         requirement. 
10698
10699         * anonymous.cs (AnonymousContainer): Now we track all the scopes
10700         that this method references (RegisterScope).  The actual scope
10701         where the method is hosted is computed with the ComputeMethodHost
10702         before we create the method.
10703
10704         Moved the Deepest routine here.
10705
10706         (AnonymousContainer.ComputeMethodHost): New routine used to
10707         compute the proper ScopeInfo that will host the anonymous method.
10708
10709         (ScopeInfo): Deal with multiple roots.  The problem was that we
10710         did not have a unique root where all ScopeInfos could be hanged
10711         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
10712         of roots.  
10713
10714         Remove AdjustMethodScope which is now computed at the end.  Remove
10715         LinkScope which did a partial link, instead link all ScopeInfos
10716         before code generation from the new "LinkScopes" routine. 
10717
10718         Simplify all the Add* routines as they no longer need to maintain
10719         the tree, they just need to record that they are using variables
10720         from a ScopeInfo.
10721
10722         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
10723         routines to produce the forest of ScopeInfo trees.
10724
10725         * class.cs (TypeContainer.AppendMethod): This is just like
10726         AddMethod, but ensures that an interface implementation method
10727         (IEnumerable.XXX) is not inserted at the beginning of the queue of
10728         methods, but at the end.
10729
10730         We use this functionality to ensure that the generated MoveNext
10731         method in the iterator class is resolved/emitted before the
10732         enumerator methods created.   
10733
10734         This is required because the MoveNext method computes the right
10735         ScopeInfo for the method.  And the other methods will eventually
10736         need to resolve and fetch information computed from the anonymous
10737         method. 
10738
10739 2006-01-21  Raja R Harinath  <harinath@gmail.com>
10740             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
10741
10742         Fix rest of #76995.
10743         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
10744         the 'aliases' hash.
10745         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
10746         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
10747
10748 2006-01-18  Raja R Harinath  <rharinath@novell.com>
10749
10750         Fix #76656, cs0231-2.cs.
10751         * cs-parser.jay (formal_parameter_list): Make error case catch
10752         more issues.
10753         (parenthesized_expression_0): Add CS1026 check.
10754         (invocation_expression): Remove unused { $$ = lexer.Location }.
10755
10756 2006-01-17  Raja R Harinath  <rharinath@novell.com>
10757
10758         Fix #76824.
10759         * cs-parser.jay (statement_expression): Don't list out the
10760         individual statement-expressions.  Convert syntax error into
10761         CS0201 check.
10762
10763 2006-01-16  Raja R Harinath  <rharinath@novell.com>
10764
10765         Fix #76874.
10766         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
10767         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
10768         CheckIntermediateModification.
10769         (FieldExpr.DoResolve): Add new two-argument version that
10770         allows us to resolve the InstanceExpression as an lvalue.
10771         The one-argument variant is now just a wrapper.
10772         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
10773         Resolve the lhs as an lvalue if the it has a value type.
10774         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
10775         from Assign.DoResolve.
10776         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
10777         resolved as an lvalue.
10778         (PropertyExpr.DoResolve): Update.
10779         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
10780         has a value type.  Move CS1612 check here from
10781         CheckIntermediateModification.
10782         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
10783         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
10784         'right_side' of a ResolveLValue on an 'out' argument.
10785         (EmptyExpression.LValueMemberAccess): New.  Used as the
10786         'right_side' of a propagated ResolveLValue on a value type.
10787         (LocalVariableReference.DoResolveBase): Recognize
10788         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
10789         Add CS1654 check.
10790         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
10791         EmptyExpression.Null.
10792
10793 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
10794
10795         * typemanager.cs : added IsGenericParameter(). In mcs it always
10796           return false.
10797         * doc.cs : for generic parameters, use GenericParameterPosition,
10798           not FullName.
10799
10800 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
10801
10802         * expression.cs: Fix Console.WriteLine ((this = x).foo);
10803
10804 2006-01-12  Miguel de Icaza  <miguel@novell.com>
10805
10806         This fixes the problem where we used ldfld instead of ldflda to
10807         load the "THIS" pointer on captured parameters, when THIS is a
10808         value type.  See bug #77205.
10809         
10810         * iterators.cs (CapturedThisReference.Emit): Pass false to
10811         EmitThis (we do not need the address).
10812
10813         * codegen.cs (EmitThis): it needs to know whether we need the
10814         address of `this' or not.  This is used by value types.  
10815
10816         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
10817         every other call passes false.
10818
10819 2006-01-12  Raja R Harinath  <rharinath@novell.com>
10820
10821         Fix #77221.
10822         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
10823         GetOverride.
10824         * expression.cs (Invocation.OverloadResolve): Update.
10825         (Invocation.DoResolve): Avoid double resolution of invocation.
10826
10827 2006-01-11  Raja R Harinath  <rharinath@novell.com>
10828
10829         Fix #77180.
10830         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
10831         unary negation of floating point types as 0-expr; negation cannot
10832         overflow in floating point types.
10833
10834         Fix #77204.
10835         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
10836         on operands of 'void' type.
10837
10838         Fix #77200.
10839         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
10840         and ExclusiveOr for boolean constants too.
10841
10842 2006-01-09  Raja R Harinath  <rharinath@novell.com>
10843
10844         Fix #75636.
10845         * expression.cs (Invocation.OverloadResolve): Replace reflected
10846         override methods with their base virtual methods, rather than
10847         skipping over them.
10848         * typemanager.cs (TypeManager.GetOverride): New.
10849
10850 2006-01-05  Jb Evain  <jbevain@gmail.com>
10851
10852         * class.cs (Property.Define, Indexer.Define): do not tag the
10853         properties as SpecialName | RTSpecialName.
10854
10855 2006-01-04  Miguel de Icaza  <miguel@novell.com>
10856
10857         * class.cs (MethodCore.IsDuplicateImplementation): This method was
10858         doing a low-level comparission of parameter types.  It was lacking
10859         a check for __argslist. 
10860
10861 2005-12-30  Miguel de Icaza  <miguel@novell.com>
10862
10863         * expression.cs (ParameterReference.DoResolveBase): Allow
10864         reference parameters if they are local to this block. 
10865
10866         This allows the ref and out parameters of a delegate to be used in
10867         an anonymous method, for example:
10868
10869         delegate void set (out int x);
10870
10871         set s = delegate (out int x){
10872                 x = 0;
10873         };
10874
10875         This is used by functionality introduced late in the C# language.
10876         
10877         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
10878         method that take ref and out parameters. 
10879
10880         Fixes #77119 which was a late change in the spec.
10881
10882 2005-12-23  Miguel de Icaza  <miguel@novell.com>
10883
10884         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
10885         parent if its the same scope.  Fixes #77060.
10886
10887 2005-12-21  Miguel de Icaza  <miguel@novell.com>
10888
10889         * driver.cs: Report the case of no source files and no -out:
10890         argument provided.
10891
10892 2005-12-20  Raja R Harinath  <rharinath@novell.com>
10893
10894         Fix #77035.
10895         * expression.cs (ComposedCast.GetSignatureForError): Define.
10896
10897 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
10898
10899         Fix #76995
10900
10901         * namespace.cs (NamespaceEntry): Add extern_aliases as a
10902         ListDictionary, to contain the ExternAliasEntry entries (in
10903         addition to the NamespaceEntry.aliases hashtable). This field is
10904         shared between the original entry and its doppelganger (bodyless 
10905         copy of it).
10906         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
10907         extern_aliases field.
10908         (NamespaceEntry.Lookup): Move the IsImplicit check after the
10909         lookup in extern_aliases.
10910
10911 2005-12-16  Raja R Harinath  <rharinath@novell.com>
10912
10913         Fix #77006.
10914         * class.cs (TypeContainer.Mark_HasEquals): New.
10915         (TypeContainer.Mark_HasGetHashCode): New.
10916         (ClassPart): Override them.
10917         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
10918
10919         Fix #77008.
10920         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
10921         'parent' argument to the base constructor.
10922
10923         Remove all mention of TypeContainer from decl.cs.
10924         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
10925         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
10926         (DeclSpace.DeclSpace): Likewise.
10927         (DeclSpace.DefineMembers): Remove unused argument.
10928         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
10929         debugging check -- we don't care if the debug code throws an
10930         InvalidCastException instead of an InternalErrorException.
10931         * class.cs (TypeContainer.DefineMembers): Update to changes.
10932         (TypeContainer.DoDefineMembers): Likewise.
10933         (TypeContainer.GetMethods): Likewise.
10934         (PropertyMember.Define): Likewise.
10935         (MemberBase.Parent): New property that forwards to
10936         MemberCore.Parent, but ensures that we get a TypeContainer.
10937         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
10938         (RootContext.PopulateTypes): Likewise.  Remove special case code
10939         for !RootContext.StdLib: DefineMembers is idempotent.
10940
10941 2005-12-14  Miguel de Icaza  <miguel@novell.com>
10942
10943         * convert.cs (ExplicitConversionCore): Check the return value from
10944         ExplicitConversionCore which can return null on failure.  Fixes #76914
10945
10946 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
10947
10948         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
10949
10950 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
10951
10952         * doc.cs : The search for referenced namespace was insufficient to
10953           get global one as it used to do. Fixed bug #76965.
10954
10955 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
10956
10957         * doc.cs : check name in cref in the last phase that whether it is
10958           namespace or not.
10959
10960 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10961
10962         * cs-tokenizer.cs : reverted the latest change: it somehow broke
10963           Mono.C5.
10964
10965 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10966
10967         * doc.cs : so it turned out that we cannot skip override check for 
10968           interface members. Fixed bug #76954.
10969
10970 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10971
10972         * cs-tokenizer.cs : fixed bug #75984:
10973           - #warning and #error should not be handled when the source line
10974             is disabled.
10975           - #line is not checked strictly when the source line is disabled.
10976           - #define and #undef is on the other hand checked strictly at any
10977             state.
10978
10979 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
10980
10981         * cs-tokenizer.cs : missing Location (actually, filename) in one of
10982           CS1027 report.
10983
10984 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10985
10986         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
10987
10988         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
10989         event initializers.
10990         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
10991         (FieldBase.Initializer): Initializer is now optional.
10992         (EventField.Define): Only event field can have initializer.
10993
10994         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
10995
10996         * const.cs (Const): Reuse initializer.
10997
10998         * cs-parser.jay: Updated after FieldBase changes.
10999         Added current_array_type to simplify array initializers.
11000
11001         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11002
11003         * expression.cs, iterators.cs: Updated.
11004
11005         * namespace.cs (NamespaceEntry): Made UsingFound private.
11006
11007 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11008
11009         * parameterCollection.cs: Obsolete, removed.
11010         * parser.cs: Obsolete, removed.
11011
11012 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11013
11014         Fix #76849.
11015         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11016
11017         * enum.cs (Enum.Define): Set obsolete context here.
11018
11019 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11020
11021         * doc.cs :
11022           - FindDocumentedMember() now expects 1) paramList as null
11023             when "we don't have to check the number of parameters" and
11024             2) Type.EmptyTypes when "there is no arguments".
11025           - Introduced FoundMember struct to hold the exact type which was
11026             used to find the documented member (the above change broke
11027             test-xml-044; it might be better just to use DeclaringType than
11028             what MS does, like this change does, but it depends on usage.)
11029
11030 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11031
11032         * doc.cs : documented member might be from DeclaringType for nested
11033           types. Fixed bug #76782.
11034
11035 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11036
11037         * anonymous.cs: Have the param code handle leaving copies on the
11038         stack etc. Allows anonymous params to take part in the assignment
11039         code (++, +=, etc). Fixes bug #76550
11040
11041         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11042         it down to the anon code.
11043
11044         * iterators.cs: Use dummy var here
11045
11046         * codegen.cs: Handle new vars
11047
11048 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11049
11050         Fix #76849.
11051         * class.cs (MethodData.Define): Set proper Obsolete context.
11052
11053         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11054         obsolete context.
11055         (FieldExpr.DoResolve): Ditto.
11056
11057 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11058
11059         Fix #76849.
11060         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11061         parent is not obsolete.
11062
11063 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11064
11065         * doc.cs : (FindDocumentedMember) find parameterless members first
11066           and get CS0419 in the early stage. Fixed first case of bug #76727.
11067
11068 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11069
11070         Fix #76859.
11071         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11072         no error was reported.
11073
11074         *expression.cs (Binary.DoResolve): left can be null.
11075
11076 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11077
11078         Fix #76783.
11079         * class.cs (MethodData.Emit): Parameters should be labeled first.
11080
11081 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11082
11083         Fix #76761.
11084         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11085
11086 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11087
11088         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11089
11090         * class.cs (MethodCore): Parameter clean up.
11091         (IMethodData): Added ParameterInfo.
11092         (MethodData): Parameter clean up.
11093         (Indexer.Define): Parameter clean up.
11094
11095         * anonymous.cs,
11096         * codegen.cs,
11097         * cs-parser.jay,
11098         * decl.cs,
11099         * doc.cs,
11100         * ecore.cs,
11101         * flowanalysis.cs,
11102         * iterators.cs,
11103         * pending.cs,
11104         * statement.cs,
11105         * typemanager.cs: Parameter clean up.
11106
11107         * delegate.cs (Define): Get rid of duplicated code.
11108
11109         * expression.cs (ParameterReference): Removed useless parameters
11110         and simplified.
11111         (Invocation): Ditto.
11112
11113         * parameter.cs (ParamsParameter): New class, params specialization.
11114         (ArglistParameter): Attemp to separate arglist.
11115         (Parameter): Refactored to be reusable and faster.
11116         (Parameter.Modifier): Made understandable.
11117         (Parameters): Changed to be used as a class for `this' assembly
11118         parameters. Refactored to use new specialized classes.
11119
11120         * support.cs (ParameterData): Added Types property.
11121         (InternalParameters): Deleted.
11122
11123 2005-08-20  Martin Baulig  <martin@ximian.com>
11124
11125         Merging this patch from GMCS to fix #75867.
11126
11127         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11128         scope if we don't already have it.
11129
11130 2005-11-17  Martin Baulig  <martin@ximian.com>
11131
11132         * anonymous.cs
11133         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11134         inherit the scope from our parent.  Fixes #76653.
11135
11136 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11137
11138         * doc.cs : the previous patch does not actually fix the bug.
11139           PropertyInfo override check is now implemented and really fixed it.
11140         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11141
11142 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11143
11144         * doc.cs : apply "override filter" also to properties.
11145           Fixed bug #76730.
11146
11147 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11148
11149         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11150           no need to check overrides. For classes, omit those results from 
11151           interfaces since they must exist in the class. Fixed bug #76726.
11152
11153 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11154
11155         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11156           with different parameters. Fixed the second problem in #76685.
11157
11158 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11159
11160         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11161           get expected 'protected' access in CheckValidFamilyAccess()).
11162           Fixed bug #76692.
11163
11164 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11165
11166         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11167           Fixed bug #76705.  CS1569 was incorrectly commented out.
11168
11169 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11170
11171         * doc.cs : use Invocation.IsOverride() to do real override check.
11172         * expression.cs : made Invocation.IsOverride() internal.
11173
11174 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11175
11176         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11177           TypeBuilder.FindMembers() and filter overriden base members out.
11178           Fixed bug #76990.
11179
11180 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11181
11182         * doc.cs : ref/out parameters are represented as '@' (instead of
11183           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11184
11185 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11186
11187         * doc.cs : when there was no '.' in cref to methods in doc comment,
11188           then parameters were missing in the output. Fixed bug #76691.
11189
11190 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11191
11192         * driver.cs : don't output docs when there is an error.
11193           Fixed bug #76693.
11194
11195 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11196
11197         * doc.cs :
11198           Now it should detect indexers. Fixed primary concern in bug #76685.
11199           Fixed CS0419 message to not show the identical member signature in
11200           the message.
11201
11202 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11203
11204         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11205           instead of Type.FindMembers() since it does not handle events.
11206           Fixed bug #71604.
11207
11208 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11209
11210         * codegen.cs: Fixed typo (speficied -> specified).
11211
11212 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11213
11214         Fix #76369.
11215         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11216
11217 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11218
11219         * attribute.cs: Changed error message.
11220
11221         * cs-tokenizer.cs: One more check.
11222
11223 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11224
11225         * statement.cs (Block.Resolve): Ignore empty statement.
11226
11227 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11228
11229         * report.cs: Made error/warning methods more strict to avoid
11230         their misuse.
11231
11232         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11233         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11234         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11235         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11236
11237 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11238
11239         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11240         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11241
11242         * class.cs (TypeContainer.IsComImport): New property.
11243         (Constructor.Define): Create proper ctor for ComImport types.
11244
11245         * expression.cs (New.CheckComImport): Fixed.
11246
11247 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11248
11249         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11250         that a parameter has been captured does not mean that we do not
11251         have to do the rest of the processing.  This fixes the second part
11252         of #76592.  If there was another anonymous method capturing
11253         values in the past, the Scope would never be set for the second
11254         method that captured the same parameter.
11255
11256         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11257         properly manipulate the stack.   Second part of fix for #76592.
11258
11259         * expression.cs (New): Add support for invoking "new" on
11260         interfaces that have been flagged with the ComImport attribute and
11261         the CoClass.  Fixes #76637 
11262
11263         * statement.cs (Try.DoEmit): When a variable is captured, do not
11264         try to emit the vi.LocalBuilder variable as it has been captured.
11265         Create a temporary variable and store the results on the
11266         FieldBuilder.  Fixes #76642
11267
11268 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11269
11270         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11271
11272         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11273
11274         * expression.cs (Binary.DoResolve): Added && optimalization.
11275     
11276         * typemanager.cs (AddUserType): Removed useless argument.
11277
11278 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11279
11280         * statement.cs (Block.variables): Uses ListDictionary.
11281
11282 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11283
11284         Fix #75969.
11285         * class.cs (PartialContainer.EmitType): Customized to emit
11286         security attributes.
11287         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11288         for partial classes.
11289
11290 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11291
11292         Fix #76599.
11293         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11294         access has to be fixed.
11295         
11296         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11297
11298 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11299
11300         Fix #76590.
11301         * ecore.cs (NullCast.Reduce): Implemented.
11302
11303         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11304         constant type.
11305         
11306         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11307         properly.
11308         (Foreach.Resolve): Catch null properly.
11309
11310 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11311  
11312         * cs-tokenizer.cs: Warning text fix.
11313
11314         * driver.cs: AllWarningNumbers exposed on public interface.
11315
11316         * report.cs (): Reviewed warning numbers.
11317         (IsValidWarning): Use binary search.
11318
11319 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11320  
11321         * driver.cs: Implemeted resource visibility.
11322         (Resources): New class for code sharing between /res: and
11323         /linkres:
11324  
11325 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11326
11327         Fix #76568.
11328         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
11329         folding.
11330         
11331         * convert (Convert.ImplicitReferenceConversion): NullCast holds
11332         contants only.
11333         
11334         * ecore.cs (NullCast): Child is contant only.
11335         
11336         * literal.cs (NullLiteral.Reduce): null can be converted to any
11337         reference type.
11338
11339 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
11340
11341         * driver.cs: Use Encoding.Default as default code page instead
11342           of ISO-28591.
11343
11344 2005-10-27  Raja R Harinath  <rharinath@novell.com>
11345
11346         Fix #76085.
11347         * expression.cs (Invocation.Error_InvalidArguments): Handle
11348         __arglist parameters.
11349         (Invocation.VerifyArgumentsCompat): Likewise.
11350         * support.cs (ReflectionParameters.GetSignatureForError): Print
11351         __arglist parameters.
11352         (InternalParamters.GetSignatureForError): Likewise.
11353         * parameter.cs (Parameters.GetSignatureForError): Likewise.
11354
11355 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
11356
11357         * attribute.cs (GetPropertyValue): Made public.
11358
11359         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
11360         Resolve.
11361         Add new property WrapNonExceptionThrows to handle 2.0 assembly
11362         attribute.
11363         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
11364         is not defined.
11365         
11366         * driver.cs: Reflect method name change.
11367         
11368         * statement.cs (Try.Resolve): Warn when try has both general
11369         exception handlers.
11370         
11371         * typemanager.cs: runtime_compatibility_attr_type new predefined
11372         type.
11373
11374 2005-10-26  Raja R Harinath  <harinath@gmail.com>
11375
11376         Fix #76419.
11377         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
11378         treat it as an empty parameter list.
11379
11380 2005-10-26  Raja R Harinath  <rharinath@novell.com>
11381
11382         Fix #76271.     
11383         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
11384         ResolveAsTypeStep silent.
11385         * statement.cs (Block.AddConstant): Mark block as used.
11386         (Block.ResolveMeta): Avoid piling on error messages
11387         if a constant initializer resolution fails.
11388
11389 2005-10-25  Raja R Harinath  <rharinath@novell.com>
11390
11391         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
11392         Remove.
11393         (NamespaceEntry.VerifyAllUsing): New.
11394         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11395         behaviour.  Delegates actual resolution of alias to ...
11396         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11397         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11398         Update.
11399         * driver.cs (Driver.MainDriver): Update.
11400         
11401         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11402         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11403         property.
11404         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11405         Remove.
11406         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11407         RootNamespace.DefineNamespacesForAll.
11408
11409 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11410
11411         * typemanager.cs (assemblies, external_aliases, modules)
11412         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11413         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11414         overhead.  Move resposibility ...
11415         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11416         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11417
11418 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11419
11420         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11421         cached_namespaces.  Improve usage.
11422         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11423         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11424         Move from GlobalRootNamespace and simplify.
11425         (RootNamespace.Global): Make instance variable.
11426         (RootNamespace.RootNamespace): Add "alias name" parameter.
11427         (GlobalRootNamespace): Simplify drastically.
11428         (Namespace.Lookup): Don't use GetNamespace.
11429         * typemanager.cs (GetRootNamespace): Rename from
11430         ComputeNamespaceForAlias.
11431         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11432
11433 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11434
11435         * anonymous.cs (AnonymousContainer): Don't crash when container
11436         doesn't exist.
11437
11438 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11439
11440         * expression.cs (Binary.DoResolve): Warn when comparing same
11441         values.
11442
11443 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11444
11445         Fix #76486.
11446         * expression.cs (Binary.DoResolve): It looks like there are no
11447         convetsion rules in enum context.
11448
11449 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11450
11451         Add support for extern alias qualifiers.
11452         * typemanager.cs: Move some LookupTypeReflection code
11453         to namespace.cs, to have cleaner code. Added some methods
11454         to help us keep track of the extern aliased references.
11455         * driver.cs: Add suport for extern alias assemblies on command
11456         line and check for their warnings/errors. Also keep track of the
11457         extern aliased assemblies.
11458         * namespace.cs: Move the global functionality of Namespace
11459         to GlobalRootNamespace/RootNamespace. Now the global namespace
11460         is GlobalRootNamespace.Globa. Also the code moved from 
11461         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11462         Finally added LocalAliasEntry (AliasEntry before) and
11463         ExternAliasEntry, to handle alias statements.
11464         * cs-parser.jay: Add support in the grammar for extern alias
11465         statement.
11466         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11467         Update callings to Namespace (now in GlobalRootNamespace).
11468
11469 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11470
11471         Fix #76371.
11472         * class.cs (TypeContainer.DefineType): Move updating of
11473         topological sort earlier in the code.
11474         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11475
11476 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11477
11478         Fix #76273.
11479         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11480         
11481         * constant.cs (Constant.TryReduce): Moved from Cast class.
11482         (Reduce): Made little bit more OO and fixed missing conversions.
11483         
11484         * ecore.cs (Reduce): Implemented.
11485         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11486         
11487         * literal.cs (Reduce): Implemented.
11488         
11489         * class.cs: Reverted Miguel's wrong commit.
11490
11491 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11492
11493         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11494
11495 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11496
11497         * cs-parser.jay, expression.cs : CS0214 was missing error location
11498           for constants. Fixed bug #76404.
11499
11500 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11501
11502         Fix #76370.
11503         * convert.cs (ExplicitConversionCore): Fixed object->enum
11504         conversion.
11505
11506 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11507
11508         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11509         InstanceExpression.
11510         (PropertyExpr.EmitCall): Likewise.
11511         * expression.cs (Invocation.EmitArguments): Handle case where
11512         arguments == null.
11513         (Invocation.EmitCall): Avoid allocating temporary variable if
11514         there are no arguments.
11515
11516 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11517
11518         Fix #76323.
11519         * convert.cs (ImplicitConversionStandard): Move conversion of
11520         void* to arbitrary pointer types ...
11521         (ExplicitConversionStandard): .. here.
11522         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11523         error to always print typenames.
11524
11525 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11526
11527         * convert.cs (GetConversionOperator): Rename from
11528         GetConversionOperators.  Move operator selection code from ...
11529         (UserDefinedConversion): ... here.
11530
11531 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11532
11533         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11534         conversion.
11535
11536 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11537
11538         * assign.cs (Assign.DoResolve): Error method changed.
11539
11540         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11541         
11542         * const.cs (ResolveValue): Reset in_transit immediately.
11543         
11544         * constant.cs: Error method changed.
11545         
11546         * convert.cs: Removed useless location parameter.
11547         (ExplicitNumericConversion): Don't do double enum check.
11548         (ExplicitConversionCore): Renamed from ExplicitConversion.
11549         (ExplicitUnsafe): Extracted from ExplicitConversion.
11550         (ExplicitConversion): Uses for error reporting.
11551         
11552         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
11553         error messages.
11554         (ResolveBoolean): Uses common error method.
11555         (CastToDecimal): Get rid of ec.
11556         (CastFromDecimal): Optimized.
11557         (ConvCast): Get rid of ec.
11558         
11559         * enum.cs (ResolveValue): Reset in_transit immediately.
11560         (Emit): Return after first error.
11561         
11562         * expression.cs: Convert changes.
11563         
11564         * literal.cs: Error method changed.
11565         
11566         * statement.cs: Error method changed.
11567
11568 2005-10-03  Raja R Harinath  <rharinath@novell.com>
11569
11570         * support.cs (SeekableStreamReader.Position): Don't error out when
11571         the requested position is just beyond the end of the current
11572         buffered data.
11573
11574 2005-09-28  Raja R Harinath  <rharinath@novell.com>
11575
11576         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
11577         try to keep in sync with the byte count of the underlying Stream.
11578         However, this limits us to a window size of 2048 characters: i.e.,
11579         the maximum lookahead of our lexer/parser can be 2048 characters.
11580
11581 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
11582
11583         Fix #76255.
11584         * driver.cs: Fix compilation files with full root path.
11585
11586 2005-09-25  Miguel de Icaza  <miguel@novell.com>
11587
11588         * report.cs (SymbolRelatedToPreviousError): Format the output so
11589         it does not use an open parenthesis that is never closed. 
11590
11591         * driver.cs: Follow coding guidelines
11592
11593 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11594
11595         Fix #72930.
11596         * const.cs (Const.ResolveValue): Check for assigning non-null
11597         value to reference type.
11598
11599 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11600
11601         * anonymous.cs: Implemented ExprClassName.
11602         
11603         * assign.cs (Assign.DoResolve): Don't chrash when type is not
11604         delegate.
11605         
11606         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
11607         check.
11608         
11609         * class.cs (StaticClass.DefineContainerMembers): Report protected
11610         members as error.
11611         
11612         * codegen.cs: if(ed) PRODUCTION.
11613         
11614         * convert.cs (Error_CannotImplicitConversion): Better error
11615         distinction.
11616         
11617         * cs-parser.jay: More error checks.
11618         
11619         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
11620         
11621         * driver.cs (CSCParseOption): Enabled wrong option check.
11622         
11623         * ecore.cs (Expression.ExprClassName): Turned to property.
11624         (MemberExpr.CheckIntermediateModification): For checking boxed
11625         value types     modification.
11626         
11627         * statement.cs (Fixed.Resolve): Expression type must be
11628         convertible to fixed type.
11629         (CollectionForeach.GetEnumeratorFilter,TryType):
11630         Small refactoring for easier error checking.
11631
11632 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
11633
11634         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
11635         attributes.
11636         
11637         * class.cs (GeneratedBaseInitializer): New class for customization
11638         compiler generated initializers.
11639         (MemberBase.DoDefine): Check Obsolete attribute here.
11640         (FieldMember.DoDefine): Ditto.
11641         
11642         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
11643         constants.
11644         
11645         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
11646         (MemberCore.GetObsoleteAttribute): Removed argument.
11647         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
11648         (MemberCore.CheckObsoleteType): New helper.
11649         
11650         * delegate.cs,
11651         * enum.cs,
11652         * statement.cs: Updates after MemberCore changes.
11653         
11654         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
11655         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
11656         
11657         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
11658         obsolete attribute for compiler construct.
11659         (As.DoResolve): Cache result.
11660         
11661         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
11662
11663 2005-09-26  Raja R Harinath  <rharinath@novell.com>
11664
11665         Fix #76133.
11666         * expression.cs (This.VerifyFixed): In a value type T, the type of
11667         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
11668         value type R, 'this' is treated as a value parameter.
11669
11670 2005-09-22  Miguel de Icaza  <miguel@novell.com>
11671
11672         * statement.cs (Lock): Use the TemporaryVariable class instead of
11673         manually using local variables as those do not work when variables
11674         are captured.
11675
11676         * ecore.cs: Moved the TemporaryVariable class from being a nested
11677         class inside Foreach to be a public class that can be employed in
11678         other places. 
11679
11680 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
11681
11682         * cs-parser.jay: interface_accessors replaced by
11683         accessor_declarations.
11684
11685         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
11686         location.
11687         
11688         * statement.cs (GotoCase.Resolve): Convert null constant to
11689         null case.
11690         (SwitchLabel.ResolveAndReduce): Ditto.
11691         (SwitchLabel.NullStringCase): Custom null stamp.
11692         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
11693         
11694         typemanager.cs (CSharpSignature): Don't skip first argument
11695         for full names.
11696
11697 2005-09-18  Miguel de Icaza  <miguel@novell.com>
11698
11699         * driver.cs: Set InEmacs based on the environment variable EMACS. 
11700
11701         * location.cs (InEmacs): in this mode, do not report column
11702         location as it confuses Emacs.
11703
11704 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
11705
11706         * cfold.cs, constant.cs, convert.cs, ecore.cs,
11707         expression.cs, iterators.cs, literal.cs: Store constants and
11708         literals location.
11709         
11710         * class.cs (MemberBase.ShortName): Pass location.
11711         
11712         * cs-parser.jay: Some location fixes.
11713         
11714         * ecore.cs (Expression.Location): Made virtual.
11715
11716 2005-09-05  Miguel de Icaza  <miguel@novell.com>
11717
11718         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
11719         if the underlying types are the same, otherwise we need to produce
11720         code that will do the proper cast.
11721
11722         This was exposed by Marek's constant rewrite which produced
11723         invalid code for the call site:
11724
11725         enum X : long { a }
11726         void Method (X v) {}
11727
11728         Method ((X) 5)
11729
11730         This fixes test-49.cs
11731
11732 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11733
11734         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
11735           Type/Object should be allowed as well. Fixed bug #75968.
11736
11737 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11738
11739         * expression.cs : (Binary.DoResolve): when one is enum constant and
11740           another is constant 0, then return enum one *as enum type*.
11741           Fixed bug 74846.
11742
11743 2005-09-02  Raja R Harinath  <rharinath@novell.com>
11744
11745         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
11746         internal.
11747
11748         Fix #75941.
11749         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
11750         flow-branching for LocalVariableReferences in case we were invoked
11751         from a MemberAccess.
11752         * expression.cs (LocalVariableReference.VerifyAssigned): New.
11753         Carved out of ...
11754         (LocalVariableReference.DoResolveBase): ... this.
11755         (MemberAccess.Resolve): Do the check that was disabled during
11756         SimpleNameResolve.
11757
11758 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11759
11760         * class.cs :
11761           (PartialContainer.Create): check abstract/sealed/static strictly
11762           but abstract/sealed can exist only at one side. Fixed bug #75883.
11763
11764 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
11765
11766         Fix #75945.
11767         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
11768         specified, don't default to UnmanagedType.I4.
11769
11770 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11771
11772         * expression.cs : conditional operator should check possibly
11773           incorrect assign expression. Fixed bug #75946.
11774
11775 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11776
11777         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
11778           Reverting the change. gmcs is much complex than mcs on this matter.
11779
11780 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11781
11782         * cs-tokenizer.cs : To read another token ahead of the actual 
11783           consumption, use new SavedToken and cache token instead of moving
11784           back the stream with SeekableStreamReader (it seemed problematic).
11785         * cs-parser.jay,
11786           driver.cs : Thus use StreamReader directly.
11787         * support.cs : Thus removed SeekableStreamReader.
11788
11789 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11790
11791         Fix #75934.
11792         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
11793         (ScopeInfo.EmitScopeType): Use it to construct field names from
11794         names of captured locals.
11795
11796         Fix #75929.
11797         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
11798         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
11799         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
11800         (ExplicitConversion): Remove enum cases already handled by
11801         implicit conversion.  Move implicit conversion check to the beginning.
11802         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
11803         * expression.cs (ArrayCreation.EmitDynamicInitializers):
11804         Don't treat System.Enum as a struct.
11805
11806 2005-08-30  Jb Evain  <jbevain@gmail.com>
11807
11808         * attribute.cs: handles as expression in parameters.
11809
11810 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11811
11812         Fix #75802.
11813         * class.cs (TypeContainer.VerifyClsName): Don't use a
11814         PartialContainer when verifying CLS compliance.
11815         (AbstractPropertyEventMethod): Set Parent here, ...
11816         (PropertyMethod): ... not here.
11817
11818 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
11819
11820         * attribute.cs : escaped attribute name should not be allowed to be
11821           resolved (e.g. @class as classAttribute). Fixed bug #75930.
11822
11823 2005-08-29  Raja R Harinath  <rharinath@novell.com>
11824
11825         Fix #75927.
11826         * convert.cs (ImplicitStandardConversionExists): Allow zero also
11827         when converting a long constant to unsigned long.
11828         * expression.cs (Invocation.OverloadResolve): Add sanity check to
11829         detect where IsApplicable and VerifyArgumentsCompat disagree.
11830
11831 2005-08-29  Raja R Harinath  <rharinath@novell.com>
11832         and Carlos Alberto Cortez  <carlos@unixmexico.org>
11833
11834         Fix #75848.
11835         * class.cs (TypeContainer.CanElideInitializer): New helper.
11836         (TypeContainer.EmitFieldInitializers): Use it to determine if we
11837         can safely emitting the initializer of a field.
11838
11839 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11840
11841         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
11842           allowed inside a switch (without loop). Fixed bug #75433.
11843
11844 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
11845
11846         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
11847         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
11848
11849 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11850
11851         * driver.cs : kinda reverting the default encoding changes (not exact 
11852           revert since I noticed that "codepage:reset" might not work fine).
11853
11854 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11855
11856         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
11857           Location. Now getter and setter store location correctly.
11858           (errors/cs0111-12.cs now reports the expected location.)
11859
11860 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11861
11862         * driver.cs : Use default encoding on the environment.
11863           Removed (now that) extra parameter for SeekableStreamReader.
11864         * support.cs : (SeekableStreamReader) third .ctor() argument for
11865           StreamReader is not required (always true). preamble size could
11866           be acquired in simpler and safe way.
11867
11868 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
11869
11870         * cs-parser.jay: report CS0642 at warning level 3
11871           and report CS0642 for an if else statement also
11872           fixes bug #74745. Patch by John Luke (and a bit
11873           modified by me).
11874           Removed extra CS0642 warning check for "while",
11875           "for" and "fixed".
11876         * statement.cs: In Block.Resolve(), CS0642 check
11877           is reimplemented to check a sequence of an empty
11878           statement and a block.
11879
11880           Both fix bug #66777.
11881
11882 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
11883
11884         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
11885         detection until I fix it.
11886         
11887         * cs-tokenizer.cs: Changed error message.
11888         
11889         * cs-parser.jay: Fixed 2 error locations.
11890         
11891         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
11892         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
11893         properties.
11894         
11895         * enum.cs (GetSignatureForError): Fixed.
11896         
11897         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
11898         method detection.
11899         
11900         * class.cs,
11901         * typemanager.cs (RegisterProperty): Removed.
11902         
11903         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
11904
11905 2005-08-24  Raja R Harinath  <rharinath@novell.com>
11906
11907         Fix #75874.
11908         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
11909         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
11910
11911 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11912
11913         * expression.cs : tiny fix is required for not warning positive ulong.
11914           See test-441.cs.
11915
11916 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11917
11918         * expression.cs : add CS0652 check for constant and integral
11919           expression. Fixed bug #53974.
11920
11921 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11922
11923         * expression.cs : in DoNumericPromotions(), check if there is implicit
11924           conversion overload for string (to check CS0034). Fixed bug #52492.
11925
11926 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11927
11928         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
11929
11930 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11931
11932         * ecore.cs : report location when it is *not* Null.
11933
11934 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11935
11936         * codegen.cs,
11937           ecore.cs,
11938           flowanalysis.cs,
11939           expression.cs:
11940           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
11941           correctly. Fixed bug #75721.
11942
11943 2005-08-23  Raja R Harinath  <rharinath@novell.com>
11944
11945         * support.cs (SeekableStreamReader.Position): Avoid an expensive
11946         loop that performs 'min (pos, char_count)'.
11947
11948         Fix #75862.
11949         * expression.cs (Unary.ResolveOperator): Don't discard implicit
11950         converted value in Operator.OnesComplement.
11951
11952 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
11953
11954         * anonymous.cs: If the anon method is pulled into a helper class,
11955         it needs to be `internal' not `private'. Fixes runtime behavior on
11956         msft. bug #75704
11957
11958 2005-08-20  Martin Baulig  <martin@ximian.com>
11959
11960         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11961         scope if we don't already have it.
11962
11963         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
11964         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
11965         fixes #75867.
11966
11967 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
11968
11969         Fix #75803
11970         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
11971         is a partial class.
11972
11973 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
11974
11975         The big constants rewrite
11976         Fix #75746, #75685 and more
11977         As a side effect saved 1MB for MWF ;-)
11978         
11979         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
11980         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
11981         enum based for corlib compilation.
11982         
11983         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
11984         subtractions.
11985         
11986         * class.cs (FixedField.Define): Use ResolveAsConstant.
11987         
11988         * const.cs (IConstant): Interface constants and enums.
11989         (Const.ResolveValue): New method for constant resolvning.
11990         (ExternalConstant): Constants from imported assemblies.
11991         
11992         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
11993         conversion; like enums.
11994         (Constant.ToType): Converts this constant to different type.
11995         (Constant.Increment): Adds 1.
11996         
11997         * convert.cs (ImplicitConversionRequired): Simplified.
11998         
11999         * cs-parser.jay: Create EnumMember directly.
12000         
12001         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12002         
12003         * doc.cs (GenerateEnumDocComment): Removed.
12004         
12005         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12006         (ConvertIntLiteral): Removed.
12007         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12008         
12009         * enum.cs (EnumMember): Implement IConstant.
12010         (Enum.IsValidEnumConstant): Removed.
12011         (Enum.GetNextDefaultValue): Removed.
12012         (Enum.FindMembers): Updated.
12013         (Enum.GenerateDocComment): Iterate enum members.
12014         
12015         * expression.cs (Cast.TryReduce): Handle enums correctly.
12016         (New.Constantify): Made public.
12017         (MemberAccess.DoResolve): Removed contant specific if(s).
12018         
12019         * literal.cs (NullLiteral): Implement new abstract methods.
12020         
12021         * statement.cs (GotoCase.Resolve): Use new constant methods.
12022         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12023         
12024         * typemanager.cs (LookupEnum): Removed.
12025         (IsEnumType): Fixed to work with corlib.
12026         (RegisterConstant): Removed.
12027         (LookupConstant): Removed.
12028         (GetConstant): Changed to work with IConstant.
12029
12030 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12031
12032         * location.cs : Fixed overflown (>255) column number.
12033
12034 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12035
12036         First cut of the qualified-alias-member feature.
12037         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12038         token.
12039         * cs-parser.jay (DOUBLE_COLON): New token.
12040         (namespace_or_type_name): Add rule for recognizing
12041         qualified-alias-members.
12042         (primary_expression): Likewise.
12043         (element_access): Allow QualifiedAliasMember as a possible
12044         type-bearing expression.
12045         (local_variable_type, local_variable_pointer_type): Likewise.
12046         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12047         aliases in the current and enclosing namespace declarations.
12048         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12049         * decl.cs (MemberName.is_double_colon): New.
12050         (MemberName.MemberName): Add new constructor for alias-member.
12051         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12052         * expression.cs (QualifiedAliasMember): New expression type.
12053
12054 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12055
12056         * location.cs : it borked when no argument was specified.
12057
12058 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12059
12060         * location.cs : tiny ToString() format fix.
12061
12062 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12063
12064         * statement.cs : oops, it was missing.
12065
12066 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12067
12068         A set of fixes for precise line/column location.
12069
12070         * location.cs :
12071           "token" field now holds a file/line "delta", a line number offset 
12072           from the segment, and a column number. See also:
12073           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12074           December/009508.html
12075           Removed static IsNull. Use instance IsNull property instead.
12076         * cs-tokenizer.cs :
12077           For some tokens it stores Location. For Identifier it stores
12078           LocatedToken which is a pair of string name and location.
12079           Column numbers are adjusted only at getChar().
12080         * report.cs :
12081           Use Location.ToString() for reporting (it now contains column).
12082         * cs-parser.jay :
12083           Largely modified to use LocatedToken instead of
12084           string (IDENTIFIER), and to acquire Location from some tokens.
12085         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12086           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12087           codegen.cs :
12088           Now MemberName holds Location. DeclSpace.ctor() receives Location
12089           as a parameter. Removed extra parameters to all derived classes.
12090           Replaced Location.IsNull() with instance property.
12091         * assign.cs, expression.cs :
12092           Added .ctor() overload that omits Location.
12093         * attribute.cs :
12094           Added "nameEscaped" flag that indicates the identifier was escaped
12095           in the source file. This fixes bug #57047.
12096
12097 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12098
12099         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12100         New method, looking for lo-case imported cls type.
12101
12102         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12103         here.
12104
12105         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12106
12107         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12108
12109         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12110         all_imported_types.
12111         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12112
12113         Optimized to save 3.5 MB for SWF compilation.
12114
12115 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12116
12117         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12118         (PartialContainer.Create): Moved logic AddToContainer.
12119         (PartialContainer.MarkForDuplicationCheck): Shares name.
12120         
12121         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12122         place.
12123         
12124         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12125         initialization.
12126         (Namespace.GetSignatureForError): New method.
12127         
12128         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12129         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12130
12131 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12132
12133         Fix #75669.
12134         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12135         member lookup rather than qualifier_type, since qualifier_type can
12136         be null.
12137
12138 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12139
12140         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12141         enum member.
12142
12143 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12144
12145         * statement.cs: Copy the local exception into the exception
12146         captured local.  Fixes 75674
12147
12148 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12149
12150         Fix #75658.
12151         * expression.cs (Invocation.OverloadResolve): Don't report error
12152         CS1501 if error CS1502 has been reported.
12153         (New.DoResolve): Delegate CS1501 reporting to
12154         Invocation.OverloadResolve.
12155
12156         Fix #75656.
12157         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12158         invariant-meaning-in-block property in an enclosing block if
12159         necessary.
12160
12161 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12162
12163         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12164         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12165         (Switch.CheckSwitch): Just save 50kb for SWF.
12166
12167 2005-07-27  Martin Baulig  <martin@ximian.com>
12168
12169         * anonymous.cs (CaptureContext.AddField): Added
12170         `AnonymousContainer am' argument; compute its toplevel scope if
12171         it's not already computed.  Fixes #75649.
12172
12173 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12174
12175         Fix #75628.
12176         * class.cs (Constructor.Emit): Reset block to null if the block
12177         resolve fails.
12178
12179 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12180
12181         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12182
12183 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12184
12185         * class.cs (MethodData.Define): Check whether accessor implementing
12186         interface is public.
12187
12188         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12189
12190 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12191
12192         Fix #57245
12193         * namespace.cs (LookupType): Moved same type check to...
12194         
12195         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12196         with the same name.
12197
12198 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12199
12200         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12201         already found a typebuilder.
12202         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12203         MemberNames, not strings.
12204
12205         * const.cs (Error_ExpressionMustBeConst): 
12206         Rename from Error_EpressionMustBeConst.
12207         * const.cs, class.cs, statement.cd: Update.
12208
12209 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12210
12211         Fix #65573
12212
12213         * const.cs (Const.LookupConstantValue): Report missing contant expression
12214         everytime.
12215         (Error_EpressionMustBeConstant): Only one error method.
12216
12217         * class.cs, statement.c: Updated.
12218
12219 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12220
12221         * statement.cs (Block.Flags): Add back HasVarargs.
12222         (Block.flags): Make protected.
12223         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12224
12225         * typemanager.cs (types, typecontainers, user_types): Remove.
12226         (UserTypes, TypeContainers): Likewise.
12227         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12228         (CleanUp, Reset): Update.
12229         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12230         (GetNestedType): Use Type.GetNestedType.
12231         (CoreLookupType): Take two arguments, the namespace and the
12232         basename of the type.  Update to use the Namespace.Lookup
12233         mechanism.
12234         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12235         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12236         string concatenation and substring matches.
12237         * class.cs, enum.cs, delegate.cs: Update to changes.
12238
12239 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12240
12241         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12242         Expression and made virtual.
12243
12244         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12245         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12246
12247         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12248
12249         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12250         error message.
12251
12252         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12253         change.
12254
12255 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12256
12257         Fix #57707
12258         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12259         AssemblyCultureAttribute is not used on executable.
12260
12261         * rootcontext.cs,
12262         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12263
12264 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12265
12266         Fix #60638.
12267         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12268         New.  Reports CS0252/CS0253.
12269         Mostly taken from preliminary patch by Duncak Mak.
12270         (Binary.DoResolveOperator): Store results of operator lookup.
12271         Use them to detect if we need to warn about unintended reference
12272         comparisons.
12273
12274 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12275
12276         Fix #72969.
12277         * namespace.cs (Namespace.Lookup): Add back location parameter.
12278         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12279         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12280
12281         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12282         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12283         (Namespace.LookupType): ... this.
12284         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12285         of namespaces.
12286         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12287         purported to handle pointers.
12288         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12289         CoreLookupType.
12290
12291 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12292
12293         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12294         type as namespace.
12295
12296 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12297
12298         * namespace.cs (Namespace.Lookup): Drop location parameter.
12299         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12300         (NamespaceEntry.Lookup): ... this.
12301         (NamespaceEntry.Error_AmbiguousTypeReference):
12302         Move here from DeclSpace.
12303         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12304         names ...
12305         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12306         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12307         Move to NamespaceEntry.
12308         * delegate.cs, expression.cs: Update to changes.
12309
12310 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12311
12312         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12313         CheckAttributeType and refactored.
12314         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12315         ResolveAsTypeTerminal error handling.
12316         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12317         handling.
12318         (GetSignatureForError): Print errors in same way.
12319
12320         * class.cs,
12321         * codegen.cs: Reflect attribute GetSignatureForError change.
12322
12323         * ecore.cs,
12324         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12325
12326         * namespace.cs (UsingEntry): Refactored to make fields private.
12327
12328         * assign.cs,
12329         statement.cs: Error_UnexpectedKind has extra parameter.
12330
12331 2005-07-14  Raja R Harinath  <rharinath@novell.com>
12332
12333         * ecore.cs (IAlias): Remove.
12334         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
12335         that implement the interface.
12336         * namespace.cs (Namespace): Likewise.
12337         (Namespace.declspaces): Renamed from 'defined_names'.
12338         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
12339         DeclSpace instead of an IAlias.
12340         * tree.cs (Tree.AddDecl): Update.
12341
12342 2005-07-12  Raja R Harinath  <rharinath@novell.com>
12343
12344         * statement.cs (Block.Flags); Remove HasVarargs.
12345         (Block.HasVarargs): Move to ToplevelBlock.
12346         (Block.ThisVariable, Block.AddThisVariable): Likewise.
12347         (Block.Variables): Make protected.  Initialize variable hashtable
12348         if necessary.
12349         (Block.AddVariable): Update.
12350         (Block.Resolve): Update to changes.
12351         (ToplevelBlock.HasVarargs): New boolean.
12352         (ToplevelBlock.ThisVariable): Move here from Block.
12353         (ToplevelBlock.AddThisVariable): Likewise.
12354         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
12355         * expression.cs (This.ResolveBase): Update to changes.
12356         (ArglistAccess.DoResolve): Likewise.
12357
12358 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12359
12360         Fix #75321
12361         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
12362
12363         * class.cs (TypeContainer.VerifyMembers): Distinguish between
12364         not used and not used & assigned.
12365         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
12366
12367 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12368
12369         Fix #75053
12370         * expression.cs (Is.DoResolve): null is never provided type.
12371
12372 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
12373
12374         Fix #52496
12375         * cs-parser.jay: Less strict event error rule to catch more errors.
12376
12377 2005-07-08  Martin Baulig  <martin@ximian.com>
12378
12379         Fix test-iter-10.cs - distinguish whether we `yield' in a property
12380         gettter (allowed) or setter (not allowed).
12381
12382         * class.cs (Accessor): Implement IIteratorContainer.
12383         (Accessor.Yields): New public field.
12384         (PropertyBase.PropertyMethod.Define): Handle iterators on a
12385         per-accessor basis.
12386
12387         * cs-parser.jay
12388         (get_accessor_declaration, set_accessor_declaration): Set the
12389         `yields' flag on the accessor, not the property.
12390         (property_declaration): Do the iterators check on a per-accessor
12391         basis and not for the whole property.
12392
12393 2005-07-08  Martin Baulig  <martin@ximian.com>
12394
12395         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12396         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12397
12398 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12399
12400         Fix #74975
12401         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12402         (ExtractSecurityPermissionSet): Cope with self referencing security
12403         attributes properly.
12404
12405         * driver.cs (SetOutputFile): Made public property OutputFile.
12406
12407 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12408
12409         Fix #75486.
12410         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12411         has_nonstatic_fields.  Make into a FieldBase pointer.
12412         (TypeContainer.AddField): Add CS0282 check.
12413         (TypeContainer.EmitType): Update.
12414
12415 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12416
12417         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12418         compare if they start with __.
12419
12420 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12421
12422         * statement.cs (Switch.SwitchGoverningType): Only look at
12423         UserCasts that don't need implicit standard conversions to one of
12424         the allowed switch types (Fixes test-322.cs).
12425         (LocalInfo.Resolve): Re-enable sanity-test.
12426
12427 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12428
12429         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12430         
12431         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12432         
12433         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12434
12435 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12436
12437         Fix #75472.
12438         * ecore.cs (SimpleName.GetSignatureForError): Add.
12439         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12440         (MemberAccess.GetSignatureForError): Add.
12441
12442 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12443  
12444         The big error and warning messages review.
12445         
12446         * anonymous.cs,
12447         * assign.cs,
12448         * attribute.cs,
12449         * class.cs,
12450         * codegen.cs,
12451         * convert.cs,
12452         * cs-parser.jay,
12453         * cs-tokenizer.cs,
12454         * decl.cs,
12455         * delegate.cs,
12456         * doc.cs,
12457         * driver.cs,
12458         * ecore.cs,
12459         * enum.cs,
12460         * expression.cs,
12461         * flowanalysis.cs,
12462         * iterators.cs,
12463         * literal.cs,
12464         * location.cs,
12465         * modifiers.cs,
12466         * namespace.cs,
12467         * parameter.cs,
12468         * pending.cs,
12469         * report.cs,
12470         * rootcontext.cs,
12471         * statement.cs,
12472         * support.cs,
12473         * tree.cs,
12474         * typemanager.cs: Updated.
12475         
12476         * class.cs: (MethodCore.SetYields): Moved here to share.
12477         (PropertyMethod.Define): Moved iterator setup here.
12478         
12479         * iterators.cs: Add orig_method to have full access to parent
12480         container.
12481
12482 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12483
12484         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12485         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12486         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12487         variable of struct type.
12488         * expression.cs (Unary.ResolveOperator): Update to change.
12489         (Indirection.VerifyFixed): Likewise.
12490         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12491         (ParameterReference.VerifyFixed): Value parameters are fixed.
12492         (This.VerifyFixed): Treat 'this' as a value parameter.
12493         * statement.cs (LocalInfo.IsFixed): Remove.
12494
12495 2005-07-01  Martin Baulig  <martin@ximian.com>
12496
12497         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12498         `ec.EmitThis ()' to get the correct scope.
12499
12500 2005-07-01  Martin Baulig  <martin@ximian.com>
12501
12502         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12503         instance is a ParameterReference; fixes #75299.
12504
12505 2005-07-01  Martin Baulig  <martin@ximian.com>
12506
12507         Reverted Marek's latest patch (r46725):
12508         - it contains structural changes which are neither mentioned in
12509           the ChangeLog nor explained anywhere; for example the additional
12510           argument of EmitContext's and Iterator's .ctor's and the
12511           TypeContainer.DefineMembers() change.
12512         - structural changes like this should go in in seperate patches
12513           and not be hidden in a huge patch which just seems to affect
12514           warnings and errors.
12515           a big and hard to understand patch.
12516         - it breaks iterators and causes regressions, for instance in
12517           test-iter-03.cs.      
12518
12519 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12520
12521         Fix #75412.
12522         * expression.cs (Indexers.map): Remove.
12523         (Indexers.Append): Filter out inaccessible setters and getters.
12524         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12525
12526         Fix #75283.
12527         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12528         Refactored from ...
12529         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12530         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12531         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12532         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12533
12534 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12535
12536         Fix #75322
12537         * class.cs (FieldBase.GetInitializerExpression): One more field
12538         for backup.
12539
12540 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12541
12542         * pending.cs: Do not define a proxy if the base method is virtual,
12543         it will be picked up by the runtime (bug 75270).
12544
12545 2005-06-08  Martin Baulig  <martin@ximian.com>
12546
12547         The big Iterators rewrite :-)
12548
12549         * iterators.cs: Rewrite this to use the anonymous methods framework.
12550
12551         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
12552         before the TypeContainers; see 2test-21.cs.
12553
12554         * class.cs
12555         (TypeContainer.DefineType): Don't create a new EmitContext if we
12556         already have one (this only happens if we're an Iterator).
12557         (TypeContainer.Define): Also call Define() on all our iterators.
12558         (Method.CreateEmitContext): Added support for iterators.
12559
12560         * anonymous.cs
12561         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
12562         (AnonymousContainer.CreateMethodHost): Moved here from
12563         AnonymousMethod and made abstract.
12564         (AnonymousContainer.CreateScopeType): New abstract method.
12565         (AnonymousContainer.IsIterator): New public property.
12566         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
12567         get the ScopeTypeBuilder rather than manually defining it here. 
12568         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
12569         iterators here.
12570
12571         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
12572         before RootContext.DefineTypes().
12573
12574         * codegen.cs (EmitContext.RemapToProxy): Removed.
12575         (EmitContext.CurrentAnonymousMethod): Changed type from
12576         AnonymousMethod -> AnonymousContainer.
12577         (EmitContext.ResolveTopBlock): Protect from being called twice.
12578         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
12579         (EmitContext.EmitThis): Removed the iterators hacks; use the
12580         anonymous methods framework for that.
12581
12582         * statement.cs
12583         (ToplevelBlock.Container): Make this a property, not a field.
12584         (ToplevelBlock.ReParent): New public method; move the
12585         ToplevelBlock into a new container.
12586         (Foreach.TemporaryVariable): Simplify.
12587
12588 2005-06-05  Martin Baulig  <martin@ximian.com>
12589
12590         * statement.cs (LocalInfo.CompilerGenerated): New flag.
12591         (Block.AddTemporaryVariable): New public method; creates a new
12592         `LocalInfo' for a temporary variable.
12593         (Block.EmitMeta): Create the LocalBuilders for all the temporary
12594         variables here.
12595         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
12596         non-iterator variables.
12597
12598 2005-06-05  Martin Baulig  <martin@ximian.com>
12599
12600         * statement.cs (Foreach.TemporaryVariable): Create the
12601         LocalBuilder in the Emit phase and not in Resolve since in some
12602         situations, we don't have an ILGenerator during Resolve; see
12603         2test-19.cs for an example.
12604
12605 2005-06-04  Martin Baulig  <martin@ximian.com>
12606
12607         **** Merged r45395 from GCS ****
12608
12609         The big Foreach rewrite - Part II.
12610
12611         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
12612         with `PropertyInfo ienumerator_getcurrent'.
12613
12614         * codegen.cs (VariableStorage): Removed.
12615
12616         * statement.cs
12617         (Foreach): Derive from Statement, not ExceptionStatement.
12618         (Foreach.CollectionForeach): New nested class.  Moved all the code
12619         dealing with collection foreach here.
12620         (Foreach.ForeachHelperMethods): Removed.
12621         (Foreach.TemporaryVariable): Implement IMemoryLocation.
12622
12623 2005-05-23  Martin Baulig  <martin@ximian.com>
12624
12625         * statement.cs (Try.DoResolve): Don't create a `finally' if we
12626         don't need to.  Fix #75014.
12627
12628 2005-05-20  Martin Baulig  <martin@ximian.com>
12629
12630         Merged r44808 from GMCS.
12631
12632         * class.cs (TypeContainer.CircularDepException): Removed.
12633         (TypeContainer.DefineType): Removed the `InTransit' stuff.
12634         (TypeContainer.CheckRecursiveDefinition): Check for circular class
12635         (CS0146) and interface (CS0529) dependencies here.
12636
12637 2005-06-21  Raja R Harinath  <rharinath@novell.com>
12638
12639         * expression.cs (Invocation.EmitCall): Fix initialization
12640         'this_call' to reflect current behaviour.  Fix indentation.
12641
12642         * convert.cs (FindMostEncompassedType): Add two trivial special
12643         cases (number_of_types == 0 || number_of_types == 1).
12644         (FindMostEncompasingType): Likewise.
12645
12646 2005-06-17  Raja R Harinath  <rharinath@novell.com>
12647
12648         Some cleanups preparing for the fix of #75283.
12649         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
12650         error testing.
12651         (EventExpr.InstanceResolve): Likewise.
12652         (EventExpr.DoResolve): Remove redundant checks.
12653
12654 2005-06-10  Duncan Mak  <duncan@novell.com>
12655
12656         * cs-tokenizer.cs (process_directives): New flag for controlling
12657         the processing of preprocessor directives.
12658         (x_token): After seeing a '#', return Token.NONE instead of going
12659         to handle_preprocessing_directive() when not processing
12660         directives. This avoids unnecessary processing during the token peek in
12661         is_punct().
12662
12663         This fixes #74939.
12664
12665         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
12666         the existing error reporting methods instead of Report.Error.
12667
12668         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
12669         after Raja's rewrite.
12670
12671 2005-06-08  Miguel de Icaza  <miguel@novell.com>
12672
12673         * class.cs: Small fix.
12674
12675 2005-06-08  Raja R Harinath  <rharinath@novell.com>
12676
12677         Fix #75160.
12678         * class.cs (GetPartialBases): Fix return value check of
12679         part.GetClassBases.
12680
12681 2005-06-07  Raja R Harinath  <rharinath@novell.com>
12682
12683         Ensure that partial classes are registered in their enclosing
12684         namespace.  Initial part of fix of #75160.
12685         * tree.cs (Tree.RecordDecl): Add new namespace argument.
12686         Register declspace with namespace here, not in
12687         DeclSpace.RecordDecl.
12688         * cs-parser.jay: Pass namespace to RecordDecl.
12689         * class.cs (PartialContainer.Create): Likewise.
12690         (ClassPart.DefineType): New sanity-check.  Throws an exception if
12691         called.
12692         * decl.cs (Declspace.RecordDecl): Remove.
12693         * namespace.cs (NamespaceEntry.DefineName): Remove.
12694
12695 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
12696
12697         * rootcontext.cs: Reset TargetExt as well.
12698
12699 2005-06-03  Raja R Harinath  <rharinath@novell.com>
12700
12701         * ecore.cs (Expression.Resolve): Emit CS0654 error when
12702         -langversion:ISO-1.
12703
12704 2005-06-02  Raja R Harinath  <rharinath@novell.com>
12705
12706         Fix #75080, cs0119.cs.
12707         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
12708         of ...
12709         (Expression.Resolve): ... this.  Use it.  Remove bogus code
12710         allowing ExprClass.Type and ExprClass.Namespace for
12711         ResolveFlags.VariableOrValue.
12712         (Expression.Resolve) [1-argument variant]: Change default resolve
12713         flags based on language version.
12714         (Expression.Error_UnexpectedKind): Use a simple string array
12715         rather than an ArrayList.
12716         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
12717         not ExprClass.Type.
12718         (TypeOfVoid.DoResolve): Likewise.
12719         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
12720         flags argument -- it always has the same value.
12721
12722 2005-05-31  Raja R Harinath  <rharinath@novell.com>
12723
12724         Fix #75081.
12725         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
12726         Use it in the error message.
12727         * assign.cs, expression.cs, statement.cs: Update.
12728
12729 2005-05-30  Raja R Harinath  <rharinath@novell.com>
12730
12731         Fix #75088.
12732         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
12733         the "almostMatchedMember" case too.
12734         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
12735         that failed the accessibility checks to 'almost_match'.
12736
12737 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
12738
12739         * attribute.cs: Use internal MethodBuilder methods to set
12740         ExactSpelling and SetLastError on PInvoke methods, instead
12741         of passing them via charset.  Fixes #75060.
12742
12743 2005-05-27  Raja R Harinath  <rharinath@novell.com>
12744
12745         * parameter.cs (Parameter): Remove TODO comment.
12746         (Parameter.DefineParameter): Remove Location parameter.
12747         (Parameters.LabelParameters): Likewise.
12748         * class.cs (Constructor.Emit): Update to change.
12749         (MethodData.Emit): Likewise.
12750         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
12751         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
12752
12753 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
12754
12755         * parameter.cs,
12756           Removed Parameters.Location and added Parameter.Location instead.
12757           Removed Location parameter from Emit() and GetSignature().
12758         * anonymous.cs,
12759           class.cs,
12760           cs-parser.jay,
12761           delegate.cs,
12762           iterators.cs,
12763           statement.cs :
12764           Modified all related calls.
12765
12766 2005-05-26  Raja R Harinath  <rharinath@novell.com>
12767
12768         Improve user-defined conversion handling.
12769         * convert.cs (GetConversionOperators): Rewrite.  Return only the
12770         applicable operators.
12771         (AddConversionOperators): New.  Helper for GetConversionOperators.
12772         (FindMostEncompassedType, FindMostEncompassingType): Verify that
12773         there is only one most encompassed/encompassing type.
12774         (FindMostSpecificSource, FindMostSpecificTarget): Remove
12775         "applicable operator" handling.
12776         (UserConversion): Move cache here from GetConversionOperators.
12777         Directly cache the chosen operator, rather than the whole
12778         MethodGroup.
12779         (ExplicitNumericConversion): Fix buggy implementation of Decimal
12780         case.  Allow conversion of decimal to sbyte and byte too.
12781         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
12782         New static methods.  Used to avoid allocating EmptyExpressions in
12783         convert.cs.
12784
12785 2005-05-24  Duncan Mak  <duncan@novell.com>
12786
12787         * ecore.cs (CastFromDecimal): New class for casting a decimal to
12788         another class, used in Convert.ExplicitNumericConversion.
12789         (CastToDecimal): New class, similar to above, but casts to
12790         System.Decimal, used in Convert.ImplicitNumericConversion and also
12791         in explicit convesion from double/float to decimal.
12792
12793         * convert.cs (ImplicitNumericConversion): Handle implicit
12794         conversions to System.Decimal.
12795         (ExplicitNumericConversion): handle explicit conversions to
12796         System.Decimal.
12797
12798         This fixes #68711.
12799         
12800 2005-05-20  Miguel de Icaza  <miguel@novell.com>
12801
12802         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
12803         know the type at this stage, just break through.   Fixes #75008 
12804
12805 2005-05-19  Martin Baulig  <martin@ximian.com>
12806
12807         * delegate.cs
12808         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
12809         to disable error reporting.
12810
12811         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
12812         here since we don't want to report an error; see the new test-336.cs.
12813
12814 2005-05-19  Raja R Harinath  <rharinath@novell.com>
12815
12816         * statement.cs (ToplevelBlock.GetParameterReference)
12817         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
12818         Move here from class Block.
12819         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
12820         * expression.cs (ParameterReference.DoResolveBase): Likewise.
12821
12822 2005-05-18  Martin Baulig  <martin@ximian.com>
12823
12824         Fix #74978.
12825
12826         * flowanalysis.cs
12827         (FlowBranching.Reachability): Add non-static public And() and Or()
12828         methods.
12829         (FlowBranchingSwitch): New class; do the `break_origins' thing
12830         like in FlowBranchingLoop.
12831         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
12832         reachability, not just locals and parameters.
12833         (FlowBranching.MergeChild): Remove some of the hacks for loop and
12834         switch; MergeBreakOrigins() now takes care of that.
12835
12836 2005-05-18  Martin Baulig  <martin@ximian.com>
12837
12838         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12839         a loop and may leave it, reset the barrier; fixes #74974.
12840
12841 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
12842         
12843         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
12844         is back.
12845         
12846         * cs-parser.jay: Catch more lexical errors.
12847         
12848         * report.cs: Add one more Error method.
12849         
12850         * rootcontext.cs,
12851         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
12852
12853 2005-05-17  Martin Baulig  <martin@ximian.com>
12854
12855         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
12856         #70970. 
12857
12858 2005-05-16  Raja R Harinath  <rharinath@novell.com>
12859
12860         Fix test-382.cs.  Emit values of decimal constants.
12861         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
12862         Carved out of ...
12863         (TypeContainer.AddField): ... this.
12864         (TypeContainer.EmitFieldInitializers): Allow the list of fields
12865         with initializers to include 'Const's.
12866         (ClassPart.RegisterFieldForInitialization): Forward to
12867         PartialContainer.
12868         * const.cs (Const.Const): Pass initializer to base class.
12869         (Const.Define): In case of decimal constants, register them for
12870         initialization in a static constructor.
12871
12872 2005-05-14  Martin Baulig  <martin@ximian.com>
12873
12874         * statement.cs (Block.Resolve): Correctly handle unreachable code;
12875         do not call ResolveUnreachable() on unreachable statements in
12876         here, see the comment in the source code.
12877
12878 2005-05-13  Raja R Harinath  <rharinath@novell.com>
12879
12880         Fix #74934.
12881         * expression.cs (BinaryResolveOperator): If one of the operands of
12882         an equality comparison is 'null' and the other is a pointer type,
12883         convert the null to a NullPointer.
12884         * convert.cs (ImplicitReferenceConversion): If the expression is a
12885         NullLiteral and the target type is a pointer type, return a
12886         NullPointer instead.
12887         (ImplicitConversionStandard): Likewise.
12888
12889 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
12890         
12891         * cs-parser.jay: Set readonly context based on special constructs.
12892         
12893         * expression.cs (LocalVariableReference.DoResolveBase): Improved
12894         readonly variable error handling.
12895         
12896         * rootcontext.cs (EmitCode): Don't verify members when error
12897         occurred.
12898         
12899         * statement.cs (LocalInfo): Add reaodnly context information.
12900         (SetReadOnlyContext, GetReadOnlyContext): New methods.
12901
12902 2005-05-13  Raja R Harinath  <rharinath@novell.com>
12903
12904         * statement.cs (Block.Resolve): Revert change below.  Modify fix
12905         for #74041 to initialize 'resolved' to false only for explicit
12906         blocks.  Fixes #74873.
12907
12908 2005-05-12  Raja R Harinath  <harinath@gmail.com>
12909
12910         Fix #74920.
12911         * typemanager.cs (unmanaged_enclosing_types): New.
12912         (IsUnmanagedType): Avoid infloops by using
12913         'unmanaged_enclosing_types' to talk with recursive invocations.
12914
12915 2005-05-13  Martin Baulig  <martin@ximian.com>
12916
12917         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
12918         instance variable, not a local.  Fix #74873.
12919         (Block.ResolveUnreachable): Set it to true here.
12920
12921 2005-05-11  Duncan Mak  <duncan@novell.com>
12922
12923         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
12924         continuing to process for 'arg'.
12925         (handle_preprocessing_directive): Check the argument of the #endif
12926         directive and report error CS1025 if there are any trailing
12927         characters.
12928
12929         According to the C# spec, having even whitespace after the #endif
12930         directive is illegal; however, because we call arg.TrimEnd ()
12931         beforehand, we have the same behavior as csc, allowing whitespace
12932         after the directive.
12933
12934         Fixes #74892.
12935
12936 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
12937
12938         Fix #74863.
12939         
12940         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
12941         (Constructor.GetObsoleteAttribute): Implemented correctly.
12942
12943 2005-05-10  Martin Baulig  <martin@ximian.com>
12944
12945         * support.cs (ReflectionParameters.ParameterModifier): Use
12946         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
12947         and `ParameterAttributes.In'.  Fixes #74884.
12948
12949 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
12950
12951         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
12952         
12953         * expression.cs (Argument.GetParameterModifier): Turned to property.
12954         (Invocation.Error_InvalidArguments): Add more descriptive errors.
12955         
12956         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
12957         its C# equivalent.
12958         
12959 2005-05-09  Raja R Harinath  <rharinath@novell.com>
12960
12961         Fix #74852.
12962         * decl.cs (MemberCache.AddMethods): Register override methods,
12963         rather than non-override methods.
12964         * typemanager.cs (RegisterOverride): New.
12965         (IsOverride): Update.
12966
12967 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
12968
12969         Fix #73105.
12970         
12971         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
12972         recursive declaration.
12973         
12974         * statement.cs (Block.ResolveMeta): Report any error in resolving.
12975         
12976 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
12977
12978         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
12979         
12980         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
12981
12982 2005-05-05  Raja R Harinath  <rharinath@novell.com>
12983
12984         Fix #74797.
12985         * decl.cs (DeclSpace.FamilyAccessible): 
12986         Use TypeManager.IsNestedFamilyAccessible.
12987
12988         Fix reopened #64812.
12989         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
12990         internal'.
12991
12992 2005-05-04  Raja R Harinath  <rharinath@novell.com>
12993             Abin Thomas  <projectmonokochi@rediffmail.com>
12994             Anoob V E  <projectmonokochi@rediffmail.com>
12995             Harilal P R  <projectmonokochi@rediffmail.com>
12996
12997         Fix #64812.
12998         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
12999         allow access to all static members.
13000
13001 2005-05-04  Martin Baulig  <martin@ximian.com>
13002
13003         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13004
13005 2005-05-04  Martin Baulig  <martin@ximian.com>
13006
13007         Fix #74655.
13008
13009         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13010         section at the end; make things work if `default' is not the last
13011         section.        
13012
13013 2005-05-04  Martin Baulig  <martin@ximian.com>
13014
13015         Fix #70400.
13016
13017         * statement.cs (Switch): Replaced the `got_default' field with a
13018         `default_section' one.
13019         (Switch.CheckSwitch): Set `default_section' here.
13020         (Switch.Resolve): If we're a constant switch and the constant is
13021         not found, use the default section.
13022
13023 2005-05-03  Martin Baulig  <martin@ximian.com>
13024
13025         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13026
13027         * statement.cs (Foreach.ArrayForeach): New nested class.
13028         (Foreach.TemporaryVariable): New nested class.
13029         (Foreach.EmitArrayForeach): Removed; this is now in the new
13030         ArrayForeach class.
13031
13032 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13033
13034         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13035         more conservative.
13036         (VerifyPendingMethods): Revert change below.
13037
13038         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13039         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13040         that used to trigger warning -28.  Remove warning -28.
13041         * expression.cs (Invocation.OverloadResolve): Use
13042         TypeManager.IsOverride to distinguish override methods.
13043
13044         Fix #74773.
13045         * pending.cs (VerifyPendingMethods): If a base type implements the
13046         requested interface, don't bother checking individual methods of
13047         the base type.  As a side-effect, this prevents the creation of
13048         unnecessary proxies.
13049
13050 2005-05-02  Martin Baulig  <martin@ximian.com>
13051
13052         Fix #70182.
13053
13054         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13055         Also `And' the locals if the old vector is null.
13056         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13057         null; in this case we basically reset all the variables.        
13058
13059 2005-05-02  Martin Baulig  <martin@ximian.com>
13060
13061         Fix #74529.
13062
13063         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13064         Added `FlowBranching branching' argument; always `and' the
13065         variables instead of `or'ing them unless we're an infinite loop.
13066
13067         * statement.cs (While.Resolve): Create a new sibling unless we're
13068         infinite.       
13069
13070 2005-05-02  Martin Baulig  <martin@ximian.com>
13071
13072         Fix #70140.
13073
13074         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13075         arguments; use it instead of creating a new TopLevelBlock.
13076         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13077         our ConstructorInitializer.
13078
13079         * statement.cs
13080         (TopLevelBlock.TopLevelBranching): New public property.
13081         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13082         and create our `TopLevelBranching'.
13083
13084         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13085         anonymous method host, use `block.TopLevelBranching' rather than
13086         creating a new branching.
13087
13088 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13089
13090         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13091         a ScopeInfo, if any of the current children is a child of the new
13092         entry, move those children there.
13093
13094 2005-04-30  Martin Baulig  <martin@ximian.com>
13095
13096         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13097         at the beginning of a SwitchSection.  Fix #73335.
13098
13099 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13100
13101         Fix #74378
13102         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13103         
13104         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13105         (FieldExpr.DoResolve): Obsolete members are ignored for field
13106         initializers.
13107         
13108 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13109
13110         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13111         of arrays detection.
13112
13113         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13114         verification.
13115         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13116
13117         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13118         arrays report.
13119
13120 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13121
13122         * cs-parser.jay: Use the prefered version of -unsafe in error
13123         message.
13124
13125 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13126
13127         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13128         circumstances.
13129
13130 2005-04-20  John Luke  <john.luke@gmail.com>
13131
13132         * driver.cs: fix typo in error message, --outout to --output
13133
13134 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13135
13136         * codegen.cs (InRefOutArgumentResolving): New field.
13137         
13138         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13139         fields outside contructor.
13140         
13141         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13142         
13143 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13144
13145         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13146         parameter code was not completed ever, so it was not as up-to-date
13147         as local variables.  Must finish it.
13148
13149         The bug fix was to compare the Toplevel of the block, not the
13150         current block.  Thanks for Ben for pointing this out. 
13151
13152 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13153
13154         * decl.cs (AddMethods): Use the declaring type of the problem
13155         method to determine if we want to squash a warning.
13156
13157 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13158
13159         * attribute.cs: Removed debug output.
13160
13161         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13162         
13163         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13164         Report.Stderr.
13165         
13166 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13167
13168         Fix #74481.
13169         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13170         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13171         all null comparisons against reference types.
13172
13173 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13174
13175         Fix# 74565
13176         * class.cs (TypeContainer.CircularDepException) New nested
13177         exception class.
13178         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13179         (TypeContainer.DefineType): Removed error, reset InTransit before
13180         exit.
13181         (Class.DefineType): Throw exception when is in Transit.
13182         Catch exception and report error.
13183         (Struct.DefineType): Throw exception when is in Transit.
13184         Catch exception and report error.
13185         (Interface.DefineType): Throw exception when is in Transit.
13186         Catch exception and report error.
13187
13188         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13189         handle nested exception handlers.
13190
13191         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13192         a catch.
13193
13194         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13195         InFinally and InCatch storage.
13196
13197         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13198         (Catch.Resolve): Set and Restore ec.InCatch.
13199         (Try.Resolve): Set and Restore ec.InFinally.
13200         (Try.HasCatch): True when try has catch.
13201
13202 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13203
13204         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13205           for the same event member, so exclude such cases from warning 419.
13206           Fixed bug #74633.
13207
13208 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13209
13210         * expression.cs (Binary.ResolveOperator): Apply patch from John
13211         Luke to fix bug 59864: operators &, | and ^ on enumerations
13212         require that the same enum type on both sides.
13213
13214         * driver.cs: Add warnings to old flag usage, this is to assist
13215         people who produce Makefiles and hope that the Makefiles will be
13216         used on Windows.
13217
13218         * class.cs (TypeContainer.EmitType): Moved the definition of the
13219         special $PRIVATE$ field from the resolve phase to the Emit phase.
13220         During resolve we do not know if we are a struct with
13221         HasExplicitLayout, we know this only after the attributes for the
13222         type are emitted.
13223
13224         Set the FieldOffset to zero on the dummy field that we create for
13225         the class.   Fixes 74590.
13226
13227 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13228
13229         Fix #73834.
13230         * ecore.cs (PropertyExpr.resolved): New.
13231         (DoResolve): Use it to handle a case of double resolution here.
13232         Handle a case of identical-name-and-type-name.
13233         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13234         resolution by storing the results of expression resolution back
13235         into the "probes" array.
13236
13237 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13238
13239         Fix cs0208-7.cs and cs0208-8.cs.
13240         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13241         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13242         error reporting to point out the reason a struct is not unmanaged.
13243
13244 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13245
13246         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13247           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13248
13249 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13250
13251         Fix #74528.
13252         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13253         IdenticalNameAndTypeName here.
13254         (EventExpr.InstanceResolve): Likewise.
13255
13256 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13257
13258         C# 2.0 DefaultCharSetAttribute implementation
13259         
13260         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13261         which allows us to set GlobalNamespace for every resolve.
13262         (Attribute.ResolveArguments): Cut from Resolve.
13263         (Attribute.GetCharSetValue): Returns CharSet named argument.
13264         (Attribute.DefinePInvokeMethod): Gets default charset from
13265         module settings.
13266         (GlobalAttribute.ResolveAsTypeStep): Override.
13267         (GlobalAttribute.ResolveArguments): Override.
13268         
13269         * class.cs (TypeAttr): Is protected.
13270         
13271         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13272         (ModuleClass.DefaultCharSetType): New memeber.
13273         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13274         
13275         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13276         charset from module.
13277         
13278         * delegate.cs (TypeAttr): Override.
13279         (Delegate.DefineType): Use this TypeAttr.
13280         
13281         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13282         at very early stage (before types are defined) to resolve model
13283         module attributes. It will probably not work with corlib but it
13284         should be ok.
13285         
13286         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13287         charset from module.
13288         
13289         * typemanager.cs (default_charset_type): New type.
13290
13291 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13292
13293         * decl.cs (MemberCache.AddMethods): Don't warn if
13294         System.Object.Finalize has buggy MethodAttributes.
13295
13296         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13297         removed below.
13298
13299 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13300
13301         * doc.cs : detect ambiguous reference to overloaded members.
13302           Fixed bug #71603. MS 1.1 csc does not detect it.
13303
13304 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13305
13306         * doc.cs : delegates must not be referenced with parameters.
13307           Fixed bug #71605.
13308
13309 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13310
13311         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13312
13313 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13314
13315         * driver.cs (MainDriver): Stop processing if the CLS stage found
13316         errors. 
13317
13318         (CompilerCallableEntryPoint.InvokeCompiler): Always
13319         reset after execution;   Take a TextWriter argument for the
13320         output.
13321
13322         * report.cs: Use the error stream instead of hardcoding stderr. 
13323
13324 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13325
13326         * class.cs: Reduce code paths to test, too small of an
13327         optimization to make it worth the extra testing.  Always perform
13328         it. 
13329
13330 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13331
13332         Fix #74510.
13333         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
13334         operators that had errors reported on them.
13335
13336 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
13337
13338         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
13339         argument types.
13340         (Attribute.Resolve): Add named argument type checking.
13341         
13342         * class.cs (FixedField.Define): Use IsPrimitiveType
13343         
13344         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
13345         
13346         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
13347         unsafe parameter types.
13348         
13349         * statement.cs (Using.ResolveExpression): Add better error description.
13350         
13351         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
13352         
13353 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13354
13355         Fix #74484.
13356         * attribute.cs (Attribute.GetAttributeUsage): Resolve
13357         AttributeUsageAttribute in the emitcontext of the attribute class,
13358         not in the emitcontext of the attributable entity it was attached to.
13359         * cs-parser.jay: Use 'current_class', not 'current_container',
13360         when creating a GlobalAttribute.
13361
13362 2005-04-08  Alp Toker  <alp@atoker.com>
13363
13364         * pending.cs: The fix to #58413 failed to compile methods implementing
13365         interfaces with/without params modifiers and vice versa, even though
13366         params modifiers aren't part of the signature. Make the modifier check
13367         less strict as in csc.
13368
13369 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
13370             Anoob V E  <projectmonokochi@rediffmail.com>
13371             Harilal P R  <projectmonokochi@rediffmail.com>
13372
13373         Fix #58413.
13374         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
13375         modifiers of pending methods.
13376         (PendingImplementation.PendingImplementation): Initialize it.
13377         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
13378         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
13379         with ParameterData.  Add check for modifiers.
13380         * class.cs (MethodData.Define): Update to changes.
13381
13382 2005-04-07  Raja R Harinath  <rharinath@novell.com>
13383
13384         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
13385
13386 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
13387
13388         * class.cs (PropertyMethod.Define): Check private accessor in abstract
13389         property.
13390         
13391         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
13392         
13393         * rootcontext.cs,
13394         * typemanager.cs: Registered RequiredAttributeAttribute.
13395         
13396 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13397
13398         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13399         Warning CS0169 is back at level 3.
13400         (IMethodData.SetMemberIsUsed): New method.
13401         
13402         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13403         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13404         
13405         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13406
13407         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13408         contants.
13409         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13410         is used.
13411         
13412         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13413         is used.
13414         
13415         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13416         to avoid the problems with nested types.
13417
13418 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13419             Anoob V.E  <projectmonokochi@rediffmail.com>
13420             Harilal P.R  <projectmonokochi@rediffmail.com>
13421             Raja R Harinath  <rharinath@novell.com>
13422
13423         Fix #73820.
13424         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13425         attribute.
13426         * typemanager (GetConstructor): Make public.
13427
13428 2005-04-05  John Luke  <john.luke@gmail.com>
13429             Raja R Harinath  <rharinath@novell.com>
13430
13431         Fix #62232.
13432         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13433         struct too.  Return false quicker in a few cases.
13434         (VerifyUnManaged): Use it.
13435
13436 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13437
13438         Fix #74041.
13439         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13440         not 'unreachable_seen'.
13441
13442 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13443
13444         * attribute.cs (Attribute.GetValue): Removed unused.
13445         
13446         * codegen.cs (CodeGen.TrimExt): Removed unused.
13447         
13448         * cs-parser.jay (output): Removed unused.
13449         
13450         * cs-tokenizer.cs (hex_digits): Removed unused.
13451         
13452         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13453         
13454         * expression.cs (Indirection.LoadExprValue): Removed unused.
13455         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13456         
13457         * iterators.cs (Iterator.param_types): Removed unused.
13458         
13459         * statement.cs (Goto.block): Removed unused.
13460         (ToplevelBlock.did): Removed unused.
13461         (Switch.ResolveConstantSwitch): Removed unused.
13462
13463 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13464
13465         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13466         resetting thingy.
13467
13468 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13469
13470         Fix #74232 and cs0208-3.cs.
13471         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13472         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13473         unmanaged type.  Don't use FieldBuilders when 't' is a
13474         TypeBuilder.  Use ModFlags and MemberType fields.
13475         * class.cs (MemberBase.member_type): Rename from MemberType.
13476         (MemberBase.MemberType): New property.  Determines member_type on
13477         demand.
13478         (MemberBase.DoDefine): Don't initialize MemberType here.
13479         (FieldMember.Define): Likewise.
13480
13481 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13482
13483         Fix #74241
13484         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13485         Attributes are emitted there.
13486         
13487 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13488
13489         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13490         keyword in 'partial enum' too.
13491         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13492         is not allowed).
13493         Report from Kamil Skalski <nazgul@omega.pl>.
13494
13495         Fix #74309.
13496         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13497         have partial containers too.
13498
13499         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13500         in block' checks to Block.CheckInvariantMeaningInBlock.
13501         * statement.cs (Block.GetKnownVariableInfo): Make private.
13502         (Block.IsVariableUsedInChildBlock): Remove.
13503         (Block.IsVariableUsedInBlock): Likewise.
13504         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13505         conflicting declaration.
13506         (Block.AddVariable): Make error messages less long-winded and more
13507         specific.  Show location of conflicting declaration.
13508         * parameter.cs (Parameters.Location): New readonly property.
13509
13510 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13511
13512         Clean up semantics of invoking ResolveMemberAccess.
13513         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13514         can have an instance, ensure that we pass in a non-TypeExpression
13515         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13516         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13517         argument.  Update to changes and simplify.
13518         (FieldExpr.Emitinstance): Remove CS0120 check.
13519         (PropertyExpr.EmitInstance): Likewise.
13520         * expression.cs (Argument.Resolve): Likewise.
13521         (Invocation.DoResolve): Update to changes in semantics of
13522         InstanceExpression.
13523
13524 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13525
13526         Fix #74241
13527         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13528         customization.
13529         
13530         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13531
13532 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13533
13534         Fix difference in behaviour with commandline invocation.
13535         * driver.cs (Driver.Reset): New.
13536         (CompilerCallableEntryPoint): Call it.
13537
13538         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13539         variable" warnings if the boolean expression failed to resolve.
13540
13541 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13542
13543         * attribute.cs: Fix the union of several permissions when some of them
13544         are unrestricted (so the result isn't an unrestricted permission set).
13545         Fix #74036.
13546
13547 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13548
13549         * ecore.cs (MemberExpr): New class.  Convert from interface
13550         IMemberExpr.
13551         (MemberExpr.ResolveMemberAccess): Refactor and move here from
13552         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
13553         error checks.
13554         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
13555         (MethodGroupExpr.IsExplicitImpl): Remove.
13556         (Expression.GetFieldFromEvent): Remove.
13557         (SimpleName.MemberStaticCheck): Remove.
13558         (SimpleName.DoSimpleNameResolve): Update to changes.
13559         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
13560         (MemberAccess.IdenticalNameAndTypeName): Remove.
13561         (MemberAccess.error176): Move to MemberExpr.
13562         (MemberAccess.DoResolve): Update to changes.
13563         (BaseAccess.DoResolve): Likewise.
13564
13565 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
13566
13567         C# 2.0 Conditional attribute class implementation
13568         
13569         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
13570         Analyzes class whether it has attribute which has ConditionalAttribute
13571         and its condition is not defined.
13572         
13573         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
13574         (Class.IsExcluded): New method. Search for at least one defined
13575         condition in ConditionalAttribute of attribute class.
13576
13577 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13578
13579         * ecore.cs (PropertyExpr): Derive from Expression, not
13580         ExpressionStatement.
13581         (PropertyExpr.EmitStatement): Remove.
13582
13583 2005-03-29  Raja R Harinath  <rharinath@novell.com>
13584
13585         Fix #74060.
13586         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
13587         internal field "value__" of an enum be private.  The examples for
13588         "value__" that I found on MSDN all used FieldAttributes.Private.
13589
13590         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
13591         Don't mention IL method attribute names.
13592
13593         Fix #47991.  Remove a TODO.
13594         * statement.cs (Block.Toplevel): Make into a field.
13595         (Block.Parameters): Move into ToplevelBlock.
13596         (Block.known_variables): Rename from child_variable_names.
13597         (Block.Block): Remove variants that take Parameters.  Initialize
13598         'Toplevel' with the immediately surrounding toplevel block.
13599         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
13600         LocalInfo parameter.
13601         (Block.GetKnownVariableInfo): New.
13602         (Block.IsVariableNameUsedInChildBlock): Update.
13603         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
13604         the block, even though it may not be in scope.
13605         (Block.AddVariable): Remove Parameters parameter.  Use
13606         Toplevel.Parameters instead.
13607         (Block.AddConstant): Remove Parameters parameter.
13608         (Block.GetParameterReference): Update to use Toplevel.Parameters.
13609         (Block.IsParamaterReference): Likewise.
13610         (Block.IsLocalParameter): Likewise.  Simplify a lot.
13611         (ToplevelBlock.Parameters): New.  Moved from Block.
13612         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
13613         initialize Parameters to a non-null value.
13614         * cs-parser.jay: Update to changes.
13615         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
13616         simple names that mean different things in the same block.  Use
13617         Block.IsVariableNameUsedInBlock.
13618
13619 2005-03-28  Raja R Harinath  <rharinath@novell.com>
13620
13621         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
13622         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
13623         GetTypeHandle.  It is possible for a reflected type to derive from
13624         a TypeBuilder (e.g., int[] derives from the TypeBuilder
13625         System.Array during mscorlib compilation).
13626         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
13627         contain a method_hash, don't create one either.  Don't create a
13628         deep copy of the base cache's method_hash.
13629         (MemberCache.SetupCache): Rename back from DeepCopy.
13630         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
13631         already initialized.  If we see an override function, add its
13632         underlying base virtual function to the member_hash too.
13633
13634         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
13635
13636 2005-03-26  Raja R Harinath  <harinath@acm.org>
13637
13638         Fix #73038.
13639         * assign.cs (Assign.DoResolve): When the RHS of an assignment
13640         fails to resolve, ensure that the LHS is still resolved as an
13641         lvalue.
13642
13643 2005-03-25  Raja R Harinath  <harinath@acm.org>
13644
13645         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
13646         ec.ContainerType.
13647         (Enum.current_ec): Remove.
13648         (Enum.LookupEnumValue): Remove EmitContext argument.
13649         Just uses the one created during DefineType.
13650         (Enum.FindMembers): Update.
13651         * expression.cs (MemberAccess.DoResolve): Update.
13652
13653 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
13654
13655         * assign.cs (Assign.DoResolve): Check for CS1717 when
13656         source and target are same (uses Equals).
13657
13658         * expression.cs (LocalVariableReference, ParameterReference,
13659         This): Implemented Equals, GetHashCode.
13660
13661         * statement.cs (Block.GetParameterReference): Removed useless
13662         local variable.
13663
13664 2005-03-22  Raja R Harinath  <rharinath@novell.com>
13665
13666         Fix cs0128.cs
13667         * statement.cs (Block.AddVariable): Ensure that we skip implicit
13668         blocks before deciding whether the error is cs0136 or cs0128.
13669
13670         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
13671         (using_alias_directive, using_namespace_directive): Pass
13672         MemberName, not an expression to Namespace.UsingAlias and
13673         Namespace.Using.
13674         (MakeName): Use the MemberName of the namespace.
13675         * namespace.cs (Namespace.MemberName): New.
13676         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
13677         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
13678         Likewise.
13679         * decl.cs (MemberName.Name): Make readonly.
13680         (MemberName.FromDotted): New "constructor".
13681         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
13682         (MemberCore.Name): Compute from MemberName on demand.
13683         (MemberCore.SetMemberName): Provide a way to change the
13684         MemberName.
13685         (MemberCore.AddToContainer): Don't take a fullname parameter.
13686         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
13687         fully qualified name of the container to the member name.
13688         (TypeContainer.AddToTypeContainer): Use a fully qualified name
13689         only if the type is a member of the root container.
13690         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
13691         MemberName.Left rather than searching for an embedded ".".
13692         (PartialContainer.CreatePart): Update to changes in RootContext.
13693         (MemberBase.ShortName): Turn into a property.  Use
13694         MemberCore.SetMemberName.
13695         (MemberBase.ExplicitInterfaceName): Remove.
13696         (MemberBase.UpdateMemberName): Remove.
13697         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
13698         (PropertyBase.SetMemberName): New override.
13699         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
13700         (Tree.GetDecl): New.
13701         (Tree.AllDecls): Rename from Decls.
13702         * attribute.cs, enum.cs, report.cs: Update to changes.
13703         * driver.cs (MainDriver): Use MemberName.FromDotted on
13704         RootContext.MainClass.
13705
13706 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
13707
13708         * class.cs (FixedField.Define): Check for CS1664 and more sanity
13709         checks.
13710
13711         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
13712
13713 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
13714
13715         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
13716         property accessor modifiers.
13717
13718         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
13719         fixed buffer attribute (CS1716).
13720         (PropertyMethod.HasCustomAccessModifier): When property accessor
13721         has custom modifier.
13722
13723         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
13724         modifiers.
13725         (PropertyExpr.DoResolveLValue): Add CS0272.
13726
13727 2005-03-17  Miguel de Icaza  <miguel@novell.com>
13728
13729         * convert.cs: When converting to a pointer, use the proper Conv.U
13730         or Conv.I depending on the source data type.
13731
13732         * cs-tokenizer.cs: Make the size for large decimal constants,
13733         fixes #72957.
13734
13735 2005-03-17  Martin Baulig  <martin@ximian.com>
13736
13737         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
13738         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
13739
13740 2005-03-17  Martin Baulig  <martin@ximian.com>
13741
13742         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
13743         to bool so we can return an error condition.
13744         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
13745         returned an error.
13746
13747 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
13748
13749         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
13750         attributes.
13751
13752 2005-03-16  Raja R Harinath  <rharinath@novell.com>
13753
13754         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
13755         Refactor to avoid traversing the list of assemblies, and to avoid
13756         string concatenation.
13757         * typemanager.cs (guid_attr_type): Remove.
13758         (negative_hits, pointers, references): Remove hashes.
13759         (type_hash): New.
13760         (GetConstructedType): New.  Uses type_hash to handle constructed
13761         types (arrays, references, pointers).
13762         (GetReferenceType, GetPointerType): Use it.
13763         (GetNestedType): New.  Uses type_hash to handle nested types of
13764         reflected types.
13765         (LookupType, LookupTypeDirect): Remove.
13766         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
13767         'types' hash and LookupTypeReflection directly.
13768         (params_string, params_object): Use GetConstructedType.
13769         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
13770         top-level types.
13771         (Namespace.Lookup): Use cached_types.
13772         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
13773         provided by old TypeManager.LookupType.
13774         * rootcontext.cs (MakeFQN): Remove.
13775         * decl.cs (DeclSpace.MakeFQN): Likewise.
13776         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
13777         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13778         TypeManager.GetConstructedType.
13779         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
13780
13781 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
13782
13783         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
13784         indexers.
13785
13786         * cs-parser.jay: Reports CS1527 for any namespace element.
13787
13788         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
13789         Added CS0407.
13790
13791         * expression.cs (ParameterReference.IsAssigned): Changed error to
13792         CS0269.
13793         (Error_WrongNumArguments): Moved CS0245 detection here.
13794
13795         * statement.cs (Return.Resolve): Add CS1622 report.
13796
13797 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
13798
13799         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
13800
13801 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
13802
13803         * attribute.cs expression.cs: Get rid of some allocations.
13804
13805 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
13806
13807         * doc.cs : just eliminate the latest change.
13808
13809 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13810
13811         * doc.cs : commented out the latest change. It breaks xml-030.cs
13812
13813 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13814
13815         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
13816           fail. So invoke CreateType() in FindDocumentedType().
13817
13818 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13819
13820         * cs-tokenizer.cs : added IsKeyword().
13821         * doc.cs : Detect keyword incorrectly used as identifier.
13822           Allow identifiers prefixed by @.
13823
13824 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
13825
13826         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
13827         It caused exception in namespace resolving (again!).
13828         
13829         * class.cs (Class.ctor): Removed exit.
13830         (PropertyMethod.ctor): ditto.
13831         
13832         * codegen.cs (Codegen.Reset): Reset static data.
13833         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
13834         
13835         * cs-tokenizer.cs (Cleanup): Removed.
13836         
13837         * driver.cs (GetSystemDir): Rewrote to one line command.
13838         It caused problem with unloaded dynamic modules.
13839         (UnixParseOption): Removed Exit.
13840         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
13841         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
13842         Now can be mcs used as library.
13843         
13844         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
13845         empty location.
13846         
13847         * location.cs (Reset): Reset static data.
13848         
13849         * namespace.cs (Reset): Reset static data.
13850         
13851         * report.cs (Report.Reset): Reset static data.
13852         
13853         * rootcontext.cs (RootContext.Reset): Reset static data.
13854         
13855         * tree.cs (RootTypes.ctor): Use Location.Null
13856         
13857         * typemanager.cs (TypeManager.Reset): Reset static data.
13858         (CoreLookupType): Removed Exit.
13859         (TypeHandle.Reset): Reset static data.
13860         
13861 2005-03-10  Raja R Harinath  <rharinath@novell.com>
13862
13863         Fix #73516.
13864         * typemanager.cs (ComputeNamespaces): Import namespaces from
13865         referenced modules too.
13866
13867 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13868
13869         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
13870         than '.'.
13871
13872 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13873
13874         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
13875         enclosing DeclSpace.  This ensures that a name-lookup populates
13876         more caches and there are fewer 'TypeExpression's.  Carve out
13877         nested type lookup into ...
13878         (LookupNestedTypeInHierarchy): ... this.
13879
13880 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13881
13882         Clean up a few partial-class semantics.  
13883         Fixes test-357.cs and cs1618-2.cs.
13884         * cs-parser.jay (struct_declaration): Use 'current_class' as
13885         parent of newly-created struct.  Remove call to Register ().
13886         Use 'pop_current_class' to complete handing the current struct.
13887         (interface_declaration): Likewise.
13888         (class_declaration): Likewise.
13889         (enum_declaration): Use 'current_class' as parent of newly created
13890         enum.
13891         (delegate_declaration): Likewise.
13892         (pop_current_class): New function.  This is used to handle closing
13893         up the 'current_class' and 'current_container', and pointing them
13894         to the enclosing class/container.
13895         (CSharpParser): Initialize 'current_class' too.
13896         * decl.cs (MemberCore): Add check for invariant: a partial
13897         container is not a parsed entity, and thus does not enclose any
13898         parsed members.
13899         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
13900         (DeclSpace.BaseTypeExpr): Use it.
13901         (DeclSpace.LookupType): Add check for invariant.
13902         * class.cs (TypeContainer): Add check for invariant: a nested
13903         class should have the same NamespaceEntry as its enclosing class.
13904         (TypeContainer.EmitFieldInitializers): Make virtual.
13905         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
13906         MemberCore.
13907         (TypeContainer.Register): Remove.
13908         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
13909         null.  Use TypeResolveEmitContext for resolving base types and
13910         interfaces.  Move initialization of Parts.TypeBuilder here from
13911         ...
13912         (TypeContainer.DefineNestedTypes): ... here.
13913         (PartialContainer): Take a Namespace not a NamespaceEntry.
13914         (PartialContainer.Create): Don't use Register.  Call the
13915         appropriate Add... function directly.
13916         (ClassPart): Take both the PartialContainer and the enclosing
13917         class as constructor arguments.
13918         (ClassPart.EmitFieldInitializers): Override.
13919         (ClassPart.PartFindNestedTypes): Remove.
13920         (FieldBase.GetInitializerExpression): Resolve the initializer
13921         expression in the emit context of the enclosing class.
13922         * tree.cs (RootTypes): Remove Register ().
13923         
13924 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
13925
13926         * cs-parser.jay: Removed CS0134.
13927         
13928         * driver.cs: Removed CS1901.
13929         
13930         * expression.cs (SizeOf.DoResolve): Don't report CS0233
13931         for predefined types.
13932
13933 2005-03-07  Duncan Mak  <duncan@novell.com>
13934
13935         * codegen.cs (Save):  Catch UnauthorizedAccessException as
13936         well. Fixes bug #73454.
13937
13938 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
13939
13940         * cs-tokenizer.cs (xtoken): Add CS1035.
13941         
13942         * class.cs (MethodData.Define): Add CS0683.
13943         (FieldMember.ctor): Add CS0681.
13944
13945 2005-03-07  Raja R Harinath  <rharinath@novell.com>
13946
13947         * ecore.cs (SimpleName.DoResolve): Rename from
13948         SimpleName.DoResolveAllowStatic.
13949         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
13950         Pass 'intermediate' flag to MemberStaticCheck.
13951         (SimpleName.MemberStaticCheck): Skip "static check" only in case
13952         of "intermediate" lookups via MemberAccess.
13953         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
13954         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
13955
13956 2005-03-07  Raja R Harinath  <rharinath@novell.com>
13957
13958         Fix #73394.
13959         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
13960         slipped in because of variable names that are identical to a
13961         builtin type's BCL equivalent ('string String;', 'int Int32;').
13962         (PropertyExpr.EmitInstance): Likewise.
13963
13964 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
13965
13966         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
13967         
13968         * report.cs (warning_ignore_table): Made public.
13969
13970 2005-03-04  Raja R Harinath  <rharinath@novell.com>
13971
13972         Fix #73282.
13973         * class.cs (MethodData.Emit): Pass 'container' to
13974         container.GetObsoleteAttribute instead of 'container.Parent'.
13975
13976 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
13977
13978         * cs-parser.jay: Add 1534 error test.
13979
13980         * iterators.cs (Yield.CheckContext): Add error 1629.
13981         (Iterator.ctor): Save unsafe modifier.
13982         (MoveNextMethod.DoEmit): Restore unsafe context.
13983
13984         * namespace.cs (UsingAlias): Better error message.
13985
13986 2005-03-03  Dan Winship  <danw@novell.com>
13987
13988         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
13989         the warning message [#73219]
13990
13991 2005-03-03  Raja R Harinath  <rharinath@novell.com>
13992
13993         Fix compile with MCS 1.0.0.0.
13994         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
13995         w_restore to not depend on string constant folding.
13996
13997 2005-03-03  Raja R Harinath  <rharinath@novell.com>
13998
13999         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14000         CS0246 check to users who passed 'silent = false'.
14001         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14002         check.
14003         (SimpleName.SimpleNameResolve): Update.
14004         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14005         (MemberAccess.IdenticalNameAndTypeName): Update.
14006         * doc.cs (FindDocumentedTypeNonArray): Update.
14007
14008 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14009
14010         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14011         * parameters.cs (ComputeAndDefineParameters): Remove.
14012         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14013         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14014         Use GetParameterInfo.
14015
14016 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14017
14018         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14019
14020 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14021
14022         Unify DeclSpace.LookupType and DeclSpace.FindType.
14023         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14024         is in charge of defining nested types on demand.
14025         (DeclSpace.LookupType): Use it when the current_type is a
14026         TypeBuilder.  Use LookupTypeDirect for reflected types.
14027         (DeclSpace.FindType): Remove.
14028         (DeclSpace.LookupInterfaceOrClass): Likewise.
14029         (DeclSpace.DefineTypeAndParents): Likewise.
14030         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14031         DeclSpace.LookupType.
14032         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14033         * typemanager.cs (LookupType): Simplify.
14034         (AddUserType): Remove type from negative_hits.
14035         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14036         * class.cs (TypeContainer.FindMembers): Move handling of nested
14037         types ...
14038         (TypeContainer.FindMembers_NestedTypes): ... here.
14039         (TypeContainer.FindNestedType): Implement override.
14040         (ClassPart.FindNestedType): Delegate to PartialContainer.
14041         (ClassPart.PartFindNestedType): Looks up the nested types of the
14042         part alone.
14043
14044 2005-03-02  Martin Baulig  <martin@ximian.com>
14045
14046         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14047         static constructor in static classes.
14048
14049 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14050
14051         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14052         sizeParamIndex is not specified.
14053
14054 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14055
14056         Fix #73117
14057         * report.cs (WarningMessage.IsEnabled): Missing null check.
14058
14059 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14060
14061         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14062         in the fields and not in the properties.
14063
14064 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14065
14066         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14067         fields as well.
14068
14069 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14070
14071         * attribute.cs: Small refactoring (improved robustness).
14072         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14073         (ValidateGuid): Removed.
14074         (Resolve): Removed referenced to above mentioned.
14075         (GetAttributeUsage): Made private and changed to work without
14076         class assistance.
14077         (GetIndexerAttributeValue): Don't crash.
14078         (GetConditionalAttributeValue): Ditto.
14079         (GetClsCompliantAttributeValue): Ditto.
14080         (ExtractSecurityPermissionSet): All attributes exceptions are
14081         error 648.
14082         (GetPropertyValue): New helper.
14083         (GetMethodImplOptions): New method.
14084         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14085         some missing properties.
14086         
14087         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14088         (Method.ApplyAttributeBuilder): Updated.
14089         
14090         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14091         exception.
14092
14093 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14094
14095         Fix #73052.
14096         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14097         non-simple types (array, pointer, reference).
14098
14099 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14100
14101         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14102
14103         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14104         for operators.
14105         (Method.CheckBase): Catch wrong destructor here.
14106         (MethodData.Define): Add errors 550, 668.
14107
14108         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14109
14110         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14111
14112         * pending.cs (VerifyPendingMethods): Add error 551.
14113
14114         * typemanager.cs (CSharpName): Next error report helper.
14115
14116 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14117
14118         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14119         attributes. Removed useless attribute double check.
14120         It saves almost 2MBs for corlib.
14121
14122 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14123
14124         Fix #72924.
14125         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14126         called twice in case of error.
14127
14128 2005-02-23  Chris Toshok  <toshok@ximian.com>
14129
14130         Fix compiler portions of #72827.
14131         * statement.cs (Block.Emit): call Begin/EndScope on the
14132         EmitContext instead of the ILGenerator.
14133
14134         * codegen.cs (EmitContext.BeginScope): new method, call
14135         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14136         we have one.)
14137         (EmitContext.BeginScope): same, but EndScope and CloseScope
14138
14139         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14140         offset and call the superclass's OpenScope(int) with it.
14141         (SymbolWriter.CloseScope): get the current il
14142         offset and call superclass's CloseScope(int) with it.
14143
14144 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14145
14146         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14147         CS1677 for out and ref as well.
14148
14149         * class.cs (Method.Define): Add error CS1599 detection.
14150         
14151         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14152         
14153         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14154         
14155         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14156         
14157         * support.cs.cs (ModifierDesc): New helper method.
14158
14159 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14160             Abin Thomas  <projectmonokochi@rediffmail.com>
14161             Anoob V E  <projectmonokochi@rediffmail.com>
14162             Harilal P R  <projectmonokochi@rediffmail.com>
14163
14164         Fix #57851, #72718.
14165         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14166         MemberLookup (used for error reporting) actually returns a result.
14167         Fix error report number (122, not 112).
14168
14169 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14170             Anoob V E  <projectmonokochi@rediffmail.com>
14171             Harilal P R  <projectmonokochi@rediffmail.com>
14172
14173         Fix #71134.
14174         * pending.cs (PendingImplementation.GetAbstractMethods):
14175         Find NonPublic members too.
14176
14177 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14178
14179         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14180         Fixed error 217.
14181         
14182         * class.cs (MethodCore.CheckMethodAgainstBase):
14183         Add error 239 report.
14184
14185 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14186
14187         Fix #68955.
14188         * expression.cs (Invocation.IsApplicable): Make public.
14189         (Invocation.IsParamsMethodApplicable): Likewise.
14190         * delegate.cs (Delegate.VerifyApplicability): Don't use
14191         Invocation.VerifyArgumentCompat for parameter applicability
14192         testing.  Use Invocation.IsApplicable and
14193         Invocation.IsParamsMethodApplicable.
14194
14195 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14196
14197         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14198         
14199         * class.cs (Operator.Define): Add error 217 report.
14200         
14201 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14202
14203         * namespace.cs (UsingEntry.Resolve): Undo change below.
14204
14205 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14206
14207         Fix #72756.
14208         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14209         disable the error message when the extended MemberLookup also
14210         fails.
14211         (Expression.MemberLookupFinal): Update.
14212         (SimpleName.DoSimpleNameResolve): Update.
14213         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14214         Don't use MemberLookupFinal.
14215         (New.DoResolve): Update.
14216         (BaseAccess.CommonResolve): Update.
14217
14218 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14219
14220         Fix #72732.
14221         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14222         occured previously, don't resolve again.
14223
14224 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14225
14226         Fix #69949
14227         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14228         argument. Call ResolveAttributeUsage for unresolved.
14229         when types doesn't match ctor arguments.
14230         
14231         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14232         for nested attribute classes.
14233         (Class.attribute_usage): Removed.
14234         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14235         for attribute class.
14236         
14237         * ecore.cs (IsAttribute): Removed.
14238         
14239         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14240         
14241         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14242         now normal types.
14243         (attribute_types): Removed.
14244         (EmitCode): Global attributes are emited as the latest.
14245
14246 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14247
14248         * class.cs (EmitFieldInitializers): Don't emit field initializer
14249         for default values when optimilization is on.
14250         
14251         * constant.cs (Constant.IsDefaultValue): New property.
14252         
14253         * driver.cs: Add /optimize handling.
14254         
14255         * constant.cs,
14256         * ecore.cs,
14257         * literal.cs: Implement new IsDefaultValue property.
14258         
14259         * rootcontext.cs (Optimize): New field, holds /optimize option.
14260
14261 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14262
14263         Fix crasher in re-opened #72347.
14264         * namespace.cs (Namespace.Lookup): Return null if
14265         DeclSpace.DefineType returns null.
14266
14267         Fix #72678.
14268         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14269
14270 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14271
14272         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14273         now returns null if it cannot resolve to an lvalue.
14274         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14275         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14276         returned null.  Remove check for SimpleName.
14277         (EventExpr.DoResolveLValue): New.
14278         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14279         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14280         error from ...
14281         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14282         avoid CS0131 error.
14283         (Unary.ResolveOperator): Move CS0211 check ...
14284         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14285         CS0131 error.
14286         (Unary.DoResolveLValue): Simplify.
14287         (AddressOf.DoResolveLValue): New.
14288         (ArrayAccess.DoResolveLValue): New.
14289
14290 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14291
14292         * attribute.cs (Attribute.Resolve): Add arguments casting for
14293         when types doesn't match ctor arguments.
14294
14295 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14296
14297         Fix parts of #63202.
14298         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14299         lookup of operator in base type.  Ensure that all checks happen
14300         when the operator resolves to an "op_..." method.
14301
14302 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14303
14304         Fix #71992.
14305         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14306         'ignore_cs0104' parameter.  Pass it to ...
14307         (NamespaceEntry.Lookup): ... this.
14308         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14309         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14310         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14311         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14312         Update.  Request that cs0104 errors be ignored.
14313         (ComposedCast.ResolveAsTypeStep): Update.
14314
14315 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14316
14317         Fix #59209.
14318         * expression.cs (Invocation.BetterFunction): Remove support for
14319         comparing virtual functions and their overrides.
14320         (Invocation.IsOverride): New.
14321         (Invocation.OverloadResolve): Don't consider 'override' functions
14322         during candidate selection.  Store them in a lookaside list.
14323         If the selected method is a 'virtual' function, use the list to
14324         find any overrides that are closer to the LHS type.
14325
14326 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14327
14328         * expression.cs (New.DoResolve): Add complex core type reduction.
14329         (New.Constantify): Converts complex core type syntax like 'new int ()'
14330         to simple constant.
14331         
14332 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14333
14334         * decl.cs (EntryType.EntryType): New constructor to create an
14335         updated copy of a cache entry.
14336         (MemberCache.AddMethods): Use it.
14337         (MemberCache.ClearDeclaredOnly): Remove.
14338         (MemberCache.MemberCache): Update.
14339
14340 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14341
14342         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
14343         variable.  This one is represents the actual low-level declaration
14344         of the method, as opposed to the semantic level `IsStatic'.   
14345
14346         An anonymous method which is hosted into a static method might be
14347         actually an instance method.  IsStatic would reflect the
14348         container, while MethodIsStatic represents the actual code
14349         generated.
14350
14351         * expression.cs (ParameterReference): Use the new MethodIsStatic
14352         instead of IsStatic.
14353
14354         * anonymous.cs (AnonymousMethod.Compatible): Pass the
14355         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
14356         set on the current EmitContext. 
14357
14358         * expression.cs (Cast): Overload DoResolveLValue so we can pass
14359         resolve our casted expression as an LValue.  This triggers the
14360         proper LValue processing that is later required by Assign.
14361
14362         This fixes 72347.
14363
14364         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
14365
14366 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
14367
14368         C# 2.0 Fixed buffer implementation
14369
14370         * anonymous.cs: Update after RegisterHelperClass renaming.
14371
14372         * attribute.cs (AttributeTester.fixed_buffer_cache):
14373         Cache of external fixed buffers.
14374         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
14375         implementation if field is fixed buffer else null.
14376
14377         * class.cs
14378         (TypeContainer.AddField): Accept FieldMember instead of Field.
14379         (FieldBase.IsFieldClsCompliant): Extracted code from
14380         VerifyClsCompliance descendant customization.
14381         (FixedField): New class handles fixed buffer fields.
14382         (FixedFieldExternal): Keeps information about imported fixed
14383         buffer.
14384         (IFixedField): Make access to internal or external fixed buffer
14385         same.
14386
14387         * cs-parser.jay: Add fixed buffer parsing.
14388
14389         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
14390         buffer.
14391
14392         * expression.cs (Indirection): Extended implementation to accept
14393         fixed buffer field.
14394         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14395         (ElementAccess.MakePointerAccess): Get type as parameter.
14396         (DoResolve): Add fixed buffer field expression conversion.
14397         (DoResolveLValue): Ditto.
14398         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14399         (ArrayPtr): Derives from FixedBufferPtr.
14400         (ArrayPtr.Emit): Add extra emit for array elements.
14401
14402         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14403
14404         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14405         for compiler generated types.
14406         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14407
14408         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14409         and consume less memory.
14410         (Fixed.Resolve): Add fixed buffer case.
14411
14412         * typemanager.cs (compiler_generated_attr_ctor,
14413         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14414         (HasElementType): Add our own implementation to work on every
14415         runtime.
14416
14417 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14418
14419         * anonymous.cs (CaptureContext): Track whether `this' has been
14420         referenced.   
14421
14422         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14423         only captured `this' if it was implicitly done (instance
14424         methods/variables were used). 
14425
14426         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14427         `this' must be captured.
14428
14429 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14430  
14431         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14432         is null it means that there has been no need to capture anything,
14433         so we just create a sibling.
14434
14435         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14436
14437         Just a partial fix.  The other half is fairly elusive.
14438         
14439 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14440
14441         Fix #52586, cs0121-4.cs.
14442         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14443         and return a hashtable.
14444         (MemberCache.ClearDeclaredOnly): New.
14445         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14446         the method_hash of a base type too.
14447         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14448         type methods.  Overwrite entries with the same MethodHandle so
14449         that the ReflectedType is correct.  The process leaves in base
14450         virtual functions and their overrides as distinct entries.
14451         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14452         matters since it was boxed in a ArrayList before.
14453         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14454         modifier.
14455         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14456         case of a virtual function and its override (choose the overload
14457         as better).
14458         (Invocation.OverloadResolve): Avoid 'override' members during
14459         'applicable_type' calculation.
14460
14461 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14462
14463         Combine two near-redundant caches.
14464         * typemanager.cs (method_params): Rename from method_internal_params.
14465         (TypeManager.GetParameterData): New.  Replace
14466         Invocation.GetParameterData.
14467         (TypeManager.LookupParametersByBuilder): Remove.
14468         * expression.cs (Invocation.method_parameter_cache): Remove.
14469         (Invocation.GetParameterData): Remove.
14470         Update to changes.
14471         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14472         Update to changes.
14473
14474 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14475
14476         Fix #72015.
14477         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14478         TypeManager.multicast_delegate_type is null, resolve it by looking
14479         up "System.MulticastDelegate".
14480         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14481
14482 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14483             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14484             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14485
14486         Fix cs0164.cs.
14487         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14488         (LabeledStatement.AddReference): New.  Set 'referenced'.
14489         (Goto.Resolve): Use it.
14490
14491 2005-02-05  John Luke  <john.luke@gmail.com>
14492
14493         * driver.cs: remove duplicate -doc line in Usage ()
14494
14495 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14496
14497         * location.cs (Location.AddFile): Fix CS2002 error report.
14498
14499 2005-02-02  Martin Baulig  <martin@ximian.com>
14500
14501         * delegate.cs (Delegate.DefineType): Report an internal error if
14502         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14503         details.        
14504
14505 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14506
14507         Fix a crasher in a variant of #31984.
14508         * const.cs (Constant.CheckBase): New override that defers the
14509         new-or-override check in case the base type hasn't been populated
14510         yet.
14511         (Constant.Define): Ensure the new-or-override check is performed.
14512
14513 2005-02-01  Duncan Mak  <duncan@ximian.com>
14514
14515         * const.cs (LookupConstantValue): Check that `ce' is not null
14516         before calling GetValue ().
14517
14518 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14519
14520         Fix test-334.cs (#69519).
14521         * cs-parser.jay (using_alias_directive): Pass in an expression to
14522         NamespaceEntry.UsingAlias.
14523         (using_namespace_directive): Pass in an expression to
14524         NamespaceEntry.Using.
14525         (namespace_name): Don't flatten to a string.
14526         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14527         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14528         ResolveAsTypeStep.
14529         (NamespaceEntry.UsingEntry): Likewise.
14530         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14531         changes.
14532         (NamespaceEntry.LookupForUsing): Remove.
14533         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14534         names.
14535         (NamespaceEntry.Lookup): Remove support for dotted names.
14536
14537 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14538
14539         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14540         split into two.
14541         (NamespaceEntry.ImplicitParent): Compute on demand.
14542         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14543         parallels the current.
14544         (NamespaceEntry.LookupForUsing): Use it.
14545         (NamespaceEntry.Lookup): If the current namespace-entry is
14546         implicit, don't search aliases and using tables.
14547
14548 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14549
14550         Fix #31984.
14551         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
14552         BaseCache here.
14553         (TypeContainer.BaseCache): Compute on demand.
14554         (TypeContainer.FindMembers): Define constants and types if they're
14555         not already created.
14556         (FieldMember.Define): Move resetting of ec.InUnsafe before error
14557         check.
14558         * const.cs (Constant.Define): Make idempotent.
14559
14560 2005-01-29  Miguel de Icaza  <miguel@novell.com>
14561
14562         * pending.cs: Produce better code (no nops produced by using Ldarg
14563         + value).
14564         
14565         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
14566         i - 1' it should be arg + 1.
14567
14568         Fixes bug #71819.
14569
14570 2005-01-28  Raja R Harinath  <rharinath@novell.com>
14571
14572         * attribute.cs (Attribute.CheckAttributeType): Make private
14573         non-virtual.
14574         (Attribute.ResolveType): Make virtual.
14575         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
14576         handling of RootContext.Tree.Types.
14577
14578 2005-01-27  Raja R Harinath  <rharinath@novell.com>
14579
14580         Update attribute-handling to use the SimpleName/MemberAccess
14581         mechanisms.
14582         * cs-parser.jay (attribute): Pass in an expression to the
14583         constructors of Attribute and GlobalAttribute.
14584         * attribute.cs (Attribute): Take an expression for the name.
14585         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
14586         passed in attribute name expression.
14587         (Attribute.CheckAttributeType): Use it.
14588         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
14589         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
14590         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
14591         argument to prevent error messages if the lookup fails.
14592
14593 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
14594
14595         * expression.cs (Indirection): Implemented IVariable interface
14596         to support indirection in AddressOf operator.
14597         (PointerArithmetic.Emit): Add optimalization for case where
14598         result can be precomputed.
14599
14600 2005-01-26  Martin Baulig  <martin@ximian.com>
14601
14602         * class.cs (TypeContainer.AttributeTargets): Return the correct
14603         AttributeTargets depending on our `Kind' instead of throwing an
14604         exception; fixes #71632.
14605
14606 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
14607
14608         Fix #71257
14609         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
14610         constant members.
14611
14612 2005-01-25  Raja R Harinath  <rharinath@novell.com>
14613
14614         Fix #71602.
14615         * expression.cs (MemberAccess.DoResolve): Don't complain with
14616         cs0572 when the LHS of a member access has identical name and type
14617         name.
14618
14619 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
14620
14621         Fix #71651, #71675
14622         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
14623         CreatePermission.
14624         Create custom PermissionSet only for PermissionSetAttribute.
14625
14626 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
14627
14628         Fix #71649
14629         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
14630         delegates in static class.
14631
14632 2005-01-24  Martin Baulig  <martin@ximian.com>
14633
14634         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14635         merging an implicit block, just use its reachability.
14636
14637         * statement.cs (Block.Resolve): Make the unreachable code check
14638         work wrt. implicit blocks; see test-337 from #63842.
14639
14640 2005-01-21  Alp Toker  <alp@atoker.com>
14641  
14642         * cs-parser.jay: destructor_declaration's container is PartialContainer
14643         not Class when partial types are used, so use Kind prop instead of
14644         'is'.
14645         
14646 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
14647
14648         * cs-parser.jay: Improve error reporting when an interface
14649         declares new types.
14650
14651 2005-01-20  Dick Porter  <dick@ximian.com>
14652
14653         * support.cs: SeekableStreamReader fix from Sandor Dobos
14654         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
14655         chars are read.  Fixes bug 70369.
14656
14657 2005-01-20  Raja R Harinath  <rharinath@novell.com>
14658
14659         * cs-parser.jay (catch_clause): Simplify current_block handling
14660         somewhat.
14661
14662 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
14663
14664         * convert.cs (ImplicitStandardConversionExists): Synchronize the
14665         code with ImplicitStandardConversion to handle the implicit
14666         conversion of method groups into valid delegate invocations. 
14667
14668         The problem is that in parameter handling we were using this code
14669         path.  Fixes bug #64698
14670
14671 2005-01-19  Raja R Harinath  <rharinath@novell.com>
14672
14673         * cs-parser.jay: Fix several infelicities.
14674         - Avoid assigning to the parser value stack.  Code like 
14675           '$3 = null' is unclean.  Synthesize a value for the code block
14676           instead. 
14677         - Avoid using oob_stack for storing location information.  Use ...
14678         (_mark_): ... this.  New (empty) rule.  Saves the current location
14679         in $$.
14680         (foreach_statement): Avoid using oob_stack for current_block
14681         handling.  Use technique used in for_statement and
14682         using_statement.  Synthesize a value for the code block to store
14683         additional intermediate information.
14684
14685 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
14686
14687         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
14688         of a different type is only allowed to private fields of a
14689         containing type, not on fields of a base class.
14690
14691         See test-174.cs and error cs0122-9.cs
14692
14693 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14694
14695         Fix test-335.cs (bug #58126).
14696         * cs-parser.jay (argument): Split out non-expression parts of the
14697         rule into 'non_simple_argument'.
14698         (invocation_expression): Support parenthesized invocations with
14699         multiple arguments, and with single non-simple arguments.
14700
14701 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14702
14703         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
14704         places.
14705
14706 2005-01-12  Raja R Harinath  <rharinath@novell.com>
14707
14708         Fix cs0038-1.cs, cs1640-6.cs.
14709         * ecore.cs (Expression.Resolve): Remove special-case for
14710         SimpleName in error-handling.
14711         (Expression.almostMatchedMembers): Relax access permission to
14712         protected.
14713         (Expression.MemberLookupFailed): Handle duplicates in
14714         almostMatchedMembers list.
14715         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
14716         * expression.cs (New.DoResolve): Report CS1540 for more cases.
14717         * typemanager.cs (GetFullNameSignature): Use the MethodBase
14718         overload if the passed in MemberInfo is a MethodBase.
14719
14720 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
14721
14722         Fix #70749
14723         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
14724         for non-CAS & merge permission sets properly.
14725
14726 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14727
14728         Improve standard-compliance of simple name and member access 
14729         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
14730         * ecore.cs (FullNamedExpression): New abstract base class 
14731         for Namespaces and TypeExpressions.
14732         (ResolveFlags.SimpleName): Remove.
14733         (SimpleName): Remove support for dotted names.
14734         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
14735         DeclSpace.FindType and DeclSpace.LookupType.
14736         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
14737         (Expression.ExprClassName): Make member function.
14738         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
14739         a namespace.  Remove creation of dotted "SimpleName"s.
14740         (MemberAccess.DoResolve): Likewise.
14741         * decl.cs (DeclSpace.Cache): Make private.
14742         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
14743         (DeclSpace.FindType): Update.
14744         (DeclSpace.LookupType): Move here from RootContext.  Return a 
14745         FullNamedExpression.
14746         * namespace.cs (Namespace): Derive from FullNamedExpression
14747         so that it can be part of expression resolution.
14748         (Namespace.Lookup): Return an FullNamedExpression.
14749         (NamespaceEntry.LookupAlias): Lookup aliases only in current
14750         namespace.
14751         * rootcontext.cs (NamespaceLookup): Remove.
14752         (LookupType): Move to DeclSpace.
14753         * attribute.cs (CheckAttributeType): Update.
14754         * doc.cs (FindDocumentedType): Remove allowAlias argument.
14755         (FindDocumentedTypeNonArray): Likewise.
14756
14757 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14758
14759         Fix cs0509.cs, cs1632.cs.
14760         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
14761         is the same as IsInterface.
14762         (TypeContainer.GetClassBases): Likewise.
14763         * statement.cs (LabeledStatement.ig): New field.
14764         (LabeledStatement.LabelTarget): Save ILGenerator which created the
14765         label.
14766         (LabeledStatement.DoEmit): Check that the label was created with
14767         the same ILGenerator.
14768
14769 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14770
14771         Fix #71058
14772         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
14773         accessors to its properties.
14774
14775         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
14776         from accessors to property.
14777         
14778 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14779
14780         Fix #70722
14781         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
14782         only for overrides.
14783         
14784 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
14785
14786         * attribute.cs: Check for null and empty strings.  
14787
14788         I have lost another battle to Paolo.
14789
14790 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
14791
14792         Fix #70942
14793         * class.cs (PropertyMethod): Set Parent field in ctors.
14794         (SetMethod.InternalParameters): Add unsafe switch hack.
14795         Override MarkForDuplicationCheck where it is appropriate.
14796
14797         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
14798         It says whether container allows members with the same name.
14799         Base default is no.
14800         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
14801         Removed is_method parameter.
14802
14803 2005-01-06  Duncan Mak  <duncan@ximian.com>
14804
14805         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
14806         because the previous change led to incorrect reporting of CS1032
14807         ("Cannot define/undefine preprocessor symbols after first token in
14808         file"). Instead of using `tokens_seen' as the only flag that
14809         triggers CS1040, introduce `comments_seen'. This new flag is used
14810         to signify having seen comments on the current line, so it is
14811         unset after a newline.
14812
14813 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14814
14815         * doc.cs : When searching for a type, find nested type too.
14816           This fixes bug #71040.
14817
14818 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14819
14820         * doc.cs :
14821           - Warn missing member comment on those classes which also does not
14822             have doc comments. Fixed bug #71041.
14823           - Don't warn missing doc comment on default constructor.
14824             Fixed bug #71042.
14825
14826 2005-01-06  Duncan Mak  <duncan@ximian.com>
14827
14828         * cs-tokenizer.cs (xtoken): After handling traditional C-style
14829         comments, set `tokens_seen' to true. This allows us to detect
14830         misplaced preprocessor directives (i.e. not at the beginning of
14831         the a line, nor after whitespaces). In that case, report error
14832         CS1040. This fixes bug #56460.
14833
14834         * cs-parser.jay (interface_member_declaration): Add checks for
14835         IsExplicitImpl, and report CS0541 error if an interface member is
14836         defined as an explicit interface declaration.
14837
14838 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
14839
14840         Fix #70817
14841         * class.cs (PropertyMethod): Set Parent field in ctors.
14842         (SetMethod.InternalParameters): Add unsafe switch hack.
14843         
14844         * decl.cs (MemberCore.Parent): Cannot be readonly.
14845
14846 2005-01-06  Raja R Harinath  <rharinath@novell.com>
14847
14848         * decl.cs (DeclSpace.ResolveType): Remove.
14849         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
14850         Merge in code from ...
14851         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
14852         * class.cs, enum.cs: Update to changes.
14853
14854 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
14855
14856         * anonymous.cs: Ensure that we init the scope of our parent if it
14857         has not been initialized yet.
14858
14859 2004-12-30  Duncan Mak  <duncan@ximian.com>
14860
14861         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
14862         if field.FieldBuilder is null. Fixes #70758.
14863
14864         * convert.cs: Fixed some typos and updated some of the comments.
14865         (ImplicitStandardConversionExists):
14866         (TryImplicitIntConversion): If `target_type' is an interface and
14867         the type of `ic' implements this interface, return true or a new
14868         BoxedCast instead of null. This fixes #70468.
14869
14870 2004-12-29  Duncan Mak  <duncan@ximian.com>
14871
14872         * expression.cs (Argument.Emit): Check that Expr is
14873         IMemoryLocation before casting to it, and report CS1510 otherwise.
14874
14875         This fixes #70402.
14876
14877 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
14878
14879         * statement.cs (Block.ThisVariable): remove the recursion here, to
14880         make the --profile more sane.
14881
14882 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
14883
14884         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
14885         assembly, by JB Evain.
14886
14887 2004-12-17  Raja R Harinath  <rharinath@novell.com>
14888
14889         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
14890           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
14891         "parent" refers to enclosing type/class.  "base" refers to superclass.
14892
14893 2004-12-17  Raja R Harinath  <rharinath@novell.com>
14894
14895         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
14896         Ensure that we only have GlobalAttributes.
14897         * attribute.cs (Attribute.Emit): Make non-virtual.
14898         (GlobalAttribute.Emit): Remove.
14899         (Attribute.Resolve): Make virtual.
14900         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
14901         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
14902         the argument. Don't create one.
14903         (Attribute.GetObsoleteAttribute): Likewise.
14904         (Attribute.GetClsCompliantAttributeValue): Likewise.
14905         * class.cs, decl.cs: Update to changes.
14906
14907 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
14908
14909         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
14910         
14911         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
14912         
14913         * statement.cs (Foreach.Resolve): Add error 186 report.
14914
14915 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
14916
14917         * expression.cs (Conditional.DoResolve): Add warning 429.
14918         
14919         * statement.cs (If.Resolve): Add warning 665.
14920
14921 2004-12-16  Raja R Harinath  <rharinath@novell.com>
14922
14923         New invariant: RootContext.Tree.Types.NamespaceEntry == null
14924         except when in the parser, and in GlobalAttribute.
14925         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
14926         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
14927         RootContext.Tree.Types.NamespaceEntry once work is done.
14928         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
14929         and resets RootContext.Tree.Types.NamespaceEntry.
14930
14931 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
14932
14933         * cs-parser.jay: Don't create a block for every variable.
14934
14935 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
14936
14937         * location.cs: Provide extra information.
14938
14939         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
14940         variables from the captured environment, it is the ldarg_0.
14941
14942 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
14943
14944         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
14945         find a conclusion.
14946         
14947         * class.cs: Changed warning level for 169 to avoid developer
14948         displeasure from warning flooding. It will be changed back when they
14949         fix most of current BCL warnings.
14950         
14951         * RootContext.cs: Pushed default WarningLevel to 3.
14952         
14953         * statement.cs: Removed unused variable.
14954
14955 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
14956
14957         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
14958         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
14959         Add error 502 report.
14960         (StaticClass.DefineType): Add error 441 report.
14961         (Class.AllowedModifiersProp): New virtual property as temporary
14962         extension to AllowedModifiers.
14963         (Class.DefineType): Add error 418 report. Moved ModFlags check here
14964         to share implementation with StaticClass and don't call virtual
14965         methods from ctor.
14966         
14967         * driver.cs (MainDriver): Add error 1558 test.
14968
14969         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
14970         report. Moved error 36 test here.
14971
14972         * statement.cs (Throw.Resolve): Add error 724 report.
14973
14974         * typemanager.cs: Add out_attribute_type core type.
14975         
14976 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
14977
14978         * class.cs (TypeContainer.VerifyClsCompliance): Add error
14979         3018 report.
14980         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
14981
14982         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
14983         3017 report.
14984         
14985         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
14986
14987         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
14988         Add error 3023 report.
14989         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
14990
14991         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
14992         implementation.
14993
14994 2004-12-12  John Luke  <john.luke@gmail.com>
14995
14996         * driver.cs (AddArgs): take -- into account when
14997         adding arguments, fixes bug 65710 
14998
14999 2004-12-12  Martin Baulig  <martin@ximian.com>
15000
15001         * expression.cs (Unary.TryReduceNegative): Added support for
15002         SByteConstant and ByteConstant.
15003         (Unary.Reduce): Check error values from TryReduceNegative().
15004
15005 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15006
15007         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15008         and report exception as error 182.
15009
15010 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15011
15012         * driver.cs (Main): Fix message when there are warnings.
15013
15014 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15015
15016         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15017
15018 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15019
15020         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15021         Reduced number of warnings.
15022         
15023         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15024
15025 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15026
15027         * driver.cs: Removed message.
15028
15029         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15030
15031 2004-12-08    <vargaz@freemail.hu>
15032
15033         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15034
15035 2004-12-08  Martin Baulig  <martin@ximian.com>
15036
15037         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15038         instead of a CS3002 for properties and indexer.
15039
15040 2004-12-08  Martin Baulig  <martin@ximian.com>
15041
15042         * decl.cs (MemberName.ToString): Make this work again.
15043
15044 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15045
15046         * attribute.cs (Resolve): Add error 591 detection.
15047
15048         * class.cs (FieldMember.Define): Add error 1547 detection.
15049         (Indexer.Define): Add error 620 detection.
15050         (Operator.Define): Add error 590 detection.
15051
15052         * ecore.cs: Missing argument for error 79.
15053
15054         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15055         detection.
15056
15057 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15058
15059         Fix #70106
15060         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15061         only.
15062
15063 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15064
15065         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15066           Some operator comments were suppressed.
15067         * doc.cs : Implicit/explicit operator name in doc comments are like
15068           "op_Explicit(type)~returnType", so added suffix handling.
15069
15070 2004-12-07  Martin Baulig  <martin@ximian.com>
15071
15072         * decl.cs
15073         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15074         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15075         (DeclSpace.ec): New protected field; store the EmitContext here.
15076         (DeclSpace.EmitContext): New public property; moved here from
15077         `TypeContainer'.
15078         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15079         EmitContext.
15080
15081         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15082         (Enum.Emit): Don't create a new EmitContext.
15083
15084         * delegate.cs (Delegate.DefineType): Always create the
15085         EmitContext.
15086
15087         * iterators.cs (Iterators.DefineIterator): Create a new
15088         EmitContext and store it in `ec'.
15089
15090 2004-08-24  Martin Baulig  <martin@ximian.com>
15091
15092         * typemanager.cs
15093         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15094         this for accessibility checks.
15095         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15096         IsNestedFamilyAccessible.
15097         (TypeManager.IsSubclassOf): New method, do what the name actually
15098         says.   
15099
15100 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15101
15102         Fix crash on cs0657-17.cs.
15103         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15104         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15105         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15106         the case where the NamespaceEntry gets overwritten.
15107
15108 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15109
15110         Fixed #69195, #56821
15111         * ecore.cs (ResolveBoolean): Tiny refactoring.
15112
15113         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15114         of right expression resolving when left is false constant and
15115         operator is LogicalAnd OR true constant and operator is LogicalOr.
15116
15117         * statement.cs (ResolveUnreachable): Always reports warning.
15118
15119 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15120
15121         * class.cs: Distinguish between 1721 and 1722 (just a little help
15122         for the programmer).
15123
15124 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15125
15126         * delegate.cs: Only allow this on new versions of the language. 
15127
15128 2004-12-02  Duncan Mak  <duncan@ximian.com>
15129
15130         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15131         Expression class.
15132         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15133         here as a static method. Take an additional bool out parameter
15134         `must_do_cs1540_check' for signaling to InstanceResolve.
15135         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15136         member field from PropertyExpr class and made it an argument of
15137         the method instead.
15138         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15139         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15140         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15141         and `remove_accessor' as well as InstanceResolve: report CS0122
15142         where applicable.
15143
15144         Fixes #70129.
15145
15146 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15147
15148         Fix test-327.cs, test-328.cs, and put in early infrastructure
15149         for eventually fixing #52697.
15150         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15151         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15152         from other methods.
15153         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15154         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15155         (VerifyUsing, error246): Update.
15156         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15157         'NamespaceEntry.LookupNamespaceOrType'.
15158
15159 2004-12-03  Martin Baulig  <martin@ximian.com>
15160
15161         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15162         method as our child, call AnonymousMethod.Compatible() on it.
15163
15164 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15165
15166         Disable XML documentation support in 'basic' profile.
15167         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15168         Redirect XmlElement to System.Object.
15169         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15170         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15171         * mcs.exe.sources: Add doc-bootstrap.cs.
15172         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15173         of doc.cs.
15174
15175 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15176
15177         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15178           comments are allowed.
15179
15180 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15181
15182         * delegate.cs: Add checks for subtypes in paramaters and return values
15183         in VerifyMethod () to add support for Covariance/Contravariance
15184         in delegates.
15185         
15186 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15187
15188         * report.cs: Remove extra closing parenthesis.
15189
15190         * convert.cs (Error_CannotImplicitConversion): If the name of the
15191         types are the same, provide some extra information.
15192
15193         * class.cs (FieldBase): Use an unused bit field from the field to
15194         encode the `has_offset' property from the FieldMember.  This saves
15195         a couple of Ks on bootstrap compilation.
15196
15197         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15198         method as our child, return the AnonymousMethod resolved
15199         expression.
15200
15201         * expression.cs (New.DoResolve): Allow return values from
15202         NewDelegate to also include AnonymousMethods.
15203
15204         Fixes #70150.
15205
15206 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15207
15208         Fix bug #70102
15209         * attribute.cs (Resolve): Improved implementation of params
15210         attribute arguments.
15211
15212         * support.cs (ParameterData): Add HasParams to be faster.
15213
15214 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15215
15216         all things are for /doc support:
15217
15218         * doc.cs: new file that supports XML documentation generation.
15219         * mcs.exe.sources: added doc.cs.
15220         * driver.cs:
15221           Handle /doc command line option.
15222           Report error 2006 instead of 5 for missing file name for /doc.
15223           Generate XML documentation when required, after type resolution.
15224         * cs-tokenizer.cs:
15225           Added support for picking up documentation (/// and /** ... */),
15226           including a new XmlCommentState enumeration.
15227         * cs-parser.jay:
15228           Added lines to fill Documentation element for field, constant,
15229           property, indexer, method, constructor, destructor, operator, event
15230           and class, struct, interface, delegate, enum.
15231           Added lines to warn incorrect comment.
15232         * rootcontext.cs :
15233           Added Documentation field (passed only when /doc was specified).
15234         * decl.cs:
15235           Added DocComment, DocCommentHeader, GenerateDocComment() and
15236           OnGenerateDocComment() and some supporting private members for
15237           /doc feature to MemberCore.
15238         * class.cs:
15239           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15240         * delegate.cs:
15241           Added overriden DocCommentHeader.
15242         * enum.cs:
15243           Added overriden DocCommentHeader and GenerateDocComment().
15244
15245 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15246
15247         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15248         unwrapping the enumeration values, chain to
15249         DoConstantNumericPromotions again, so we can promote things to the
15250         fundamental types (takes care of enums that are bytes, sbytes).
15251
15252         Fixes bug #62054.
15253
15254 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15255
15256         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15257         Fix long-standing bug in type-lookup.  Use FindType instead of
15258         LookupType when ec.ResolvingTypeTree.
15259         (Attribute.ResolveType, Attribute.Resolve)
15260         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15261         Update to changes.
15262         (Attributes.Search): Remove internal version.  Update.
15263         (Attributes.SearchMulti): Update.
15264         (Attributes.GetClsCompliantAttribute): Remove.
15265         (Attributes.GetIndexerNameAttribute): Remove.
15266         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15267         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15268         * class.cs (Indexer.Define): Likewise.
15269
15270 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15271
15272         Fix bug #68790
15273         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15274         MarshallByReference members access.
15275
15276         * expression.cs: Use CheckMarshallByRefAccess;
15277         Better error CS0197 message.
15278
15279         * report.cs: Print whole related error message.
15280
15281 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15282
15283         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15284         the current directory to help debugging.
15285
15286 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15287
15288         * class (GetClassBases): Better error 60 report.
15289         (EventProperty): Disabled warning 67 detection.
15290
15291 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15292
15293         Fix bug #60324
15294         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15295
15296         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15297         precise values.
15298
15299 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15300
15301         Fix bug #49488
15302         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15303
15304         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15305
15306 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15307
15308         * attribute.cs (Attribute.Resolve): Refine error reporting and
15309         report a cs0117 if the identifier does not exist, to distinguish
15310         from 0617 which is a miss-use of the actual identifier.
15311
15312         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15313         between cs0070 and cs0079.
15314
15315         * class.cs (MemberBase.DoDefine): When reporting a wrong
15316         accessibility level, we use MethodCore to compare instead of
15317         Method (this was a regression in some refactoring effort).
15318
15319         So now we correctly report cs0056 again.
15320
15321         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15322         testing the target_type (which was known to be object_type) and
15323         not the source type (which is anonymous_method).
15324
15325         Fixed reporting of error cs1660.
15326
15327         * expression.cs (UserCast.Source): Expose the underlying cast.
15328
15329         * statement.cs (Switch.SwitchGoverningType): Sort the list of
15330         allowed types to find a match to int32 first (most common).
15331
15332         In addition, it ignores any ImplicitUserConversions that did an
15333         internal implicit conversion (as the switch statement allows only
15334         one integral conversion to exist).
15335
15336         * class.cs (PartialContainer.Create): rename `name' to
15337         `member_name' for clarity.  Then replace the string calls with a
15338         call to MemberName.GetPartialName, as now using
15339         MemberName.ToString is an error (this is due to the side effects
15340         it had, that were fixed in the past).
15341
15342         This will restore the error reporting on a number of partial class
15343         errors that were missusing this (and getting an exception as a
15344         results, which is now just a plain textual warning, because
15345         yyparse debug output would crash otherwise).
15346
15347 2004-11-26  Raja R Harinath  <rharinath@novell.com>
15348
15349         * Makefile (PROGRAM_INSTALL_DIR): Remove.
15350
15351 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15352
15353         * rootcontext.cs (LookupType): Make sure to cache lookups that
15354         don't give us a negative result. This saves about 5% of corlib
15355         compilation time.
15356
15357 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15358
15359         * report.cs (AbstractMessage.Print): messages are sent to stderr
15360
15361         * class.cs (TypeContainer.GetClassBases): It is an error to have a
15362         non-interface in the list of interfaces (at this point, either
15363         parent was properly set, or a base class is being listed in the
15364         interfaces section).
15365
15366         This flags error 1722, and resolves the crash from bug 69259.
15367
15368 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15369
15370         * statement.cs (Using.EmitExpressionFinally): make this work right
15371         for valuetypes. Fixes 69926.
15372
15373 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15374
15375         * const.cs (Const.ChangeType): Cope with the "0 literal can be
15376         converted to an enum" here, before we try to change the underlying
15377         type.  This code exists, but it is a different code path than the
15378         one used while encoding constants.
15379
15380         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
15381         old bug: when converting from the null literal to a pointer,
15382         return an EmptyCast, not the NullLiteral.
15383
15384         This fixes #69921, the recent null_type changes probably made this
15385         bug more prominent.
15386
15387         (ImplicitReferenceConversionExists): In addition, resynchronized
15388         the code here, so it matches the same code in
15389         ImplicitReferenceConversionExists for the `from any class-type S
15390         to any interface-type T'.
15391         
15392
15393 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15394
15395         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15396
15397 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15398
15399         * cs-parser.jay: Use verbosity accordingly. 
15400
15401 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15402
15403         * expression.cs (Unary.ResolveOperator): Do not report warning;
15404         AddressOf reads from variable.
15405         
15406         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15407
15408 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15409
15410         Fix bug #69462
15411
15412         * attribute.cs (Attributable): Removed CheckTargets.
15413         (Attributes.Emit): Explicit attribute targets are tested here.
15414
15415         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15416         not enabled for interfaces.
15417
15418         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15419         (GetAssemblyName): Ouch next bug there.
15420
15421 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15422
15423         * expression.cs: Error 275 added.
15424         
15425 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15426
15427         Fix bug #69177 (Implemented decimal constant support)
15428
15429         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15430         (BinaryFold): Add DecimalConstant.
15431
15432         * const.cs (Define): Decimal constant 
15433         (is not constant.
15434         (ChangeType): Add decimal type handling.
15435         (LookupConstantValue): Don't set value for decimal type but
15436         emit DecimalConstantAttribute. Needed for constant optimization.
15437
15438         * constant.cs (ToDecimal): New method.
15439         (ConvertToDecimal): New method.
15440         (IntConstant): Implemented ConvertToDecimal.
15441         (DecimalConstant.Emit): Emit optimized version for decimals in
15442         int range.
15443
15444         * expression.cs (ResolveOperator): Changed order of constant
15445         reduction to work correctly with native types which have
15446         overloaded operators.
15447         (ResolveMemberAccess): Extract constant value from attribute
15448         for decimal type.
15449
15450         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15451
15452         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15453         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15454         (ChangeType): Decimal is special.
15455         (TypeToCoreType): Add decimal type.
15456
15457 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15458
15459         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15460         decimal types.
15461
15462 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15463
15464         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15465         test cs1667-5.cs.
15466
15467 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15468
15469         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15470
15471         * pending.cs (PendingImplementation): Grab only interfaces.
15472
15473 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15474
15475         * statement.cs (ForeachHelperMethods): Add location member and
15476         error 202 detection.
15477
15478 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15479
15480         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15481         automatically handled by executable.make.
15482         (PROGRAM): Make profile-specific.
15483
15484 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15485
15486         * expression.cs (DoResolveBase): Fixed wrong warning for out
15487         variables.
15488
15489 2004-11-18  Martin Baulig  <martin@ximian.com>
15490
15491         Merged latest changes into gmcs.  Please keep this comment in
15492         here, it makes it easier for me to see what changed in MCS since
15493         the last time I merged.
15494
15495 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15496
15497         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15498         (TypeHandle.GetMemberCache): New.
15499         (TypeHandle.TypeHandle): Update.
15500         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15501         (TypeManager.LookupParentInterfacesCache):
15502         Rename from LookupInterfaceCache.  Optimize slightly.
15503         (TypeManager.MemberLookup_FindMembers): Update.
15504         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15505         multi-type variant.
15506         (AddCacheContents): Rename from AddHashtable.
15507         * class.cs (TypeContainer.parent_container): Remove.
15508         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15509         (TypeContainer.DoDefineMembers): Don't initialize it.
15510         Update to name changes.
15511         
15512 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15513
15514         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15515         that factors the code to check access modifiers on override.  
15516
15517         (PropertyBase): Use the code here.
15518
15519         Patch from Lluis S'anchez, fixes bug #69361.
15520
15521 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15522
15523         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15524         routine that is used to report the use of a captured variable
15525         whose address has been taken.
15526
15527         There are two checks: one when variables are being captured and
15528         the other check is when the address of a variable is taken. 
15529         
15530         (because an anonymous methods might be resolved before *or* after
15531         the address has been taken) and 
15532
15533         * expression.cs (Conditional.DoResolve): Remove the special
15534         casing that Martin added to trueExpr and falseExpr being both
15535         NullLiteral.  We get the right behavior now just by introducing
15536         the null_type into the compiler. 
15537
15538         * convert.cs (ExplicitConversion): Change the code to use
15539         null_type instead of testing `expr is NullLiteral'.
15540         (ImplicitConversionStandard): use null_type too.
15541         (ImplicitReferenceConversionExists): use null_type too.
15542         (ImplicitReferenceConversion): use null_type too.
15543
15544         * literal.cs: The type of `NullLiteral' is now null_type instead
15545         of object_type. 
15546         (Resolve): Set the type here.
15547
15548         * typemanager.cs: Introduce null_type.
15549
15550 2004-11-17  Martin Baulig  <martin@ximian.com>
15551
15552         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
15553         direction, like FindMembers() does.  Fixes #69546, testcase is in
15554         test-315.cs.    
15555
15556 2004-11-16  Martin Baulig  <martin@ximian.com>
15557
15558         This is based on a patch from Marek Safar, see bug #69082.
15559         Fixes bugs #63705 and #67130.
15560
15561         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
15562         method; create a MemberCache for an interface type and cache the
15563         result.
15564
15565         * decl.cs (IMemberContainer.ParentContainer): Removed.
15566         (IMemberContainer.ParentCache): New property.
15567         (MemberCache.SetupCacheForInterface): Removed.
15568         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
15569         to create a cache for an interface's "parent".
15570
15571         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
15572         interfaces too.
15573
15574 2004-11-16  Martin Baulig  <martin@ximian.com>
15575
15576         Merged back from gmcs; these changes already went into gmcs a
15577         couple of weeks ago.
15578
15579         * typemanager.cs
15580         (TypeManager.AddUserType): Removed the `ifaces' argument.
15581         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
15582         `TypeExpr []'.
15583         (TypeManager.AddUserInterface): Removed.
15584         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
15585         `TypeExpr []'.
15586         (TypeManager.GetInterfaces): Likewise.
15587         (TypeManager.GetExplicitInterfaces): Likewise.
15588
15589         * ecore.cs (TypeExpr.GetInterfaces): Removed.
15590
15591         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
15592         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
15593
15594 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
15595
15596         * statement.cs: Avoid adding bools to a hashtable.
15597
15598 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
15599
15600         * expression.cs (Invocation.OverloadResolve): Flag error if we are
15601         calling an unsafe method from a safe location.
15602
15603 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
15604
15605         Fix #69167
15606         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
15607
15608 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
15609
15610         * namespace.cs (VerifyUsing): use GetPartialName instead of
15611         ToString. 
15612
15613 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
15614
15615         * statement.cs (Return.Resolve): Fix regression in typo: if
15616         `in_exc', we have to request a NeedReturnLabel, this was a typo
15617         introduced in the anonymous method check-in.  Fixes #69131.
15618
15619         * Indexers were using the ShortName when defining themselves,
15620         causing a regression in the compiler bootstrap when applying the
15621         patch from 2004-11-02 (first part), now they use their full name
15622         and the bug is gone.
15623
15624 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
15625
15626         * driver.cs: Strip the path from the names of embedded resources. Fixes
15627         #68519.
15628
15629 2004-11-04  Raja R Harinath  <rharinath@novell.com>
15630
15631         Fix error message regression: cs0104-2.cs.
15632         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
15633         (AliasEntry.Resolve): Update.
15634         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
15635         'silent' flag.
15636         (RootContext.LookupType): Update.
15637
15638 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
15639
15640         * cs-parser.jay: Add support for handling accessor modifiers
15641         * class: Add support port accessor modifiers and error checking,
15642         define PropertyMethod.Define as virtual (not abstract anymore)
15643         * ecore.cs: Add checking for proeprties access with access modifiers
15644         * iterators.cs: Modify Accessor constructor call based in the modified
15645         constructor
15646 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
15647
15648         * expression.cs (StringConcat): Handle being called twice,
15649         as when we have a concat in a field init with more than two
15650         ctors in the class
15651
15652 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
15653
15654         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
15655         special case explicit implementations, we should always produce
15656         the .property or .event declaration.
15657         
15658         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
15659         since it will not return correct data if people use this
15660         unresolved in the presence of using statements (see test-313).
15661
15662         * class.cs (MethodData.Define): If we are an explicit interface
15663         implementation, set the method name to the full name of the
15664         interface plus the name of the method.  
15665
15666         Notice that using the method.MethodName.GetFullName() does not
15667         work, as it will only contain the name as declared on the source
15668         file (it can be a shorthand in the presence of using statements)
15669         and not the fully qualifed type name, for example:
15670
15671         using System;
15672
15673         class D : ICloneable {
15674                 object ICloneable.Clone ()  {
15675                 }
15676         }
15677
15678         Would produce a method called `ICloneable.Clone' instead of
15679         `System.ICloneable.Clone'.
15680
15681         * namespace.cs (Alias.Resolve): Use GetPartialName.
15682         
15683 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15684
15685         * cs-parser.jay: Add error 1055 report.
15686
15687 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
15688
15689         * assign.cs (Assign.DoResolve): Only do the transform of
15690         assignment into a New if the types are compatible, if not, fall
15691         through and let the implicit code deal with the errors and with
15692         the necessary conversions. 
15693
15694 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15695
15696         * cs-parser.jay: Add error 1031 report.
15697
15698         * cs-tokenizer.cs: Add location for error 1038.
15699
15700 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15701
15702         * cs-parser.jay: Add error 1016 report.
15703
15704 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15705
15706         * cs-parser.jay: Add errors 1575,1611 report.
15707
15708 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15709
15710         * cs-parser.jay: Add error 1001 report.
15711
15712 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15713
15714         Fix #68850
15715         * attribute.cs (GetMarshal): Add method argument for
15716         caller identification.
15717
15718         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
15719         agument for GetMarshal and RuntimeMissingSupport.
15720
15721 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15722
15723         * attribute.cs (ExtractSecurityPermissionSet): Removed
15724         TypeManager.code_access_permission_type.
15725
15726         * typemanager.cs: Removed TypeManager.code_access_permission_type.
15727
15728 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
15729
15730         * expression.cs (LocalVariableReference.DoResolveLValue): Check
15731         for obsolete use of a variable here.   Fixes regression on errors
15732         cs0619-25 and cs0619-26.
15733
15734 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
15735
15736         Fix #62358, implemented security attribute encoding.
15737
15738         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
15739         Tests permitted SecurityAction for assembly or other types.
15740         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
15741         data from SecurityPermissionAttribute to PermisionSet class.
15742
15743         * class.cs (ApplyAttributeBuilder): Added special handling
15744         for System.Security.Permissions.SecurityAttribute based types.
15745
15746         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
15747         special handling for System.Security.Permissions.SecurityAttribute
15748         based types.
15749
15750         * enum.cs (ApplyAttributeBuilder): Added special handling
15751         for System.Security.Permissions.SecurityAttribute based types.
15752
15753         * parameter.cs (ApplyAttributeBuilder): Added special handling
15754         for System.Security.Permissions.SecurityAttribute based types.
15755
15756         * rootcontext.cs: Next 2 core types.
15757
15758         * typemanager.cs (TypeManager.security_permission_attr_type):
15759         Built in type for the SecurityPermission Attribute.
15760         (code_access_permission_type): Build in type.
15761
15762 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
15763
15764         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
15765         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
15766         all of this information into
15767         EmitContext.EmitCapturedVariableInstance.
15768         
15769         * codegen.cs (EmitCapturedVariableInstance): move here the
15770         funcionality of emitting an ldarg.0 in the presence of a
15771         remapping.   This centralizes the instance emit code.
15772
15773         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
15774         then emit a load of this: it means that we have reached the
15775         topmost ScopeInfo: the one that contains the pointer to the
15776         instance of the class hosting the anonymous method.
15777
15778         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
15779         captures to the topmost CaptureContext.
15780
15781 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
15782
15783         * expression.cs (LocalVariableReference): Move the knowledge about
15784         the iterators into codegen's EmitCapturedVariableInstance.
15785
15786 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
15787
15788         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
15789         all code paths return a value from an anonymous method (it is the
15790         same as the 161 error, but for anonymous methods).
15791
15792 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
15793
15794         The introduction of anonymous methods in the compiler changed
15795         various ways of doing things in the compiler.  The most
15796         significant one is the hard split between the resolution phase
15797         and the emission phases of the compiler.
15798
15799         For instance, routines that referenced local variables no
15800         longer can safely create temporary variables during the
15801         resolution phase: they must do so from the emission phase,
15802         since the variable might have been "captured", hence access to
15803         it can not be done with the local-variable operations from the runtime.
15804         
15805         * statement.cs 
15806
15807         (Block.Flags): New flag `IsTopLevel' to indicate that this block
15808         is a toplevel block.
15809
15810         (ToplevelBlock): A new kind of Block, these are the blocks that
15811         are created by the parser for all toplevel method bodies.  These
15812         include methods, accessors and anonymous methods.
15813
15814         These contain some extra information not found in regular blocks:
15815         A pointer to an optional CaptureContext (for tracking captured
15816         local variables and parameters).  A pointer to the parent
15817         ToplevelBlock.
15818         
15819         (Return.Resolve): Catch missmatches when returning a value from an
15820         anonymous method (error 1662).
15821         Invoke NeedReturnLabel from the Resolve phase instead of the emit
15822         phase.
15823
15824         (Break.Resolve): ditto.
15825
15826         (SwitchLabel): instead of defining the labels during the
15827         resolution phase, we now turned the public ILLabel and ILLabelCode
15828         labels into methods called GetILLabelCode() and GetILLabel() that
15829         only define the label during the Emit phase.
15830
15831         (GotoCase): Track the SwitchLabel instead of the computed label
15832         (its contained therein).  Emit the code by using
15833         SwitchLabel.GetILLabelCode ().
15834
15835         (LocalInfo.Flags.Captured): A new flag has been introduce to track
15836         whether the Local has been captured or not.
15837
15838         (LocalInfo.IsCaptured): New property, used to tell whether the
15839         local has been captured.
15840         
15841         * anonymous.cs: Vastly updated to contain the anonymous method
15842         support.
15843
15844         The main classes here are: CaptureContext which tracks any
15845         captured information for a toplevel block and ScopeInfo used to
15846         track the activation frames for various local variables.   
15847
15848         Each toplevel block has an optional capture context associated
15849         with it.  When a method contains an anonymous method both the
15850         toplevel method and the anonymous method will create a capture
15851         context.   When variables or parameters are captured, they are
15852         recorded on the CaptureContext that owns them, for example:
15853
15854         void Demo () {
15855              int a;
15856              MyDelegate d = delegate {
15857                  a = 1;
15858              }
15859         }
15860
15861         Here `a' will be recorded as captured on the toplevel
15862         CapturedContext, the inner captured context will not have anything
15863         (it will only have data if local variables or parameters from it
15864         are captured in a nested anonymous method.
15865
15866         The ScopeInfo is used to track the activation frames for local
15867         variables, for example:
15868
15869         for (int i = 0; i < 10; i++)
15870                 for (int j = 0; j < 10; j++){
15871                    MyDelegate d = delegate {
15872                         call (i, j);
15873                    }
15874                 }
15875
15876         At runtime this captures a single captured variable `i', but it
15877         captures 10 different versions of the variable `j'.  The variable
15878         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
15879         recorded on a child.  
15880
15881         The toplevel ScopeInfo will also track information like the `this'
15882         pointer if instance variables were referenced (this is necessary
15883         as the anonymous method lives inside a nested class in the host
15884         type of the method). 
15885
15886         (AnonymousMethod): Expanded to track the Toplevel, implement
15887         `AnonymousMethod.Compatible' to tell whether an anonymous method
15888         can be converted to a target delegate type. 
15889
15890         The routine now also produces the anonymous method content
15891
15892         (AnonymousDelegate): A helper class that derives from
15893         DelegateCreation, this is used to generate the code necessary to
15894         produce the delegate for the anonymous method that was created. 
15895
15896         * assign.cs: API adjustments for new changes in
15897         Convert.ImplicitStandardConversionExists.
15898
15899         * class.cs: Adjustments to cope with the fact that now toplevel
15900         blocks are of type `ToplevelBlock'. 
15901
15902         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
15903         insteda of standard blocks.
15904
15905         Flag errors if params arguments are passed to anonymous methods.
15906
15907         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
15908         `CurrentAnonymousMethod' which points to the current Anonymous
15909         Method.  The variable points to the AnonymousMethod class that
15910         holds the code being compiled.  It is set in the new EmitContext
15911         created for the anonymous method.
15912
15913         (EmitContext.Phase): Introduce a variable and an enumeration to
15914         assist in enforcing some rules about when and where we are allowed
15915         to invoke certain methods (EmitContext.NeedsReturnLabel is the
15916         only one that enfonces this right now).
15917
15918         (EmitContext.HaveCaptureInfo): new helper method that returns
15919         whether we have a CapturedContext initialized.
15920
15921         (EmitContext.CaptureVariable): New method used to register that a
15922         LocalInfo must be flagged for capturing. 
15923
15924         (EmitContext.CapturedParameter): New method used to register that a
15925         parameters must be flagged for capturing. 
15926         
15927         (EmitContext.CapturedField): New method used to register that a
15928         field must be flagged for capturing. 
15929
15930         (EmitContext.HaveCapturedVariables,
15931         EmitContext.HaveCapturedFields): Return whether there are captured
15932         variables or fields. 
15933
15934         (EmitContext.EmitMethodHostInstance): This is used to emit the
15935         instance for the anonymous method.  The instance might be null
15936         (static methods), this (for anonymous methods that capture nothing
15937         and happen to live side-by-side with the current method body) or a
15938         more complicated expression if the method has a CaptureContext.
15939
15940         (EmitContext.EmitTopBlock): Routine that drives the emission of
15941         code: it will first resolve the top block, then emit any metadata
15942         and then emit the code.  The split is done so that we can extract
15943         any anonymous methods and flag any captured variables/parameters.
15944         
15945         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
15946         during this phase, the ILGenerator should not be used as labels
15947         and local variables declared here might not be accessible to any
15948         code that is part of an anonymous method.  
15949
15950         Exceptions to this include the temporary variables that are
15951         created by some statements internally for holding temporary
15952         variables. 
15953         
15954         (EmitContext.EmitMeta): New routine, in charge of emitting all the
15955         metadata for a cb
15956
15957         (EmitContext.TemporaryReturn): This method is typically called
15958         from the Emit phase, and its the only place where we allow the
15959         ReturnLabel to be defined other than the EmitMeta.  The reason is
15960         that otherwise we would have to duplicate a lot of logic in the
15961         Resolve phases of various methods that today is on the Emit
15962         phase. 
15963
15964         (EmitContext.NeedReturnLabel): This no longer creates the label,
15965         as the ILGenerator is not valid during the resolve phase.
15966
15967         (EmitContext.EmitThis): Extended the knowledge in this class to
15968         work in anonymous methods in addition to iterators. 
15969
15970         (EmitContext.EmitCapturedVariableInstance): This emits whatever
15971         code is necessary on the stack to access the instance to a local
15972         variable (the variable will be accessed as a field).
15973
15974         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
15975         EmitContext.EmitAddressOfParameter): Routines to support
15976         parameters (not completed at this point). 
15977         
15978         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
15979         will also remove the parameters.
15980
15981         * convert.cs (Convert): Define a `ConstantEC' which points to a
15982         null.  This is just to prefity some code that uses
15983         ImplicitStandardConversion code and do not have an EmitContext
15984         handy.
15985
15986         The idea is to flag explicitly that at that point in time, it is
15987         known that the conversion will not trigger the delegate checking
15988         code in implicit conversions (which requires a valid
15989         EmitContext). 
15990
15991         Everywhere: pass new EmitContext parameter since
15992         ImplicitStandardConversionExists now requires it to check for
15993         anonymous method conversions. 
15994
15995         (Convert.ImplicitStandardConversionExists): If the type of an
15996         expression is the anonymous_method_type, and the type is a
15997         delegate, we invoke the AnonymousMethod.Compatible method to check
15998         whether an implicit conversion is possible. 
15999
16000         (Convert.ImplicitConversionStandard): Only do implicit method
16001         group conversions if the language level is not ISO_1.
16002
16003         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16004         MethodInfo for the Invoke method.  used by Delegate and
16005         AnonymousDelegate.
16006
16007         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16008         method conversions if the target type is a delegate.
16009
16010         Removed extra debugging nops.
16011
16012         (LocalVariableReference): Turn the `local_info' into a public
16013         field. 
16014
16015         Add `prepared' field, the same hack used for FieldExprs to cope
16016         with composed assignments, as Local variables do not necessarily
16017         operate purely on the stack as they used to: they can be captured
16018         fields. 
16019
16020         Add `temp' for a temporary result, like fields.
16021
16022         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16023
16024         It now copes with Local variables that are captured and emits the
16025         proper instance variable to load it from a field in the captured
16026         case. 
16027
16028         (ParameterReference.DoResolveBase): During the resolve phase,
16029         capture parameters if we are in an anonymous method.
16030
16031         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16032         anonymous method, use the EmitContext helper routines to emit the
16033         parameter reference.
16034
16035         * iterators.cs: Set RemapToProxy to true/false during the
16036         EmitDispose class.
16037
16038         * parameters.cs (GetParameterByName): New helper method. 
16039
16040         * typemanager.cs (anonymous_method_type) a new type that
16041         represents an anonyous method.  This is always an internal type,
16042         used as a fencepost to test against the anonymous-methodness of an
16043         expression. 
16044         
16045 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16046
16047         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16048         561 report.
16049         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16050
16051 2004-10-18  Martin Baulig  <martin@ximian.com>
16052
16053         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16054         `Type' directly, but call ResolveType() on it.
16055         (Catch.Resolve): Likewise.
16056         (Foreach.Resolve): Likewise.
16057
16058 2004-10-18  Martin Baulig  <martin@ximian.com>
16059
16060         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16061         `Type' directly, but call ResolveType() on it.
16062         (Probe.DoResolve): Likewise.
16063         (ArrayCreation.LookupType): Likewise.
16064         (TypeOf.DoResolve): Likewise.
16065         (SizeOf.DoResolve): Likewise.
16066
16067 2004-10-18  Martin Baulig  <martin@ximian.com>
16068
16069         * expression.cs (Invocation.BetterFunction): Put back
16070         TypeManager.TypeToCoreType().
16071
16072 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16073
16074         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16075         the ResolveType.
16076
16077 2004-10-18  Martin Baulig  <martin@ximian.com>
16078
16079         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16080         `Type' directly, but call ResolveType() on it.
16081
16082 2004-10-18  Martin Baulig  <martin@ximian.com>
16083
16084         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16085         `Type' directly, but call ResolveType() on it.
16086         (MemberBase.DoDefine): Likewise.
16087
16088         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16089         `Type' directly, but call ResolveType() on it.
16090         (ComposedCast.DoResolveAsTypeStep): Likewise.
16091
16092         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16093         `Type' directly, but call ResolveType() on it.
16094
16095 2004-10-17  John Luke  <john.luke@gmail.com>
16096
16097         * class.cs (Operator.GetSignatureForError): use CSharpName
16098
16099         * parameter.cs (Parameter.GetSignatureForError): Returns
16100         correct name even if was not defined.
16101
16102 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16103
16104         Fix #65816.
16105         * class.cs (TypeContainer.EmitContext): New property.
16106         (DefineNestedTypes): Create an emitcontext for each part.
16107         (MethodCore.DoDefineParameters): Use container's emitcontext.
16108         Pass type array to InternalParameters.
16109         (MemberBase.DoDefine): Use container's emitcontext.
16110         (FieldMember.Define): Likewise.
16111         (Event.Define): Likewise.
16112         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16113         Pass type array to InternalParameters.
16114         (SetIndexerMethod.GetParameterInfo): Likewise.
16115         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16116         * delegate.cs (Define): Pass emitcontext to
16117         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16118         array to InternalParameters.
16119         * expression.cs (ParameterReference.DoResolveBase): Pass
16120         emitcontext to GetParameterInfo.
16121         (ComposedCast.DoResolveAsTypeStep): Remove check on
16122         ec.ResolvingTypeTree.
16123         * parameter.cs (Parameter.Resolve): Change argument to
16124         EmitContext.  Use ResolveAsTypeTerminal.
16125         (Parameter.GetSignature): Change argument to EmitContext.
16126         (Parameters.ComputeSignature): Likewise.
16127         (Parameters.ComputeParameterTypes): Likewise.
16128         (Parameters.GetParameterInfo): Likewise.
16129         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16130         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16131         * support.cs (InternalParameters..ctor): Remove variant that takes
16132         a DeclSpace.
16133         * typemanager.cs (system_intptr_expr): New.
16134         (InitExpressionTypes): Initialize it.
16135
16136 2004-10-12  Chris Toshok  <toshok@ximian.com>
16137
16138         * cs-parser.jay: fix location for try_statement and catch_clause.
16139
16140 2004-10-11  Martin Baulig  <martin@ximian.com>
16141
16142         * report.cs: Don't make --fatal abort on warnings, we have
16143         -warnaserror for that.
16144
16145 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16146
16147         More DeclSpace.ResolveType avoidance.
16148         * decl.cs (MemberCore.InUnsafe): New property.
16149         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16150         with newly created EmitContext.
16151         (FieldMember.Define): Likewise.
16152         * delegate.cs (Delegate.Define): Likewise.
16153         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16154         only if normal name-lookup fails.
16155         (TypeExpr.DoResolve): Enable error-checking.
16156         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16157         (SizeOf.DoResolve): Likewise.
16158         (ComposedCast.DoResolveAsTypeStep): Likewise.
16159         (StackAlloc.DoResolve): Likewise.
16160         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16161         (Block.Unsafe): New property.
16162         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16163         (Unsafe): Set 'unsafe' flag of contained block.
16164         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16165         (Fixed.Resolve): Likewise.
16166         (Catch.Resolve): Likewise.
16167         (Using.ResolveLocalVariableDecls): Likewise.
16168         (Foreach.Resolve): Likewise.
16169
16170 2004-10-05  John Luke <john.luke@gmail.com>
16171
16172         * cs-parser.jay: add location to error CS0175
16173
16174 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16175
16176         * ecore.cs (Expression.Constantity): Add support for turning null
16177         into a constant.
16178
16179         * const.cs (Const.Define): Allow constants to be reference types
16180         as long as the value is Null.
16181
16182 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16183
16184         * namespace.cs (NamespaceEntry.Using): No matter which warning
16185         level is set, check if this namespace name has already been added.
16186
16187 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16188
16189         * expression.cs: reftype [!=]= null should always use br[true,false].
16190         # 67410
16191
16192 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16193
16194         Fix #67108
16195         * attribute.cs: Enum conversion moved to 
16196         GetAttributeArgumentExpression to be applied to the all
16197         expressions.
16198
16199 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16200
16201         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16202         * class.c (TypeContainer.DefineType): Flag error if
16203         base types aren't accessible due to access permissions.
16204         * decl.cs (DeclSpace.ResolveType): Move logic to
16205         Expression.ResolveAsTypeTerminal.
16206         (DeclSpace.ResolveTypeExpr): Thin layer over
16207         Expression.ResolveAsTypeTerminal.
16208         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16209         Refactor code into NestedAccess.  Use it.
16210         (DeclSpace.NestedAccess): New.
16211         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16212         argument to silence errors.  Check access permissions.
16213         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16214         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16215         (Cast.DoResolve): Likewise.
16216         (New.DoResolve): Likewise.
16217         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16218         (TypeOf.DoResolve): Likewise.
16219
16220         * expression.cs (Invocation.BetterConversion): Return the Type of
16221         the better conversion.  Implement section 14.4.2.3 more faithfully.
16222         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16223         section 14.4.2.2 explicit.
16224         (Invocation.OverloadResolve): Update.
16225         (Invocation): Remove is_base field.
16226         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16227         (Invocation.Emit): Likewise.
16228
16229 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16230
16231         * README: Update to changes.
16232
16233 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16234
16235         * cs-parser.jay: Reverted 642 warning fix.
16236
16237 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16238
16239         Fix bug #66615
16240         * decl.cs (FindMemberWithSameName): Indexer can have more than
16241         1 argument.
16242
16243 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16244
16245         * expression.cs (LocalVariableReference.DoResolveLValue):
16246         Do not report warning 219 for out values.
16247         (EmptyExpression.Null): New member to avoid extra allocations.
16248
16249 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16250
16251         * cs-parser.jay: Fix wrong warning 642 report.
16252
16253         * cs-tokenizer.cs (CheckNextToken): New helper;
16254         Inspect next character if is same as expected.
16255
16256 2004-09-23  Martin Baulig  <martin@ximian.com>
16257
16258         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16259         (Convert.ImplicitReferenceConversionExists): Likewise.
16260
16261 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16262
16263         * class.cs (Operator.Define): Add error 448 and 559 report.
16264
16265 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16266
16267         * class.cs (MemberBase.IsTypePermitted): New protected
16268         method for checking error CS0610.
16269
16270 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16271
16272         * class.cs (TypeContainer.HasExplicitLayout): New property
16273         Returns whether container has StructLayout attribute set Explicit.
16274         (FieldMember): New abstract class for consts and fields.
16275         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16276         (Field): Reuse FieldMember.
16277
16278         * const.cs (Const): Reuse FieldMember.
16279
16280         * rootcontext.cs: EmitConstants call moved to class.
16281
16282 2004-09-22  Martin Baulig  <martin@ximian.com>
16283
16284         Thanks to Peter Sestoft for this bug report.
16285
16286         * expression.cs (Conditional): If both the `trueExpr' and the
16287         `falseExpr' is a NullLiteral, return a NullLiteral.
16288
16289 2004-09-22  Martin Baulig  <martin@ximian.com>
16290
16291         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16292         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16293         for the "get_Current" call.
16294
16295 2004-09-22  Martin Baulig  <martin@ximian.com>
16296
16297         Marek and me just fixed one of our oldest bugs: #28562 :-)
16298
16299         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16300
16301         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16302         we're an EnumConstant, just return that.
16303         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16304         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16305         to get the value which'll actually be written into the attribute.
16306         However, we have to use GetValue() to access the attribute's value
16307         in the compiler.        
16308
16309 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16310
16311         * constant.cs (Constant.IsNegative): New abstract property
16312         IsNegative.
16313
16314         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16315         (StackAlloc.DoResolve): Reused IsNegative.
16316
16317 2004-09-21  Martin Baulig  <martin@ximian.com>
16318
16319         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16320         if we're used in an iterator, we may be called from different
16321         methods.
16322
16323         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16324         we actually have an exception block.
16325
16326 2004-09-20  John Luke <jluke@cfl.rr.com>
16327
16328         * class.cs, cs-parser.jay: Improve the error report for 1520:
16329         report the actual line where the error happens, not where the
16330         class was declared.
16331
16332         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
16333         Pass location information that was available elsewhere.
16334
16335 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
16336
16337         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
16338         runtime to delay sign assemblies.
16339
16340 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16341
16342         * cs-parser.jay: Do not report the stack trace, this is barely
16343         used nowadays.
16344
16345 2004-08-22  John Luke  <john.luke@gmail.com>
16346  
16347         * driver.cs : check that a resource id is not already used
16348         before adding it, report CS1508 if it is, bug #63637
16349
16350 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16351
16352         * ecore.cs: Removed dead code.
16353
16354 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
16355
16356         * class.cs: Do not report warning CS0067 on the interfaces.
16357
16358 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16359
16360         * cs-parser.jay: Add error 504 report.
16361
16362 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16363
16364         * rootcontext.cs: WarningLevel is 4 by default now.
16365
16366         * statement.cs (Fixed.Resolve): Do not null
16367         VariableInfo.
16368
16369 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16370
16371         Fixed bug #55780
16372         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
16373         deep search when property is not virtual.
16374         (PropertyExpr.ResolveAccessors): Make one call for both
16375         accessors.
16376
16377 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16378
16379         Fixed bug #65766
16380         * statement.cs: Error 152 report constains also location.
16381
16382 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16383
16384         Fixed bug #65766
16385         * const.cs: Explicitly set constant as static.
16386
16387 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16388
16389         Fixed bug #64226
16390         * cs-parser.jay: Add error 1017 report.
16391
16392 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16393
16394         Fixed bug #59980, #64224
16395         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16396
16397         * typemanager.cs (IsSpecialMethod): Simplified
16398
16399 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16400
16401         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16402         condition with better params.
16403
16404 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16405
16406         Fixed bug #65238
16407         * attribute.cs (Resolve): Property has to have both
16408         accessors.
16409
16410 2004-09-14  Martin Baulig  <martin@ximian.com>
16411
16412         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16413
16414 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16415
16416         Fixed bug #61902
16417         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16418         called and is obsolete then this member suppress message
16419         when call is inside next [Obsolete] method or type.
16420
16421         * expression.cs: Use TestObsoleteMethodUsage member.
16422
16423 2004-09-14  Martin Baulig  <martin@ximian.com>
16424
16425         * cs-parser.jay: Sync a bit with the GMCS version.
16426
16427 2004-09-14  Martin Baulig  <martin@ximian.com>
16428
16429         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16430         (CSharpParser.yacc_verbose_flag): New public field.
16431
16432         * genericparser.cs: Removed.
16433
16434 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16435
16436         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16437
16438 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16439
16440         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16441
16442 2004-09-10  Martin Baulig  <martin@ximian.com>
16443
16444         Backported my MemberName changes from GMCS into MCS.
16445
16446         - we are now using a special `MemberName' class instead of using
16447         strings; in GMCS, the `MemberName' also contains the type
16448         arguments.
16449
16450         - changed the grammar rules a bit:
16451           * the old `member_name' is now a `namespace_or_type_name':
16452             The rule is that we use `namespace_or_type_name' everywhere
16453             where we expect either a "member name" (GetEnumerator) or a
16454             "member name" with an explicit interface name
16455             (IEnumerable.GetEnumerator).
16456             In GMCS, the explicit interface name may include type arguments
16457             (IEnumerable<T>.GetEnumerator).
16458           * we use `member_name' instead of just `IDENTIFIER' for
16459             "member names":
16460             The rule is that we use `member_name' wherever a member may
16461             have type parameters in GMCS.       
16462
16463         * decl.cs (MemberName): New public class.
16464         (MemberCore.MemberName): New public readonly field.
16465         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16466         (DeclSpace): Likewise.
16467
16468         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16469         * enum.cs (Enum.ctor): Likewise.
16470
16471         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16472         MemberName.     
16473         (AliasEntry.ctor): Take a MemberName, not an Expression.
16474         (AliasEntry.UsingAlias): Likewise.
16475
16476         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16477         (IMethodData.MemberName): Changed type from string to MemberName.
16478         (MemberBase.ExplicitInterfaceName): Likewise.
16479         (AbstractPropertyEventMethod.SetupName): Make this private.
16480         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16481         argument; compute the member name here.
16482         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16483         on the `member.MemberName' and the `prefix'.
16484
16485         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16486         not `type_name'.
16487         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16488         thus, we get a `MemberName' instead of a `string'.  These
16489         declarations may have type parameters in GMCS.
16490         (interface_method_declaration, delegate_declaration): Likewise.
16491         (class_declaration, interface_declaration): Likewise.
16492         (method_header): Use `namespace_or_type_name' instead of
16493         `member_name'.  We may be an explicit interface implementation.
16494         (property_declaration, event_declaration): Likewise.
16495         (member_name): This is now just an `IDENTIFIER', not a
16496         `namespace_or_type_name'.
16497         (type_name, interface_type): Removed.
16498         (namespace_or_type_name): Return a MemberName, not an Expression.
16499         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16500         call GetTypeExpression() on the MemberName to get an expression.
16501         (IndexerDeclaration.interface_type): Changed type from string to
16502         MemberName.
16503         (MakeName): Operate on MemberName's instead of string's.
16504
16505 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16506
16507         Fix bug #55770.
16508         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16509         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16510         lookup to avoid symbols introduced by 'using'.
16511         * rootcontext.cs (NamespaceLookup): Update.
16512
16513 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16514
16515         * class.cs (TypeContainer.DoDefineMembers): Do not call
16516         DefineDefaultConstructor for static classes.
16517
16518 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16519
16520         * attribute.cs (Attribute.Resolve): Add error 653 report.
16521
16522         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16523         report.
16524         (Method.ApplyAttributeBuilder): Add error 685 report.
16525         (Operator.Define): Add error 564 report.
16526
16527         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16528
16529         * expression.cs (Invocation.DoResolve): Add error
16530         245 and 250 report.
16531
16532         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16533         error 674 report.
16534
16535 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16536
16537         * class.cs (ConstructorInitializer.Resolve):
16538         Wrong error number (515->516).
16539
16540 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16541
16542         * class.cs (Indexer.Define): Add error 631 report.
16543
16544 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16545
16546         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16547
16548 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16549
16550         * expression.cs (Probe.DoResolve): Add error CS0241 report.
16551
16552 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
16553
16554         * cs-parser.jay: Added error CS0241 report.
16555
16556 2004-09-10  Raja R Harinath  <rharinath@novell.com>
16557
16558         * cs-parser.jay (fixed_statement): Introduce a scope for the
16559         declaration in the 'fixed' statement.
16560
16561 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16562
16563         * cs-parser.jay: Added CS0230 error report.
16564
16565 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16566
16567         * cs-parser.jay: Added errors CS0231 and CS0257 report.
16568
16569 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16570
16571         * expression.cs (Argument.Resolve): Added error CS0192 and
16572         CS0199 report.
16573
16574 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16575
16576         C# 2.0 #pragma warning feature
16577
16578         * cs-tokenizer.cs (PreProcessPragma): New method; 
16579         Handles #pragma directive.
16580
16581         * report.cs (WarningRegions): New class; Support
16582         class for #pragma warning directive. It tests whether
16583         warning is enabled for a given line.
16584
16585 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
16586
16587         * const.cs: Add more descriptive error report, tahnks to
16588         Sebastien. 
16589
16590 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
16591
16592         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
16593
16594 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
16595
16596         * expression.cs: Apply patch from Ben: Remove dead code from
16597         ArrayCreation, and remove the TurnintoConstant call in const.cs,
16598         as that code just threw an exception anwyays.
16599
16600         * const.cs: Remove the call to the turnintoconstant, for details
16601         see bug: #63144
16602         
16603         * literal.cs: The type of the null-literal is the null type;  So
16604         we use a placeholder type (literal.cs:System.Null, defined here)
16605         for it.
16606
16607         * expression.cs (Conditional.DoResolve): Remove some old code that
16608         is no longer needed, conversions have been fixed.
16609
16610         (ArrayCreationExpression.DoResolve): Return false if we fail to
16611         resolve the inner expression.
16612
16613 2004-09-07  Raja R Harinath  <rharinath@novell.com>
16614
16615         Fix test-290.cs.
16616         * cs-parser.jay (delegate_declaration): Record a delegate
16617         declaration as a type declaration.
16618         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
16619
16620 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
16621
16622         * parameter.cs: Do not crash if the type can not be resolved. 
16623
16624         * expression.cs: Report errors with unsafe pointers, fixes #64896
16625
16626 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
16627
16628         * expression.cs: Pointer arith always needs to do a conv.i
16629         if the operand is a long. fix 65320
16630
16631 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16632
16633         Fixed cs0619-37.cs, cs0619-38.cs
16634
16635         * enum.cs (GetObsoleteAttribute): Removed.
16636
16637         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
16638         on Enum member is double staged. The first is tested member
16639         and then enum.
16640
16641 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16642
16643         Fixed #56986, #63631, #65231
16644
16645         * class.cs: (TypeContainer.AddToMemberContainer): New method,
16646         adds member to name container.
16647         (TypeContainer.AddToTypeContainer): New method, adds type to
16648         name container.
16649         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
16650         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
16651         AddOperator): Simplified by reusing AddToMemberContainer.
16652         (TypeContainer.UserDefinedStaticConstructor): Changed to property
16653         instead of field.
16654         (Method.CheckForDuplications): Fixed implementation to test all
16655         possibilities.
16656         (MemberBase): Detection whether member is explicit interface
16657         implementation is now in constructor.
16658         (MemberBase.UpdateMemberName): Handles IndexerName.
16659         (Accessor): Changed to keep also location information.
16660         (AbstractPropertyEventMethod): Is derived from MemberCore.
16661         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
16662         will be emited or not.
16663         (PropertyBase.AreAccessorsDuplicateImplementation):
16664         Tests whether accessors are not in collision with some method.
16665         (Operator): Is derived from MethodCore to simplify common
16666         operations.
16667
16668         * decl.cs (Flags.TestMethodDuplication): Test for duplication
16669         must be performed.
16670         (DeclSpace.AddToContainer): Adds the member to defined_names
16671         table. It tests for duplications and enclosing name conflicts.
16672
16673         * enum.cs (EnumMember): Clean up to reuse the base structures
16674
16675 2004-09-03  Martin Baulig  <martin@ximian.com>
16676
16677         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
16678         into TypeContainer, to make partial classes work again.
16679
16680 2004-09-03  Martin Baulig  <martin@ximian.com>
16681
16682         * rootcontext.cs (RootContext.V2): Removed.
16683
16684 2004-03-23  Martin Baulig  <martin@ximian.com>
16685
16686         * expression.cs (Invocation.OverloadResolve): Added `bool
16687         may_fail' argument and use it instead of the Location.IsNull() hack.
16688
16689 2004-09-03  Martin Baulig  <martin@ximian.com>
16690
16691         Merged latest changes into gmcs.  Please keep this comment in
16692         here, it makes it easier for me to see what changed in MCS since
16693         the last time I merged.
16694
16695 2004-09-03  Raja R Harinath  <rharinath@novell.com>
16696
16697         Fix #61128.
16698         * expression.cs (BetterConversion): Don't allow either conversion 
16699         to be null.  Remove redundant implicit conversion test when 'q ==
16700         null' -- when this function is invoked, we already know that the
16701         implicit conversion exists.
16702         (BetterFunction): Assume that 'best' is non-null.  Remove
16703         redundant reimplementation of IsApplicable when 'best' is null.
16704         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
16705         number of arguments.
16706         (IsAncestralType): Extract from OverloadResolve.
16707         (OverloadResolve): Make robust to the MethodGroupExpr being
16708         unsorted.  Implement all the logic of Section 14.5.5.1, and
16709         support overloading of methods from multiple applicable types.
16710         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
16711
16712         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
16713         (RealError, Warning): Append type of report to related symbol.
16714
16715 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
16716
16717         * enum.cs: Fixed CLS-Compliance checks for enum members.
16718         Error tests cs3008-8.cs, cs3014-8.cs
16719
16720 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16721
16722         Fixed bug #62342, #63102
16723         * class.cs: ImplementIndexer uses member.IsExplicitImpl
16724         like ImplementMethod.
16725
16726 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16727
16728         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16729         Fixed bug #65170.
16730
16731 2004-09-02  Martin Baulig  <martin@ximian.com>
16732
16733         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
16734         TypeManager.GetArgumentTypes() rather than calling GetParameters()
16735         on the MethodBase.
16736
16737 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
16738
16739         C# 2.0 Static classes implemented
16740
16741         * class.cs (TypeContainer): instance_constructors,
16742         initialized_fields, initialized_static_fields,
16743         default_constructor, base_inteface_types are protected to be
16744         accessible from StaticClass.
16745         (TypeContainer.DefineDefaultConstructor): New virtual method
16746         for custom default constructor generating
16747         (StaticClass): New class to handle "Static classes" feature.
16748
16749         * cs-parser.jay: Handle static keyword on class like instance
16750         of StaticClass.
16751
16752         * driver.cs: Added "/langversion" command line switch with two
16753         options (iso-1, default).
16754
16755 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
16756
16757         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
16758
16759 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
16760
16761         * delegate.cs: Style.
16762
16763 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16764
16765         * delegate.cs: Add seperate instance expr field for miguel.
16766
16767 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16768
16769         * PointerArithmetic (Resolve): make sure we are not doing
16770         pointer arith on void*. Also, make sure we are resolved
16771         by not setting eclass until resolve.
16772
16773         All callers: Make sure that PointerArithmetic gets resolved.
16774
16775 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16776
16777         * ArrayCreation (LookupType): If the type does not resolve 
16778         to an array, give an error.
16779
16780 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
16781
16782         * statement.cs (Try.Resolve): Fixed bug #64222
16783
16784 2004-08-27  Martin Baulig  <martin@ximian.com>
16785
16786         * class.cs
16787         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
16788         crash here.     
16789
16790 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16791
16792         * ecore.cs (Constantify): Get underlying type via
16793         System.Enum.GetUnderlyingType to avoid StackOverflow on the
16794         Windows in special cases.
16795
16796 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16797
16798         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
16799         for obtaining also private methods.
16800         (GetRemoveMethod): Used GetRemoveMethod (true)
16801         for obtaining also private methods.
16802
16803 2004-08-24  Martin Baulig  <martin@ximian.com>
16804
16805         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
16806         MethodAttributes.HideBySig for operators.
16807
16808 2004-08-23  Martin Baulig  <martin@ximian.com>
16809
16810         Back to the old error reporting system :-)
16811
16812         * report.cs (Message): Removed.
16813         (Report.MessageData, ErrorData, WarningData): Removed.
16814         (Report.Error, Warning): Back to the old system.
16815
16816 2004-08-23  Martin Baulig  <martin@ximian.com>
16817
16818         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
16819
16820         * class.cs (TypeContainer.ParentContainer): New public virtual
16821         method; replaces the explicit interface implementation.
16822         (ClassPart.ParentContainer): Override.
16823
16824 2004-08-23  Martin Baulig  <martin@ximian.com>
16825
16826         * statement.cs (Switch): Added support for constant switches; see
16827         #59428 or test-285.cs.
16828
16829 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
16830
16831         Fixed bug #62740.
16832         * statement.cs (GetEnumeratorFilter): Removed useless
16833         logic because C# specs is strict. GetEnumerator must be
16834         public.
16835
16836 2004-08-22  Martin Baulig  <martin@ximian.com>
16837
16838         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
16839         a switch and may break, reset the barrier.  Fixes #59867.
16840
16841 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
16842
16843         CLS-Compliance speed up (~5% for corlib)
16844
16845         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
16846         New method. Tests container for CLS-Compliant names
16847
16848         * class.cs (TypeContainer.VerifyClsName): New method.
16849         Checks whether container name is CLS Compliant.
16850         (Constructor): Implements IMethodData.
16851
16852         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
16853         low-case table for CLS Compliance test.
16854         (MemberCache.VerifyClsParameterConflict): New method.
16855         Checks method parameters for CS3006 error.
16856
16857         * enum.cs (EnumMember): Is derived from MemberCore.
16858         (Enum.VerifyClsName): Optimized for better performance.
16859
16860 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
16861
16862         * report.cs: Renamed Error_T to Error and changed all
16863         references.
16864
16865 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
16866
16867         * class.cs (TypeContainer.IndexerArrayList): New inner class
16868         container for indexers.
16869         (TypeContainer.DefaultIndexerName): New constant for default
16870         indexer name. Replaced all "Item" with this constant.
16871         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
16872
16873         * typemanager.cs (TypeManager.default_member_ctor): Cache here
16874         DefaultMemberAttribute constructor.
16875
16876 2004-08-05  Martin Baulig  <martin@ximian.com>
16877
16878         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
16879         Fix bug #59429.
16880
16881 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
16882
16883         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
16884         multi platforms problem.
16885
16886         * compiler.csproj: Included shared files.
16887
16888 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16889
16890         Fix bug 60333, 55971 in the more general way
16891         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16892         Added arg_type argument for constant conversion.
16893         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
16894
16895 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16896
16897         Fix bug #59760
16898         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
16899         OperatorArrayList, MethodCoreArrayList for typecontainer
16900         containers. Changed class member types to these new types.
16901         (MethodArrayList.DefineMembers): Added test for CS0659.
16902
16903 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
16904
16905         * cfold.cs: Synchronize the folding with the code in expression.cs
16906         Binary.DoNumericPromotions for uint operands.
16907
16908         * attribute.cs: Revert patch from Raja, it introduced a regression
16909         while building Blam-1.2.1 (hard to isolate a test case).
16910
16911 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16912
16913         Fix for #55382
16914         * class.cs:
16915         (TypeContainer.Define): Renamed to DefineContainerMembers because of
16916         name collision.
16917         (MethodCore.parent_method): New member. The method we're overriding
16918         if this is an override method.
16919         (MethodCore.CheckBase): Moved from Method class and made common.
16920         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
16921         private.
16922         (MethodCore.CheckForDuplications): New abstract method. For custom
16923         member duplication search in a container
16924         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
16925         method and its return type.
16926         (Event.conflict_symbol): New member. Symbol with same name in the
16927         parent class.
16928
16929         * decl.cs:
16930         (MemberCache.FindMemberWithSameName): New method. The method
16931         is looking for conflict with inherited symbols.
16932
16933 2004-08-04  Martin Baulig  <martin@ximian.com>
16934
16935         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
16936
16937         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
16938
16939 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16940
16941         * report.cs (Message): New enum for better error, warning reference in
16942         the code.
16943         (MessageData): New inner abstract class. It generally handles printing of
16944         error and warning messages.
16945         Removed unused Error, Warning, Message methods.
16946
16947 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16948
16949         Fix for cs0592-8.cs test
16950         * attribute.cs
16951         (Attributable.ValidAttributeTargets): Made public.
16952         (Attribute.ExplicitTarget): New member for explicit target value.
16953         (Attribute.CheckTargets): Now we translate explicit attribute
16954         target to Target here.
16955
16956 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
16957
16958         * ecore.cs (MethodGroupExpr): new IsBase property.
16959
16960         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
16961
16962         * delegate.cs (DelegateCreation): store a MethodGroupExpr
16963         rather than an instance expr.
16964
16965         (DelegateCreation.Emit): Use the method group rather than
16966         the instance expression. Also, if you have base.Foo as the
16967         method for a delegate, make sure to emit ldftn, not ldftnvirt.
16968
16969         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
16970
16971         (NewDelegate.DoResolve): Only check for the existance of Invoke
16972         if the method is going to be needed. Use MethodGroupExpr.
16973
16974         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
16975
16976         * expression.cs: For pointer arith., make sure to use
16977         the size of the type, not the size of the pointer to
16978         the type.
16979
16980 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16981
16982         Fix for #60722
16983         * class.cs (Class): Added error CS0502 test.
16984
16985 2004-08-03  John Luke  <jluke@cfl.rr.com>
16986             Raja R Harinath  <rharinath@novell.com>
16987
16988         Fix for #60997.
16989         * attribute.cs (Attribute.complained_before): New flag.
16990         (Attribute.ResolveType, Attribute.Resolve),
16991         (Attribute.DefinePInvokeMethod): Set it.
16992         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
16993         
16994 2004-08-03  Martin Baulig  <martin@ximian.com>
16995
16996         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
16997         use a user-defined operator; we still need to do numeric
16998         promotions in case one argument is a builtin type and the other
16999         one has an implicit conversion to that type.  Fixes #62322.
17000
17001 2004-08-02  Martin Baulig  <martin@ximian.com>
17002
17003         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17004         (LocalInfo.IsThis): New public property.
17005         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17006
17007 2004-08-01  Martin Baulig  <martin@ximian.com>
17008
17009         * class.cs (TypeContainer.GetClassBases): Don't set the default
17010         here since we may get called from GetPartialBases().
17011         (TypeContainer.DefineType): If GetClassBases() didn't return a
17012         parent, use the default one.
17013
17014 2004-07-30  Duncan Mak  <duncan@ximian.com>
17015
17016         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17017
17018 2004-07-30  Martin Baulig  <martin@ximian.com>
17019
17020         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17021
17022         * class.cs (SourceMethod): New public class, derive from the
17023         symbol writer's ISourceMethod.
17024         (Method): Use the new symbol writer API.
17025
17026         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17027         as argument and use the new symbol writer.
17028
17029         * location.cs
17030         (SourceFile): Implement the symbol writer's ISourceFile.
17031         (Location.SymbolDocument): Removed.
17032         (Location.SourceFile): New public property.
17033
17034         * symbolwriter.cs: Use the new symbol writer API.
17035
17036 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17037
17038         * Makefile (install-local): Remove.  Functionality moved to
17039         executable.make.
17040
17041 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17042
17043         * Makefile: Install mcs.exe.config file together with mcs.exe.
17044         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17045         correct runtime version.
17046         
17047 2004-07-25  Martin Baulig  <martin@ximian.com>
17048
17049         * class.cs
17050         (TypeContainer.RegisterOrder): Removed, this was unused.
17051         (TypeContainer, interface_order): Removed.
17052         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17053         TypeContainer as argument since we can also be called with a
17054         `PartialContainer' for a partial class/struct/interface.
17055         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17056         of checking whether we're an `Interface' - we could be a
17057         `PartialContainer'.
17058         (PartialContainer.Register): Override; call
17059         AddClass()/AddStruct()/AddInterface() on our parent.
17060
17061         * cs-parser.jay (interface_member_declaration): Add things to the
17062         `current_container', not the `current_class'.
17063
17064         * rootcontext.cs (RegisterOrder): The overloaded version which
17065         takes an `Interface' was unused, removed.
17066
17067         * typemanager.cs (TypeManager.LookupInterface): Return a
17068         `TypeContainer', not an `Interface'.
17069         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17070         contain a `PartialContainer' for an interface, so check it's
17071         `Kind' to figure out what it is.
17072
17073 2004-07-25  Martin Baulig  <martin@ximian.com>
17074
17075         * class.cs (Class.DefaultTypeAttributes): New public constant.
17076         (Struct.DefaultTypeAttributes): Likewise.
17077         (Interface.DefaultTypeAttributes): Likewise.
17078         (PartialContainer.TypeAttr): Override this and add the
17079         DefaultTypeAttributes.
17080
17081 2004-07-25  Martin Baulig  <martin@ximian.com>
17082
17083         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17084         we can just use the `Parent' field instead.
17085
17086 2004-07-25  Martin Baulig  <martin@ximian.com>
17087
17088         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17089
17090 2004-07-25  Martin Baulig  <martin@ximian.com>
17091
17092         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17093         our parts before defining any methods.
17094         (TypeContainer.VerifyImplements): Make this virtual.
17095         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17096         on our PartialContainer.
17097
17098 2004-07-25  Martin Baulig  <martin@ximian.com>
17099
17100         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17101
17102         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17103         argument, we can just use the `Parent' field instead.
17104
17105         * class.cs
17106         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17107         (MemberBase.DoDefine): Likewise.
17108
17109 2004-07-24  Martin Baulig  <martin@ximian.com>
17110
17111         * decl.cs (MemberCore.Parent): New public field.
17112         (DeclSpace.Parent): Moved to MemberCore.
17113
17114         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17115         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17116         parent's .ctor.
17117         (FieldBase, Field, Operator): Likewise.
17118         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17119         (EventField, Event): Likewise.
17120
17121 2004-07-23  Martin Baulig  <martin@ximian.com>
17122
17123         * class.cs (PartialContainer): New public class.
17124         (ClassPart): New public class.
17125         (TypeContainer): Added support for partial classes.
17126         (TypeContainer.GetClassBases): Splitted some of the functionality
17127         out into GetNormalBases() and GetPartialBases().
17128
17129         * cs-tokenizer.cs (Token.PARTIAL): New token.
17130         (Tokenizer.consume_identifier): Added some hacks to recognize
17131         `partial', but only if it's immediately followed by `class',
17132         `struct' or `interface'.
17133
17134         * cs-parser.jay: Added support for partial clases.
17135
17136 2004-07-23  Martin Baulig  <martin@ximian.com>
17137
17138         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17139         a `DeclSpace' and also made it readonly.
17140         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17141         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17142         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17143
17144         * cs-parser.jay: Pass the `current_class', not the
17145         `current_container' (at the moment, this is still the same thing)
17146         to a new Method, Property, Event, Indexer or Constructor.
17147
17148 2004-07-23  Martin Baulig  <martin@ximian.com>
17149
17150         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17151         and removed the `current_interface' one.
17152         (struct_declaration, class_declaration, interface_declaration):
17153         Set `current_class' to the newly created class/struct/interface;
17154         set their `Bases' and call Register() before parsing their body.
17155
17156 2004-07-23  Martin Baulig  <martin@ximian.com>
17157
17158         * class.cs (Kind): New public enum.
17159         (TypeContainer): Made this class abstract.
17160         (TypeContainer.Kind): New public readonly field.
17161         (TypeContainer.CheckDef): New public method; moved here from
17162         cs-parser.jay.
17163         (TypeContainer.Register): New public abstract method.
17164         (TypeContainer.GetPendingImplementations): New public abstract
17165         method.
17166         (TypeContainer.GetClassBases): Removed the `is_class' and
17167         `is_iface' parameters.
17168         (TypeContainer.DefineNestedTypes): Formerly known as
17169         DoDefineType().
17170         (ClassOrStruct): Made this class abstract.
17171
17172         * tree.cs (RootTypes): New public type. 
17173
17174 2004-07-20  Martin Baulig  <martin@ximian.com>
17175
17176         * tree.cs (Tree.RecordNamespace): Removed.
17177         (Tree.Namespaces): Removed.
17178
17179         * rootcontext.cs (RootContext.IsNamespace): Removed.
17180
17181         * cs-parser.jay (namespace_declaration): Just create a new
17182         NamespaceEntry here.
17183
17184 2004-07-20  Martin Baulig  <martin@ximian.com>
17185
17186         * statement.cs (ExceptionStatement): New abstract class.  This is
17187         now used as a base class for everyone who's using `finally'.
17188         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17189         our local variables before using them.
17190
17191         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17192         virtual method.  This is used by Yield.Resolve() to "steal" an
17193         outer block's `finally' clauses.
17194         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17195         argument.
17196
17197         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17198         version which takes an ExceptionStatement.  This version must be
17199         used to create exception branchings.
17200
17201         * iterator.cs
17202         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17203         (Iterator.EmitMoveNext): Added exception support; protect the
17204         block with a `fault' clause, properly handle 'finally' clauses.
17205         (Iterator.EmitDispose): Run all the `finally' clauses here.
17206
17207 2004-07-20  Martin Baulig  <martin@ximian.com>
17208
17209         * iterator.cs: This is the first of a set of changes in the
17210         iterator code.  Match the spec more closely: if we're an
17211         IEnumerable, then GetEnumerator() must be called.  The first time
17212         GetEnumerator() is called, it returns the current instance; all
17213         subsequent invocations (if any) must create a copy.
17214
17215 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17216
17217         * expression.cs: Resolve the constant expression before returning
17218         it. 
17219
17220 2004-07-19  Martin Baulig  <martin@ximian.com>
17221
17222         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17223         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17224         the return type of the new EmitContext.
17225
17226 2004-07-18  Martin Baulig  <martin@ximian.com>
17227
17228         * class.cs (Property.Define): Fix iterators.
17229
17230         * iterators.cs (Iterator.Define): Moved the
17231         `container.AddInterator (this)' call here from the .ctor; only do
17232         it if we resolved successfully.
17233
17234 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17235
17236         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17237         `true' for preprocessing directives that we parse.  The return
17238         value indicates whether we should return to regular tokenizing or
17239         not, not whether it was parsed successfully.
17240
17241         In the past if we were in: #if false ... #line #endif, we would
17242         resume parsing after `#line'.  See bug 61604.
17243
17244         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17245         building: IsEnumType should return true only for enums, not for
17246         enums or System.Enum itself.  This fixes #61593.
17247
17248         Likely what happened is that corlib was wrong: mcs depended on
17249         this bug in some places.  The bug got fixed, we had to add the
17250         hack, which caused bug 61593.
17251
17252         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17253         that was a workaround for the older conditions.
17254
17255 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17256
17257         * assign.cs: IAssignMethod has a new interface, as documented
17258         inline. All assignment code now uses this new api.
17259
17260         * ecore.cs, expression.cs: All classes which implement
17261         IAssignMethod now use the new interface.
17262
17263         * expression.cs (Invocation): add a hack to EmitCall so that
17264         IndexerAccess can be the target of a compound assignment without
17265         evaluating its arguments twice.
17266
17267         * statement.cs: Handle changes in Invocation api.
17268
17269 2004-07-16  Martin Baulig  <martin@ximian.com>
17270
17271         * iterators.cs: Rewrote this.  We're now using one single Proxy
17272         class for both the IEnumerable and the IEnumerator interface and
17273         `Iterator' derives from Class so we can use the high-level API.
17274
17275         * class.cs (TypeContainer.AddIterator): New method.
17276         (TypeContainer.DoDefineType): New protected virtual method, which
17277         is called from DefineType().
17278         (TypeContainer.DoDefineMembers): Call DefineType() and
17279         DefineMembers() on all our iterators.
17280         (TypeContainer.Emit): Call Emit() on all our iterators.
17281         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17282
17283         * codegen.cs (EmitContext.CurrentIterator): New public field.
17284
17285 2004-07-15  Martin Baulig  <martin@ximian.com>
17286
17287         * typemanager.cs
17288         (TypeManager.not_supported_exception_type): New type.   
17289
17290 2004-07-14  Martin Baulig  <martin@ximian.com>
17291
17292         * iterators.cs: Use real error numbers.
17293
17294 2004-07-14  Martin Baulig  <martin@ximian.com>
17295
17296         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17297         requires this to be a System.Collection.IEnumerable and not a
17298         class implementing that interface.
17299         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17300
17301 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17302
17303         * class.cs: Fixed previous fix, it broke some error tests.
17304
17305 2004-07-12  Martin Baulig  <martin@ximian.com>
17306
17307         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17308         Fixes #61293.
17309
17310 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17311
17312         * assign.cs (LocalTemporary): Add new argument: is_address,If
17313         `is_address' is true, then the value that we store is the address
17314         to the real value, and not the value itself.
17315         
17316         * ecore.cs (PropertyExpr): use the new local temporary
17317         stuff to allow us to handle X.Y += z (where X is a struct)
17318
17319 2004-07-08  Martin Baulig  <martin@ximian.com>
17320
17321         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17322         not always return, just like we're doing in Using.Resolve().
17323
17324 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17325
17326         * cs-parser.jay (fixed_statement): flag this as Pinned.
17327
17328 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
17329
17330         * typemanager.cs (TypeManager): Removed MakePinned method, this
17331         mechanism is replaced with the .NET 2.x compatible mechanism of
17332         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
17333
17334         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
17335         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
17336         `IsFixed' property which has a different meaning.
17337
17338 2004-07-02  Raja R Harinath  <rharinath@novell.com>
17339
17340         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
17341         visible from inside a nested class, not just the names of the
17342         immediately enclosing class.
17343         Fix for bug #60730.
17344
17345 2004-06-24  Raja R Harinath  <rharinath@novell.com>
17346
17347         * expression.cs (BetterConversion): Remove buggy special-case
17348         handling of "implicit constant expression conversions".  At this
17349         point, we already know that the conversion is possible -- we're
17350         only checking to see which is better.
17351
17352 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17353
17354         * cs-parser.jay: Added error CS0210 test.
17355
17356 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17357
17358         * cs-parser.jay: Added error CS0134 test.
17359
17360 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17361
17362         Fix bug #52507
17363         * cs-parser.jay: Added error CS0145 test.
17364
17365 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17366
17367         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
17368
17369 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
17370         
17371         * expression.cs (StackAlloc.Resolve): The argument may not
17372         be a constant; deal with this case.
17373         
17374 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
17375
17376         * attribute.cs (IndexerName_GetIndexerName): Renamed to
17377         GetIndexerAttributeValue.
17378         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
17379
17380         * class.cs (Indexer.Define): Added error tests for CS0415,
17381         CS0609.
17382
17383 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
17384
17385         * attribute.cs (Attribute.Resolve): Keep field code in sync with
17386         property code.
17387
17388 2004-06-23  Martin Baulig  <martin@ximian.com>
17389
17390         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
17391         neither return nor throw, reset the barrier as well.  Fixes #60457.
17392
17393 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17394
17395         * class.cs : EventAttributes is now set to None by default.
17396           This fixes bug #60459.
17397
17398 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17399
17400         Fix bug #60219
17401         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17402         Don't throw exception but return null (it's sufficient now).
17403
17404 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17405
17406         * typemanager.cs (GetArgumentTypes): Faster implementation.
17407
17408 2004-06-18  Martin Baulig  <martin@ximian.com>
17409
17410         * attribute.cs (Attribute.Resolve): Check whether we're an
17411         EmptyCast which a Constant child.  Fixes #60333.
17412
17413 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17414
17415         * statement.cs (EmitCollectionForeach): Account for the fact that
17416         not all valuetypes are in areas which we can take the address of.
17417         For these variables, we store to a temporary variable. Also, make
17418         sure that we dont emit a `callvirt' on a valuetype method.
17419
17420 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17421
17422         * expression.cs (StackAlloc.DoReSolve): Added test for
17423         negative parameter (CS0247).
17424
17425 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17426
17427         Fix bug #59792
17428         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17429
17430 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17431
17432         Fix bug #59781
17433         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17434         ulong.
17435
17436 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17437
17438         Fix bug #58254 & cs1555.cs, cs1556.cs
17439         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17440
17441 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17442
17443         * cs-parser.jay: Added error CS1669 test for indexers.
17444
17445 2004-06-11  Martin Baulig  <martin@ximian.com>
17446
17447         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17448         call this twice: for params and varargs methods.
17449
17450 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17451
17452         * class.cs:
17453         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17454
17455 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17456
17457         * attribute.cs (Attribute.GetValidTargets): Made public.
17458
17459         * class.cs: 
17460         (AbstractPropertyEventMethod): New class for better code sharing.
17461         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17462         CS1667 report.
17463         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17464
17465 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17466
17467         Fix bug #59477.
17468         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17469         that the call to Resolve is part of a MemberAccess.
17470         (Expression.Resolve): Use it for SimpleName resolution.
17471         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17472         Add 'intermediate' boolean argument.
17473         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17474         error message when the SimpleName can be resolved ambiguously
17475         between an expression and a type.
17476         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17477         public.
17478         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17479         call on the left-side.
17480
17481 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17482
17483         * class.cs:
17484         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17485
17486 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17487
17488         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17489
17490 2004-06-11  Martin Baulig  <martin@ximian.com>
17491
17492         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17493         varargs methods if applicable.
17494
17495 2004-06-11  Martin Baulig  <martin@ximian.com>
17496
17497         * expression.cs (Invocation.EmitCall): Don't use
17498         `method.CallingConvention == CallingConventions.VarArgs' since the
17499         method could also have `CallingConventions.HasThis'.
17500
17501 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17502
17503         * class.cs (Event.GetSignatureForError): Implemented.
17504         Fixed crash in error test cs3010.cs
17505
17506 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17507
17508         * cs-tokenizer.cs: Change the way we track __arglist to be
17509         consistent with the other keywords.
17510
17511 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17512
17513         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17514         tomorrow.
17515
17516 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17517
17518         * codegen.cs: Check that all referenced assemblies have a strongname
17519         before strongnaming the compiled assembly. If not report error CS1577.
17520         Fix bug #56563. Patch by Jackson Harper.
17521         * typemanager.cs: Added a method to return all referenced assemblies.
17522         Fix bug #56563. Patch by Jackson Harper.
17523
17524 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17525
17526         * class.cs:
17527         (Method.ApplyAttributeBuilder): Moved and added conditional
17528         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17529
17530         * delegate.cs:
17531         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17532
17533 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17534
17535         Fixed #59640
17536         * class.cs: (EventField.attribute_targets): Changed default target.
17537
17538 2004-06-08  Martin Baulig  <martin@ximian.com>
17539
17540         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17541
17542 2004-06-08  Martin Baulig  <martin@ximian.com>
17543
17544         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17545
17546 2004-06-07  Martin Baulig  <martin@ximian.com>
17547
17548         Added support for varargs methods.
17549
17550         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
17551         keyword.
17552
17553         * cs-parser.jay: Added support for `__arglist'.
17554
17555         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
17556
17557         * expression.cs (Argument.AType): Added `ArgList'.
17558         (Invocation): Added support for varargs methods.
17559         (ArglistAccess): New public class.
17560         (Arglist): New public class.
17561
17562         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
17563
17564         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
17565         a method's top-level block if the method has varargs.
17566
17567         * support.cs (ReflectionParameters, InternalParameters): Added
17568         support for varargs methods.    
17569
17570 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
17571
17572         * class.cs: Provide location in indexer error report.
17573
17574         * driver.cs: Use standard names.
17575
17576         * namespace.cs: Catch the use of using after a namespace has been
17577         declared also on using aliases.
17578
17579 2004-06-03  Raja R Harinath  <rharinath@novell.com>
17580
17581         Bug #50820.
17582         * typemanager.cs (closure_private_ok, closure_invocation_type)
17583         (closure_qualifier_type, closure_invocation_assembly)
17584         (FilterWithClosure): Move to ...
17585         (Closure): New internal nested class.
17586         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
17587         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
17588         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
17589         (MemberLookup, MemberLookupFailed): Use it.
17590         * expression.cs (New.DoResolve): Treat the lookup for the
17591         constructor as being qualified by the 'new'ed type.
17592         (Indexers.GetIndexersForTypeOrInterface): Update.
17593
17594 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
17595
17596         * attribute.cs
17597         (GetConditionalAttributeValue): New method. Returns
17598         condition of ConditionalAttribute.
17599         (SearchMulti): New method.  Returns all attributes of type 't'.
17600         Use it when attribute is AllowMultiple = true.
17601         (IsConditionalMethodExcluded): New method.
17602
17603         * class.cs
17604         (Method.IsExcluded): Implemented. Returns true if method has conditional
17605         attribute and the conditions is not defined (method is excluded).
17606         (IMethodData): Extended interface for ConditionalAttribute support.
17607         (PropertyMethod.IsExcluded): Implemented.
17608
17609         * decl.cs
17610         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
17611
17612         * expression.cs
17613         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
17614         on the method.
17615
17616 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
17617
17618         * expression.cs (ArrayCreationExpression): Make this just an
17619         `expression'. It can't be a statement, so the code here was
17620         dead.
17621
17622 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17623
17624         Fixed #59072
17625         * typemanager.cs (GetFullNameSignature): New method for
17626         MethodBase types.
17627
17628 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17629
17630         Fixed #56452
17631         * class.cs (MemberBase.GetSignatureForError): New virtual method.
17632         Use this method when MethodBuilder is null.
17633         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
17634         Added test for error CS0626 (MONO reports error for this situation).
17635         (IMethodData.GetSignatureForError): Extended interface.
17636
17637 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17638
17639         * attribute.cs
17640         (AttributeTester.GetObsoleteAttribute): Returns instance of
17641         ObsoleteAttribute when type is obsolete.
17642
17643         * class.cs
17644         (TypeContainer.VerifyObsoleteAttribute): Override.
17645         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
17646         (MethodCode.VerifyObsoleteAttribute): Override.
17647         (MemberBase.VerifyObsoleteAttribute): Override.
17648
17649         * decl.cs
17650         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
17651         and report proper error.
17652
17653         *delegate.cs
17654         Delegate.VerifyObsoleteAttribute): Override.
17655
17656         * ecore.cs
17657         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
17658         and report proper error.
17659         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
17660
17661         * enum.cs
17662         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
17663         and enum member.
17664
17665         * expression.cs
17666         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
17667         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
17668         Added test for ObsoleteAttribute.
17669
17670         * statement.cs
17671         (Catch): Derived from Statement.
17672
17673 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17674  
17675         Fixed bug #59071 & cs0160.cs
17676  
17677         * statement.cs (Try.Resolve): Check here whether order of catch
17678         clauses matches their dependencies.
17679
17680 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
17681
17682         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
17683         caused a regression: #59343.  Referencing nested classes from an
17684         assembly stopped working.
17685
17686 2004-05-31  Martin Baulig  <martin@ximian.com>
17687
17688         MCS is now frozen for beta 2.
17689
17690 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17691
17692         * convert.cs: add a trivial cache for overload operator resolution.
17693
17694 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17695
17696         * decl.cs: If possible, use lookuptypedirect here. We can only do
17697         this if there is no `.' after the namespace. Avoids using
17698         LookupType, which does lots of slow processing.
17699         (FindNestedType) New method, does what it says :-).
17700         * namespace.cs: use LookupTypeDirect.
17701         * rootcontext.cs: use membercache, if possible.
17702         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
17703
17704 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17705
17706         * expression.cs:
17707         According to the spec, 
17708
17709         In a member access of the form E.I, if E is a single identifier,
17710         and if the meaning of E as a simple-name (§7.5.2) is a constant,
17711         field, property, localvariable, or parameter with the same type as
17712         the meaning of E as a type-name (§3.8), then both possible
17713         meanings of E are permitted.
17714
17715         We did not check that E as a simple-name had the same type as E as
17716         a type name.
17717
17718         This trivial check gives us 5-7% on bootstrap time.
17719
17720 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17721
17722         * expression.cs (Invocation.OverloadResolve): Avoid the
17723         use of hashtables and boxing here by allocating on demand.
17724
17725 2004-05-30  Martin Baulig  <martin@ximian.com>
17726
17727         * rootcontext.cs (RootContext.LookupType): Don't cache things if
17728         we're doing a silent lookup.  Don't try to lookup nested types in
17729         TypeManager.object_type (thanks to Ben Maurer).
17730
17731 2004-05-30  Martin Baulig  <martin@ximian.com>
17732
17733         Committing a patch from Ben Maurer.
17734
17735         * rootcontext.cs (RootContext.LookupType): Cache negative results.
17736
17737 2004-05-29  Martin Baulig  <martin@ximian.com>
17738
17739         * class.cs (IMethodData.ShouldIgnore): New method.
17740
17741         * typemanager.cs (TypeManager.MethodFlags): Don't take a
17742         `Location' argument, we don't need it anywhere.  Use
17743         `IMethodData.ShouldIgnore ()' instead of
17744         `MethodData.GetMethodFlags ()'.
17745         (TypeManager.AddMethod): Removed.
17746         (TypeManager.AddMethod2): Renamed to AddMethod.
17747
17748 2004-05-29  Martin Baulig  <martin@ximian.com>
17749
17750         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
17751
17752         * convert.cs (Convert.ImplicitReferenceConversion): If we're
17753         converting from a class type S to an interface type and we already
17754         have an object on the stack, don't box it again.  Fixes #52578.
17755
17756 2004-05-29  Martin Baulig  <martin@ximian.com>
17757
17758         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17759         Added support for `params' parameters.  Fixes #59267.
17760
17761 2004-05-29  Martin Baulig  <martin@ximian.com>
17762
17763         * literal.cs (NullPointer): Provide a private .ctor which sets
17764         `type' to TypeManager.object_type.  Fixes #59048.
17765
17766 2004-05-29  Martin Baulig  <martin@ximian.com>
17767
17768         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
17769         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
17770
17771         * ecore.cs (EventExpr.instance_expr): Make the field private.
17772
17773 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
17774
17775         Fixed bug #50080 & cs0214-2.cs
17776         * expression.cs (Cast.DoResolve): Check unsafe context here.
17777         
17778         * statement.cs (Resolve.DoResolve): Likewise.
17779
17780 2004-05-26  Martin Baulig  <martin@ximian.com>
17781
17782         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
17783
17784         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
17785         (RootContext.LookupType): Pass down the `silent' flag.
17786
17787 2004-05-25  Martin Baulig  <martin@ximian.com>
17788
17789         * expression.cs
17790         (MethodGroupExpr.IdenticalTypeName): New public property.
17791         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
17792         expression actually refers to a type.
17793
17794 2004-05-25  Martin Baulig  <martin@ximian.com>
17795
17796         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
17797         for #56176 and made it actually work.
17798
17799 2004-05-25  Martin Baulig  <martin@ximian.com>
17800
17801         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
17802         (FieldExpr, PropertyExpr): Override and implement
17803         CacheTemporaries.  Fixes #52279.
17804
17805 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
17806
17807         * location.cs: In the new compiler listing a file twice is a
17808         warning, not an error.
17809
17810 2004-05-24  Martin Baulig  <martin@ximian.com>
17811
17812         * enum.cs (Enum.DefineType): For the `BaseType' to be a
17813         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
17814
17815 2004-05-24  Martin Baulig  <martin@ximian.com>
17816
17817         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
17818         walking the `using' list.  Fixes #53921.
17819
17820 2004-05-24  Martin Baulig  <martin@ximian.com>
17821
17822         * const.cs (Const.LookupConstantValue): Added support for
17823         EmptyCast's; fixes #55251.
17824
17825 2004-05-24  Martin Baulig  <martin@ximian.com>
17826
17827         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
17828         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
17829         which does the CS0135 check.  The reason is that we first need to
17830         check whether the variable actually exists.
17831
17832 2004-05-24  Martin Baulig  <martin@ximian.com>
17833
17834         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
17835         than RootContext.LookupType() to find the explicit interface
17836         type.  Fixes #58584.
17837
17838 2004-05-24  Raja R Harinath  <rharinath@novell.com>
17839
17840         * Makefile: Simplify.  Use executable.make.
17841         * mcs.exe.sources: New file.  List of sources of mcs.exe.
17842
17843 2004-05-24  Anders Carlsson  <andersca@gnome.org>
17844
17845         * decl.cs:
17846         * enum.cs:
17847         Use the invariant culture when doing String.Compare for CLS case
17848         sensitivity.
17849         
17850 2004-05-23  Martin Baulig  <martin@ximian.com>
17851
17852         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
17853         don't have any dots.  Fixes #52622, added cs0246-8.cs.
17854
17855         * namespace.cs (NamespaceEntry.Lookup): Likewise.
17856         
17857 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
17858
17859         * class.cs (MemberBase.Define): Reuse MemberType member for 
17860         resolved type. Other methods can use it too.
17861
17862 2004-05-23  Martin Baulig  <martin@ximian.com>
17863
17864         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
17865         the variable also exists in the current block (otherwise, we need
17866         to report a CS0103).  Fixes #58670.
17867
17868 2004-05-23  Martin Baulig  <martin@ximian.com>
17869
17870         * flowanalysis.cs (Reachability.Reachable): Compute this
17871         on-the-fly rather than storing it as a field.
17872
17873 2004-05-23  Martin Baulig  <martin@ximian.com>
17874
17875         * flowanalysis.cs (Reachability.And): Manually compute the
17876         resulting `barrier' from the reachability.      
17877        
17878 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
17879
17880         Fix bug #57835
17881         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
17882         instance of ObsoleteAttribute when symbol is obsolete.
17883
17884         * class.cs
17885         (IMethodData): Extended interface for ObsoleteAttribute support.
17886
17887 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
17888
17889         * attribute.cs: Fix bug #55970
17890
17891 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
17892
17893         Fix bug #52705
17894         * attribute.cs
17895         (GetObsoleteAttribute): New method. Creates the instance of
17896         ObsoleteAttribute.
17897         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
17898         ObsoleteAttribute when member is obsolete.
17899         (AttributeTester.Report_ObsoleteMessage): Common method for
17900         Obsolete error/warning reporting.
17901
17902         * class.cs
17903         (TypeContainer.base_classs_type): New member for storing parent type.
17904
17905         * decl.cs
17906         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
17907         for this MemberCore.
17908
17909 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17910
17911         * attribute.cs, const.cs: Fix bug #58590
17912
17913 2004-05-21  Martin Baulig  <martin@ximian.com>
17914
17915         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
17916         out parameters if the end of the method is unreachable.  Fixes
17917         #58098. 
17918
17919 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17920
17921         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
17922         Hari was right, why extra method.
17923
17924 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17925
17926         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
17927
17928 2004-05-20  Martin Baulig  <martin@ximian.com>
17929
17930         Merged this back from gmcs to keep the differences to a minumum.
17931
17932         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
17933         instead of a Declspace.
17934         (Attribute.ResolveType): Likewise.
17935         (Attributes.Search): Likewise.
17936         (Attributes.Contains): Likewise.
17937         (Attributes.GetClsCompliantAttribute): Likewise.
17938
17939         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
17940         argument.
17941         (MethodData.ApplyAttributes): Take an EmitContext instead of a
17942         DeclSpace.
17943
17944 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
17945
17946         Fix bug #58688 (MCS does not report error when the same attribute
17947         is assigned twice)
17948
17949         * attribute.cs (Attribute.Emit): Distinction between null and default.
17950
17951 2004-05-19  Raja R Harinath  <rharinath@novell.com>
17952
17953         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
17954         of a top-level attribute without an attribute target.
17955         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
17956         Make non-static.
17957         (Attribute.Conditional_GetConditionName), 
17958         (Attribute.Obsolete_GetObsoleteMessage): Update.
17959         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
17960         part of ScanForIndexerName.
17961         (Attribute.CanIgnoreInvalidAttribute): New function.
17962         (Attribute.ScanForIndexerName): Move to ...
17963         (Attributes.ScanForIndexerName): ... here.
17964         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
17965         (Attributes.Search): New internal variant that can choose not to
17966         complain if types aren't resolved.  The original signature now
17967         complains.
17968         (Attributes.GetClsCompliantAttribute): Use internal variant, with
17969         complaints suppressed.
17970         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
17971         only if it not useful.
17972         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
17973         top-level for attributes that are shared between the assembly
17974         and a top-level class.
17975         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
17976         * class.cs: Update to reflect changes.
17977         (DefineIndexers): Fuse loops.
17978         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
17979         a couple more variants of attribute names.
17980
17981 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
17982
17983         Fix bug #52585 (Implemented explicit attribute declaration)
17984
17985         * attribute.cs:
17986         (Attributable.ValidAttributeTargets): New abstract method. It gets
17987         list of valid attribute targets for explicit target declaration.
17988         (Attribute.Target): It holds target itself.
17989         (AttributeSection): Removed.
17990         (Attribute.CheckTargets): New method. It checks whether attribute
17991         target is valid for the current element.
17992
17993         * class.cs:
17994         (EventProperty): New class. For events that are declared like
17995         property (with add and remove accessors).
17996         (EventField): New class. For events that are declared like field.
17997         class.cs
17998
17999         * cs-parser.jay: Implemented explicit attribute target declaration.
18000
18001         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18002         Override ValidAttributeTargets.
18003
18004         * parameter.cs:
18005         (ReturnParameter): Class for applying custom attributes on 
18006         the return type.
18007         (ParameterAtribute): New class. Class for applying custom
18008         attributes on the parameter type.
18009
18010 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18011
18012         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18013         definitions. 
18014
18015         (Method): Allow UNSAFE here.
18016
18017         * modifiers.cs: Support unsafe reporting.
18018
18019 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18020
18021         * decl.cs: Fix bug #58478.
18022
18023 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18024
18025         * statement.cs: When checking for unreachable code on an EmptyStatement,
18026         set the location. Fixes bug #58488.
18027
18028 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18029
18030         * driver.cs: Add -pkg handling.
18031
18032         From Gonzalo: UseShelLExecute=false
18033
18034 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18035
18036         * attribute.cs:
18037         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18038         for attribute.
18039         (Attribute.IsClsCompliaceRequired): Moved to base for better
18040         accesibility.
18041         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18042         when attribute is AttributeUsageAttribute.
18043         (Attribute.GetValidTargets): Simplified.
18044         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18045         attribute for this type.
18046         (Attribute.ApplyAttributes): Method renamed to Emit and make
18047         non-static.
18048         (GlobalAttributeSection): New class for special handling of global
18049         attributes (assembly, module).
18050         (AttributeSection.Emit): New method.
18051
18052         * class.cs: Implemented Attributable abstract methods.
18053         (MethodCore.LabelParameters): Moved to Parameter class.
18054         (Accessor): Is back simple class.
18055         (PropertyMethod): Implemented Attributable abstract class.
18056         (DelegateMethod): Implemented Attributable abstract class.
18057         (Event): New constructor for disctintion between normal Event
18058         and Event with accessors.
18059
18060         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18061
18062         * codegen.cs, const.cs, decl.cs, delegate.cs:
18063         (CommonAssemblyModulClass): Implemented Attributable abstract class
18064         and simplified.
18065
18066         * enum.cs: Implement IAttributeSupport interface.
18067         (EnumMember): New class for emum members. Implemented Attributable
18068         abstract class
18069
18070         * parameter.cs:
18071         (ParameterBase): Is abstract.
18072         (ReturnParameter): New class for easier [return:] attribute handling.
18073
18074         * typemanager.cs: Removed builder_to_attr.
18075
18076 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18077
18078         Fix bug #57151.
18079         * attribute.cs (Attribute.GetPositionalValue): New function.
18080         * class.cs (TypeContainer.VerifyMembers): New function.
18081         (TypeContainer.Emit): Use it.
18082         (ClassOrStruct): New base class for Class and Struct.
18083         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18084         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18085         class.
18086         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18087         then each non-static field should have a FieldOffset attribute.
18088         Otherwise, none of the fields should have a FieldOffset attribute.
18089         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18090         and FieldOffset attributes.
18091         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18092         (TypeManager.field_offset_attribute_type): New core types.
18093         (TypeManager.InitCoreTypes): Initialize them.
18094
18095 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18096
18097         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18098         Return correct type.
18099         From bug #58270.
18100
18101 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18102
18103         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18104         be implicitly converted to ulong.
18105         
18106         * expression.cs: The logic for allowing operator &, | and ^ worked
18107         was wrong, it worked before because we did not report an error in
18108         an else branch.  Fixes 57895.
18109
18110         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18111         allow volatile fields to be reference types.
18112
18113 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18114
18115         * driver.cs: Add support for /debug-
18116
18117 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18118
18119         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18120         Add a 'complain' parameter to silence errors.
18121         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18122         silently overlooked type-resolutions.
18123         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18124         to reflect changes.
18125         (Attributes.Search): New function.
18126         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18127         (Attributes.GetAttributeFullName): Remove hack.
18128         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18129         Update to reflect changes.
18130         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18131         Use Attributes.Search instead of nested loops.
18132
18133 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18134
18135         * decl.cs:
18136         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18137         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18138         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18139
18140         * report.cs: (Report.Warning): Renamed to Warning_T because of
18141         parameter collision.
18142
18143 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18144
18145         * expression.cs (MemberAccess.ResolveMemberAccess):
18146         Exit with non-zero status after Report.Error.
18147         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18148         Likewise.
18149         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18150
18151 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18152
18153         * support.cs: Don't hang when the file is empty.
18154
18155 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18156
18157         * support.cs: In SeekableStreamReader, compute the preamble size of the
18158           underlying stream. Position changes should take into account that initial
18159           count of bytes.
18160
18161 2004-05-03  Todd Berman  <tberman@sevenl.net>
18162
18163         * driver.cs: remove unused GetSysVersion function.
18164
18165 2004-05-03  Todd Berman  <tberman@sevenl.net>
18166
18167         * driver.cs: Remove the hack from saturday, as well as the hack
18168         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18169         link_paths to get that bit proper.
18170
18171 2004-05-01  Todd Berman  <tberman@sevenl.net>
18172
18173         * driver.cs: Try a LoadFrom before a Load, this checks the current
18174         path. This is currently a bug in mono that is be fixed, however, this
18175         provides a workaround for now. This will be removed when the bug
18176         is fixed.
18177
18178 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18179
18180         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18181         incomplete key pairs (#57941).
18182
18183 2004-05-01  Todd Berman  <tberman@sevenl.net>
18184
18185         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18186         from the GAC
18187
18188 2004-04-30  Jackson Harper  <jackson@ximian.com>
18189
18190         * codegen.cs: Open keys readonly.
18191         
18192 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18193
18194         * typemanager.cs: don't report cyclic struct layout when a struct
18195         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18196         which has 2 Pango.Rectangle fields.
18197
18198 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18199
18200         * expression.cs: Handle IntPtr comparisons with IL code
18201         rather than a method call.
18202
18203 2004-04-29  Martin Baulig  <martin@ximian.com>
18204
18205         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18206         the list of PropertyInfo's in class hierarchy and find the
18207         accessor.  Fixes #56013.
18208
18209 2004-04-29  Martin Baulig  <martin@ximian.com>
18210
18211         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18212
18213 2004-04-29  Martin Baulig  <martin@ximian.com>
18214
18215         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18216
18217         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18218
18219 2004-04-29  Martin Baulig  <martin@ximian.com>
18220
18221         * class.cs (ConstructorInitializer.Resolve): Check whether the
18222         parent .ctor is accessible.  Fixes #52146.
18223
18224 2004-04-29  Martin Baulig  <martin@ximian.com>
18225
18226         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18227
18228         * statement.cs (Using.EmitLocalVariableDecls): Use
18229         TypeManager.idisposable_type, not typeof (IDisposable).
18230         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18231
18232 2004-04-29  Martin Baulig  <martin@ximian.com>
18233
18234         * class.cs (Event.Define): Don't emit the field and don't set
18235         RTSpecialName and SpecialName for events on interfaces.  Fixes
18236         #57703. 
18237
18238 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18239
18240         Refactor Attribute.ApplyAttributes.
18241         * attribute.cs (Attributable): New base class for objects that can
18242         have Attributes applied on them.
18243         (Attribute): Make AttributeUsage fields public.
18244         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18245         (Attribute.IsInternalCall): New property.
18246         (Attribute.UsageAttr): Convert to a public read-only property.
18247         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18248         (Attribute.ResolveType, Attribute.Resolve)
18249         (Attribute.ScanForIndexerName): Update to reflect changes.
18250         (Attribute.CheckAttributeTarget): Re-format.
18251         (Attribute.ApplyAttributes): Refactor, to various
18252         Attributable.ApplyAttributeBuilder methods.
18253         * decl.cs (MemberCore): Make Attributable.
18254         * class.cs (Accessor): Make Attributable.
18255         (MethodData.ApplyAttributes): Use proper attribute types, not
18256         attribute names.
18257         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18258         (TypeContainer.ApplyAttributeBuilder)
18259         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18260         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18261         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18262         (Operator.ApplyAttributeBuilder): New factored-out methods.
18263         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18264         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18265         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18266         * parameter.cs (ParameterBase): New Attributable base class
18267         that can also represent Return types.
18268         (Parameter): Update to the changes.
18269
18270 2004-04-29  Jackson Harper  <jackson@ximian.com>
18271
18272         * driver.cs: Prefer the corlib system version when looking for
18273         assemblies in the GAC. This is still a hack, but its a better hack
18274         now.
18275         
18276 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18277
18278         * decl.cs, enum.cs: Improved error 3005 reporting.
18279   
18280         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18281         (related_symbols): New private member for list of symbols
18282         related to reported error/warning.
18283         
18284         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18285
18286 2004-04-29  Martin Baulig  <martin@ximian.com>
18287
18288         * ecore.cs (Expression.Constantify): If we're an enum and
18289         TypeManager.TypeToCoreType() doesn't give us another type, use
18290         t.UnderlyingSystemType.  Fixes #56178.  
18291
18292 2004-04-29  Martin Baulig  <martin@ximian.com>
18293
18294         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18295         interfaces and for each interface, only add members directly
18296         declared in that interface.  Fixes #53255.
18297
18298 2004-04-28  Martin Baulig  <martin@ximian.com>
18299
18300         * expression.cs (ConditionalLogicalOperator): Use a temporary
18301         variable for `left' to avoid that we evaluate it more than once;
18302         bug #52588.
18303
18304 2004-04-28  Martin Baulig  <martin@ximian.com>
18305
18306         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18307         `void[]' (CS1547).
18308
18309 2004-04-28  Martin Baulig  <martin@ximian.com>
18310
18311         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18312         void (CS1547).
18313
18314         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18315         whether the type is not void (CS1547).
18316
18317 2004-04-28  Martin Baulig  <martin@ximian.com>
18318
18319         * expression.cs (Unary.DoResolveLValue): Override this and report
18320         CS0131 for anything but Operator.Indirection.
18321
18322 2004-04-28  Martin Baulig  <martin@ximian.com>
18323
18324         Committing a patch from Ben Maurer; see bug #50820.
18325
18326         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18327         check for classes.
18328
18329         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18330         classes.        
18331
18332 2004-04-28  Martin Baulig  <martin@ximian.com>
18333
18334         Committing a patch from Ben Maurer; see bug #50820.
18335
18336         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18337         check for classes.
18338
18339         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18340         classes.        
18341
18342 2004-04-28  Martin Baulig  <martin@ximian.com>
18343
18344         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
18345         (Block.AddLabel): Call DoLookupLabel() to only search in the
18346         current block.
18347
18348 2004-04-28  Martin Baulig  <martin@ximian.com>
18349
18350         * cfold.cs (ConstantFold.BinaryFold): Added special support for
18351         comparing StringConstants and NullLiterals in Equality and Inequality.
18352
18353 2004-04-28  Jackson Harper  <jackson@ximian.com>
18354
18355         * driver.cs: Attempt to load referenced assemblies from the
18356         GAC. This is the quick and dirty version of this method that
18357         doesnt take into account versions and just takes the first
18358         canidate found. Will be good enough for now as we will not have more
18359         then one version installed into the GAC until I update this method.
18360
18361 2004-04-28  Martin Baulig  <martin@ximian.com>
18362
18363         * typemanager.cs (TypeManager.CheckStructCycles): New public
18364         static method to check for cycles in the struct layout.
18365
18366         * rootcontext.cs (RootContext.PopulateTypes): Call
18367         TypeManager.CheckStructCycles() for each TypeContainer.
18368         [Note: We only need to visit each type once.]
18369
18370 2004-04-28  Martin Baulig  <martin@ximian.com>
18371
18372         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
18373
18374         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
18375         success and added `out object value'.  Use a `bool resolved' field
18376         to check whether we've already been called rather than
18377         `ConstantValue != null' since this breaks for NullLiterals.
18378
18379 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18380
18381         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
18382         setting of this flag, since the 'set' method may be non-public.
18383
18384 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18385
18386         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
18387         check on current_vector.Block.
18388
18389 2004-04-27  Martin Baulig  <martin@ximian.com>
18390
18391         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
18392         a field initializer.  Fixes #56459.
18393
18394 2004-04-27  Martin Baulig  <martin@ximian.com>
18395
18396         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18397         we're not attempting to use an indexer.  Fixes #52154.
18398
18399 2004-04-27  Martin Baulig  <martin@ximian.com>
18400
18401         * statement.cs (Return): Don't create a return label if we don't
18402         need it; reverts my change from January 20th.  Thanks to Ben
18403         Maurer for this.
18404
18405 2004-04-27  Martin Baulig  <martin@ximian.com>
18406
18407         According to the spec, `goto' can only leave a nested scope, but
18408         never enter it.
18409
18410         * statement.cs (Block.LookupLabel): Only lookup in the current
18411         block, don't recurse into parent or child blocks.
18412         (Block.AddLabel): Check in parent and child blocks, report
18413         CS0140/CS0158 if we find a duplicate.
18414         (Block): Removed this indexer for label lookups.
18415         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18416         this already does the error reporting for us.
18417
18418         * flowanalysis.cs
18419         (FlowBranching.UsageVector.Block): New public variable; may be null.
18420         (FlowBranching.CreateSibling): Added `Block' argument.
18421         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18422         label for the target of a `goto' and check whether we're not
18423         leaving a `finally'.
18424
18425 2004-04-27  Martin Baulig  <martin@ximian.com>
18426
18427         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18428         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18429         just for returns).
18430
18431 2004-04-27  Martin Baulig  <martin@ximian.com>
18432
18433         * statement.cs (Block.AddLabel): Also check for implicit blocks
18434         and added a CS0158 check.
18435
18436 2004-04-27  Martin Baulig  <martin@ximian.com>
18437
18438         * flowanalysis.cs (FlowBranchingLoop): New class.
18439         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18440         UsageVector's instead of an ArrayList.
18441         (FlowBranching.Label): Likewise.
18442         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18443         (FlowBranching.AddBreakVector): New method.
18444
18445 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18446
18447         * attribute.cs: Small regression fix: only convert the type if we
18448         the type is different, fixes System.Drawing build.
18449
18450 2004-04-27  Martin Baulig  <martin@ximian.com>
18451
18452         * attribute.cs (Attribute.Resolve): If we have a constant value
18453         for a named field or property, implicity convert it to the correct
18454         type.
18455
18456 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18457
18458         * statement.cs (Block.Block): Implicit blocks share
18459         'child_variable_names' fields with parent blocks.
18460         (Block.AddChildVariableNames): Remove.
18461         (Block.AddVariable): Mark variable as "used by a child block" in
18462         every surrounding block.
18463         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18464         been used in a child block, complain about violation of "Invariant
18465         meaning in blocks" rule.
18466         * cs-parser.jay (declare_local_variables): Don't use
18467         AddChildVariableNames.
18468         (foreach_statement): Don't create an implicit block: 'foreach'
18469         introduces a scope.
18470
18471 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18472
18473         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18474         converting from 0L to ulong.  Fixes 57522.
18475
18476 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18477
18478         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18479         derived class hides via 'new' keyword field from base class (test-242.cs).
18480         TODO: Handle this in the more general way.
18481         
18482         * class.cs (CheckBase): Ditto.
18483
18484 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18485
18486         * decl.cs (caching_flags): New member for storing cached values
18487         as bit flags.
18488         (MemberCore.Flags): New enum where bit flags for caching_flags
18489         are defined.
18490         (MemberCore.cls_compliance): Moved to caching_flags.
18491         (DeclSpace.Created): Moved to caching_flags.
18492
18493         * class.cs: Use caching_flags instead of DeclSpace.Created
18494         
18495 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18496
18497         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18498         if we are only a derived class, not a nested class.
18499
18500         * typemanager.cs: Same as above, but do this at the MemberLookup
18501         level (used by field and methods, properties are handled in
18502         PropertyExpr).   Allow for the qualified access if we are a nested
18503         method. 
18504
18505 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18506
18507         * class.cs: Refactoring.
18508         (IMethodData): New inteface; Holds links to parent members
18509         to avoid member duplication (reduced memory allocation).
18510         (Method): Implemented IMethodData interface.
18511         (PropertyBase): New inner classes for get/set methods.
18512         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18513         (Event): New inner classes for add/remove methods.
18514         (Event.DelegateMethod): Implemented IMethodData interface.
18515
18516         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18517         EmitContext (related to class.cs refactoring).
18518
18519 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18520
18521         * delegate.cs (Delegate.VerifyApplicability): If the number of
18522         arguments are the same as the number of parameters, first try to
18523         verify applicability ignoring  any 'params' modifier on the last
18524         parameter.
18525         Fixes #56442.
18526
18527 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18528
18529         * class.cs (TypeContainer.AddIndexer): Use
18530         'ExplicitInterfaceName' to determine if interface name was
18531         explicitly specified.  'InterfaceType' is not initialized at this time.
18532         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18533         Indexers array is already in the required order.  Initialize
18534         'IndexerName' only if there are normal indexers.
18535         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18536         (TypeContainer.Emit): Emit DefaultMember attribute only if
18537         IndexerName is initialized.
18538         Fixes #56300.
18539
18540 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18541
18542         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18543         Fixes #57007
18544
18545 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18546
18547         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18548         attributes.
18549         Fix for #56456.
18550
18551         * attribute.cs (Attribute.Resolve): Check for duplicate named
18552         attributes.
18553         Fix for #56463.
18554
18555 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
18556
18557         * iterators.cs (MarkYield): track whether we are in an exception,
18558         and generate code accordingly.  Use a temporary value to store the
18559         result for our state.
18560
18561         I had ignored a bit the interaction of try/catch with iterators
18562         since their behavior was not entirely obvious, but now it is
18563         possible to verify that our behavior is the same as MS .NET 2.0
18564
18565         Fixes 54814
18566
18567 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
18568
18569         * iterators.cs: Avoid creating temporaries if there is no work to
18570         do. 
18571
18572         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
18573         Enumerations, use TypeManager.EnumToUnderlying and call
18574         recursively. 
18575
18576         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
18577         bug #57013
18578
18579         (This.Emit): Use EmitContext.EmitThis to emit our
18580         instance variable.
18581
18582         (This.EmitAssign): Ditto.
18583
18584         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
18585         codepaths, we will move all the functionality into
18586         Mono.CSharp.This 
18587
18588         (FieldExpr.EmitAssign): Ditto.
18589
18590         This fixes several hidden bugs that I uncovered while doing a code
18591         review of this today.
18592
18593         * codegen.cs (EmitThis): reworked so the semantics are more clear
18594         and also support value types "this" instances.
18595
18596         * iterators.cs: Changed so that for iterators in value types, we
18597         do not pass the value type as a parameter.  
18598
18599         Initialization of the enumerator helpers is now done in the caller
18600         instead of passing the parameters to the constructors and having
18601         the constructor set the fields.
18602
18603         The fields have now `assembly' visibility instead of private.
18604
18605 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
18606
18607         * expression.cs (Argument.Resolve): Check if fields passed as ref
18608         or out are contained in a MarshalByRefObject.
18609
18610         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
18611         another compiler type.
18612
18613 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
18614
18615         * class.cs (Indexer.Define): use the new name checking method.
18616         Also, return false on an error.
18617         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
18618         (is_identifier_[start/part]_character): make static.
18619
18620 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
18621
18622         * expression.cs (Binary.ResolveOperator): Do no append strings
18623         twice: since we can be invoked more than once (array evaluation)
18624         on the same concatenation, take care of this here.  Based on a fix
18625         from Ben (bug #56454)
18626
18627 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
18628
18629         * codegen.cs: Fix another case where CS1548 must be reported (when 
18630         delay-sign isn't specified and no private is available #56564). Fix
18631         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
18632         error when MCS is used on the MS runtime and we need to delay-sign 
18633         (which seems unsupported by AssemblyBuilder - see #56621).
18634
18635 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
18636
18637         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
18638         (TypeManager.ComputeNamespaces): Faster implementation for
18639         Microsoft runtime.
18640
18641         * compiler.csproj: Updated AssemblyName to mcs.
18642
18643 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
18644
18645         * rootcontext.cs: Add new types to the boot resolution.
18646
18647         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
18648         MulticastDelegate is not allowed.
18649
18650         * typemanager.cs: Add new types to lookup: System.TypedReference
18651         and ArgIterator.
18652
18653         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
18654         check for TypedReference or ArgIterator, they are not allowed. 
18655
18656         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
18657         makes us properly catch 1510 in some conditions (see bug 56016 for
18658         details). 
18659
18660 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
18661
18662         * CryptoConvert.cs: update from corlib version
18663         with endian fixes.
18664
18665 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
18666
18667         * class.cs (Indexer.Define): Check indexername declaration
18668
18669 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
18670
18671         * attribute.cs (IsClsCompliant): Fixed problem with handling
18672         all three states (compliant, not-compliant, undetected).
18673
18674 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
18675
18676         * attribute.cs (Attribute): Location is now public.
18677         (Resolve): Store resolved arguments (pos_values) in attribute class.
18678         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
18679         (GetClsCompliantAttributeValue): New method that gets
18680         CLSCompliantAttribute value.
18681         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
18682         if exists else null.
18683         (AttributeTester): New class for CLS-Compliant verification routines.
18684
18685         * class.cs (Emit): Add CLS-Compliant verification.
18686         (Method.GetSignatureForError): Implemented.
18687         (Constructor.GetSignatureForError): Implemented
18688         (Constructor.HasCompliantArgs): Returns if constructor has
18689         CLS-Compliant arguments.
18690         (Constructor.Emit): Override.
18691         (Construcor.IsIdentifierClsCompliant): New method; For constructors
18692         is needed to test only parameters.
18693         (FieldBase.GetSignatureForError): Implemented.
18694         (TypeContainer): New member for storing base interfaces.
18695         (TypeContainer.FindMembers): Search in base interfaces too.
18696
18697         * codegen.cs (GetClsComplianceAttribute): New method that gets
18698         assembly or module CLSCompliantAttribute value.
18699         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
18700         for assembly.
18701         (ModuleClass.Emit): Add error 3012 test.
18702
18703         * const.cs (Emit): Override and call base for CLS-Compliant tests.
18704
18705         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
18706         state for all decl types.
18707         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
18708         if CLS-Compliant tests are required.
18709         (IsClsCompliaceRequired): New method. Analyze whether code
18710         must be CLS-Compliant.
18711         (IsExposedFromAssembly): New method. Returns true when MemberCore
18712         is exposed from assembly.
18713         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
18714         value or gets cached value.
18715         (HasClsCompliantAttribute): New method. Returns true if MemberCore
18716         is explicitly marked with CLSCompliantAttribute.
18717         (IsIdentifierClsCompliant): New abstract method. This method is
18718         used to testing error 3005.
18719         (IsIdentifierAndParamClsCompliant): New method. Common helper method
18720         for identifier and parameters CLS-Compliant testing.
18721         (VerifyClsCompliance): New method. The main virtual method for
18722         CLS-Compliant verifications.
18723         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
18724         null. I don't know why is null (too many public members !).
18725         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
18726         and get value of first CLSCompliantAttribute that found.
18727
18728         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
18729         (VerifyClsCompliance): Override and add extra tests.
18730
18731         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
18732         clscheck- disable CLS-Compliant verification event if assembly is has
18733         CLSCompliantAttribute(true).
18734
18735         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
18736         ApllyAttribute is now called in emit section as in the other cases.
18737         Possible future Emit integration.
18738         (IsIdentifierClsCompliant): New override.
18739         (VerifyClsCompliance): New override.
18740         (GetEnumeratorName): Returns full enum name.
18741
18742         * parameter.cs (GetSignatureForError): Implemented.
18743
18744         * report.cs (WarningData): New struct for Warning message information.
18745         (LocationOfPreviousError): New method.
18746         (Warning): New method. Reports warning based on the warning table.
18747         (Error_T): New method. Reports error based on the error table.
18748
18749         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
18750         verifications are done here.
18751
18752         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
18753
18754         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
18755         CLSCompliantAttribute.
18756         (all_imported_types): New member holds all imported types from other
18757         assemblies.
18758         (LoadAllImportedTypes): New method fills static table with exported types
18759         from all referenced assemblies.
18760         (Modules): New property returns all assembly modules.
18761
18762 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
18763
18764         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
18765         throwing a parser error.
18766
18767         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
18768         which removes the hardcoded get_/set_ prefixes for properties, as
18769         IL allows for the properties to be named something else.  
18770
18771         Bug #56013
18772
18773         * expression.cs: Do not override operand before we know if it is
18774         non-null.  Fix 56207
18775
18776 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18777
18778         * typemanager.cs: support for pinned variables.
18779
18780 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18781
18782         * decl.cs, typemanager.cs: Avoid using an arraylist
18783         as a buffer if there is only one result set.
18784
18785 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18786
18787         * expression.cs: Make sure you cant call a static method
18788         with an instance expression, bug #56174.
18789
18790 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
18791
18792         * class.cs (IsDuplicateImplementation): Improve error reporting to
18793         flag 663 (method only differs in parameter modifier).
18794
18795         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
18796         in preprocessor directives.
18797
18798         * location.cs (LookupFile): Allow for the empty path.
18799
18800         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
18801         better approach for some of that patch, but its failing with the
18802         CharSet enumeration.  For now try/catch will do.
18803
18804         * typemanager.cs: Do not crash if a struct does not have fields.
18805         Fixes 56150.
18806
18807 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18808
18809         * expression.cs: cs0213, cant fix a fixed expression.
18810         fixes 50231.
18811
18812 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18813
18814         * cs-parser.jay: detect invalid embeded statements gracefully.
18815         bug #51113.
18816
18817 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18818
18819         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
18820         As a regex:
18821         s/
18822         the invocation type may not be a subclass of the tye of the item/
18823         The type of the item must be a subclass of the invocation item.
18824         /g
18825
18826         Fixes bug #50820.
18827
18828 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
18829
18830         * attribute.cs: Added methods to get a string and a bool from an
18831         attribute. Required to information from AssemblyKeyFileAttribute,
18832         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
18833         * codegen.cs: Modified AssemblyName creation to include support for
18834         strongnames. Catch additional exceptions to report them as CS1548.
18835         * compiler.csproj: Updated include CryptoConvert.cs.
18836         * compiler.csproj.user: Removed file - user specific configuration.
18837         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
18838         Mono.Security assembly. The original class is maintained and tested in
18839         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
18840         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
18841         like CSC 8.0 (C# v2) supports.
18842         * Makefile: Added CryptoConvert.cs to mcs sources.
18843         * rootcontext.cs: Added new options for strongnames.
18844
18845 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
18846
18847         * driver.cs: For --expect-error, report error code `2'
18848         if the program compiled with no errors, error code `1' if
18849         it compiled with an error other than the one expected.
18850
18851 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
18852
18853         * compiler.csproj: Updated for Visual Studio .NET 2003.
18854         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
18855         * compiler.sln: Updated for Visual Studio .NET 2003.
18856
18857 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
18858
18859         * expression.cs: Fix bug #47234. We basically need to apply the
18860         rule that we prefer the conversion of null to a reference type
18861         when faced with a conversion to 'object' (csc behaviour).
18862
18863 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18864
18865         * statement.cs: Shorter form for foreach, eliminates
18866         a local variable. r=Martin.
18867
18868 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18869
18870         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
18871         checks if we can use brtrue/brfalse to test for 0.
18872         * expression.cs: use the above in the test for using brtrue/brfalse.
18873         cleanup code a bit.
18874
18875 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18876
18877         * expression.cs: Rewrite string concat stuff. Benefits:
18878
18879         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
18880         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
18881         rather than a concat chain.
18882
18883         * typemanager.cs: Add lookups for more concat overloads.
18884
18885 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18886
18887         * expression.cs: Emit shorter il code for array init.
18888
18889         newarr
18890         dup
18891         // set 1
18892
18893         // set 2
18894
18895         newarr
18896         stloc.x
18897
18898         ldloc.x
18899         // set 1
18900
18901         ldloc.x
18902         // set 2
18903
18904 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
18905
18906         * statement.cs: Before, two switch blocks would be merged if the
18907         total size of the blocks (end_item - begin_item + 1) was less than
18908         two times the combined sizes of the blocks.
18909
18910         Now, it will only merge if after the merge at least half of the
18911         slots are filled.
18912
18913         fixes 55885.
18914
18915 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
18916
18917         * class.cs : csc build fix for GetMethods(). See bug #52503.
18918
18919 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
18920
18921         * expression.cs: Make sure fp comparisons work with NaN.
18922         This fixes bug #54303. Mig approved this patch a long
18923         time ago, but we were not able to test b/c the runtime
18924         had a related bug.
18925
18926 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
18927
18928         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
18929
18930 2004-03-19  Martin Baulig  <martin@ximian.com>
18931
18932         * class.cs (MemberCore.IsDuplicateImplementation): Report the
18933         error here and not in our caller.
18934
18935 2004-03-19  Martin Baulig  <martin@ximian.com>
18936
18937         * interface.cs: Completely killed this file.
18938         (Interface): We're now a TypeContainer and live in class.cs.
18939
18940         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
18941         argument; we're now also called for interfaces.
18942         (TypeContainer.DefineMembers): Allow this method being called
18943         multiple times.
18944         (TypeContainer.GetMethods): New public method; formerly known as
18945         Interface.GetMethod().  This is used by PendingImplementation.
18946         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
18947         it's now private and non-static.
18948         (Interface): Moved this here; it's now implemented similar to
18949         Class and Struct.
18950         (Method, Property, Event, Indexer): Added `bool is_interface'
18951         argument to their .ctor's.
18952         (MemberBase.IsInterface): New public field.
18953
18954         * cs-parser.jay: Create normal Method, Property, Event, Indexer
18955         instances instead of InterfaceMethod, InterfaceProperty, etc.
18956         (opt_interface_base): Removed; we now use `opt_class_base' instead.
18957         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
18958
18959 2004-03-19  Martin Baulig  <martin@ximian.com>
18960
18961         * class.cs (MethodCore.IsDuplicateImplementation): New private
18962         method which does the CS0111 checking.
18963         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
18964         Use IsDuplicateImplementation().
18965
18966 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
18967
18968         * decl.cs (FindMemberToOverride): New method to find the correct
18969         method or property to override in the base class.
18970         * class.cs
18971             - Make Method/Property use the above method to find the
18972               version in the base class.
18973             - Remove the InheritableMemberSignatureCompare as it is now
18974               dead code.
18975
18976         This patch makes large code bases much faster to compile, as it is
18977         O(n) rather than O(n^2) to do this validation.
18978
18979         Also, it fixes bug 52458 which is that nested classes are not
18980         taken into account when finding the base class member.
18981
18982         Reviewed/Approved by Martin.
18983
18984 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
18985
18986         * interface.cs: In all interface classes removed redundant
18987         member initialization.
18988
18989 2004-03-16  Martin Baulig  <martin@ximian.com>
18990
18991         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
18992
18993 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
18994
18995         * decl.cs (DefineTypeAndParents): New helper method to define a
18996         type's containers before the type itself is defined;  This is a
18997         bug exposed by the recent changes to Windows.Forms when an
18998         implemented interface was defined inside a class that had not been
18999         built yet.   
19000
19001         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19002
19003         (Check): Loop correctly to report errors modifiers
19004         (UNSAFE was not in the loop, since it was the same as TOP).
19005
19006         * interface.cs: Every interface member now takes a ModFlags,
19007         instead of a "is_new" bool, which we set on the base MemberCore. 
19008
19009         Every place where we called "UnsafeOk" in the interface, now we
19010         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19011         the unsafe settings from the member declaration instead of the
19012         container interface. 
19013
19014         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19015
19016         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19017         `set_indexer_name' to the pending bits (one per type).
19018
19019         We fixed a bug today that was picking the wrong method to
19020         override, since for properties the existing InterfaceMethod code
19021         basically ignored the method name.  Now we make sure that the
19022         method name is one of the valid indexer names.
19023
19024 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19025  
19026         * support.cs (SeekableStreamReader): Keep track of stream byte
19027         positions and don't mix them with character offsets to the buffer.
19028
19029         Patch from Gustavo Giráldez
19030
19031 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19032
19033         * interface.cs (InterfaceSetGetBase): Removed double member
19034         initialization, base class does it as well.
19035
19036 2004-03-13  Martin Baulig  <martin@ximian.com>
19037
19038         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19039         when compiling corlib.
19040
19041 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19042
19043         * convert.cs (ExplicitConversion): We were reporting an error on
19044         certain conversions (object_type source to a value type, when the
19045         expression was `null') before we had a chance to pass it through
19046         the user defined conversions.
19047
19048         * driver.cs: Replace / and \ in resource specifications to dots.
19049         Fixes 50752
19050
19051         * class.cs: Add check for duplicate operators.  Fixes 52477
19052
19053 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19054
19055         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19056         that are in the middle of the statements, not only at the end.
19057         Fixes #54987
19058
19059         * class.cs (TypeContainer.AddField): No longer set the
19060         `HaveStaticConstructor' flag, now we call it
19061         `UserDefineStaticConstructor' to diferentiate the slightly
19062         semantic difference.
19063
19064         The situation is that we were not adding BeforeFieldInit (from
19065         Modifiers.TypeAttr) to classes that could have it.
19066         BeforeFieldInit should be set to classes that have no static
19067         constructor. 
19068
19069         See:
19070
19071         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19072
19073         And most importantly Zoltan's comment:
19074
19075         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19076
19077         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19078          before its static fields are used', i.e. initialization does not need
19079          to be triggered by the first access to the type. Setting this flag
19080          helps the JIT to compile better code, since it can run the static
19081          constructor at JIT time, and does not need to generate code to call it
19082          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19083          this flag for lots of classes like String. 
19084          
19085          csc sets this flag if the type does not have an explicit static 
19086          constructor. The reasoning seems to be that if there are only static
19087          initalizers for a type, and no static constructor, then the programmer
19088          does not care when this initialization happens, so beforefieldinit
19089          can be used.
19090          
19091          This bug prevents the AOT compiler from being usable, since it 
19092          generates so many calls to mono_runtime_class_init that the AOT code
19093          is much slower than the JITted code. The JITted code is faster, 
19094          because it does not generate these calls if the vtable is type is
19095          already initialized, which is true in the majority of cases. But the
19096          AOT compiler can't do this."
19097
19098 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19099
19100         * class.cs (MethodData.Emit): Refactor the code so symbolic
19101         information is generated for destructors;  For some reasons we
19102         were taking a code path that did not generate symbolic information
19103         before. 
19104
19105 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19106
19107         * class.cs: Create a Constructor.CheckBase method that
19108         takes care of all validation type code. The method
19109         contains some code that was moved from Define.
19110
19111         It also includes new code that checks for duplicate ctors.
19112         This fixes bug #55148.
19113
19114 2004-03-09  Joshua Tauberer <tauberer@for.net>
19115
19116         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19117         a { ... }-style array creation invokes EmitStaticInitializers
19118         which is not good for reference-type arrays.  String, decimal
19119         and now null constants (NullCast) are not counted toward
19120         static initializers.
19121
19122 2004-03-05  Martin Baulig  <martin@ximian.com>
19123
19124         * location.cs (SourceFile.HasLineDirective): New public field;
19125         specifies whether the file contains or is referenced by a "#line"
19126         directive.
19127         (Location.DefineSymbolDocuments): Ignore source files which
19128         either contain or are referenced by a "#line" directive.        
19129
19130 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19131
19132         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19133         direct access to our parent, so check the method inline there.
19134
19135 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19136
19137         * expression.cs (Invocation.EmitCall): Miguel's last commit
19138         caused a regression. If you had:
19139
19140             T t = null;
19141             t.Foo ();
19142
19143         In Foo the implict this would be null.
19144
19145 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19146
19147         * expression.cs (Invocation.EmitCall): If the method is not
19148         virtual, do not emit a CallVirt to it, use Call.
19149
19150         * typemanager.cs (GetFullNameSignature): Improve the method to
19151         cope with ".ctor" and replace it with the type name.
19152
19153         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19154         as an argument the ConstructorBuilder where it is being defined,
19155         to catch the recursive constructor invocations.
19156
19157 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19158
19159         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19160         routines to check if a type is an enumerable/enumerator allow
19161         classes that implement the IEnumerable or IEnumerator interfaces.
19162
19163         * class.cs (Property, Operator): Implement IIteratorContainer, and
19164         implement SetYields.
19165
19166         (Property.Define): Do the block swapping for get_methods in the
19167         context of iterators.   We need to check if Properties also
19168         include indexers or not.
19169
19170         (Operator): Assign the Block before invoking the
19171         OperatorMethod.Define, so we can trigger the Iterator code
19172         replacement. 
19173
19174         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19175         Property and Operator classes are not created when we parse the
19176         declarator but until we have the block completed, so we use a
19177         singleton SimpleIteratorContainer.Simple to flag whether the
19178         SetYields has been invoked.
19179
19180         We propagate this setting then to the Property or the Operator to
19181         allow the `yield' to function.
19182
19183 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19184
19185         * codegen.cs: Implemented attribute support for modules.
19186         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19187         Assembly/Module functionality.
19188
19189         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19190         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19191         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19192
19193 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19194
19195         * interface.cs (FindMembers): The operation is performed on all base
19196         interfaces and not only on the first. It is required for future CLS Compliance patch.
19197
19198 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19199
19200         * statement.cs, codegen.cs:
19201         This patch deals with patterns such as:
19202
19203         public class List : IEnumerable {
19204
19205                 public MyEnumerator GetEnumerator () {
19206                         return new MyEnumerator(this);
19207                 }
19208
19209                 IEnumerator IEnumerable.GetEnumerator () {
19210                         ...
19211                 }
19212                 
19213                 public struct MyEnumerator : IEnumerator {
19214                         ...
19215                 }
19216         }
19217
19218         Before, there were a few things we did wrong:
19219         1) we would emit callvirt on a struct, which is illegal
19220         2) we emited ldarg when we needed to emit ldarga
19221         3) we would mistakenly call the interface methods on an enumerator
19222         type that derived from IEnumerator and was in another assembly. For example:
19223
19224         public class MyEnumerator : IEnumerator
19225
19226         Would have the interface methods called, even if there were public impls of the
19227         method. In a struct, this lead to invalid IL code.
19228
19229 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19230
19231         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19232           renamed to Emit.
19233
19234         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19235
19236 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19237
19238         * cs-parser.jay: Fix small regression: we were not testing V2
19239         compiler features correctly.
19240
19241         * interface.cs: If the emit context is null, then create one
19242
19243 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19244
19245         * decl.cs (GetSignatureForError): New virtual method to get full name
19246           for error messages.
19247
19248         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19249           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19250
19251         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19252           Duplicated members and code in these classes has been removed.
19253           Better encapsulation in these classes.
19254
19255 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19256
19257         * assign.cs (Assign.DoResolve): When dealing with compound
19258         assignments, there is a new rule in ECMA C# 2.4 (might have been
19259         there before, but it is documented here) that states that in:
19260
19261         a op= b;
19262
19263         If b is of type int, and the `op' is a shift-operator, then the
19264         above is evaluated as:
19265
19266         a = (int) a op b 
19267
19268         * expression.cs (Binary.ResolveOperator): Instead of testing for
19269         int/uint/long/ulong, try to implicitly convert to any of those
19270         types and use that in pointer arithmetic.
19271
19272         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19273         method to print information for from the type, not from the
19274         null-method we were given.
19275
19276 2004-02-01  Duncan Mak  <duncan@ximian.com>
19277
19278         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19279         parsing for cmd, fixes bug #53694.
19280
19281 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19282
19283         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19284         in the member name duplication tests. Property and operator name duplication
19285         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19286
19287 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19288
19289         * interface.cs (PopulateMethod): Fixed crash when interface method
19290         returns not existing type (error test cs0246-3.cs).
19291
19292 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19293
19294         * cs-parser.jay (interface_accessors): Re-write actions to also
19295         store attributes attached to get and set methods. Fix spelling
19296         while at it.
19297
19298         (inteface_property_declaration): Modify accordingly.
19299
19300         (InterfaceAccessorInfo): New helper class to store information to pass
19301         around between rules that use interface_accessors.
19302
19303         * interface.cs (Emit): Apply attributes on the get and set
19304         accessors of properties and indexers too.
19305
19306         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19307         right MethodBuilder when applying attributes to the get and set accessors.
19308
19309 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19310
19311         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19312
19313 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19314
19315         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19316
19317 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19318
19319         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19320         changes that treat `yield' specially when present before `break'
19321         or `return' tokens.
19322
19323         * cs-tokenizer.cs: yield is no longer a keyword.
19324
19325 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19326
19327         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19328         setting for default constructors.
19329         For default constructors are almost every time set wrong Modifier. The
19330         generated IL code has been alright. But inside mcs this values was
19331         wrong and this was reason why several of my CLS Compliance tests
19332         failed.
19333
19334 2004-01-22  Martin Baulig  <martin@ximian.com>
19335
19336         * cs-parser.jay (namespace_or_type_name): Return an Expression,
19337         not a QualifiedIdentifier.  This is what `type_name_expression'
19338         was previously doing.
19339         (type_name_expression): Removed; the code is now in
19340         `namespace_or_type_name'.
19341         (qualified_identifier): Removed, use `namespace_or_type_name'
19342         instead.
19343         (QualifiedIdentifier): Removed this class.      
19344
19345 2004-01-22  Martin Baulig  <martin@ximian.com>
19346
19347         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
19348         not a string as alias name.
19349
19350 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
19351
19352         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
19353         #52730 bug, and instead compute correctly the need to use a
19354         temporary variable when requesting an address based on the
19355         static/instace modified of the field and the constructor.
19356  
19357 2004-01-21  Martin Baulig  <martin@ximian.com>
19358
19359         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
19360         class and namespace before looking up aliases.  Fixes #52517.
19361
19362 2004-01-21  Martin Baulig  <martin@ximian.com>
19363
19364         * flowanalysis.cs (UsageVector.Merge): Allow variables being
19365         assinged in a 'try'; fixes exception4.cs.
19366
19367 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19368         * class.cs : Implemented parameter-less constructor for TypeContainer
19369
19370         * decl.cs: Attributes are now stored here. New property OptAttributes
19371
19372         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
19373
19374         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
19375
19376 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19377
19378         * typemanager.cs (CSharpSignature): Now reports also inner class name.
19379           (CSharpSignature): New method for indexer and property signature.
19380
19381 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19382
19383         * pending.cs (IsVirtualFilter): Faster implementation.
19384
19385 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19386
19387         * typemanager.cs: Avoid inclusion of same assembly more than once.
19388
19389 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19390
19391         * cs-parser.jay: Fixed problem where the last assembly attribute
19392           has been applied also to following declaration (class, struct, etc.)
19393           
19394 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19395
19396         * class.cs: Added error CS0538, CS0539 reporting.
19397         Fixed crash on Microsoft runtime when field type is void.
19398
19399         * cs-parser.jay: Added error CS0537 reporting.
19400
19401         * pending.cs: Added error CS0535 reporting.
19402         Improved error report for errors CS0536, CS0534.
19403
19404 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19405
19406         Merge a few bits from the Anonymous Method MCS tree.
19407
19408         * statement.cs (ToplevelBlock): New class for toplevel methods,
19409         will hold anonymous methods, lifted variables.
19410
19411         * cs-parser.jay: Create toplevel blocks for delegates and for
19412         regular blocks of code. 
19413
19414 2004-01-20  Martin Baulig  <martin@ximian.com>
19415
19416         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19417         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19418         and `NeedExplicitReturn'; added `IsLastStatement'.
19419         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19420         have a `ReturnLabel' or we're not unreachable.
19421
19422         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19423         child's reachability; don't just override ours with it.  Fixes
19424         #58058 (lluis's example).
19425         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19426         InFinally(), InLoop(), InSwitch() and
19427         BreakCrossesTryCatchBoundary() methods.
19428
19429         * statement.cs (Return): Do all error checking in Resolve().
19430         Unless we are the last statement in a top-level block, always
19431         create a return label and jump to it.
19432         (Break, Continue): Do all error checking in Resolve(); also make
19433         sure we aren't leaving a `finally'.
19434         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19435         statement in a top-level block.
19436         (Block.Flags): Added `IsDestructor'.
19437         (Block.IsDestructor): New public property.
19438
19439 2004-01-20  Martin Baulig  <martin@ximian.com>
19440
19441         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19442
19443 2004-01-20  Martin Baulig  <martin@ximian.com>
19444
19445         * statement.cs (Statement.ResolveUnreachable): New public method.
19446         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19447         (Block.Resolve): Resolve unreachable statements.
19448
19449 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19450
19451         * expression.cs: We need to fix the case where we do
19452         not have a temp variable here.
19453
19454         * assign.cs: Only expression compound assignments need
19455         temporary variables.
19456
19457 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19458
19459         * flowanalysis.cs: Reduce memory allocation in a few ways:
19460           - A block with no variables should not allocate a bit
19461             vector for itself.
19462           - A method with no out parameters does not need any tracking
19463             for assignment of the parameters, so we need not allocate
19464             any data for it.
19465           - The arrays:
19466                 public readonly Type[] VariableTypes;
19467                 public readonly string[] VariableNames;
19468             Are redundant. The data is already stored in the variable
19469             map, so we need not allocate another array for it.
19470           - We need to add alot of checks for if (params | locals) == null
19471             due to the first two changes.
19472
19473 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19474
19475         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19476         implement IMemoryLocation, we store a copy on a local variable and
19477         take the address of it.  Patch from Benjamin Jemlich
19478
19479         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19480         to use a special "type_name_expression" rule which reduces the
19481         number of "QualifiedIdentifier" classes created, and instead
19482         directly creates MemberAccess expressions.
19483
19484 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19485
19486         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19487         that fixes #52853.  Null literal assignment to ValueType
19488
19489         * class.cs (MethodData.Emit): Instead of checking the name of the
19490         method to determine if its a destructor, create a new derived
19491         class from Method called Destructor, and test for that.  
19492
19493         * cs-parser.jay: Create a Destructor object instead of a Method.  
19494
19495         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19496
19497         Fixes: 52933
19498
19499 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19500
19501         * expression.cs (Binary.ResolveOperator): Perform an implicit
19502         conversion from MethodGroups to their delegate types on the
19503         Addition operation.
19504
19505         * delegate.cs: Introduce a new class DelegateCreation that is the
19506         base class for `NewDelegate' and `ImplicitDelegateCreation',
19507         factor some code in here.
19508
19509         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19510         conversion from MethodGroups to compatible delegate types. 
19511
19512         * ecore.cs (Expression.Resolve): Do not flag error 654
19513         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19514         we allow conversions from MethodGroups to delegate types now.
19515
19516         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19517         assignments in v2 either.
19518
19519 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19520
19521         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19522         static read-only fields in ctors.
19523
19524         Applied patch from Benjamin Jemlich 
19525
19526         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19527
19528 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19529
19530         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19531         here to return true, as they can be used like this:
19532
19533                 (XXX) int.MEMBER ()
19534
19535         Fixed 49836 and all the other dups
19536
19537 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19538
19539         * driver.cs: Implement /win32res and /win32icon.
19540
19541 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19542
19543         * cs-parser.jay: Add a rule to improve error handling for the
19544         common mistake of placing modifiers after the type.
19545
19546 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19547
19548         * cs-parser.jay (interface_event_declaration): Catch
19549         initialization of events on interfaces, and report cs0068
19550
19551         * cs-parser.jay (interface_event_declaration): Catch
19552         initialization of events. 
19553
19554         * ecore.cs: Better report missing constructors.
19555
19556         * expression.cs (Binary.ResolveOperator): My previous bug fix had
19557         the error reporting done in the wrong place.  Fix.
19558
19559         * expression.cs (Binary.ResolveOperator): Catch the 
19560         operator + (E x, E y) error earlier, and later allow for implicit
19561         conversions in operator +/- (E e, U x) from U to the underlying
19562         type of E.
19563
19564         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
19565         52596, if the container class is abstract, the default constructor
19566         is protected otherwise its public (before, we were always public).
19567
19568         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
19569         fixed statement.
19570
19571         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
19572         Jemlich that fixes bug #52597, MCS was generating invalid code for
19573         idisposable structs.   Thanks to Ben for following up with this
19574         bug as well.
19575
19576 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
19577
19578         * driver.cs: Allow assemblies without code to be generated, fixes
19579         52230.
19580
19581 2004-01-07  Nick Drochak <ndrochak@gol.com>
19582
19583         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
19584
19585 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
19586
19587         * cs-parser.jay: Add rules to improve error reporting if fields or
19588         methods are declared at the namespace level (error 116)
19589
19590         * Add rules to catch event add/remove
19591
19592 2004-01-04  David Sheldon <dave-mono@earth.li>
19593
19594   * expression.cs: Added matching ")" to error message for 
19595   CS0077
19596
19597 2004-01-03 Todd Berman <tberman@gentoo.org>
19598
19599         * ecore.cs, attribute.cs:
19600         Applying fix from #52429.
19601
19602 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19603
19604         * ecore.cs, expression.cs, statement.cs:
19605         Total rewrite of how we handle branching. We
19606         now handle complex boolean expressions with fewer
19607         jumps. As well if (x == 0) no longer emits a ceq.
19608
19609         if (x is Foo) is much faster now, because we generate
19610         better code.
19611
19612         Overall, we get a pretty big improvement on our benchmark
19613         tests. The code we generate is smaller and more readable.
19614
19615         I did a full two-stage bootstrap. The patch was reviewed
19616         by Martin and Miguel.
19617
19618 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19619
19620         * cs-parser.jay: Make primary_expression not take a QI.
19621         we dont need this because the member_access rule covers
19622         us here. So we replace the rule with just IDENTIFIER.
19623
19624         This has two good effects. First, we remove a s/r conflict.
19625         Second, we allocate many fewer QualifiedIdentifier objects.
19626
19627 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19628
19629         * attribute.cs: Handle MarshalAs attributes as pseudo, and
19630         set the correct information via SRE. This prevents
19631         hanging on the MS runtime. Fixes #29374.
19632
19633 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19634
19635         * convert.cs: correctly handle conversions to value types
19636         from Enum and ValueType as unboxing conversions.
19637
19638         Fixes bug #52569. Patch by Benjamin Jemlich.
19639
19640 2004-01-02  Ravi Pratap  <ravi@ximian.com>
19641
19642         * expression.cs (BetterConversion): Prefer int -> uint
19643         over int -> ulong (csc's behaviour). This fixed bug #52046.
19644
19645 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19646
19647         * decl.cs (MemberCache.FindMembers): now returns a
19648         MemberInfo [].
19649
19650         * typemanager.cs: In general, go with with ^^.
19651         (CopyNewMethods): take an IList.
19652         (RealMemberLookup): Only allocate an arraylist
19653         if we copy from two sets of methods.
19654
19655         This change basically does two things:
19656         1) Fewer array lists allocated due to CopyNewMethods.
19657         2) the explicit cast in MemberList costed ALOT.
19658
19659 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
19660
19661         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
19662         a hashtable to avoid needless string allocations when an identifier is
19663         used more than once (the common case).
19664
19665 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19666
19667         * pending.cs: MS's TypeBuilder.GetInterfaces ()
19668         is broken, it will not return anything. So, we
19669         have to use the information we have in mcs to
19670         do the task.
19671
19672         * typemanager.cs: Add a cache for GetInterfaces,
19673         since this will now be used more often (due to ^^)
19674
19675         (GetExplicitInterfaces) New method that gets the
19676         declared, not effective, interfaces on a type
19677         builder (eg, if you have interface IFoo, interface
19678         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
19679         { IBar }.
19680
19681         This patch makes MCS able to bootstrap itself on
19682         Windows again.
19683
19684 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19685
19686         * expression.cs: Remove the Nop's that Miguel put
19687         in by mistake.
19688
19689 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19690
19691         * report.cs, codegen.cs: Give the real stack trace to
19692         the error when an exception is thrown.
19693
19694 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19695
19696         * decl.cs: only allocate hashtables for ifaces if 
19697         it is an iface!
19698
19699 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19700
19701         * expression.cs: fix the error from cs0121-2.cs
19702         (a parent interface has two child interfaces that
19703         have a function with the same name and 0 params
19704         and the function is called through the parent).
19705
19706 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
19707
19708         * class.cs, rootcontext.cs, typmanager.cs: do not
19709         leak pointers.
19710
19711 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19712
19713         * codegen.cs: remove stack for the ec flow branching.
19714         It is already a linked list, so no need.
19715
19716 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19717
19718         * Makefile: Allow custom profiler here.
19719
19720 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19721
19722         * typemanager.cs (LookupType):
19723           - Use a static char [], because split takes
19724             a param array for args, so it was allocating
19725             every time.
19726           - Do not store true in a hashtable, it boxes.
19727
19728 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19729
19730         * flowanalysis.cs: bytify common enums.
19731
19732 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19733
19734         * modifiers.cs: Add a new set of flags for the
19735         flags allowed on explicit interface impls.
19736         * cs-parser.jay: catch the use of modifiers in
19737         interfaces correctly.
19738         * class.cs: catch private void IFoo.Blah ().
19739
19740         All related to bug #50572.
19741
19742 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19743
19744         * decl.cs: Rewrite the consistant accessability checking.
19745         Accessability is not linear, it must be implemented in
19746         a tableish way. Fixes #49704.
19747
19748 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19749
19750         * expression.cs: Handle negation in a checked context.
19751         We must use subtraction from zero. Fixes #38674.
19752
19753 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19754
19755         * class.cs: Ignore static void main in DLLs.
19756         * rootcontext.cs: Handle the target type here,
19757         since we are have to access it from class.cs
19758         * driver.cs: account for the above.
19759
19760 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19761
19762         * report.cs: Give line numbers and files if available.
19763
19764 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
19765
19766         * driver.cs: Implement /addmodule.
19767
19768         * typemanager.cs:  Change 'modules' field so it now contains Modules not
19769         ModuleBuilders.
19770
19771 2003-12-20  Martin Baulig  <martin@ximian.com>
19772
19773         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
19774         (FieldBase.IsAssigned): Removed this field.
19775         (FieldBase.SetAssigned): New public method.
19776         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
19777
19778 2003-12-20  Martin Baulig  <martin@ximian.com>
19779
19780         * expression.cs (LocalVariableReference.DoResolve): Don't set
19781         `vi.Used' if we're called from DoResolveLValue().
19782
19783         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
19784         returns the usage vector it just merged into the current one -
19785         pass this one to UsageWarning().
19786         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
19787         of the `EmitContext', don't call this recursively on our children.
19788
19789 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
19790
19791         * driver.cs: Implement /target:module.
19792
19793 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
19794
19795         * support.cs (CharArrayHashtable): New helper class.
19796
19797         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
19798         char arrays, not strings, so we can avoid creating a string in
19799         consume_identifier if the identifier is a keyword.
19800
19801 2003-12-16  Martin Baulig  <martin@ximian.com>
19802
19803         * statement.cs (LocalInfo.Assigned): Removed this property.
19804         (LocalInfo.Flags): Removed `Assigned'.
19805         (LocalInfo.IsAssigned): New public method; takes the EmitContext
19806         and uses flow analysis.
19807         (Block.UsageWarning): Made this method private.
19808         (Block.Resolve): Call UsageWarning() if appropriate.
19809
19810         * expression.cs (LocalVariableReference.DoResolve): Always set
19811         LocalInfo.Used here.
19812
19813 2003-12-13  Martin Baulig  <martin@ximian.com>
19814
19815         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
19816         any value here; we're now using flow analysis to figure out
19817         whether a statement/block returns a value.
19818
19819 2003-12-13  Martin Baulig  <martin@ximian.com>
19820
19821         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
19822         working again.
19823         (FlowBranching.MergeFinally): Don't call
19824         `branching.CheckOutParameters()' here, this is called in
19825         MergeTopBlock().
19826         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
19827         when adding the `finally' vector.       
19828
19829 2003-12-13  Martin Baulig  <martin@ximian.com>
19830
19831         * flowanalysis.cs
19832         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
19833         actually work and also fix #48962.
19834
19835 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19836
19837         * decl.cs: Do not check System.Object for nested types,
19838         since we know it does not have any. Big bang for buck:
19839
19840         BEFORE:
19841            Run 1:   8.35 seconds
19842            Run 2:   8.32 seconds
19843            corlib:  17.99 seconds
19844         AFTER:
19845            Run 1:   8.17 seconds
19846            Run 2:   8.17 seconds
19847            corlib:  17.39 seconds
19848
19849 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19850
19851         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
19852         time we are returning 0 members, so we save alot here.
19853
19854 2003-12-11  Martin Baulig  <martin@ximian.com>
19855
19856         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
19857         `MergeChild()', also just take the `FlowBranching' as argument;
19858         call Merge() on it and return the result.
19859         (FlowBranching.Merge): We don't need to do anything if we just
19860         have one sibling.
19861
19862 2003-12-11  Martin Baulig  <martin@ximian.com>
19863
19864         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
19865         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
19866         Maurer for this idea.
19867
19868 2003-12-11  Martin Baulig  <martin@ximian.com>
19869
19870         * flowanalysis.cs (MergeResult): This class is now gone; we now
19871         use the `UsageVector' for this.  The reason for this is that if a
19872         branching just has one sibling, we don't need to "merge" them at
19873         all - that's the next step to do.
19874         (FlowBranching.Merge): We now return a `UsageVector' instead of a
19875         `MergeResult'.
19876
19877 2003-12-11  Martin Baulig  <martin@ximian.com>
19878
19879         Reworked flow analyis and made it more precise and bug-free.  The
19880         most important change is that we're now using a special `Reachability'
19881         class instead of having "magic" meanings of `FlowReturns'.  I'll
19882         do some more cleanups and optimizations and also add some more
19883         documentation this week.
19884
19885         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
19886         largely reworked this class.
19887         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
19888         the new `Reachability' class instead of having "magic" values here.
19889         (FlowBranching): We're now using an instance of `Reachability'
19890         instead of having separate `Returns', `Breaks' etc. fields.
19891
19892         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
19893         based on flow analysis; ignore the return value of block.Emit ().
19894
19895 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
19896
19897         * driver.cs typemanager.cs: Find the mono extensions to corlib even
19898         if they are private.
19899
19900 2003-12-09  Martin Baulig  <martin@ximian.com>
19901
19902         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
19903         call them directly on the UsageVector.
19904
19905 2003-12-09  Martin Baulig  <martin@ximian.com>
19906
19907         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
19908         Changed return type from `FlowReturns' to `Reachability'.
19909
19910 2003-12-09  Martin Baulig  <martin@ximian.com>
19911
19912         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
19913         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
19914         `Reachable' fields with a single `Reachability' one.
19915
19916 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19917
19918         * class.cs (FindMembers): Remove foreach's.
19919
19920         Bootstrap times:
19921
19922         BEFORE
19923                 Run 1:   8.74 seconds
19924                 Run 2:   8.71 seconds
19925
19926         AFTER
19927                 Run 1:   8.64 seconds
19928                 Run 2:   8.58 seconds
19929
19930
19931 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19932
19933         * cs-parser.jay:
19934         * gen-treedump.cs:
19935         * statement.cs:
19936         This patch does a few things:
19937                 1. EmptyStatement is now a singleton, so it is never reallocated.
19938                 2. All blah is EmptyStatement constructs have been changed to
19939                    blah == EmptyStatement.Value, which is much faster and valid
19940                    now that EmptyStatement is a singleton.
19941                 3. When resolving a block, rather than allocating a new array for
19942                    the non-empty statements, empty statements are replaced with
19943                    EmptyStatement.Value
19944                 4. Some recursive functions have been made non-recursive.
19945         Mainly the performance impact is from (3), however (1) and (2) are needed for
19946         this to work. (4) does not make a big difference in normal situations, however
19947         it makes the profile look saner.
19948
19949         Bootstrap times:
19950
19951         BEFORE
19952         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
19953         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
19954         Total memory allocated: 56397 KB
19955
19956         AFTER
19957         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
19958         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
19959         Total memory allocated: 55666 KB
19960
19961 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19962
19963         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
19964         than the hashtable in a hashtable version
19965
19966         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
19967         we always end up concating a string. This results in a huge perf
19968         loss, because many strings have to be tracked by the GC. In this
19969         patch, we first use a hashtable that works with two keys, so that
19970         the strings do not need to be concat'ed.
19971
19972         Bootstrap times:
19973         BEFORE
19974                 Run 1:   8.74 seconds
19975                 Run 2:   8.71 seconds
19976
19977         AFTER
19978                 Run 1:   8.65 seconds
19979                 Run 2:   8.56 seconds
19980
19981 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19982
19983         * Makefile: Add a new target `do-time' that does a quick and simple
19984         profile, leaving easy to parse output.
19985
19986 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
19987
19988         * codegen.cs (Init): Create the dynamic assembly with 
19989         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
19990
19991 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19992
19993         * support.cs: Make the PtrHashtable use only one
19994         instance of its comparer.
19995
19996 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
19997
19998         * typemanager.cs: Fix lookup of GetNamespaces.
19999
20000 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20001
20002         * expression.cs: Removed redundant line.
20003
20004         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20005         ArrayLists, use for loops with bounds.  
20006
20007         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20008         arraylist.
20009
20010         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20011         arraylists, use for loop with bounds.
20012
20013         The above three changes give us a 0.071 second performance
20014         improvement out of 3.294 seconds down to 3.223.  On my machine
20015         the above changes reduced the memory usage by 1,387 KB during
20016         compiler bootstrap.
20017
20018         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20019         QualifiedIdentifiers.  Before we created a new string through
20020         concatenation, and mostly later on, the result would be
20021         manipulated by DecomposeQI through string manipulation.
20022
20023         This reduced the compiler memory usage for bootstrapping from
20024         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20025         compile times in 0.05 seconds.
20026
20027 2003-11-28  Dick Porter  <dick@ximian.com>
20028
20029         * support.cs: Do string compares with the Invariant culture.
20030
20031         * rootcontext.cs: 
20032         * gen-treedump.cs: 
20033         * expression.cs: 
20034         * driver.cs: 
20035         * decl.cs: 
20036         * codegen.cs: 
20037         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20038         the comparison is done with the Invariant culture.
20039
20040 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20041
20042         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20043         GetEnumerator method.
20044
20045         (ProbeCollectionType): Iterate starting at the most specific type
20046         upwards looking for a GetEnumerator
20047
20048         * expression.cs: Shift count can be up to 31 for int/uint and 63
20049         for long/ulong.
20050
20051 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20052
20053         * statement.cs (Block.LookupLabel): Also look for the label on the
20054         children blocks.  Use a hash table to keep track of visited
20055         nodes. 
20056
20057         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20058         we actually did transform the other operand, otherwise fall back
20059         to the common codepath that casts to long.
20060
20061         * cs-tokenizer.cs: Use the same code pattern as the int case.
20062         Maybe I should do the parsing myself, and avoid depending on the
20063         Parse routines to get this done.
20064
20065 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20066
20067         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20068         which fixes bug 51347.  This time test it.
20069
20070         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20071         attributes for example can not tell the difference between these.
20072         The difference was only a syntax feature of the language. 
20073
20074         * attribute.cs: Apply attributes to delegates.
20075
20076         * delegate.cs: Call the apply attributes method.
20077
20078 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20079
20080         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20081         comparing 0 vs Byte.MinValue, not the value
20082
20083         (ImplicitConversionRequired): When reporting a conversion error,
20084         use error 31 to print out the constant error instead of the
20085         simpler 29.
20086
20087         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20088         which fixes bug 51347.
20089
20090 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20091
20092         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20093         which fixes the -warnaserror command line option.
20094
20095 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20096
20097         * cfold.cs (DoNumericPromotions): During constant folding of
20098         additions on UIntConstant, special case intconstants with
20099         IntConstants like we do on the expression binary operator. 
20100
20101 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20102
20103         * convert.cs (ImplicitReferenceConversion): We were missing a case
20104         (System.Enum are not value types or class types, so we need to
20105         classify them separatedly).
20106
20107         * driver.cs: We do not support error 2007.
20108
20109 2003-11-12 Jackson Harper <jackson@ximian.com>
20110
20111         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20112         system directory. Also use the full file name so users can
20113         libraries names mscorlib-o-tron.dll in a non system dir.
20114
20115 2003-11-10  Martin Baulig  <martin@ximian.com>
20116
20117         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20118         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20119         calling `ResolveType()' on them, directly assign their `Type'.
20120
20121 2003-11-08  Martin Baulig  <martin@ximian.com>
20122
20123         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20124         return value and the `out parent' parameter.
20125         (TypeContainer.DefineType): Moved the CS0644 check into
20126         GetClassBases().  Don't pass the interface types to the
20127         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20128         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20129
20130         * ecore.cs (TypeExpr.IsAttribute): New property.
20131         (TypeExpr.GetInterfaces): New method.
20132
20133         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20134         TypeExpr instead of a Type.
20135         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20136         (Interface.DefineType): Don't pass the interface types to the
20137         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20138         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20139
20140         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20141         instead of a `Type[]'.
20142         (TypeManager.RegisterBuilder): Likewise.
20143         (TypeManager.AddUserInterface): Likewise.
20144         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20145         `Type[]' and also return a `TypeExpr[]'.
20146         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20147
20148 2003-11-08  Martin Baulig  <martin@ximian.com>
20149
20150         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20151         Expression.     
20152
20153 2003-11-08  Martin Baulig  <martin@ximian.com>
20154
20155         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20156         TypeManager.ResolveExpressionTypes().
20157
20158         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20159         instead of an Expression.
20160         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20161         (TypeExpression): New public class; formerly known as `TypeExpr'.
20162
20163         * expression.cs (ComposedCast): Derive from TypeExpr.
20164
20165         * typemanager.cs (TypeManager.system_*_expr): These are now
20166         TypExpr's instead of Expression's.
20167         (TypeManager.ResolveExpressionTypes): New public static function;
20168         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20169         of them.        
20170
20171 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20172
20173         * expression.cs (New.DoResolve): Do not dereference value that
20174         might be a null return.
20175
20176         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20177         sure that the constant value has the right type.  Fixes an
20178         unreported bug, similar to 50425.
20179
20180         * const.cs (Const.LookupConstantValue): Call
20181         ImplicitStandardConversionExists before doing a conversion to
20182         avoid havng the TypeManager.ChangeType do conversions.
20183
20184         Reduced the number of casts used
20185
20186         (Const.ChangeType): New routine to enable reuse of the constant
20187         type changing code from statement.
20188
20189         * typemanager.cs (ChangeType): Move common initialization to
20190         static global variables.
20191
20192         Fixes #50425.
20193
20194         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20195         every value type to go through, even if it was void.  Fix that. 
20196
20197         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20198         character of the define, and the is_identifier_part_character for
20199         the rest of the string.
20200
20201 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20202
20203         * expression.cs (UnaryMutator.EmitCode): When I updated
20204         LocalVariableReference.DoResolve, I overdid it, and dropped an
20205         optimization done on local variable references.
20206
20207 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20208
20209         * ecore.cs: Convert the return from Ldlen into an int.
20210
20211 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20212
20213         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20214         the accessibility, this is a special case for toplevel non-public
20215         classes (internal for instance).
20216
20217 2003-10-20  Nick Drochak <ndrochak@gol.com>
20218
20219         * ecore.cs: Fix typo and build.  Needed another right paren.
20220
20221 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20222
20223         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20224         `internal' case regular and protected, but not allowing protected
20225         to be evaluated later.  Bug 49840
20226
20227 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20228
20229         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20230         to kb.Nlast, and not the kb.nFirst to isolate the switch
20231         statement.
20232
20233         Extract the underlying type, so enumerations of long/ulong are
20234         treated like long/ulong.
20235
20236 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20237
20238         * expression.cs (New): Overload the meaning of RequestedType to
20239         track the possible creation of the NewDelegate type, since
20240         DoResolve is invoked more than once for new constructors on field
20241         initialization.
20242
20243         See bugs: #48800 and #37014
20244
20245         * cs-parser.jay (declare_local_constants): Take an arraylist
20246         instead of a single constant.
20247
20248         (local_constant_declaration): It should take a
20249         constant_declarators, not a constant_declarator.  Fixes 49487
20250
20251         * convert.cs: Fix error report.
20252
20253 2003-10-13 Jackson Harper <jackson@ximian.com>
20254
20255         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20256         bug #49611
20257
20258 2003-10-09  Martin Baulig  <martin@ximian.com>
20259
20260         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20261         to the .ctor.
20262         (MethodCore.DoDefineParameters): Removed the TypeContainer
20263         argument; use the DeclSpace which was passed to the .ctor instead.
20264         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20265         TypeContainer; we only need a DeclSpace here.
20266
20267 2003-10-09  Martin Baulig  <martin@ximian.com>
20268
20269         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20270         to the .ctor.
20271         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20272         EmitContext's .ctor.    
20273
20274 2003-10-09  Martin Baulig  <martin@ximian.com>
20275
20276         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20277         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20278         AsAccessible(), moved them as well.
20279
20280         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20281
20282 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20283
20284         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20285
20286 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20287
20288         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20289         generation for >=, as spotted by Paolo, bug 48679.  
20290         Patch from David Waite.
20291
20292         * cs-tokenizer.cs: Add handling for #pragma.
20293
20294         * cs-parser.jay: Allow for both yield and yield return in the
20295         syntax.  The anti-cobolization of C# fight will go on!
20296
20297         * class.cs (TypeBuilder.DefineType): Catch error condition here
20298         (Parent.DefineType erroring out and returning null).
20299
20300         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20301         coping with enumerations variables, we were mistakenly processing
20302         them as a regular value type instead of built-in types.  Fixes the
20303         bug #48063
20304
20305         * typemanager.cs (IsBuiltinOrEnum): New method.
20306
20307 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20308
20309         * cs-parser.jay: Upgrade: yield now needs the return clause.
20310
20311 2003-09-19  Martin Baulig  <martin@ximian.com>
20312
20313         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20314         `MemberCache parent' argument.  Normally, an interface doesn't
20315         have a parent type except System.Object, but we use this in gmcs
20316         for generic type parameters.
20317
20318 2003-09-18  Martin Baulig  <martin@ximian.com>
20319
20320         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20321         on `type.IsInterface'; don't check whether the type has a parent
20322         to determine whether it's an interface.
20323
20324 2003-09-15  Martin Baulig  <martin@ximian.com>
20325
20326         * class.cs (TypeContainer.DefineType): Added an error flag to
20327         avoid reporting duplicate CS0146's ("class definition is
20328         circular.").
20329
20330         * driver.cs (Driver.MainDriver): Abort if
20331         RootContext.ResolveTree() reported any errors.
20332
20333 2003-09-07  Martin Baulig  <martin@ximian.com>
20334
20335         * report.cs (Error, Warning): Added overloaded versions which take
20336         a `params object[] args' and call String.Format().
20337
20338 2003-09-07  Martin Baulig  <martin@ximian.com>
20339
20340         * decl.cs (DeclSpace..ctor): Don't call
20341         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
20342         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
20343         (DeclSpace.RecordDecl): New method.
20344
20345         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
20346
20347 2003-09-02  Ravi Pratap  <ravi@ximian.com>
20348
20349         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
20350         value attributes to be applied to ParameterBuilders.
20351
20352         * class.cs (MethodCore.LabelParameters): Make static and more
20353         generic so that it can be used from other places - like interface
20354         methods, for instance.
20355
20356         * interface.cs (Interface.Emit): Call LabelParameters before
20357         emitting attributes on the InterfaceMethod.
20358
20359 2003-08-26  Martin Baulig  <martin@ximian.com>
20360
20361         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
20362         resolving aliases; fixes #47927.
20363
20364 2003-08-26  Martin Baulig  <martin@ximian.com>
20365
20366         * statement.cs (Using.DoResolve): This is internally emitting a
20367         try/finally clause, so we need to set ec.NeedExplicitReturn if we
20368         do not always return.  Fixes #47681.
20369
20370 2003-08-26  Martin Baulig  <martin@ximian.com>
20371
20372         * decl.cs (MemberCore): Moved WarningNotHiding(),
20373         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
20374         into MemberBase.
20375         (AdditionResult): Make this nested in DeclSpace.
20376         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
20377         argument; call NamespaceEntry.Define() unless we're nested in a
20378         class or struct.
20379
20380         * namespace.cs (Namespace.DefineName): New public function.  This
20381         is called from DeclSpace's .ctor to add 
20382         (Namespace.Lookup): Include DeclSpaces in the lookup.
20383
20384         * class.cs (Operator): Derive from MemberBase, not MemberCore.
20385
20386         * const.cs (Const): Derive from MemberBase, not MemberCore.     
20387
20388 2003-08-25  Martin Baulig  <martin@ximian.com>
20389
20390         * convert.cs (Convert.ExplicitReferenceConversion): When
20391         converting from an interface type to a class, unbox if the target
20392         type is a struct type.  Fixes #47822.
20393
20394 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20395
20396         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20397         #47854.
20398
20399 2003-08-22  Martin Baulig  <martin@ximian.com>
20400
20401         * class.cs (TypeManager.DefineType): When defining a nested type,
20402         call DefineType() on our parent; fixes #47801.
20403
20404 2003-08-22  Martin Baulig  <martin@ximian.com>
20405
20406         * class.cs (MethodData.Define): While checking if a method is an
20407         interface implementation, improve the test a bit more to fix #47654.
20408
20409 2003-08-22  Martin Baulig  <martin@ximian.com>
20410
20411         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20412         correctly; fixes #47722.
20413
20414 2003-08-22  Martin Baulig  <martin@ximian.com>
20415
20416         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20417         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20418
20419         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20420
20421 2003-08-22  Martin Baulig  <martin@ximian.com>
20422
20423         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20424         can only be assigned in static constructors.  Fixes #47161.
20425
20426 2003-08-22  Martin Baulig  <martin@ximian.com>
20427
20428         Rewrote and improved the flow analysis code.
20429
20430         * flowbranching.cs (FlowBranching): Make this class abstract.
20431         (FlowBranching.CreateBranching): New static function to create a
20432         new flow branching.
20433         (FlowBranchingBlock, FlowBranchingException): New classes.
20434         (FlowBranching.UsageVector.Type): New public readonly field.
20435         (FlowBranching.UsageVector.Breaks): Removed the setter.
20436         (FlowBranching.UsageVector.Returns): Removed the setter.
20437         (FlowBranching.UsageVector): Added Break(), Return(),
20438         NeverReachable() and Throw() methods to modify the reachability.
20439         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20440         done by FlowBranching.Merge().
20441         (FlowBranching.UsageVector.MergeChild): New method; merges the
20442         merge result into the current vector.
20443         (FlowBranching.Merge): New abstract method to merge a branching.
20444
20445 2003-08-12  Martin Baulig  <martin@ximian.com>
20446
20447         * expression.cs (Indirection.CacheTemporaries): Create the
20448         LocalTemporary with the pointer type, not its element type.
20449
20450 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20451
20452         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20453         token was a keyword or not.
20454
20455         Add `error' options where an IDENTIFIER was expected;  Provide
20456         CheckToken and CheckIdentifierToken convenience error reporting
20457         functions. 
20458
20459         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20460
20461         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20462         NameSpaceEntry NameSpaceEntry.
20463
20464         (LookupInterfaceOrClass): Avoid creating a full qualified name
20465         from namespace and name: avoid doing lookups when we know the
20466         namespace is non-existant.   Use new Tree.LookupByNamespace which
20467         looks up DeclSpaces based on their namespace, name pair.
20468
20469         * driver.cs: Provide a new `parser verbose' to display the
20470         exception thrown during parsing.  This is turned off by default
20471         now, so the output of a failure from mcs is more graceful.
20472
20473         * namespace.cs: Track all the namespaces defined in a hashtable
20474         for quick lookup.
20475
20476         (IsNamespace): New method
20477
20478 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20479
20480         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20481         we know that we need to concatenate (full typename can never be
20482         null). 
20483
20484         * class.cs: ditto.
20485
20486         * statement.cs: Use a bitfield;  Do not initialize to null things
20487         which are done by the constructor by default.
20488
20489         * cs-parser.jay: bug fix, parameter was 4, not 3.
20490
20491         * expression.cs: Just use the property;
20492
20493         * statement.cs: No need for GetVariableInfo method.
20494
20495 2003-08-08  Martin Baulig  <martin@ximian.com>
20496
20497         * flowanalysis.cs (FlowReturns): This is now nested in the
20498         `FlowBranching' class.
20499         (MyBitVector): Moved this here from statement.cs.
20500         (FlowBranching.SiblingType): New enum type.
20501         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20502
20503 2003-08-07  Martin Baulig  <martin@ximian.com>
20504
20505         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20506         `FlowBranching' class and called `BranchingType'.
20507
20508 2003-08-07  Martin Baulig  <martin@ximian.com>
20509
20510         * flowanalysis.cs: Moved all the control flow analysis code into
20511         its own file.
20512
20513 2003-08-07  Martin Baulig  <martin@ximian.com>
20514
20515         * assign.cs (Assign.DoResolve): `target' must either be an
20516         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20517         #37319.
20518
20519 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20520
20521         * expression.cs (BinaryMethod): This kind of expression is created by the
20522         Binary class if it determines that the operator has to be handled
20523         by a method.
20524
20525         (BinaryDelegate): This kind of expression is created if we are
20526         dealing with a + or - operator on delegates.
20527
20528         (Binary): remove method, argumetns, and DelegateOperator: when
20529         dealing with methods, 
20530
20531         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20532
20533         * statement.cs (Block): use bitfields for the three extra booleans
20534         we had in use.   Remove unused topblock parameter.
20535
20536         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20537
20538         * assign.cs: Drop extra unneeded tests.
20539
20540 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20541
20542         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20543
20544         * statement.cs (Foreach): Use VariableStorage instead of
20545         LocalBuilders.   
20546
20547         * codegen.cs (VariableStorage): New class used by clients that
20548         require a variable stored: locals or fields for variables that
20549         need to live across yield.
20550
20551         Maybe provide a convenience api for EmitThis+EmitLoad?
20552
20553         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
20554         these bad boys.
20555
20556 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
20557
20558         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
20559         RemapParameterLValue): New methods that are used to turn a
20560         precomputed FieldInfo into an expression like this:
20561
20562                 instance.FieldInfo
20563
20564         The idea is to use this instead of making LocalVariableReference
20565         have more than one meaning.
20566
20567         * cs-parser.jay: Add error production to BASE.
20568
20569         * ecore.cs: Deal with TypeManager.GetField returning null, which
20570         is now a valid return value.
20571
20572         (FieldExprNoAddress): New expression for Fields whose address can
20573         not be taken.
20574
20575         * expression.cs (LocalVariableReference): During the resolve
20576         phases, create new expressions if we are in a remapping context.
20577         Remove code that dealt with remapping here.
20578
20579         (ParameterReference): same.
20580
20581         (ProxyInstance): New expression, like the `This' expression, but
20582         it is born fully resolved.  We know what we are doing, so remove
20583         the errors that are targeted to user-provided uses of `this'.
20584
20585         * statement.cs (Foreach): our variable is now stored as an
20586         Expression;  During resolution, follow the protocol, dont just
20587         assume it will return this.
20588
20589 2003-08-06  Martin Baulig  <martin@ximian.com>
20590
20591         * support.cs (SeekableStreamReader.cs): New public class.
20592
20593         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
20594         SeekableStreamReader instead of the normal StreamReader.
20595
20596 2003-08-04  Martin Baulig  <martin@ximian.com>
20597
20598         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
20599         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
20600         deambiguate casts and delegate invocations.
20601         (parenthesized_expression): Use the new tokens to ensure this is
20602         not a cast of method invocation.
20603
20604         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
20605         when reading a `)' and Deambiguate_CloseParens () was previously
20606         called.
20607
20608         * expression.cs (ParenthesizedExpression): New class.  This is
20609         just used for the CS0075 test.
20610         (Binary.DoResolve): Check for CS0075.   
20611
20612 2003-07-29  Ravi Pratap  <ravi@ximian.com>
20613
20614         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
20615         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
20616         reference comparison.
20617
20618         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
20619         examine the ReturnType for equality - this is necessary in the
20620         cases of implicit and explicit operators whose signature also
20621         includes the return type.
20622
20623 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
20624
20625         * namespace.cs: Cache the result of the namespace computation,
20626         instead of computing it every time.
20627
20628 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
20629
20630         * decl.cs: Use a global arraylist that we reuse over invocations
20631         to avoid excesive memory consumption.  Reduces memory usage on an
20632         mcs compile by one meg (45 average).
20633
20634         * typemanager.cs (LookupTypeReflection): In .NET pointers are
20635         private, work around that.
20636
20637 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
20638
20639         * literal.cs (IntLiteral): Define Zero and One static literals. 
20640
20641         * cs-parser.jay (integer_literal): use static literals to reduce
20642         memory usage for the most used literals (0, 1 and -1).  211kb
20643         reduced in memory usage.
20644
20645         Replace all calls to `new ArrayList' with `new
20646         ArrayList(4)' which is a good average number for most allocations,
20647         and also requires only 16 bytes of memory for its buffer by
20648         default. 
20649
20650         This reduced MCS memory usage in seven megabytes for the RSS after
20651         bootstrapping.
20652
20653 2003-07-28  Ravi Pratap  <ravi@ximian.com>
20654
20655         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
20656         handle params methods the correct way by forming only one
20657         applicable set with params and normal methods in them. Earlier we
20658         were looking at params methods only if we found no normal methods
20659         which was not the correct thing to do.
20660
20661         (Invocation.BetterFunction): Take separate arguments indicating
20662         when candidate and the best method are params methods in their
20663         expanded form.
20664
20665         This fixes bugs #43367 and #46199.
20666
20667         * attribute.cs: Documentation updates.
20668
20669         (CheckAttribute): Rename to CheckAttributeTarget.
20670         (GetValidPlaces): Rename to GetValidTargets.
20671
20672         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
20673         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
20674
20675         Fixes bug #44468.
20676
20677 2003-07-28  Martin Baulig  <martin@ximian.com>
20678
20679         * class.cs (TypeContainer.DefineMembers): Use the base type's full
20680         name when looking up the base class of a nested class.  Fixes #46977.
20681
20682 2003-07-26  Martin Baulig  <martin@ximian.com>
20683
20684         * expression.cs (Indexers.Indexer): New nested struct; contains
20685         getter, setter and the indexer's type.
20686         (Indexers.Properties): This is now an ArrayList of
20687         Indexers.Indexer's.
20688         (IndexerAccess.DoResolveLValue): Correctly set the type if the
20689         indexer doesn't have any getters.
20690
20691         * assign.cs (Assign.DoResolve): Also do the implicit conversions
20692         for embedded property and indexer assignments.
20693
20694 2003-07-26  Martin Baulig  <martin@ximian.com>
20695
20696         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
20697         preprocessor directive is not the first non-whitespace character
20698         on a line.
20699
20700 2003-07-26  Martin Baulig  <martin@ximian.com>
20701
20702         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
20703         namespace parsing, follow the spec more closely.
20704
20705         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
20706         NamespaceEntry.Lookup().
20707
20708 2003-07-25  Martin Baulig  <martin@ximian.com>
20709
20710         * MethodCore.cs (OverridesSomething): New public field; it's set
20711         from TypeContainer.DefineMembers if this method overrides
20712         something (which doesn't need to be a method).  Fix #39462.
20713
20714 2003-07-25  Ravi Pratap  <ravi@ximian.com>
20715
20716         * typemanager.cs (GetMembers): Ensure that the list of members is
20717         reversed. This keeps things in sync.
20718
20719         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
20720         find an AttributeUsage attribute.
20721
20722         * expression.cs (Invocation.OverloadResolve): Perform the check
20723         which disallows Invoke to be directly called on a Delegate.
20724
20725         (Error_InvokeOnDelegate): Report error cs1533.
20726
20727 2003-07-25  Martin Baulig  <martin@ximian.com>
20728
20729         * expression.cs (Indexers.GetIndexersForType): Only look in the
20730         interface hierarchy if the requested type is already an
20731         interface.  Fixes #46788 while keeping #46502 fixed.
20732
20733 2003-07-25  Martin Baulig  <martin@ximian.com>
20734
20735         * class.cs (TypeContainer.DefineMembers): Check whether all
20736         readonly fields have been assigned and report warning CS0649 if
20737         not.
20738
20739         * statement.cs (LocalInfo.IsFixed): Always return true if this is
20740         a valuetype.
20741
20742 2003-07-24  Ravi Pratap  <ravi@ximian.com>
20743
20744         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
20745         returned from GetMethods to make things consistent with the
20746         assumptions MCS makes about ordering of methods.
20747
20748         This should comprehensively fix bug #45127 and it does :-)
20749
20750         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
20751         ordering is actually reverse.
20752
20753         * Clean up some debug messages I left lying around.
20754
20755         * interface.cs (Populate*): Get rid of code which emits attributes
20756         since the stage in which we emit attributes is the 'Emit' stage,
20757         not the define stage.
20758
20759         (Emit): Move attribute emission for interface members here.
20760
20761 2003-07-22  Ravi Pratap  <ravi@ximian.com>
20762
20763         * expression.cs (Invocation.OverloadResolve): Follow the spec more
20764         closely: we eliminate methods in base types when we have an
20765         applicable method in a top-level type.
20766
20767         Please see section 14.5.5.1 for an exact description of what goes
20768         on. 
20769
20770         This fixes bug #45127 and a host of other related to corlib compilation.
20771
20772         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
20773         array is the method corresponding to the top-level type (this is
20774         because of the changes made to icall.c) so we change this
20775         accordingly.
20776
20777         (MethodGroupExpr.Name): This too.
20778
20779         * typemanager.cs (GetElementType): New method which does the right
20780         thing when compiling corlib. 
20781
20782         * everywhere: Make use of the above in the relevant places.
20783
20784 2003-07-22  Martin Baulig  <martin@ximian.com>
20785
20786         * cs-parser.jay (invocation_expression): Moved
20787         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
20788         `cast_expression', but create a InvocationOrCast which later
20789         resolves to either an Invocation or a Cast.
20790
20791         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
20792         method; call this before EmitStatement() to make sure that this
20793         expression can be used as a statement.
20794
20795         * expression.cs (InvocationOrCast): New class; resolves to either
20796         an Invocation or a Cast.
20797
20798         * statement.cs (StatementExpression): Call ResolveStatement() on
20799         the ExpressionStatement before emitting it.
20800
20801 2003-07-21  Martin Baulig  <martin@ximian.com>
20802
20803         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
20804         `ref' and `out' attributes match; fixes #46220.
20805         (MemberAccess.ResolveMemberAccess): You can't reference a type
20806         through an expression; fixes #33180.
20807         (Indexers.GetIndexersForType): Don't return the indexers from
20808         interfaces the class implements; fixes #46502.
20809
20810 2003-07-21  Martin Baulig  <martin@ximian.com>
20811
20812         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
20813         CS0661 checks; fixes bug #30442.
20814
20815 2003-07-21  Martin Baulig  <martin@ximian.com>
20816
20817         * decl.cs (AdditionResult): Added `Error'.
20818
20819         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
20820
20821         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
20822         makes cs0031.cs actually work.
20823
20824 2003-07-20  Martin Baulig  <martin@ximian.com>
20825
20826         * namespace.cs: Fixed that bug which caused a crash when compiling
20827         the debugger's GUI.
20828
20829 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
20830
20831         * typemanager.cs (LookupTypeReflection): Never expose types which
20832         are NotPublic, NestedPrivate, NestedAssembly, or
20833         NestedFamANDAssem.  We used to return these, and later do a check
20834         that would report a meaningful error, but the problem is that we
20835         would not get the real match, if there was a name override.
20836
20837 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
20838
20839         * namespace.cs (Namespace, Name): Do not compute the namespace
20840         name dynamically, compute it in the constructor.  This reduced
20841         memory usage by 1697 KB.
20842
20843         * driver.cs: Use --pause to pause at the end.
20844
20845 2003-07-17  Peter Williams  <peter@newton.cx>
20846
20847         * Makefile: Change the name of the test target so that it doesn't
20848         conflict with the recursive test target.
20849
20850 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
20851
20852         * expression.cs (LocalVariableReference.Emit, EmitAssign,
20853         AddressOf): Do not use EmitThis, that was wrong, use the actual
20854         this pointer.
20855
20856 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
20857
20858         * class.cs (MethodData.Define): While checking if a method is an
20859         interface implementation, improve the test: If we are not public
20860         (use new test here: use the computed MethodAttributes directly,
20861         instead of the parsed modifier flags) check if the `implementing'
20862         method comes from an interface or not.
20863
20864         * pending.cs (VerifyPendingMethods): Slightly better error
20865         message.
20866
20867         * makefile: add test target that does the mcs bootstrap.
20868
20869 2003-07-16  Ravi Pratap  <ravi@ximian.com>
20870
20871         * interface.cs (Define): Do nothing here since there are no
20872         members to populate etc. Move the attribute emission out of here
20873         since this was just totally the wrong place to put it. Attribute
20874         application happens during the 'Emit' phase, not in the 'Define'
20875         phase.
20876
20877         (Emit): Add this method and move the attribute emission here
20878
20879         * rootcontext.cs (EmitCode): Call the Emit method on interface
20880         types too.
20881
20882 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
20883
20884         * expression.cs (OverloadResolve): Report error only if Location
20885         is not 'Null' which means that there was a probe going on.
20886
20887 2003-07-14  Martin Baulig  <martin@ximian.com>
20888
20889         * expression.cs (ConditionalLogicalOperator): New public class to
20890         implement user defined conditional logical operators.
20891         This is section 14.11.2 in the spec and bug #40505.
20892
20893 2003-07-14  Martin Baulig  <martin@ximian.com>
20894
20895         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
20896
20897 2003-07-14  Martin Baulig  <martin@ximian.com>
20898
20899         * codegen.cs (EmitContext.InFixedInitializer): New public field.
20900
20901         * ecore.cs (IVariable.VerifyFixed): New interface method.
20902
20903         * expression.cs (Unary.ResolveOperator): When resolving the `&'
20904         operator, check whether the variable is actually fixed.  Fixes bug
20905         #36055.  Set a variable definitely assigned when taking its
20906         address as required by the spec.
20907
20908         * statement.cs (LocalInfo.IsFixed): New field.
20909         (LocalInfo.MakePinned): Set `IsFixed' to true.
20910
20911 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
20912
20913         * attribute.cs (Attribute.Resolve): While doing a Member lookup
20914         for .ctors, ensure that we only ask for members declared in the
20915         attribute type (BindingFlags.DeclaredOnly).
20916
20917         Fixes bug #43632.
20918
20919         * expression.cs (Error_WrongNumArguments): Report error 1501
20920         correctly the way CSC does.
20921
20922 2003-07-13  Martin Baulig  <martin@ximian.com>
20923
20924         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
20925         lookup on the fully qualified name, to make things like "X.X" work
20926         where "X.X" is a fully qualified type name, but we also have a
20927         namespace "X" in the using list.  Fixes #41975.
20928
20929 2003-07-13  Martin Baulig  <martin@ximian.com>
20930
20931         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
20932         function. If we're a CompoundAssign, we need to create an embedded
20933         CompoundAssign, not an embedded Assign.
20934         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
20935         Fixes #45854.
20936
20937 2003-07-13  Martin Baulig  <martin@ximian.com>
20938
20939         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
20940         work to fix bug #46088.
20941
20942 2003-07-13  Ravi Pratap <ravi@ximian.com>
20943
20944         * class.cs (Operator.Emit): Do not emit attributes here - it is
20945         taken care of by the Method class that we delegate too. This takes
20946         care of bug #45876.
20947
20948 2003-07-10  Martin Baulig  <martin@ximian.com>
20949
20950         * expression.cs (TypeOfVoid): New class.
20951         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
20952
20953 2003-07-10  Martin Baulig  <martin@ximian.com>
20954
20955         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
20956         bug #35957.
20957
20958 2003-07-10  Martin Baulig  <martin@ximian.com>
20959
20960         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
20961         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
20962
20963         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
20964
20965         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
20966
20967 2003-07-10  Martin Baulig  <martin@ximian.com>
20968
20969         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
20970         of decimal.  Fixes #42850.
20971
20972         NOTE: I also fixed the created byte blob, but this doesn't work on
20973         the MS runtime and csc never produces any byte blobs for decimal
20974         arrays.
20975
20976 2003-07-10  Martin Baulig  <martin@ximian.com>
20977
20978         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
20979         structs; fixes #32068.
20980         (Block.AddChildVariableNames): Fixed #44302.
20981
20982 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20983
20984         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
20985
20986 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20987
20988         * attribute.cs: And this test is onger needed.
20989
20990 2003-07-08  Martin Baulig  <martin@ximian.com>
20991
20992         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
20993         inaccessible types.  Fixes #36313.
20994
20995         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
20996
20997         * namespace.cs (NamespaceEntry): Create implicit entries for all
20998         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
20999         implicit entries for N1.N2 and N1.
21000
21001 2003-07-08  Martin Baulig  <martin@ximian.com>
21002
21003         Rewrote the handling of namespaces to fix a lot of the issues
21004         wrt. `using' aliases etc.
21005
21006         * namespace.cs (Namespace): Splitted this class into a
21007         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21008
21009         * typemanager.cs (TypeManager.IsNamespace): Removed.
21010         (TypeManager.ComputeNamespaces): Only compute namespaces from
21011         loaded assemblies here, not the namespaces from the assembly we're
21012         currently compiling.
21013
21014 2003-07-08  Martin Baulig  <martin@ximian.com>
21015
21016         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21017
21018 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21019
21020         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21021         already fixed it.  
21022
21023         I thought about the memory savings here, but LookupTypeReflection
21024         is used under already very constrained scenarios.  Compiling
21025         corlib or mcs only exposes one hit, so it would not really reduce
21026         any memory consumption.
21027
21028 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21029
21030         * typemanager.cs: fixes bug #45889 by only adding public types from
21031         other assemblies to the list of known types.
21032
21033 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21034
21035         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21036         on the type we resolved.
21037
21038 2003-07-05  Martin Baulig  <martin@ximian.com>
21039
21040         * pending.cs (PendingImplementation.ParentImplements): Don't
21041         create the proxy if the parent is abstract.
21042
21043         * class.cs (TypeContainer.DefineIndexers): Process explicit
21044         interface implementations first.  Fixes #37714.
21045
21046 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21047
21048         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21049         defined recursively;  but since we modify the input parameters
21050         (left is set to `this' temporarily), we reset this value if the
21051         left_is_explicit is false, which gives the original semantics to
21052         the code.  
21053
21054         * literal.cs (NullPointer): new class used to represent a null
21055         literal in a pointer context.
21056
21057         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21058         type is a pointer, use a NullPointer object instead of a
21059         NullLiteral.   Closes 43687
21060
21061         (ExplicitConversion): Convert pointer values using
21062         the conv opcode to the proper type.
21063
21064         * ecore.cs (New): change ValueTypeVariable property into a method,
21065         that returns whether the valuetype is suitable for being used.
21066
21067         * expression.cs (Binary.DoNumericPromotions): Only return if we
21068         the int constant was a valid uint, and we can return both left and
21069         right as uints.  If not, we continue processing, to trigger the
21070         type conversion.  This fixes 39018.
21071
21072         * statement.cs (Block.EmitMeta): During constant resolution, set
21073         the CurrentBlock property on the emitcontext, so that we resolve
21074         constants propertly.
21075
21076 2003-07-02  Martin Baulig  <martin@ximian.com>
21077
21078         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21079         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21080
21081         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21082         than emitting it here.
21083
21084         * statement.cs: Fixed some more flow analysis bugs.
21085
21086 2003-07-02  Martin Baulig  <martin@ximian.com>
21087
21088         * class.cs (MethodData.Define): When implementing interface
21089         methods, set Final unless we're Virtual.
21090
21091         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21092         check work for interface methods.
21093
21094 2003-07-01  Martin Baulig  <martin@ximian.com>
21095
21096         * ecore.cs (EmitContext.This): Replaced this property with a
21097         GetThis() method which takes a Location argument.  This ensures
21098         that we get the correct error location for a CS0188.
21099
21100 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21101
21102         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21103         ImplicitStandardConversion.
21104
21105         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21106
21107 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21108
21109         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21110         optimization.
21111
21112 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21113
21114         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21115         constructors.
21116
21117         (MethodData.Define): Turn off initlocals for unsafe methods.
21118
21119 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21120
21121         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21122         complete;  Fixes #37521.
21123
21124         * delegate.cs: Use Modifiers.TypeAttr to compute the
21125         TypeAttributes, instead of rolling our own.  This makes the flags
21126         correct for the delegates.
21127
21128 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21129
21130         * class.cs (Constructor.Define): Set the private flag for static
21131         constructors as well.
21132
21133         * cs-parser.jay (statement_expression): Set the return value to
21134         null, to avoid a crash when we catch an error.
21135
21136 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21137
21138         * cs-parser.jay: Applied patch from Jackson that adds support for
21139         extern and unsafe modifiers to destructor declarations.
21140
21141         * expression.cs: Report error 21 if the user is trying to index a
21142         System.Array.
21143
21144         * driver.cs: Add an error message, suggested by the bug report.
21145
21146         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21147         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21148
21149 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21150
21151         * namespace.cs: Add some information to reduce FAQs.
21152
21153 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21154
21155         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21156         underlying enumeration types.  Fixes #43915.
21157
21158         * expression.cs: Treat ushort/short as legal values to be used in
21159         bitwise operations.
21160
21161 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21162
21163         * delegate.cs: transfer custom attributes for paramenters from
21164         the delegate declaration to Invoke and BeginInvoke.
21165
21166 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21167
21168         * attribute.cs: handle custom marshalers and emit marshal info
21169         for fields, too.
21170
21171 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21172
21173         * makefile.gnu: Added anonymous.cs to the compiler sources.
21174
21175 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21176
21177         * iterators.cs: Change the name of the proxy class to include two
21178         underscores.
21179
21180         * cs-parser.jay: Update grammar to include anonymous methods.
21181
21182         * anonymous.cs: new file.
21183
21184 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21185
21186         * class.cs (Field.Define): Add missing test for pointers and
21187         safety. 
21188
21189 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21190
21191         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21192         we use the stobj opcode.
21193
21194         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21195         since it wasn't the correct fix. 
21196
21197         It still is puzzling that we are required to use stobj for IntPtr
21198         which seems to be a ValueType.
21199
21200 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21201
21202         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21203         during regular simple name resolution.   Now, the trick is that
21204         instead of returning for processing the simplename, we do a
21205         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21206         contextual lookup type).   If a match is found, return that, if
21207         not, return for further composition.
21208
21209         This fixes long-standing 30485.
21210
21211         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21212         using the address to initialize an object, do an Stobj instead of
21213         using the regular Stelem.
21214
21215         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21216         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21217         Because if we are a BaseIndexerAccess that value will be true.
21218         Fixes 43643.
21219
21220         * statement.cs (GotoCase.Resolve): Return after reporting an
21221         error, do not attempt to continue. 
21222
21223         * expression.cs (PointerArithmetic.Emit): If our operand is a
21224         long, convert our constants to match the operand before
21225         multiplying.  Convert to I type before adding.   Fixes 43670.
21226
21227 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21228
21229         * enum.cs (ImplicitConversionExists) : Rename to
21230         ImplicitEnumConversionExists to remove ambiguity. 
21231
21232         * ecore.cs (NullCast): New type of cast expression class which
21233         basically is very similar to EmptyCast with the difference being
21234         it still is a constant since it is used only to cast a null to
21235         something else
21236         (eg. (string) null)
21237
21238         * convert.cs (ImplicitReferenceConversion): When casting a null
21239         literal, we return a NullCast.
21240
21241         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21242         should be around anymore.
21243
21244         The renaming (reported was slightly wrong). Corrections:
21245
21246         ConvertImplicitStandard -> ImplicitConversionStandard
21247         ConvertExplicitStandard -> ExplicitConversionStandard
21248
21249         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21250         before passing them in !
21251
21252         * convert.cs (ImplicitConversionStandard): When comparing for
21253         equal expr and target types, ensure that expr is not a
21254         NullLiteral.
21255
21256         In general, we must not be checking (expr_type ==
21257         target_type) in the top level conversion methods
21258         (ImplicitConversion, ExplicitConversion etc). This checking is
21259         done in the methods that they delegate to.
21260
21261 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21262
21263         * convert.cs: Move Error_CannotConvertType,
21264         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21265         ImplicitNumericConversion, ImplicitConversionExists,
21266         ImplicitUserConversionExists, StandardConversionExists,
21267         FindMostEncompassedType, FindMostSpecificSource,
21268         FindMostSpecificTarget, ImplicitUserConversion,
21269         ExplicitUserConversion, GetConversionOperators,
21270         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21271         TryImplicitIntConversion, Error_CannotConvertImplicit,
21272         ConvertImplicitRequired, ConvertNumericExplicit,
21273         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21274         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21275         its own file.
21276
21277         Perform the following renames:
21278
21279         StandardConversionExists -> ImplicitStandardConversionExists
21280         ConvertImplicit -> ImplicitConversion
21281         ConvertImplicitStandard -> ImplicitStandardConversion
21282         TryImplicitIntConversion -> ImplicitIntConversion
21283         ConvertImplicitRequired -> ImplicitConversionRequired
21284         ConvertNumericExplicit -> ExplicitNumericConversion
21285         ConvertReferenceExplicit -> ExplicitReferenceConversion
21286         ConvertExplicit -> ExplicitConversion
21287         ConvertExplicitStandard -> ExplicitStandardConversion
21288
21289 2003-05-19  Martin Baulig  <martin@ximian.com>
21290
21291         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21292         (TypeInfo): Added support for structs having structs as fields.
21293
21294         * ecore.cs (FieldExpr): Implement IVariable.
21295         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21296         VariableInfo for the field.
21297
21298 2003-05-18  Martin Baulig  <martin@ximian.com>
21299
21300         * expression.cs (This.DoResolve): Report a CS0027 if we're
21301         emitting a field initializer.
21302
21303 2003-05-18  Martin Baulig  <martin@ximian.com>
21304
21305         * expression.cs (This.ResolveBase): New public function.
21306         (This.DoResolve): Check for CS0188.
21307
21308         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21309         This.Resolve().
21310
21311         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21312         `instance_expression' to null if we don't have any non-static
21313         methods.
21314
21315 2003-05-18  Martin Baulig  <martin@ximian.com>
21316
21317         Reworked the way how local variables and parameters are handled by
21318         the flow analysis code.
21319
21320         * statement.cs (TypeInfo, VariableMap): New public classes.
21321         (VariableInfo): New public class.  This is now responsible for
21322         checking whether a variable has been assigned.  It is used for
21323         parameters and local variables.
21324         (Block.EmitMeta): Take the InternalParameters as argument; compute
21325         the layout of the flow vectors here.
21326         (Block.LocalMap, Block.ParameterMap): New public properties.
21327         (FlowBranching): The .ctor doesn't get the InternalParameters
21328         anymore since Block.EmitMeta() now computes the layout of the flow
21329         vector.
21330         (MyStructInfo): This class is now known as `StructInfo' and nested
21331         in `TypeInfo'; we don't access this directly anymore.
21332
21333         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
21334         property and removed IsAssigned(), IsFieldAssigned(),
21335         SetAssigned() and SetFieldAssigned(); we now call them on the
21336         VariableInfo so we don't need to duplicate this code everywhere.
21337
21338         * expression.cs (ParameterReference): Added `Block block' argument
21339         to the .ctor.
21340         (LocalVariableReference, ParameterReference, This): The new
21341         VariableInfo class is now responsible for all the definite
21342         assignment stuff.
21343
21344         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
21345         IsParameterAssigned, SetParameterAssigned): Removed.
21346
21347 2003-05-18  Martin Baulig  <martin@ximian.com>
21348
21349         * typemanager.cs (InitCoreTypes): Try calling
21350         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
21351         the 3-args-version.  Corlib now also needs our `void_type'.
21352         (GetMethod): Added overloaded version which takes an optional
21353         `bool report_errors' to allow lookups of optional methods.
21354
21355 2003-05-12  Martin Baulig  <martin@ximian.com>
21356
21357         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
21358         only used for locals and not for parameters.
21359
21360 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
21361
21362         * support.cs (InternalParameters.ParameterType): Return the
21363         ExternalType of the parameter.
21364
21365         * parameter.cs (Parameter.ExternalType): drop the two arguments,
21366         they were unused.
21367
21368 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
21369
21370         * class.cs (MethodData.Define): Do not set the `newslot' on
21371         interface members, if they are also flagged as "override".
21372
21373         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
21374         better code for ++i and i++.  This only works for static fields
21375         and local variables.
21376
21377         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
21378         want to pull the DeclSpace out of the builder_to_declspace instead
21379         of the TypeBuilder (like in TypeContainer.FindMembers).
21380
21381         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
21382         instead of LookupTypeContainer.  Fixes the crash on .NET for
21383         looking up interface members.
21384
21385         * const.cs: Create our own emit context during the Definition
21386         stage, so that constants are evaluated in the proper context, when
21387         a recursive definition happens.
21388
21389 2003-05-11  Martin Baulig  <martin@ximian.com>
21390
21391         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
21392         new block for a switch section.
21393         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21394         the adding/lookup in the switch block.  Fixes #39828.
21395
21396 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21397
21398         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21399         functionality: I needed to convert the data after I had performed
21400         the add/sub operation into the operands type size.
21401
21402         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21403         pass the type for the box operation, otherwise the resulting
21404         object would have been of type object.
21405
21406         (BoxedCast): Add constructor to specify the type to box as.
21407
21408 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21409
21410         * iterators.cs: I was reusing the `count' variable inadvertently,
21411         take steps to not allow this to happen.
21412
21413 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21414
21415         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21416         by creating an array at the point where the params starts and
21417         putting all those arguments there, then adjusting the size of the
21418         array.
21419
21420 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21421
21422         * expression.cs (New.AddressOf): Implement interface
21423         IMemoryLocation.  This is used when the `new' operator is used in
21424         the context of an invocation to a method on a value type.
21425
21426         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21427         example. 
21428
21429         * namespace.cs: Also check the using aliases here.
21430
21431         * driver.cs: Move the test for using validity after the types have
21432         been entered, so we do a single pass that also includes the using
21433         aliases. 
21434
21435         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21436         in the regular case.   CreateSiblingForFinally is doing extra
21437         error checking.
21438
21439         * attribute.cs (GetAttributeArgumentExpression): Store the result
21440         on an out value, and use the return value to indicate failure
21441         instead of using null (which is a valid return for Constant.GetValue).
21442
21443         * statement.cs: Perform the analysis flow for the increment
21444         portion after the statement, because this will be the real flow of
21445         execution.  Fixes #42385
21446
21447         * codegen.cs (EmitContext.EmitArgument,
21448         EmitContext.EmitStoreArgument): New helper functions when the
21449         RemapToProxy flag is set.
21450
21451         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21452         function.
21453
21454         Add support for remapping parameters. 
21455
21456         * iterators.cs: Propagate parameter values;  Store parameter
21457         values in the proxy classes.
21458
21459 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21460
21461         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21462         need a proxy reference;  I do not know what I was thinking
21463
21464         * cs-parser.jay (constructor_initializer): catch another error,
21465         and display nice message.
21466
21467         (field_declaration): catch void field declaration
21468         to flag a better error. 
21469
21470         * class.cs (MemberBase.CheckBase): Report an error instead of a
21471         warning if a new protected member is declared in a struct. 
21472         (Field.Define): catch the error of readonly/volatile.
21473
21474         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21475
21476         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21477         volatile variable is taken
21478
21479 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21480
21481         * statement.cs (Fixed.Resolve): Report an error if we are not in
21482         an unsafe context.
21483
21484 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21485
21486         * typemanager.cs: reuse the code that handles type clashes for
21487         delegates and enumerations.
21488
21489         * class.cs (Report28): Always report.
21490
21491         * expression.cs (EncodeAsAttribute): Allow nulls here.
21492
21493 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21494
21495         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21496         the functionality for testing whether an expression is valid for
21497         an attribute here.  Also handle the case of arrays of elements
21498         being stored. 
21499
21500         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21501         encoding a linear array into an array of objects that are suitable
21502         to be passed to an CustomAttributeBuilder.
21503
21504         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21505
21506         * ecore.cs: (FieldExpr): Handle field remapping here.
21507
21508         * iteratators.cs: Pass the instance variable (if the method is an
21509         instance method) to the constructors, so we can access the field
21510         variables on the class.
21511
21512         TODO: Test this with structs.  I think the THIS variable on
21513         structs might have to be a pointer, and not a refenrece
21514
21515 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21516
21517         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21518         local variables to fields in a proxy class.
21519
21520         * iterators.cs (PopulateProxy): Rename our internal fields to
21521         <XXX>.  
21522         Create a <THIS> field if we are an instance method, so we can
21523         reference our parent container variables.
21524         (MapVariable): Called back from the EmitContext code to enter a
21525         new variable to field mapping into the proxy class (we just create
21526         a FieldBuilder).
21527
21528         * expression.cs
21529         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21530         for using the remapped locals to fields.
21531
21532         I placed the code here, because that gives the same semantics to
21533         local variables, and only changes the Emit code.
21534
21535         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21536         statements inside iterators.
21537         (VariableInfo): Add a FieldBuilder for the cases when we are
21538         remapping local variables to fields in a proxy class
21539
21540         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21541         current_block != null.
21542
21543         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21544         not cope with strings, as it has been moved to the
21545         TableSwitchEmit.  Fixed bug in switch generation.
21546
21547         * expression.cs (New.DoResolve): Provide more context for the user
21548         when reporting an error.
21549
21550         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
21551         pointers. 
21552
21553         * expression.cs (MemberAccess.DoResolve): When we get a type back,
21554         check the permissions for it.  Note than in a type-resolution
21555         context the check was already present in DeclSpace.ResolveType,
21556         but was missing from the MemberAccess.
21557
21558         (ArrayCreation.CheckIndices): warn if the user has
21559         more nested levels of expressions, but there are no more
21560         dimensions specified.  Avoids crash on bug 41906.
21561
21562 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
21563
21564         * statement.cs (Block): replace Implicit bool, for a generic
21565         flags.   
21566         New flag: `Unchecked'.  This is used during the EmitMeta phase
21567         (which is out-of-line with the regular Resolve/Emit process for a
21568         statement, as this is done ahead of time, but still gets a chance
21569         to call constant resolve).
21570
21571         (Block.Flags): new enum for adding a new flag.
21572
21573         (Block.EmitMeta): track the state of unchecked.
21574
21575         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
21576         to enable constant resolution to work there as well.
21577
21578 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
21579
21580         * typemanager.cs (ienumerable_type): Also look up
21581         System.Collections.IEnumerable. 
21582
21583 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
21584
21585         TODO: Test more than one conditional per method.
21586
21587         * class.cs (Indexer.Define): Report the location where the user is
21588         referencing the unsupported feature.
21589
21590         (MethodData): Overload the use of `conditionals' to
21591         minimize the creation of needless ArrayLists.   This saves roughly
21592         212kb on my machine.
21593
21594         (Method): Implement the new IIteratorContainer interface.
21595         (Method.SetYields): Implement the method by setting the ModFlags
21596         to contain METHOD_YIELDS.
21597
21598         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
21599         which just got set to null.
21600
21601         * iterators.cs: New file.
21602
21603         (Yield, YieldBreak): New statements.
21604
21605         * statement.cs (Return.Resolve): Flag an error if we are used in
21606         an iterator method.
21607
21608         * codegen.cs (InIterator): New flag set if the code is being
21609         compiled in an iterator method.
21610
21611         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
21612         internal modifier, and we just use it to avoid adding extra
21613         fields, as this is seldom used.  
21614
21615         * cs-parser.jay: Add yield_statement (yield and yield break).
21616
21617         * driver.cs: New flag -v2 to turn on version 2 features. 
21618
21619         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
21620         hashtable when v2 is enabled.
21621
21622 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
21623
21624         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
21625         there is already a namespace defined with this name.
21626
21627         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
21628         people upgraded their corlibs.
21629
21630         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
21631         always use fully qualified types, no need to use the compiler
21632         front end.
21633
21634         (TypeManager.IsNamespace): Use binarysearch.
21635
21636         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
21637         AddDelegate): I did not quite use the new IsValid API properly: I
21638         have to pass the short-name and the fullname.  I was passing only
21639         the basename instead of the fullname sometimes. 
21640
21641         (TypeContainer.DefineType): call NamespaceClash.
21642
21643         * interface.cs (Interface.DefineType): use NamespaceClash before
21644         defining the type.
21645
21646         * delegate.cs (Delegate.DefineType): use NamespaceClash before
21647         defining the type.
21648
21649         * enum.cs: (Enum.DefineType): use NamespaceClash before
21650         defining the type.
21651
21652         * typemanager.cs (: 3-line patch that gives us some tasty 11%
21653         speed increase.  First, use the negative_hits cache when we get a
21654         negative.  Second, add the type with its full original name
21655         instead of the new . and + encoded name (reflection uses + to
21656         separate type from a nested type).  Use LookupTypeReflection
21657         directly which bypasses the type->name hashtable (that we already
21658         know does not contain the type.
21659
21660         * decl.cs (DeclSpace.ResolveTypeExpr): track the
21661         location/container type. 
21662
21663         * driver.cs: When passing utf8, use directly the UTF8Encoding.
21664
21665 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
21666
21667         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
21668
21669         * delegate.cs (NewDelegate.Resolve): Test whether an instance
21670         method is being referenced in the method group from a static
21671         context, and report error 120 if so.
21672
21673         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
21674         Error118. 
21675
21676         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
21677         is created, we create the A namespace).
21678
21679         * cs-parser.jay: A namespace also introduces a DeclarationFound.
21680         Fixes #41591
21681
21682 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
21683
21684         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
21685         invocation to ModuleBuilder.GetType with the same values will
21686         return a new type instance, so we need to cache its return
21687         values. 
21688
21689         * expression.cs (Binary.ResolveOperator): Only allow the compare
21690         operators on enums if they are of the same type.
21691
21692         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
21693         types of ValueType on their own case.  Before we were giving them
21694         the same treatment as objects.
21695
21696         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
21697         fullname.  Short name is used to compare against container name.
21698         Fullname is used to check against defined namespace names.
21699
21700         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
21701         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
21702
21703         (Method.CheckBase): Call parent.
21704         (MemberBase.CheckBase): Check for protected members on sealed
21705         classes.
21706         (PropertyBase.CheckBase): Call parent.
21707         (Field.Define): Call parent.
21708
21709         * report.cs: Negative error codes are now mapped to 8000 - code,
21710         so that the display is render more nicely.
21711
21712         * typemanager.cs: Do not use try/catch, instead report a regular
21713         error. 
21714
21715         (GetPointerType, GetReferenceType): These methods provide
21716         mechanisms to obtain the T* and T& from a T.  We had the code
21717         previously scattered around the code base, and it also used
21718         TypeManager.LookupType that would go through plenty of caches.
21719         This one goes directly to the type source.
21720
21721         In some places we did the Type.GetType followed by
21722         ModuleBuilder.GetType, but not in others, so this unifies the
21723         processing as well.
21724
21725         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
21726         statements now that we have namespace information.
21727
21728         * typemanager.cs (IsNamespace): New method, returns whether the
21729         string presented is a namespace or not.
21730
21731         (ComputeNamespaces): New public entry point, computes the list of
21732         available namespaces, using the GetNamespaces API call in Mono, or
21733         the slower version in MS.NET.   
21734
21735         Now before we start the semantic analysis phase, we have a
21736         complete list of namespaces including everything that the user has
21737         provided.
21738
21739         Deleted old code to cache namespaces in .nsc files.
21740
21741 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
21742
21743         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
21744         class/struct location definition Location for the implicit
21745         constructor location.
21746
21747         (Operator.Define): Use the location of the operator for the
21748         implicit Method definition.
21749
21750         (Constructor.Emit): use the constructor location for the implicit
21751         base initializer constructor.
21752
21753         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
21754         and the Expression class now contains two new methods:
21755
21756         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
21757         isolate type lookup from the rest of the resolution process.
21758
21759         Since we use Expressions to hold type definitions due to the way
21760         we parse the input we have historically overloaded Resolve to
21761         perform the Type lookups if a special flag is passed.  Now this is
21762         eliminated and two methods take their place. 
21763
21764         The differences in the two methods between xStep and xTerminal is
21765         that xStep is involved in our current lookup system that uses
21766         SimpleNames to compose a name, while xTerminal is used just to
21767         catch the case where the simplename lookup failed.
21768
21769 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
21770
21771         * expression.cs (ResolveMemberAccess): Remove redundant code.
21772         TypeExpr expressions are always born fully resolved.
21773
21774         * interface.cs (PopulateMethod): Do not lookup the types twice.
21775         We were doing it once during SemanticAnalysis and once during
21776         PopulateMethod.
21777
21778         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
21779         in local variable type definitions, were being returned as a
21780         SimpleName (we decomposed everything into a string), that is
21781         because primary_expression was being used instead of a type in the
21782         grammar (reduce/reduce conflicts).
21783
21784         The part that was wrong is that we converted the expression into a
21785         string (an oversimplification in one hand, compounded with primary
21786         expressions doing string concatenation).
21787
21788         So things like:
21789
21790         A.B.C [] x;
21791
21792         Would return "A.B.C[]" as a SimpleName.  This stopped things like
21793         using clauses from working on this particular context.  And a type
21794         was being matched directly against "A.B.C[]".
21795
21796         We now use the correct approach, and allow for ComposedCast to be
21797         part of the unary expression.  So the "A.B.C []" become a composed
21798         cast of "A.B.C" (as a nested group of MemberAccess with a
21799         SimpleName at the end) plus the rank composition "[]". 
21800
21801         Also fixes 35567
21802
21803 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
21804
21805         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
21806         for the access level checking.
21807
21808         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
21809         `TypeContainer container', because I kept getting confused when I
21810         was debugging this code.
21811
21812         * expression.cs (Indexers): Instead of tracking getters/setters,
21813         we now track them in parallel.  We create one arraylist less, but
21814         most importantly it is possible now for the LValue code to find a
21815         matching get for a set.
21816
21817         (IndexerAccess.DoResolveLValue): Update the code.
21818         GetIndexersForType has been modified already to extract all the
21819         indexers from a type.  The code assumed it did not.
21820
21821         Also make the code set the correct return type for the indexer.
21822         This was fixed a long time ago for properties, but was missing for
21823         indexers.  It used to be void_type.
21824
21825         (Binary.Emit): Test first for doubles instead of
21826         floats, as they are more common.
21827
21828         (Binary.EmitBranchable): Use the .un version of the branch opcodes
21829         when dealing with floats and the <=, >= operators.  This fixes bug
21830         #39314 
21831
21832         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
21833         to load the array value by emitting a load on the foreach variable
21834         type.  This was incorrect.  
21835
21836         We now emit the code to load an element using the the array
21837         variable type, and then we emit the conversion operator.
21838
21839         Fixed #40176
21840
21841 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
21842
21843         * attribute.cs: Avoid allocation of ArrayLists in the common case.
21844
21845 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
21846
21847         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
21848         test for protection before we test for signatures. 
21849
21850         (MethodSignature.ToString): implement.
21851
21852         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
21853         to the case where we reduced into a LongConstant.
21854
21855         * decl.cs (CheckAccessLevel): If the type is an array, we can not
21856         depend on whether the information is acurrate, because the
21857         Microsoft runtime will always claim that the array type is public,
21858         regardless of the real state.
21859
21860         If the type is a pointer, another problem happens: the type is
21861         reported as non-public in Microsoft.  
21862
21863         In both cases we have to call CheckAccessLevel recursively with
21864         the underlying type as the argument to be tested.
21865
21866 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
21867
21868         * assign.cs (Assign.Emit): If we are dealing with a compound
21869         assignment expression, we should use the code path that stores the
21870         intermediate result in a temporary value.  This fixes #40903.
21871
21872         *expression.cs (Indirection.ToString): Provide ToString method for
21873         debugging. 
21874
21875 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
21876
21877         * class.cs: Null out fields holding references to Block objects so
21878         they can be garbage collected.
21879
21880         * expression.cs (OverloadResolve): Remove unused local.
21881
21882 2003-04-07  Martin Baulig  <martin@ximian.com>
21883
21884         * codegen.cs (EmitContext.CurrentFile): New public field.
21885         (EmitContext.Mark): Use the CurrentFile to check whether the
21886         location is in the correct file.
21887         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
21888
21889 2003-04-07  Martin Baulig  <martin@ximian.com>
21890
21891         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
21892
21893         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
21894         location.  [FIXME: The location argument which gets passed to this
21895         method is sometimes wrong!]
21896
21897 2003-04-07  Nick Drochak <ndrochak@gol.com>
21898
21899         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
21900
21901 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
21902
21903         * expression.cs (Indirection.EmitAssign): We were using the
21904         temporary, but returning immediately instead of continuing the
21905         EmitAssing flow.
21906
21907 2003-04-06  Martin Baulig  <martin@ximian.com>
21908
21909         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
21910         if it's a nested child, but also deriving from the outer class.
21911         See test 190.cs.
21912
21913         * typemanager.cs (IsNestedChildOf): Make this work if it's a
21914         nested child, but also deriving from the outer class.  See
21915         test-190.cs.
21916         (FilterWithClosure): We may access private members of the outer
21917         class if we're a nested child and deriving from the outer class.
21918         (RealMemberLookup): Only set `closure_private_ok' if the
21919         `original_bf' contained BindingFlags.NonPublic.
21920
21921 2003-04-05  Martin Baulig  <martin@ximian.com>
21922
21923         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
21924
21925 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
21926
21927         * class.cs (Event.Define): Do not allow abstract events to have
21928         initializers. 
21929
21930 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
21931
21932         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
21933         block in event declarations.
21934
21935         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
21936         value type, get its address.
21937
21938         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
21939         leaving a class on the stack instead of a boolean value (int
21940         0/1).  Change the code so we compare against null, and then the
21941         result against zero.
21942
21943         * class.cs (TypeContainer.GetClassBases): We were checking for the
21944         parent class being sealed too late.
21945
21946         * expression.cs (Binary.Emit): For <= and >= when dealing with
21947         floating point values, use cgt.un and clt.un instead of cgt and
21948         clt alone.
21949
21950 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
21951
21952         * statement.cs: Apply the same optimization as MS: skip the 
21953         GetEnumerator returning an IEnumerator, and use the one returning a 
21954         CharEnumerator instead. This allows us to avoid the try-finally block 
21955         and the boxing.
21956
21957 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
21958
21959         * cs-parser.jay: Attributes cannot be applied to
21960                          namespaces. Fixes #40473
21961
21962 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21963
21964         * class.cs:
21965         (Add*): check if the name is valid using the full name for constants,
21966         fields, properties and events.
21967
21968 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
21969
21970         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
21971         char constants to be part of the enumeration.
21972
21973         * expression.cs (Conditional.DoResolve): Add support for operator
21974         true. Implements the missing functionality from 14.12
21975
21976         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
21977         operator true/false as required by the spec.
21978
21979         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
21980         implicit conversion to boolean.
21981
21982         * statement.cs (Statement.ResolveBoolean): A boolean expression is
21983         also one where the type implements `operator true'. 
21984
21985         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
21986         get an expression that will invoke operator true based on an
21987         expression.  
21988
21989         (GetConversionOperators): Removed the hack that called op_True
21990         here.  
21991
21992         (Expression.ResolveBoolean): Move this from Statement.
21993
21994 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
21995
21996         * ecore.cs (FieldExpr): do not allow initialization of initonly
21997         fields on derived classes
21998
21999 2003-03-13  Martin Baulig  <martin@ximian.com>
22000
22001         * statement.cs (Block.Emit): Call ig.BeginScope() and
22002         ig.EndScope() when compiling with debugging info; call
22003         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22004
22005 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22006
22007         * expression.cs (Indexers): Do not construct immediately, allow
22008         for new members to be appended as we go.  Fixes 38143
22009
22010 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22011
22012         * expression.cs: save/restore context when resolving an unchecked
22013         expression.
22014
22015 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22016
22017         * cfold.cs: Catch division by zero in modulus operator during
22018         constant folding.
22019
22020 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22021
22022         * interface.cs (Interface.DefineMembers): Avoid defining members
22023         twice. 
22024
22025 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22026
22027         * driver.cs: handle the +/- options for -noconfig
22028
22029         * statement.cs (Unckeched.Resolve): Also track the state of
22030         unchecked in the Resolve phase.
22031
22032 2003-02-27  Martin Baulig  <martin@ximian.com>
22033
22034         * ecore.cs (Expression.MemberLookup): Don't create a
22035         MethodGroupExpr for something which is not a method.  Fixes #38291.
22036
22037 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22038
22039         * class.cs (MemberBase.CheckParameters): Also check that the type
22040         is unmanaged if it is a pointer.
22041
22042         * expression.cs (SizeOf.Resolve): Add location information.
22043
22044         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22045         a managed type is declared.
22046
22047         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22048         parameter modifiers as well.  Fixes bug 38606
22049
22050         * class.cs: Very sad.  Am backing out the speed up changes
22051         introduced by the ArrayList -> Array in the TypeContainer, as they
22052         were not actually that much faster, and introduced a bug (no error
22053         reports on duplicated methods).
22054
22055         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22056         source first, this will guarantee that we have a valid expression
22057         before calling in lower levels functions that will require a
22058         resolved object.  Then use this original_source in the
22059         target.ResolveLValue instead of the original source that was
22060         passed to us.
22061
22062         Another change.  Use target.Resolve instead of LValueResolve.
22063         Although we are resolving for LValues, we will let the Assign code
22064         take care of that (it will be called again from Resolve).  This
22065         basically allows code like this:
22066
22067         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22068         class Y { void A (X x) { x [0] += o; }
22069
22070         The problem was that the indexer was trying to resolve for
22071         set_Item (idx, object o) and never finding one.  The real set_Item
22072         was set_Item (idx, X).  By delaying the process we get the right
22073         semantics. 
22074
22075         Fixes bug 36505
22076
22077 2003-02-23  Martin Baulig  <martin@ximian.com>
22078
22079         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22080         while calling DoEmit ().
22081
22082         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22083         source files; if you use the #line directive inside a method, the
22084         compiler stops emitting line numbers for the debugger until it
22085         reaches the end of the method or another #line directive which
22086         restores the original file.
22087
22088 2003-02-23  Martin Baulig  <martin@ximian.com>
22089
22090         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22091
22092 2003-02-23  Martin Baulig  <martin@ximian.com>
22093
22094         * statement.cs (Block.AddChildVariableNames): We need to call this
22095         recursively, not just for our immediate children.
22096
22097 2003-02-23  Martin Baulig  <martin@ximian.com>
22098
22099         * class.cs (Event.Define): Always make the field private, like csc does.
22100
22101         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22102         actually work, fixes bug #37521.
22103
22104 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22105
22106         * delegate.cs: When creating the various temporary "Parameters"
22107         classes, make sure that we call the ComputeAndDefineParameterTypes
22108         on those new parameters (just like we do with the formal ones), to
22109         allow them to be resolved in the context of the DeclSpace.
22110
22111         This fixes the bug that Dick observed in Bugzilla #38530.
22112
22113 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22114
22115         * expression.cs (ResolveMemberAccess): When resolving a constant,
22116         do not attempt to pull a constant if the value was not able to
22117         generate a valid constant.
22118
22119         * const.cs (LookupConstantValue): Do not report more errors than required.
22120
22121 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22122
22123         * expression.cs: fixes bug #38328.
22124
22125 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22126
22127         * class.cs: Changed all the various members that can be part of a
22128         class from being an ArrayList to be an Array of the right type.
22129         During the DefineType type_list, interface_list, delegate_list and
22130         enum_list are turned into types, interfaces, delegates and enums
22131         arrays.  
22132
22133         And during the member population, indexer_list, event_list,
22134         constant_list, field_list, instance_constructor_list, method_list,
22135         operator_list and property_list are turned into their real arrays.
22136
22137         Although we could probably perform this operation earlier, for
22138         good error reporting we need to keep the lists and remove the
22139         lists for longer than required.
22140
22141         This optimization was triggered by Paolo profiling the compiler
22142         speed on the output of `gen-sample-program.pl' perl script. 
22143
22144         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22145         not crash in methods like MemberLookupFailed that use this field.  
22146
22147         This problem arises when the compiler fails to resolve a type
22148         during interface type definition for example.
22149
22150 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22151
22152         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22153         inherit from System.Object, so we have to stop at null, not only
22154         when reaching System.Object.
22155
22156 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22157
22158         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22159         DeclaredOnly because the parent indexer might have had a different
22160         name, but did not loop until the top of the hierarchy was reached.
22161
22162         The problem this one fixes is 35492: when a class implemented an
22163         indexer from an interface, we were getting the interface method
22164         (which was abstract) and we were flagging an error (can not invoke
22165         abstract method).
22166
22167         This also keeps bug 33089 functioning, and test-148 functioning.
22168
22169         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22170         out if a method is special is to see if it is declared in a
22171         property or event, or whether it is one of the predefined operator
22172         names.   This should fix correctly #36804.
22173
22174 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22175
22176         The goal here is to remove the dependency on EmptyCast.Peel ().
22177         Killing it completely.
22178
22179         The problem is that currently in a number of places where
22180         constants are expected, we have to "probe" for an EmptyCast, and
22181         Peel, which is not the correct thing to do, as this will be
22182         repetitive and will likely lead to errors. 
22183
22184         The idea is to remove any EmptyCasts that are used in casts that
22185         can be reduced to constants, so we only have to cope with
22186         constants. 
22187
22188         This bug hunt was triggered by Bug 37363 and the desire to remove
22189         the duplicate pattern where we were "peeling" emptycasts to check
22190         whether they were constants.  Now constants will always be
22191         constants.
22192
22193         * ecore.cs: Use an enumconstant here instead of wrapping with
22194         EmptyCast.  
22195
22196         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22197         throwing me off.  By handling this we can get rid of a few hacks.
22198
22199         * statement.cs (Switch): Removed Peel() code.
22200
22201 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22202
22203         * class.cs: Location information for error 508
22204
22205         * expression.cs (New.DoResolve): Add a guard against double
22206         resolution of an expression.  
22207
22208         The New DoResolve might be called twice when initializing field
22209         expressions (see EmitFieldInitializers, the call to
22210         GetInitializerExpression will perform a resolve on the expression,
22211         and later the assign will trigger another resolution
22212
22213         This leads to bugs (#37014)
22214
22215         * delegate.cs: The signature for EndInvoke should contain any ref
22216         or out parameters as well.  We were not doing this in the past. 
22217
22218         * class.cs (Field.Define): Do not overwrite the type definition
22219         inside the `volatile' group.  Turns out that volatile enumerations
22220         were changing the type here to perform a validity test, which
22221         broke conversions. 
22222
22223 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22224
22225         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22226         and structs, we do not want to load the instance variable
22227
22228         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22229         enum_type has to be handled like an object reference (implicit
22230         conversions exists from this to object), but the regular IsClass
22231         and IsValueType tests will never return true for this one.
22232
22233         Also we use TypeManager.IsValueType instead of type.IsValueType,
22234         just for consistency with the rest of the code (this is only
22235         needed if we ever use the construct exposed by test-180.cs inside
22236         corlib, which we dont today).
22237
22238 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22239
22240         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22241         just InternalCall.
22242
22243 2003-02-09  Martin Baulig  <martin@ximian.com>
22244
22245         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22246         (Namespace.DefineNamespaces): New static public method; this is
22247         called when we're compiling with debugging to add all namespaces
22248         to the symbol file.
22249
22250         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22251         pass it to the Namespace's .ctor.
22252
22253         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22254         and MethodBase arguments; pass the namespace ID to the symwriter;
22255         pass the MethodBase instead of the token to the symwriter.
22256         (SymbolWriter.DefineNamespace): New method to add a namespace to
22257         the symbol file.
22258
22259 2003-02-09  Martin Baulig  <martin@ximian.com>
22260
22261         * symbolwriter.cs: New file.  This is a wrapper around
22262         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22263         methods here in near future.
22264
22265 2003-02-09  Martin Baulig  <martin@ximian.com>
22266
22267         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22268         ILGenerator.MarkSequencePoint() which are actually used by the
22269         symbol writer.
22270
22271 2003-02-09  Martin Baulig  <martin@ximian.com>
22272
22273         * location.cs (SourceFile): New public sealed class.  This
22274         contains the name and an index which is used in the location's token.
22275         (Location): Reserve an appropriate number of bits in the token for
22276         the source file instead of walking over that list, this gives us a
22277         really huge performance improvement when compiling with debugging.
22278
22279         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22280         `SourceFile' argument instead of a string.
22281         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22282         but don't parse/tokenize here, we need to generate the list of all
22283         source files before we do that.
22284         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22285         the files.
22286
22287         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22288         instead of a string.
22289
22290         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22291         of a string.
22292
22293 2003-02-09  Martin Baulig  <martin@ximian.com>
22294
22295         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22296         filename on `#line default'.
22297
22298 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22299
22300         * statement.cs: don't clear the pinned var when the fixed statement
22301         returns from the method (fixes bug#37752).
22302
22303 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22304
22305         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22306         to IsValueType.
22307
22308 2003-02-07  Martin Baulig  <martin@ximian.com>
22309
22310         * driver.cs: Removed the `--debug-args' command line argument.
22311
22312         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22313         automatically by the AsssemblyBuilder.
22314         (CodeGen.InitializeSymbolWriter): We don't need to call any
22315         initialization function on the symbol writer anymore.  This method
22316         doesn't take any arguments.
22317
22318 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22319
22320         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22321         from referenced assemblies as well.
22322
22323 2003-02-02  Martin Baulig  <martin@ximian.com>
22324
22325         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22326
22327 2003-02-02  Martin Baulig  <martin@ximian.com>
22328
22329         * class.cs (Constructor.Emit): Open the symbol writer before
22330         emitting the constructor initializer.
22331         (ConstructorInitializer.Emit): Call ec.Mark() to allow
22332         single-stepping through constructor initializers.
22333
22334 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
22335
22336         * class.cs: Handle error 549: do not allow virtual methods in
22337         sealed classes. 
22338
22339 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
22340
22341         * decl.cs: Check access levels when resolving types
22342
22343 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
22344
22345         * statement.cs: Add parameters and locals set in catch blocks that might 
22346         return to set vector
22347
22348 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
22349
22350         * class.cs (Operator): Set the SpecialName flags for operators.
22351
22352         * expression.cs (Invocation.DoResolve): Only block calls to
22353         accessors and operators on SpecialName methods.
22354
22355         (Cast.TryReduce): Handle conversions from char constants.
22356
22357
22358 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
22359
22360         * statement.cs: small memory and time optimization in FlowBranching.
22361
22362 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
22363
22364         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
22365         problem that the last fix but in the other sid (Set).
22366
22367         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
22368         access when there is no indexer in the hierarchy.
22369
22370 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
22371
22372         * class.cs: Combine some if statements.
22373
22374 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22375
22376         * driver.cs: fixed bug #37187.
22377
22378 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
22379
22380         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
22381         any indexer, it's needed to build a list with all the indexers in the
22382         hierarchy (AllGetters), else we have problems. Fixes #35653.
22383
22384 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
22385
22386         * class.cs (MethodData.Define): It is wrong for an interface
22387         implementation to be static in both cases: explicit and implicit.
22388         We were only handling this in one case.
22389
22390         Improve the if situation there to not have negations.
22391
22392         * class.cs (Field.Define): Turns out that we do not need to check
22393         the unsafe bit on field definition, only on usage.  Remove the test.
22394
22395 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22396
22397         * driver.cs: use assembly.Location instead of Codebase (the latest
22398         patch made mcs fail when using MS assemblies).
22399
22400 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22401
22402         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22403         get the path to *corlib.dll.
22404
22405 2003-01-21  Nick Drochak <ndrochak@gol.com>
22406
22407         * cs-tokenizer.cs:
22408         * pending.cs:
22409         * typemanager.cs: Remove compiler warnings
22410
22411 2003-01-20  Duncan Mak  <duncan@ximian.com>
22412
22413         * AssemblyInfo.cs: Bump the version number to 0.19.
22414
22415 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22416
22417         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22418
22419 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22420
22421         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22422
22423 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22424
22425         * cs-parser.jay: Small fix: we were not comparing the constructor
22426         name correctly.   Thanks to Zoltan for the initial pointer.
22427
22428 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22429
22430         * cs-tokenizer.cs: Set file name when specified with #line
22431
22432 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22433
22434         * cs-parser.jay: Only perform the constructor checks here if we
22435         are named like the class;  This will help provider a better
22436         error.  The constructor path is taken when a type definition is
22437         not found, but most likely the user forgot to add the type, so
22438         report that rather than the constructor error.
22439
22440 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22441
22442         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22443         allocations.
22444
22445 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22446
22447         * cs-parser.jay: Add cleanup call.
22448
22449 2003-01-13  Duncan Mak  <duncan@ximian.com>
22450
22451         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22452         consistent with other methods.
22453
22454 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22455
22456         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22457
22458 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22459
22460         * attribute.cs: only set GuidAttr to true when we have a
22461         GuidAttribute.
22462
22463 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22464
22465         * ecore.cs:
22466         * expression.cs:
22467         * typemanager.cs: fixes to allow mcs compile corlib with the new
22468         Type.IsSubclassOf fix.
22469
22470 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22471
22472         * expression.cs (LocalVariableReference.DoResolve): Classify a
22473         constant as a value, not as a variable.   Also, set the type for
22474         the variable.
22475
22476         * cs-parser.jay (fixed_statement): take a type instead of a
22477         pointer_type, so we can produce a better error message later.
22478
22479         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22480         as an error.  
22481
22482         (For.DoEmit): Make inifinite loops have a
22483         non-conditional branch back.
22484
22485         (Fixed.DoEmit): First populate the pinned variables, then emit the
22486         statement, then clear the variables.  Before I was emitting the
22487         code once for each fixed piece.
22488
22489
22490 2003-01-08  Martin Baulig  <martin@ximian.com>
22491
22492         * statement.cs (FlowBranching.MergeChild): A break in a
22493         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22494
22495 2003-01-08  Martin Baulig  <martin@ximian.com>
22496
22497         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22498         lives in the same number space than `param_map'.  Fixes #36154.
22499
22500 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22501
22502         * cs-parser.jay (constructor_declaration): Set the
22503         Constructor.ModFlags before probing for it.  This makes the
22504         compiler report 514, 515 and 132 (the code was there, but got
22505         broken). 
22506
22507         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22508         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22509         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22510
22511 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22512
22513         * enum.cs: create the enum static fields using the enum type.
22514
22515 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22516
22517         * class.cs: don't try to create the ParamBuilder for the return
22518         type if it's not needed (and handle it breaking for the ms runtime
22519         anyway).
22520
22521 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22522
22523         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22524
22525 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22526
22527         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22528         the command.   This showed up while compiling the JANET source
22529         code, which used \r as its only newline separator.
22530
22531 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22532
22533         * class.cs (Method.Define): If we are an operator (because it
22534         reuses our code), then set the SpecialName and HideBySig.  #36128
22535
22536 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22537
22538         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22539         exception, report error 120 `object reference required'.
22540
22541         * driver.cs: Add --pause option, used during to measure the size
22542         of the process as it goes with --timestamp.
22543
22544         * expression.cs (Invocation.DoResolve): Do not allow methods with
22545         SpecialName to be invoked.
22546
22547 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22548
22549         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
22550         number before adding it.
22551
22552 2002-12-21  Ravi Pratap  <ravi@ximian.com>
22553
22554         * ecore.cs (StandardImplicitConversion): When in an unsafe
22555         context, we allow conversion between void * to any other pointer
22556         type. This fixes bug #35973.
22557
22558 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
22559
22560         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
22561         is not thrown when extensionless outputs are used 
22562
22563 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22564
22565         * rootcontext.cs: fixed compilation of corlib.
22566
22567 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
22568
22569         * attribute.cs (Attributes.Contains): Add new method.
22570
22571         * class.cs (MethodCore.LabelParameters): if the parameter is an
22572         `out' parameter, check that no attribute `[In]' has been passed.
22573
22574         * enum.cs: Handle the `value__' name in an enumeration.
22575
22576 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
22577
22578         * decl.cs: Added special case to allow overrides on "protected
22579         internal" methods
22580
22581 2002-12-18  Ravi Pratap  <ravi@ximian.com>
22582
22583         * attribute.cs (Attributes.AddAttributeSection): Rename to this
22584         since it makes much more sense.
22585
22586         (Attributes.ctor): Don't require a Location parameter.
22587
22588         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
22589
22590         * attribute.cs (ApplyAttributes): Remove extra Location parameters
22591         since we already have that information per attribute.
22592
22593         * everywhere : make appropriate changes.
22594
22595         * class.cs (LabelParameters): Write the code which actually
22596         applies attributes to the return type. We can't do this on the MS
22597         .NET runtime so we flag a warning in the case an exception is
22598         thrown.
22599
22600 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
22601
22602         * const.cs: Handle implicit null conversions here too.
22603
22604 2002-12-17  Ravi Pratap  <ravi@ximian.com>
22605
22606         * class.cs (MethodCore.LabelParameters): Remove the extra
22607         Type [] parameter since it is completely unnecessary. Instead
22608         pass in the method's attributes so that we can extract
22609         the "return" attribute.
22610
22611 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
22612
22613         * cs-parser.jay (parse): Use Report.Error to flag errors instead
22614         of ignoring it and letting the compile continue.
22615
22616         * typemanager.cs (ChangeType): use an extra argument to return an
22617         error condition instead of throwing an exception.
22618
22619 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
22620
22621         * expression.cs (Unary.TryReduce): mimic the code for the regular
22622         code path.  Perform an implicit cast in the cases where we can
22623         implicitly convert to one of the integral types, and then reduce
22624         based on that constant.   This fixes bug #35483.
22625
22626 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22627
22628         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
22629
22630 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22631
22632         * namespace.cs: fixed bug #35489.
22633
22634 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
22635
22636         * class.cs: Remove some dead code.
22637
22638         * cs-parser.jay: Estimate the number of methods needed
22639         (RootContext.MethodCount);
22640
22641         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
22642         numbers instead of StringBuilders.
22643
22644         * support.cs (PtrHashtable): Add constructor with initial size;
22645         We can now reduce reallocations of the method table.
22646
22647 2002-12-10  Ravi Pratap  <ravi@ximian.com>
22648
22649         * attribute.cs (ApplyAttributes): Keep track of the emitted
22650         attributes on a per-target basis. This fixes bug #35413.
22651
22652 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
22653
22654         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
22655         default to the Windows 1252 encoding.
22656
22657         (UnixParseOption): Support version, thanks to Alp for the missing
22658         pointer. 
22659
22660         * AssemblyInfo.cs: Add nice assembly information.
22661
22662         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
22663         (bug 35169).
22664
22665         * cs-parser.jay: Allow a trailing comma before the close bracked
22666         in the attribute_section production.
22667
22668         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
22669         address of the instance was being taken, I will take this out,
22670         because we take the address of the object immediately here.
22671
22672 2002-12-09  Ravi Pratap  <ravi@ximian.com>
22673
22674         * typemanager.cs (AreMultipleAllowed): Take care of the most
22675         obvious case where attribute type is not in the current assembly -
22676         stupid me ;-)
22677
22678 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
22679
22680         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
22681         definitions, instead of doing that afterwards.  
22682
22683         Also we use a nice little hack, depending on the constructor, we
22684         know if we are a "composed" name or a simple name.  Hence, we
22685         avoid the IndexOf test, and we avoid 
22686
22687         * codegen.cs: Add code to assist in a bug reporter to track down
22688         the source of a compiler crash. 
22689
22690 2002-12-07  Ravi Pratap  <ravi@ximian.com>
22691
22692         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
22693         types have been emitted for a given element and flag an error
22694         if something which does not have AllowMultiple set is used more
22695         than once.
22696
22697         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
22698         attribute types and their corresponding AllowMultiple properties
22699
22700         (AreMultipleAllowed): Check the property for a given type.
22701
22702         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
22703         property in the case we have a TypeContainer.
22704
22705         (Attributes.AddAttribute): Detect duplicates and just skip on
22706         adding them. This trivial fix catches a pretty gross error in our
22707         attribute emission - global attributes were being emitted twice!
22708
22709         Bugzilla bug #33187 is now fixed.
22710
22711 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
22712
22713         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
22714         instead of pp_and).
22715
22716         * expression.cs (Binary.ResolveOperator): I can only use the
22717         Concat (string, string, string) and Concat (string, string,
22718         string, string) if the child is actually a concatenation of
22719         strings. 
22720
22721 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
22722
22723         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
22724         context where we need a 2-character lookahead.
22725
22726         * pending.cs (PendingImplementation): Rework so we can keep track
22727         of interface types all the time, and flag those which were
22728         implemented by parents as optional.
22729
22730 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
22731
22732         * expression.cs (Binary.ResolveOperator): Use
22733         String.Concat(string,string,string) or
22734         String.Concat(string,string,string,string) when possible. 
22735
22736         * typemanager: More helper methods.
22737
22738
22739 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
22740
22741         * pending.cs: remove the bogus return from GetMissingInterfaces()
22742         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
22743
22744 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22745
22746         * namespace.cs: avoid duplicated 'using xxx' being added to
22747         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
22748         when we get more than one 'using' statement for the same namespace.
22749         Report a CS0105 warning for it.
22750
22751 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
22752
22753         * cs-tokenizer.cs (consume_identifier): use read directly, instead
22754         of calling getChar/putback, uses internal knowledge of it.    
22755
22756         (xtoken): Reorder tokenizer so most common patterns are checked
22757         first.  This reduces the compilation time in another 5% (from 8.11s
22758         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
22759
22760         The parsing time is 22% of the compilation in mcs, and from that
22761         64% is spent on the tokenization process.  
22762
22763         I tried using a binary search for keywords, but this is slower
22764         than the hashtable.  Another option would be to do a couple of
22765         things:
22766
22767                 * Not use a StringBuilder, instead use an array of chars,
22768                   with a set value.  Notice that this way we could catch
22769                   the 645 error without having to do it *afterwards*.
22770
22771                 * We could write a hand-parser to avoid the hashtable
22772                   compares altogether.
22773
22774         The identifier consumption process takes 37% of the tokenization
22775         time.  Another 15% is spent on is_number.  56% of the time spent
22776         on is_number is spent on Int64.Parse:
22777
22778                 * We could probably choose based on the string length to
22779                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
22780                   computations. 
22781
22782         Another 3% is spend on wrapping `xtoken' in the `token' function.
22783
22784         Handle 0xa0 as whitespace (#34752)
22785
22786 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
22787
22788         * typemanager.cs (IsCLRType): New routine to tell whether a type
22789         is one of the builtin types.  
22790
22791         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
22792         typecode in more places instead of doing pointer comparissions.
22793         We could leverage some knowledge about the way the typecodes are
22794         laid out.
22795
22796         New code to cache namespaces in assemblies, it is currently not
22797         invoked, to be used soon.
22798
22799         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
22800
22801         * expression.cs (Binary.ResolveOperator): specially handle
22802         strings, and do not perform user-defined operator overloading for
22803         built-in types.
22804
22805 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
22806
22807         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
22808         internalcall as it is a pretty simple operation;  Avoid whenever
22809         possible to call Char.IsLetter.
22810
22811         (consume_identifier): Cut by half the number of
22812         hashtable calls by merging the is_keyword and GetKeyword behavior.
22813
22814         Do not short-circuit, because if we do, we
22815         report errors (ie, #if false && true would produce an invalid
22816         directive error);
22817
22818
22819 2002-11-24  Martin Baulig  <martin@ximian.com>
22820
22821         * expression.cs (Cast.TryReduce): If we're in checked syntax,
22822         check constant ranges and report a CS0221.  Fixes #33186.
22823
22824 2002-11-24  Martin Baulig  <martin@ximian.com>
22825
22826         * cs-parser.jay: Make this work for uninitialized variable
22827         declarations in the `for' initializer.  Fixes #32416.
22828
22829 2002-11-24  Martin Baulig  <martin@ximian.com>
22830
22831         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
22832         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
22833
22834 2002-11-24  Martin Baulig  <martin@ximian.com>
22835
22836         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
22837         argument; if true, we also check for user-defined conversions.
22838         This is only needed if both arguments are of a user-defined type.
22839         Fixes #30443, added test-175.cs.
22840         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
22841
22842         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
22843
22844 2002-11-24  Martin Baulig  <martin@ximian.com>
22845
22846         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
22847         function to get the store opcode.
22848         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
22849         only emit the Ldelema if the store opcode is Stobj.  You must run
22850         both test-34 and test-167 to test this.  Fixes #34529.
22851
22852 2002-11-23  Martin Baulig  <martin@ximian.com>
22853
22854         * ecore.cs (Expression.MemberLookup): Added additional
22855         `qualifier_type' argument which is used when we're being called
22856         from MemberAccess.DoResolve() and null if we're called from a
22857         SimpleName lookup.
22858         (Expression.MemberLookupFailed): New method to report errors; this
22859         does the CS1540 check and reports the correct error message.
22860
22861         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
22862         argument for the CS1540 check and redone the way how we're dealing
22863         with private members.  See the comment in the source code for details.
22864         (FilterWithClosure): Reverted this back to revision 1.197; renamed
22865         `closure_start_type' to `closure_qualifier_type' and check whether
22866         it's not null.  It was not this filter being broken, it was just
22867         being called with the wrong arguments.
22868
22869         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
22870         and pass it the correct `qualifier_type'; this also does the error
22871         handling for us.
22872
22873 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
22874
22875         * expression.cs (Invocation.EmitParams): If the we are dealing
22876         with a non-built-in value type, load its address as well.
22877
22878         (ArrayCreation): Use a a pretty constant instead
22879         of the hardcoded value 2.   Use 6 instead of 2 for the number of
22880         static initializers.  
22881
22882         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
22883         because they are not really value types, just glorified integers. 
22884
22885         * driver.cs: Do not append .exe, the CSC compiler does not do it.
22886
22887         * ecore.cs: Remove redundant code for enumerations, make them use
22888         the same code path as everything else, fixes the casting issue
22889         with enumerations in Windows.Forms.
22890
22891         * attribute.cs: Do only cast to string if it is a string, the
22892         validation happens later.
22893
22894         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
22895         people upgrade their corlibs.
22896
22897         * ecore.cs: Oops, enumerations were not following the entire code path
22898
22899 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
22900
22901         * typemanager.cs (FilterWithClosure): Commented out the test for
22902         1540 in typemanager.cs, as it has problems when accessing
22903         protected methods from a parent class (see test-174.cs). 
22904
22905         * attribute.cs (Attribute.ValidateGuid): new method.
22906         (Attribute.Resolve): Use above.
22907
22908 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
22909
22910         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
22911
22912         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
22913         handling for enumerations, as we only needed the TypeContainer
22914         functionality to begin with (this is required for the fix below to
22915         work for enums that reference constants in a container class for
22916         example). 
22917
22918         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
22919
22920         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
22921         a valid TypeBuilder to perform lookups on.o
22922
22923         * class.cs (InheritableMemberSignatureCompare): Use true in the
22924         call to GetGetMethod and GetSetMethod, because we are comparing
22925         the signature, and we need to get the methods *even* if they are
22926         private. 
22927
22928         (PropertyBase.CheckBase): ditto.
22929
22930         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
22931         GotoCase.Resolve): Use Peel on EmpytCasts.
22932
22933         * ecore.cs (EmptyCast): drop child, add Peel method.
22934
22935 2002-11-17  Martin Baulig  <martin@ximian.com>
22936
22937         * ecore.cs (EmptyCast.Child): New public property.
22938
22939         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
22940         label resolved to an EmptyCast.  Fixes #34162.
22941         (GotoCase.Resolve): Likewise.
22942         (Block.EmitMeta): Likewise.
22943
22944 2002-11-17  Martin Baulig  <martin@ximian.com>
22945
22946         * expression.cs (Invocation.BetterConversion): Prefer int over
22947         uint; short over ushort; long over ulong for integer literals.
22948         Use ImplicitConversionExists instead of StandardConversionExists
22949         since we also need to check for user-defined implicit conversions.
22950         Fixes #34165.  Added test-173.cs.
22951
22952 2002-11-16  Martin Baulig  <martin@ximian.com>
22953
22954         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
22955         with the `true' and `false' literals.  Fixes #33151.
22956
22957 2002-11-16  Martin Baulig  <martin@ximian.com>
22958
22959         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
22960         October 22nd; don't do the cs1540 check for static members.
22961
22962         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
22963         now using our own filter here and doing the cs1540 check again.
22964
22965 2002-11-16  Martin Baulig  <martin@ximian.com>
22966
22967         * support.cs (InternalParameters): Don't crash if we don't have
22968         any fixed parameters.  Fixes #33532.
22969
22970 2002-11-16  Martin Baulig  <martin@ximian.com>
22971
22972         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
22973         when looking up static methods to make this work on Windows.
22974         Fixes #33773.
22975
22976 2002-11-16  Martin Baulig  <martin@ximian.com>
22977
22978         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
22979         a setter rather than using PropertyInfo.CanWrite.
22980
22981 2002-11-15  Nick Drochak  <ndrochak@gol.com>
22982
22983         * class.cs: Allow acces to block member by subclasses. Fixes build
22984         breaker.
22985
22986 2002-11-14  Martin Baulig  <martin@ximian.com>
22987
22988         * class.cs (Constructor.Emit): Added the extern/block check.
22989         Fixes bug #33678.
22990
22991 2002-11-14  Martin Baulig  <martin@ximian.com>
22992
22993         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
22994         iteration while looking for indexers, this is needed because the
22995         indexer may have a different name in our base classes.  Fixed the
22996         error reporting (no indexers at all, not get accessor, no
22997         overloaded match).  Fixes bug #33089.
22998         (IndexerAccess.DoResolveLValue): Likewise.
22999
23000 2002-11-14  Martin Baulig  <martin@ximian.com>
23001
23002         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23003         indexers.  Fixes the first part of bug #33089.
23004         (MethodSignature.InheritableMemberSignatureCompare): Added support
23005         for properties.
23006
23007 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23008
23009         * attribute.cs (Attribute.Resolve): Catch the
23010         NullReferenceException and report it since it isn't supposed to
23011         happen. 
23012
23013 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23014
23015         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23016         LogicalOr and LogicalAnd that can benefit from recursively
23017         handling EmitBranchable.  The code now should be nice for Paolo.
23018
23019 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23020
23021         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23022         the Type lookups, as we perform quite a number of lookups on
23023         non-Types.  This can be removed once we can deterministically tell
23024         whether we have a type or a namespace in advance.
23025
23026         But this might require special hacks from our corlib.
23027
23028         * TODO: updated.
23029
23030         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23031         and double which avoids a conversion from an integer to a double.
23032
23033         * expression.cs: tiny optimization, avoid calling IsConstant,
23034         because it effectively performs the lookup twice.
23035
23036 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23037
23038         But a bogus return here to keep the semantics of the old code
23039         until the Mono runtime is fixed.
23040
23041         * pending.cs (GetMissingInterfaces): New method used to remove all
23042         the interfaces that are already implemented by our parent
23043         classes from the list of pending methods. 
23044
23045         * interface.cs: Add checks for calls after ResolveTypeExpr.
23046
23047 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23048
23049         * class.cs (Class.Emit): Report warning 67: event not used if the
23050         warning level is beyond 3.
23051
23052         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23053         being a NullLiteral.
23054
23055         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23056         specifiers. 
23057
23058         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23059         path that might fail if a type can not be resolved.
23060
23061         * expression.cs (Binary.Emit): Emit unsigned versions of the
23062         operators. 
23063
23064         * driver.cs: use error 5.
23065
23066 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23067
23068         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23069
23070 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23071
23072         * cs-parser.jay (switch_section): A beautiful patch from Martin
23073         Baulig that fixed 33094.
23074
23075 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23076
23077         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23078         Check whether the base is abstract and report an error if so.
23079
23080         * expression.cs (IndexerAccess.DoResolveLValue,
23081         IndexerAccess.DoResolve): ditto. 
23082
23083         (Invocation.DoResolve): ditto.
23084
23085         (Invocation.FullMethodDesc): Improve the report string.
23086
23087         * statement.cs (Block): Eliminate IsVariableDefined as it is
23088         basically just a wrapper for GetVariableInfo.
23089
23090         * ecore.cs (SimpleName): Use new 
23091
23092         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23093         type, as we return the actual parameter ref/unref state on a
23094         different call.
23095
23096 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23097
23098         * support.cs: Return proper flags REF/OUT fixing the previous
23099         commit.  
23100
23101         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23102         not used to mean `ref' but `ref or out' in ParameterReference
23103
23104         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23105         full type signature instead of calling TypeManger.CSharpName
23106         ourselves. 
23107
23108         * support.cs (InternalParameters.ParameterDesc): Do not compare
23109         directly to the modflags, because REF/OUT will actually be bitsets
23110         if set. 
23111
23112         * delegate.cs (VerifyMethod): Check also the modifiers.
23113
23114         * cs-tokenizer.cs: Fix bug where floating point values with an
23115         exponent where a sign was missing was ignored.
23116
23117         * driver.cs: Allow multiple assemblies to be specified in a single
23118         /r: argument
23119
23120 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23121
23122         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23123         because identifiers after a parenthesis would end up in this kind
23124         of production, and we needed to desamiguate it for having casts
23125         like:
23126
23127                 (UserDefinedType *) xxx
23128
23129 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23130
23131         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23132         we should set on the Bindingflags.NonPublic, but not turn on
23133         private_ok.  private_ok controls whether a Private member is
23134         returned (this is chekced on the filter routine), while the
23135         BindingFlags.NonPublic just controls whether private/protected
23136         will be allowed.   This fixes the problem part of the problem of
23137         private properties being allowed to be used in derived classes.
23138
23139         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23140         so we can call the children DoResolveLValue method (this will
23141         properly signal errors on lvalue assignments to base properties)
23142
23143         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23144         getter are null, and we have a property info, we know that this
23145         happened because the lookup failed, so we report an error 122 for
23146         protection level violation.
23147
23148         We also silently return if setter and getter are null in the
23149         resolve functions, this condition only happens if we have flagged
23150         the error before.  This is the other half of the problem. 
23151
23152         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23153         not have accessibility information, that is why we were returning
23154         true in the filter function in typemanager.cs.
23155
23156         To properly report 122 (property is inaccessible because of its
23157         protection level) correctly, we report this error in ResolveAccess
23158         by failing if both the setter and the getter are lacking (ie, the
23159         lookup failed). 
23160
23161         DoResolve and DoLResolve have been modified to check for both
23162         setter/getter being null and returning silently, the reason being
23163         that I did not want to put the knowledge about this error in upper
23164         layers, like:
23165
23166         int old = Report.Errors;
23167         x = new PropertyExpr (...);
23168         if (old != Report.Errors)
23169                 return null;
23170         else
23171                 return x;
23172
23173         So the property expr is returned, but it is invalid, so the error
23174         will be flagged during the resolve process. 
23175
23176         * class.cs: Remove InheritablePropertySignatureCompare from the
23177         class, as we no longer depend on the property signature to compute
23178         whether it is possible to implement a method or not.
23179
23180         The reason is that calling PropertyInfo.GetGetMethod will return
23181         null (in .NET, in Mono it works, and we should change this), in
23182         cases where the Get Method does not exist in that particular
23183         class.
23184
23185         So this code:
23186
23187         class X { public virtual int A { get { return 1; } } }
23188         class Y : X { }
23189         class Z : Y { public override int A { get { return 2; } } }
23190
23191         Would fail in Z because the parent (Y) would not have the property
23192         defined.  So we avoid this completely now (because the alternative
23193         fix was ugly and slow), and we now depend exclusively on the
23194         method names.
23195
23196         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23197         reference method, instead of using the property.
23198
23199         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23200         routines are gone now.
23201
23202         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23203         names, they were incorrectly named.
23204
23205         * cs-tokenizer.cs: Return are more gentle token on failure. 
23206
23207         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23208         had an out-of-sync index variable, which caused it to remove from
23209         the list of pending methods the wrong method sometimes.
23210
23211 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23212
23213         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23214         CanWrite, because those refer to this particular instance of the
23215         property, and do not take into account the fact that we can
23216         override single members of a property.
23217
23218         Constructor requires an EmitContext.  The resolution process does
23219         not happen here, but we need to compute the accessors before,
23220         because the resolution does not always happen for properties.
23221
23222         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23223         subclass, before we did not update this flag, but we did update
23224         bindingflags. 
23225
23226         (GetAccessors): Drop this routine, as it did not work in the
23227         presence of partially overwritten set/get methods. 
23228
23229         Notice that this broke the cs1540 detection, but that will require
23230         more thinking. 
23231
23232 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23233
23234         * class.cs:
23235         * codegen.cs:
23236         * driver.cs: issue a warning instead of an error if we don't support
23237         debugging for the platform. Also ignore a couple of errors that may
23238         arise when trying to write the symbols. Undo my previous patch.
23239
23240 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23241
23242         * driver.cs: ignore /debug switch except for Unix platforms.
23243
23244 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23245
23246         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23247
23248 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23249
23250         * driver.cs: Do not make mcs-debug conditional, so we do not break
23251         builds that use it.
23252
23253         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23254         review this patch.  But basically after all the children variables
23255         have been merged, the value of "Breaks" was not being set to
23256         new_breaks for Switch blocks.  I think that it should be set after
23257         it has executed.  Currently I set this to the value of new_breaks,
23258         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23259         conservative, but I do not understand this code very well.
23260
23261         I did not break anything in the build, so that is good ;-)
23262
23263         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23264
23265 2002-10-20  Mark Crichton  <crichton@gimp.org>
23266
23267         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23268
23269 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23270
23271         * cfold.cs: Fixed compile blocker.
23272
23273 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23274
23275         * driver.cs: I was chekcing the key, not the file.
23276
23277 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23278
23279         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23280         message that we were generating - we just need to silently return
23281         a null.
23282
23283 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23284
23285         * class.cs (Event.Define): Change my previous commit, as this
23286         breaks the debugger.  This is a temporary hack, as it seems like
23287         the compiler is generating events incorrectly to begin with.
23288
23289         * expression.cs (Binary.ResolveOperator): Added support for 
23290         "U operator - (E x, E y)"
23291
23292         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23293         y)".
23294
23295         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23296         init-only variables, but this path did not take into account that
23297         there might be also instance readonly variables.  Correct this
23298         problem. 
23299
23300         This fixes bug 32253
23301
23302         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23303         delegates as well.
23304
23305         * driver.cs: Change the extension for modules to `netmodule'
23306
23307         * cs-parser.jay: Improved slightly the location tracking for
23308         the debugger symbols.
23309
23310         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23311         modifiers that were specified instead of the hardcoded value
23312         (FamAndAssem).  This was basically ignoring the static modifier,
23313         and others.  Fixes 32429.
23314
23315         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23316         fixed a bug in the process (32476)
23317
23318         * expression.cs (ArrayAccess.EmitAssign): Patch from
23319         hwang_rob@yahoo.ca that fixes bug 31834.3
23320
23321 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23322
23323         * driver.cs: Make the module extension .netmodule.
23324
23325 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23326
23327         * driver.cs: Report an error if the resource file is not found
23328         instead of crashing.
23329
23330         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
23331         false, like Emit does.
23332
23333 2002-10-16  Nick Drochak  <ndrochak@gol.com>
23334
23335         * typemanager.cs: Remove unused private member.  Also reported mcs
23336         bug to report this as a warning like csc.
23337
23338 2002-10-15  Martin Baulig  <martin@gnome.org>
23339
23340         * statement.cs (Statement.Emit): Made this a virtual method; emits
23341         the line number info and calls DoEmit().
23342         (Statement.DoEmit): New protected abstract method, formerly knows
23343         as Statement.Emit().
23344
23345         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
23346
23347 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
23348
23349         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
23350         have fixed a remaining problem: not every AddXXXX was adding a
23351         fully qualified name.  
23352
23353         Now everyone registers a fully qualified name in the DeclSpace as
23354         being defined instead of the partial name.  
23355
23356         Downsides: we are slower than we need to be due to the excess
23357         copies and the names being registered this way.  
23358
23359         The reason for this is that we currently depend (on the corlib
23360         bootstrap for instance) that types are fully qualified, because
23361         we dump all the types in the namespace, and we should really have
23362         types inserted into the proper namespace, so we can only store the
23363         basenames in the defined_names array.
23364
23365 2002-10-10  Martin Baulig  <martin@gnome.org>
23366
23367         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
23368         from bug #31834, see the bug report for a testcase which is
23369         miscompiled.
23370
23371 2002-10-10  Martin Baulig  <martin@gnome.org>
23372
23373         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
23374         flow analysis code for this.
23375
23376         * statement.cs (Do, While, For): Tell the flow analysis code about
23377         infinite loops.
23378         (FlowBranching.UsageVector): Added support for infinite loops.
23379         (Block.Resolve): Moved the dead code elimination here and use flow
23380         analysis to do it.
23381
23382 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
23383
23384         * class.cs (Field.Define): Catch cycles on struct type
23385         definitions. 
23386
23387         * typemanager.cs (IsUnmanagedtype): Do not recursively check
23388         fields if the fields are static.  We only need to check instance
23389         fields. 
23390
23391         * expression.cs (As.DoResolve): Test for reference type.
23392
23393         * statement.cs (Using.ResolveExpression): Use
23394         ConvertImplicitRequired, not ConvertImplicit which reports an
23395         error on failture
23396         (Using.ResolveLocalVariableDecls): ditto.
23397
23398         * expression.cs (Binary.ResolveOperator): Report errors in a few
23399         places where we had to.
23400
23401         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23402
23403 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23404
23405         * expression.cs: Use StoreFromPtr instead of extracting the type
23406         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23407
23408         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23409         an enumeration value to a System.Enum, but System.Enum is not a
23410         value type, but an class type, so we need to box.
23411
23412         (Expression.ConvertExplicit): One codepath could return
23413         errors but not flag them.  Fix this.  Fixes #31853
23414
23415         * parameter.cs (Resolve): Do not allow void as a parameter type.
23416
23417 2002-10-06  Martin Baulig  <martin@gnome.org>
23418
23419         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23420         if it's a class type and not a struct.  Fixes #31815.
23421
23422 2002-10-06  Martin Baulig  <martin@gnome.org>
23423
23424         * statement.cs: Reworked the flow analysis code a bit to make it
23425         usable for dead code elimination.
23426
23427 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23428
23429         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23430
23431 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23432
23433         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23434         to fix the test 165, will investigate deeper.
23435
23436 2002-10-04  Martin Baulig  <martin@gnome.org>
23437
23438         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23439         finally blocks actually work.
23440         (Try.Resolve): We don't need to create a sibling for `finally' if
23441         there is no finally block.
23442
23443 2002-10-04  Martin Baulig  <martin@gnome.org>
23444
23445         * class.cs (Constructor.Define): The default accessibility for a
23446         non-default constructor is private, not public.
23447
23448 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23449
23450         * class.cs (Constructor): Make AllowedModifiers public, add
23451         EXTERN.
23452
23453         * cs-parser.jay: Perform the modifiers test here, as the
23454         constructor for the Constructor class usually receives a zero
23455         because of the way we create it (first we create, later we
23456         customize, and we were never checking the modifiers).
23457
23458         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23459         is a version of LookupTypeReflection that includes the type-name
23460         cache.  This can be used as a fast path for functions that know
23461         the fully qualified name and are only calling into *.GetType() to
23462         obtain a composed type.
23463
23464         This is also used by TypeManager.LookupType during its type
23465         composition.
23466
23467         (LookupType): We now also track the real type name, as sometimes
23468         we can get a quey for the real type name from things like
23469         ComposedCast.  This fixes bug 31422.
23470
23471         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23472         complete type fullname, it does not have to go through the type
23473         resolution system to obtain the composed version of the type (for
23474         obtaining arrays or pointers).
23475
23476         (Conditional.Emit): Use the EmitBoolExpression to
23477         generate nicer code, as requested by Paolo.
23478
23479         (ArrayCreation.CheckIndices): Use the patch from
23480         hwang_rob@yahoo.ca to validate the array initializers. 
23481
23482 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23483
23484         * class.cs (ConstructorInitializer.Emit): simplify code by using
23485         Invocation.EmitCall, and at the same time, fix the bugs in calling
23486         parent constructors that took variable arguments. 
23487
23488         * ecore.cs (Expression.ConvertNumericExplicit,
23489         Expression.ImplicitNumericConversion): Remove the code that
23490         manually wrapped decimal (InternalTypeConstructor call is now gone
23491         as well).
23492
23493         * expression.cs (Cast.TryReduce): Also handle decimal types when
23494         trying to perform a constant fold on the type.
23495
23496         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23497
23498         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23499         that only turned off an error report, and did nothing else. 
23500
23501 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23502
23503         * driver.cs: Handle and ignore /fullpaths
23504
23505 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23506
23507         * expression.cs (Binary.ResolveOperator): Catch the case where
23508         DoNumericPromotions returns true, 
23509
23510         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23511
23512 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23513
23514         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23515         report error 70.
23516
23517 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23518
23519         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23520         conversion exists, but it is also required that the conversion be
23521         performed.  This manifested in "(Type64Enum) 2".  
23522
23523         * class.cs (TypeManager.AddMethod): The fix is not to change
23524         AddEnum, because that one was using a fully qualified name (every
23525         DeclSpace derivative does), but to change the AddMethod routine
23526         that was using an un-namespaced name.  This now correctly reports
23527         the duplicated name.
23528
23529         Revert patch until I can properly fix it.  The issue
23530         is that we have a shared Type space across all namespaces
23531         currently, which is wrong.
23532
23533         Options include making the Namespace a DeclSpace, and merge
23534         current_namespace/current_container in the parser.
23535
23536 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23537
23538         * cs-parser.jay: Improve error reporting when we get a different
23539         kind of expression in local_variable_type and
23540         local_variable_pointer_type. 
23541
23542         Propagate this to avoid missleading errors being reported.
23543
23544         * ecore.cs (ImplicitReferenceConversion): treat
23545         TypeManager.value_type as a target just like object_type.   As
23546         code like this:
23547
23548         ValueType v = 1;
23549
23550         Is valid, and needs to result in the int 1 being boxed before it
23551         is assigned to the value type v.
23552
23553         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
23554         to validate the enumeration name.
23555
23556         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
23557         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
23558         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
23559
23560         * ecore.cs (TryImplicitIntConversion): When doing an
23561         implicit-enumeration-conversion, check if the type is 64-bits and
23562         perform a conversion before passing to EnumConstant.
23563
23564 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
23565
23566         * decl.cs (Error_AmbiguousTypeReference); New routine used to
23567         report ambiguous type references.  Unlike the MS version, we
23568         report what the ambiguity is.   Innovation at work ;-)
23569
23570         (DeclSpace.FindType): Require a location argument to
23571         display when we display an ambiguous error.
23572
23573         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
23574
23575         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
23576
23577         * expression.cs (EmitDynamicInitializers): Apply patch from
23578         hwang_rob@yahoo.ca that fixes the order in which we emit our
23579         initializers. 
23580
23581 2002-09-21  Martin Baulig  <martin@gnome.org>
23582
23583         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
23584         delegate takes no arguments.
23585
23586 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
23587
23588         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
23589         from integers.
23590
23591         * expression.cs: Extract the underlying type.
23592
23593         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
23594
23595         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
23596
23597 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
23598
23599         * class.cs (TypeContainer.DefineType): We can not use the nice
23600         PackingSize with the size set to 1 DefineType method, because it
23601         will not allow us to define the interfaces that the struct
23602         implements.
23603
23604         This completes the fixing of bug 27287
23605
23606         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
23607         means also structs.  This fixes part of the problem. 
23608         (Expresion.ImplicitReferenceConversionExists): ditto.
23609
23610         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
23611         error if there were no errors reported during the type lookup
23612         process, to avoid duplicates or redundant errors.  Without this
23613         you would get an ambiguous errors plus a type not found.  We have
23614         beaten the user enough with the first error.  
23615
23616         (DeclSparce.FindType): Emit a warning if we have an ambiguous
23617         reference. 
23618
23619         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
23620         during the resolution process, stop the lookup, this avoids
23621         repeated error reports (same error twice).
23622
23623         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
23624
23625         * typemanager.cs (LookupType): Redo the type lookup code to match
23626         the needs of System.Reflection.  
23627
23628         The issue is that System.Reflection requires references to nested
23629         types to begin with a "+" sign instead of a dot.  So toplevel
23630         types look like: "NameSpace.TopLevelClass", and nested ones look
23631         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
23632         levels. 
23633
23634 2002-09-19  Martin Baulig  <martin@gnome.org>
23635
23636         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
23637         says that a method always returns or always throws an exception,
23638         don't report the CS0161.
23639
23640         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
23641         set `Returns = new_returns'.
23642
23643 2002-09-19  Martin Baulig  <martin@gnome.org>
23644
23645         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
23646         to an enum constant, check for a CS0176.
23647
23648 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
23649
23650         * class.cs (TypeContainer.CheckPairedOperators): Now we check
23651         for operators that must be in pairs and report errors.
23652
23653         * ecore.cs (SimpleName.DoResolveType): During the initial type
23654         resolution process, when we define types recursively, we must
23655         check first for types in our current scope before we perform
23656         lookups in the enclosing scopes.
23657
23658         * expression.cs (MakeByteBlob): Handle Decimal blobs.
23659
23660         (Invocation.VerifyArgumentsCompat): Call
23661         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
23662         I thought we were supposed to always call this, but there are a
23663         few places in the code where we dont do it.
23664
23665 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
23666
23667         * driver.cs: Add support in -linkres and -resource to specify the
23668         name of the identifier.
23669
23670 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23671
23672         * ecore.cs (StandardConversionExists): Sync with the conversion
23673         code: allow anything-* to void* conversions.
23674
23675         (FindMostSpecificSource): Use an Expression argument
23676         instead of a Type, because we might be handed over a Literal which
23677         gets a few more implicit conversions that plain types do not.  So
23678         this information was being lost.
23679
23680         Also, we drop the temporary type-holder expression when not
23681         required.
23682
23683 2002-09-17  Martin Baulig  <martin@gnome.org>
23684
23685         * class.cs (PropertyBase.CheckBase): Don't check the base class if
23686         this is an explicit interface implementation.
23687
23688 2002-09-17  Martin Baulig  <martin@gnome.org>
23689
23690         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
23691         different `IndexerName' attributes.
23692
23693         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
23694         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
23695         virtual CommonResolve().
23696
23697 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23698
23699         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
23700         and convert that to the UnderlyingType.
23701
23702         * statement.cs (Foreach.Resolve): Indexers are just like variables
23703         or PropertyAccesses.
23704
23705         * cs-tokenizer.cs (consume_string): Track line numbers and columns
23706         inside quoted strings, we were not doing this before.
23707
23708 2002-09-16  Martin Baulig  <martin@gnome.org>
23709
23710         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
23711         resolve it.  This is needed for the definite assignment check of the
23712         instance expression, fixes bug #29846.
23713         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
23714
23715 2002-09-16  Nick Drochak  <ndrochak@gol.com>
23716
23717         * parameter.cs: Fix compile error.  Cannot reference static member
23718         from an instance object.  Is this an mcs bug?
23719
23720 2002-09-14  Martin Baulig  <martin@gnome.org>
23721
23722         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
23723         multiple times.  Fixes bug #30295, added test-166.cs.
23724
23725 2002-09-14  Martin Baulig  <martin@gnome.org>
23726
23727         * statement.cs (Block.Emit): Don't emit unreachable code.
23728         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
23729         `break' statements.
23730         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
23731
23732 2002-09-14  Martin Baulig  <martin@gnome.org>
23733
23734         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
23735         is set.
23736
23737 2002-09-14  Martin Baulig  <martin@gnome.org>
23738
23739         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
23740         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
23741         be false on the ms runtime.
23742
23743 2002-09-13  Martin Baulig  <martin@gnome.org>
23744
23745         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
23746         the CS0038 error message.
23747
23748 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
23749
23750         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
23751         constant inside, return it.
23752
23753 2002-09-12  Martin Baulig  <martin@gnome.org>
23754
23755         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
23756         implicit conversion can be done between enum types.
23757
23758         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
23759         check whether an implicit conversion to the current enum's UnderlyingType
23760         exists and report an error if not.
23761
23762         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
23763         without debugging support.
23764
23765         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
23766         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
23767
23768 2002-09-12  Martin Baulig  <martin@gnome.org>
23769
23770         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
23771
23772         * ecore.cs (IMemberExpr.DeclaringType): New property.
23773         (SimpleName.SimpleNameResolve): Check whether we're accessing a
23774         nonstatic member of an outer type (CS0038).
23775
23776 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
23777
23778         * driver.cs: Activate the using-error detector at warning level
23779         4 (at least for MS-compatible APIs).
23780
23781         * namespace.cs (VerifyUsing): Small buglett fix.
23782
23783         * pending.cs (PendingImplementation): pass the container pointer. 
23784
23785         * interface.cs (GetMethods): Allow for recursive definition.  Long
23786         term, I would like to move every type to support recursive
23787         definitions, not the current ordering mechanism that we have right
23788         now.
23789
23790         The situation is this: Attributes are handled before interfaces,
23791         so we can apply attributes to interfaces.  But some attributes
23792         implement interfaces, we will now handle the simple cases
23793         (recursive definitions will just get an error).  
23794
23795         * parameter.cs: Only invalidate types at the end if we fail to
23796         lookup all types.  
23797
23798 2002-09-09  Martin Baulig  <martin@gnome.org>
23799
23800         * ecore.cs (PropertyExpr.Emit): Also check for
23801         TypeManager.system_int_array_get_length so this'll also work when
23802         compiling corlib.  Fixes #30003.
23803
23804 2002-09-09  Martin Baulig  <martin@gnome.org>
23805
23806         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
23807         and throw an exception if we can't get the type's size.  Fixed #30040,
23808         added test-165.cs.
23809
23810 2002-09-09  Martin Baulig  <martin@gnome.org>
23811
23812         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
23813
23814         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
23815         context.  Fixes bug #30027.
23816
23817         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
23818         virtual functions.  Fixes bug #30043, added test-164.cs.
23819
23820 2002-09-08  Ravi Pratap  <ravi@ximian.com>
23821
23822         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
23823
23824 2002-09-08  Nick Drochak  <ndrochak@gol.com>
23825
23826         * driver.cs: Use an object to get the windows codepage since it's not a
23827         static property.
23828
23829 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
23830
23831         * statement.cs (For.Emit): for infinite loops (test == null)
23832         return whether there is a break inside, not always "true".
23833
23834         * namespace.cs (UsingEntry): New struct to hold the name of the
23835         using definition, the location where it is defined, and whether it
23836         has been used in a successful type lookup.
23837
23838         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
23839         strings.
23840
23841         * decl.cs: ditto.
23842
23843 2002-09-06  Ravi Pratap  <ravi@ximian.com>
23844
23845         * attribute.cs : Fix incorrect code which relied on catching
23846         a NullReferenceException to detect a null being passed in
23847         where an object was expected.
23848
23849 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
23850
23851         * statement.cs (Try): flag the catch variable as assigned
23852
23853         * expression.cs (Cast): Simplified by using ResolveType instead of
23854         manually resolving.
23855
23856         * statement.cs (Catch): Fix bug by using ResolveType.
23857
23858 2002-09-06  Ravi Pratap  <ravi@ximian.com>
23859
23860         * expression.cs (BetterConversion): Special case for when we have
23861         a NullLiteral as the argument and we have to choose between string
23862         and object types - we choose string the way csc does.
23863
23864         * attribute.cs (Attribute.Resolve): Catch the
23865         NullReferenceException and report error #182 since the Mono
23866         runtime no more has the bug and having this exception raised means
23867         we tried to select a constructor which takes an object and is
23868         passed a null.
23869
23870 2002-09-05  Ravi Pratap  <ravi@ximian.com>
23871
23872         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
23873         message (1502, 1503) when we can't locate a method after overload
23874         resolution. This is much more informative and closes the bug
23875         Miguel reported.
23876
23877         * interface.cs (PopulateMethod): Return if there are no argument
23878         types. Fixes a NullReferenceException bug.
23879
23880         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
23881         expressions too. Previously we were checking only in one place for
23882         positional arguments leaving out named arguments.
23883
23884         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
23885         type to the enum type is not allowed. Remove code corresponding to
23886         that.
23887
23888         (ConvertNumericExplicit): Allow explicit conversions from
23889         the underlying type to enum type. This precisely follows the spec
23890         and closes a bug filed by Gonzalo.
23891
23892 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23893
23894         * compiler.csproj:
23895         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
23896
23897 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
23898
23899         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
23900         it was important that we stored the right value after the
23901         reduction in `converted'.
23902
23903 2002-09-04  Martin Baulig  <martin@gnome.org>
23904
23905         * location.cs (Location.SymbolDocument): Use full pathnames for the
23906         source files.
23907
23908 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
23909
23910         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
23911         of the expression resolve mechanism, because that will catch the
23912         SimpleName error failures.
23913
23914         (Conditional): If we can not resolve the
23915         expression, return, do not crash.
23916
23917 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23918
23919         * cs-tokenizer.cs:
23920         (location): display token name instead of its number.
23921
23922 2002-08-28  Martin Baulig  <martin@gnome.org>
23923
23924         * expression.cs (Binary.ResolveOperator): Don't silently return
23925         but return an error if an operator cannot be applied between two
23926         enum types.
23927
23928 2002-08-28  Martin Baulig  <martin@gnome.org>
23929
23930         * class.cs (Constructor.Define): Set the permission attributes
23931         correctly instead of making all constructors public.
23932
23933 2002-08-28  Martin Baulig  <martin@gnome.org>
23934
23935         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
23936         for private members before reporting a CS0103; if we find anything,
23937         it's a CS0122.
23938
23939 2002-08-28  Martin Baulig  <martin@gnome.org>
23940
23941         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
23942         to check whether `closure_start_type == closure_invocation_type',
23943         we also need to check whether `m.DeclaringType == closure_invocation_type'
23944         before bypassing the permission checks.  We might be accessing
23945         protected/private members from the base class.
23946         (TypeManager.RealMemberLookup): Only set private_ok if private
23947         members were requested via BindingFlags.NonPublic.
23948
23949         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
23950
23951         * expression.cs (MemberAccess.ResolveMemberAccess): Set
23952         MethodGroupExpr.IsExplicitImpl if appropriate.
23953         (Invocation.DoResolve): Don't report the CS0120 for explicit
23954         interface implementations.
23955
23956 2002-08-27  Martin Baulig  <martin@gnome.org>
23957
23958         * expression.cs (Invocation.DoResolve): If this is a static
23959         method and we don't have an InstanceExpression, we must report
23960         a CS0120.
23961
23962 2002-08-25  Martin Baulig  <martin@gnome.org>
23963
23964         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
23965         `==' between a valuetype and an object.
23966
23967 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
23968
23969         * ecore.cs (TypeExpr): Provide a ToString method.
23970
23971 2002-08-24  Martin Baulig  <martin@gnome.org>
23972
23973         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
23974         now called proggie.dbg and it's a binary file.
23975
23976 2002-08-23  Martin Baulig  <martin@gnome.org>
23977
23978         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
23979
23980 2002-08-23  Martin Baulig  <martin@gnome.org>
23981
23982         * struct.cs (MyStructInfo.ctor): Make this work with empty
23983         structs; it's not allowed to use foreach() on null.
23984
23985 2002-08-23  Martin Baulig  <martin@gnome.org>
23986
23987         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
23988         writer the full pathname of the generated assembly.
23989
23990 2002-08-23  Martin Baulig  <martin@gnome.org>
23991
23992         * statements.cs (FlowBranching.UsageVector.MergeChildren):
23993         A `finally' block never returns or breaks; improved handling of
23994         unreachable code.
23995
23996 2002-08-23  Martin Baulig  <martin@gnome.org>
23997
23998         * statement.cs (Throw.Resolve): Allow `throw null'.
23999
24000 2002-08-23  Martin Baulig  <martin@gnome.org>
24001
24002         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24003         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24004         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24005         MemberLookup would return a wrong event if this is an explicit
24006         interface implementation and the class has an event with the same
24007         name.
24008
24009 2002-08-23  Martin Baulig  <martin@gnome.org>
24010
24011         * statement.cs (Block.AddChildVariableNames): New public method.
24012         (Block.AddChildVariableName): Likewise.
24013         (Block.IsVariableNameUsedInChildBlock): Likewise.
24014         (Block.AddVariable): Check whether a variable name has already
24015         been used in a child block.
24016
24017         * cs-parser.jay (declare_local_variables): Mark all variable names
24018         from the current block as being used in a child block in the
24019         implicit block.
24020
24021 2002-08-23  Martin Baulig  <martin@gnome.org>
24022
24023         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24024         find the symbol writer.
24025
24026         * driver.cs: csc also allows the arguments to /define being
24027         separated by commas, not only by semicolons.
24028
24029 2002-08-23  Martin Baulig  <martin@gnome.org>
24030
24031         * interface.cs (Interface.GetMembers): Added static check for events.
24032
24033 2002-08-15  Martin Baulig  <martin@gnome.org>
24034
24035         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24036         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24037
24038         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24039         why the MethodData.EmitDestructor() change was necessary.
24040
24041 2002-08-20  Martin Baulig  <martin@gnome.org>
24042
24043         * class.cs (TypeContainer.FindMembers): Added static check for events.
24044
24045         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24046
24047         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24048         use Type.GetEvents(), not Type.FindMembers().
24049
24050 2002-08-20  Martin Baulig  <martin@gnome.org>
24051
24052         * decl.cs (MemberCache): Added a special method cache which will
24053         be used for method-only searched.  This ensures that a method
24054         search will return a MethodInfo with the correct ReflectedType for
24055         inherited methods.      
24056
24057 2002-08-20  Martin Baulig  <martin@gnome.org>
24058
24059         * decl.cs (DeclSpace.FindMembers): Made this public.
24060
24061 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24062
24063         * delegate.cs: fixed build on windows.
24064         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24065
24066 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24067
24068         * ecore.cs (StandardConversionExists): Return a false
24069         if we are trying to convert the void type to anything else
24070         since that is not allowed.
24071
24072         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24073         we flag error 70 in the event an event is trying to be accessed
24074         directly from outside the declaring type.
24075
24076 2002-08-20  Martin Baulig  <martin@gnome.org>
24077
24078         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24079         MemberCache from typemanager.cs to decl.cs.
24080
24081 2002-08-19  Martin Baulig  <martin@gnome.org>
24082
24083         * class.cs (TypeContainer): Implement IMemberContainer.
24084         (TypeContainer.DefineMembers): Create the MemberCache.
24085         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24086         return public members if BindingFlags.Public was given, check
24087         whether members are static.
24088
24089 2002-08-16  Martin Baulig  <martin@gnome.org>
24090
24091         * decl.cs (DeclSpace.Define): Splitted this in Define and
24092         DefineMembers.  DefineMembers is called first and initializes the
24093         MemberCache.
24094
24095         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24096         DefineMembers() on all our DeclSpaces.
24097
24098         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24099         but call DefineMembers() on all nested interfaces.  We call their
24100         Define() in our new Define() function.
24101
24102         * interface.cs (Interface): Implement IMemberContainer.
24103         (Interface.Define): Moved all code except the attribute stuf to
24104         DefineMembers().
24105         (Interface.DefineMembers): Initialize the member cache.
24106
24107         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24108         need this anymore since we can use MemberCache.FindMembers directly.
24109
24110 2002-08-19  Martin Baulig  <martin@gnome.org>
24111
24112         * typemanager.cs (MemberCache): When creating the cache for an
24113         interface type, add all inherited members.
24114         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24115         to `out bool used_cache' and documented it.
24116         (TypeManager.MemberLookup): If we already used the cache in the first
24117         iteration, we don't need to do the interfaces check.
24118
24119 2002-08-19  Martin Baulig  <martin@gnome.org>
24120
24121         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24122         here from IMemberFinder and don't implement this interface anymore.
24123         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24124
24125         * typemanager.cs (IMemberFinder): This interface is now only used by
24126         classes which actually support the member cache.
24127         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24128         since we only put DeclSpaces into this Hashtable.
24129         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24130         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24131
24132 2002-08-16  Martin Baulig  <martin@gnome.org>
24133
24134         * typemanager.cs (ICachingMemberFinder): Removed.
24135         (IMemberFinder.MemberCache): New property.
24136         (TypeManager.FindMembers): Merged this with RealFindMembers().
24137         This function will never be called from TypeManager.MemberLookup()
24138         so we can't use the cache here, just the IMemberFinder.
24139         (TypeManager.MemberLookup_FindMembers): Check whether the
24140         IMemberFinder has a MemberCache and call the cache's FindMembers
24141         function.
24142         (MemberCache): Rewrote larger parts of this yet another time and
24143         cleaned it up a bit.
24144
24145 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24146
24147         * driver.cs (LoadArgs): Support quoting.
24148
24149         (Usage): Show the CSC-like command line arguments.
24150
24151         Improved a few error messages.
24152
24153 2002-08-15  Martin Baulig  <martin@gnome.org>
24154
24155         * typemanager.cs (IMemberContainer.Type): New property.
24156         (IMemberContainer.IsInterface): New property.
24157
24158         The following changes are conditional to BROKEN_RUNTIME, which is
24159         defined at the top of the file.
24160
24161         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24162         class'es members, but add all members from TypeHandle.ObjectType
24163         if we're an interface.
24164         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24165         is the current type.
24166         (MemberCache.CacheEntry.Container): Removed this field.
24167         (TypeHandle.GetMembers): Include inherited members.
24168
24169 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24170
24171         * typemanager.cs: fixed compilation and added a comment on a field that
24172         is never used.
24173
24174 2002-08-15  Martin Baulig  <martin@gnome.org>
24175
24176         * class.cs (ConstructorInitializer.Resolve): In the
24177         Expression.MemberLookup call, use the queried_type as
24178         invocation_type.
24179
24180         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24181         declared' attribute, it's always true.
24182         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24183         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24184         temporary wrapper for FindMembers which tells MemberLookup whether
24185         members from the base classes are included in the return value.
24186         This will go away soon.
24187         (TypeManager.MemberLookup): Use this temporary hack here; once the
24188         new MemberCache is completed, we don't need to do the DeclaredOnly
24189         looping here anymore since the MemberCache will take care of this.
24190         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24191         (MemberCache): When creating the MemberCache for a class, get
24192         members from the current class and all its base classes.
24193         (MemberCache.CacheEntry.Container): New field.  This is a
24194         temporary hack until the Mono runtime is fixed to distinguish
24195         between ReflectedType and DeclaringType.  It allows us to use MCS
24196         with both the MS runtime and the unfixed Mono runtime without
24197         problems and without accecting performance.
24198         (MemberCache.SearchMembers): The DeclaredOnly looping from
24199         TypeManager.MemberLookup is now done here.      
24200
24201 2002-08-14  Martin Baulig  <martin@gnome.org>
24202
24203         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24204         Type.GetFields on dynamic types but get the fields from the
24205         corresponding TypeContainer.
24206         (MyStructInfo.GetStructInfo): Added check for enum types.
24207
24208         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24209         (MemberList.SyncRoot): Implemented.
24210         (TypeManager.FilterWithClosure): No need to check permissions if
24211         closure_start_type == closure_invocation_type, don't crash if
24212         closure_invocation_type is null.
24213
24214 2002-08-13  Martin Baulig  <martin@gnome.org>
24215
24216         Rewrote TypeContainer.FindMembers to use a member cache.  This
24217         gives us a speed increase of about 35% for the self-hosting MCS
24218         build and of about 15-20% for the class libs (both on GNU/Linux).
24219
24220         * report.cs (Timer): New class to get enhanced profiling.  This
24221         whole class is "TIMER" conditional since it remarkably slows down
24222         compilation speed.
24223
24224         * class.cs (MemberList): New class.  This is an IList wrapper
24225         which we're now using instead of passing MemberInfo[]'s around to
24226         avoid copying this array unnecessarily.
24227         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24228         (ICachingMemberFinder, IMemberContainer): New interface.
24229         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24230         has already been checked, otherwise use it for the name comparision.
24231         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24232         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24233         if possible.  Returns a MemberList, not a MemberInfo [].
24234         (TypeHandle): New class, implements IMemberContainer.  We create
24235         one instance of this class per type, it contains a MemberCache
24236         which is used to do the member lookups.
24237         (MemberCache): New class.  Each instance of this class contains
24238         all members of a type and a name-based hash table.
24239         (MemberCache.FindMembers): This is our new member lookup
24240         function.  First, it looks up all members of the requested name in
24241         the hash table.  Then, it walks this list and sorts out all
24242         applicable members and returns them.
24243
24244 2002-08-13  Martin Baulig  <martin@gnome.org>
24245
24246         In addition to a nice code cleanup, this gives us a performance
24247         increase of about 1.4% on GNU/Linux - not much, but it's already
24248         half a second for the self-hosting MCS compilation.
24249
24250         * typemanager.cs (IMemberFinder): New interface.  It is used by
24251         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24252         Enum, Delegate or Interface.
24253         (TypeManager.finder_to_member_finder): New PtrHashtable.
24254         (TypeManager.finder_to_container): Removed.
24255         (TypeManager.finder_to_delegate): Removed.
24256         (TypeManager.finder_to_interface): Removed.
24257         (TypeManager.finder_to_enum): Removed.
24258
24259         * interface.cs (Interface): Implement IMemberFinder.
24260
24261         * delegate.cs (Delegate): Implement IMemberFinder.
24262
24263         * enum.cs (Enum): Implement IMemberFinder.
24264
24265         * class.cs (TypeContainer): Implement IMemberFinder.
24266
24267 2002-08-12  Martin Baulig  <martin@gnome.org>
24268
24269         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24270
24271 2002-08-12  Martin Baulig  <martin@gnome.org>
24272
24273         * ecore.cs (ITypeExpression): New interface for expressions which
24274         resolve to a type.
24275         (TypeExpression): Renamed to TypeLookupExpression.
24276         (Expression.DoResolve): If we're doing a types-only lookup, the
24277         expression must implement the ITypeExpression interface and we
24278         call DoResolveType() on it.
24279         (SimpleName): Implement the new ITypeExpression interface.
24280         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24281         hack, the situation that we're only looking up types can't happen
24282         anymore when this method is called.  Moved the type lookup code to
24283         DoResolveType() and call it.
24284         (SimpleName.DoResolveType): This ITypeExpression interface method
24285         is now doing the types-only lookup.
24286         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24287         (ResolveFlags): Added MaskExprClass.
24288
24289         * expression.cs (MemberAccess): Implement the ITypeExpression
24290         interface.
24291         (MemberAccess.DoResolve): Added support for a types-only lookup
24292         when we're called via ITypeExpression.DoResolveType().
24293         (ComposedCast): Implement the ITypeExpression interface.
24294
24295         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24296         Expression.Resolve() with ResolveFlags.Type instead.
24297
24298 2002-08-12  Martin Baulig  <martin@gnome.org>
24299
24300         * interface.cs (Interface.Define): Apply attributes.
24301
24302         * attribute.cs (Attribute.ApplyAttributes): Added support for
24303         interface attributes.
24304
24305 2002-08-11  Martin Baulig  <martin@gnome.org>
24306
24307         * statement.cs (Block.Emit): Only check the "this" variable if we
24308         do not always throw an exception.
24309
24310         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24311         whether the property has a set accessor.
24312
24313 2002-08-11  Martin Baulig  <martin@gnome.org>
24314
24315         Added control flow analysis support for structs.
24316
24317         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24318         with control flow analysis turned off.
24319         (IVariable): New interface.
24320         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24321         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24322         (FieldExpr.DoResolve): Resolve the instance expression with flow
24323         analysis turned off and do the definite assignment check after the
24324         resolving when we know what the expression will resolve to.
24325
24326         * expression.cs (LocalVariableReference, ParameterReference):
24327         Implement the new IVariable interface, only call the flow analysis
24328         code if ec.DoFlowAnalysis is true.
24329         (This): Added constructor which takes a Block argument.  Implement
24330         the new IVariable interface.
24331         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
24332         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
24333         This does the definite assignment checks for struct members.
24334
24335         * class.cs (Constructor.Emit): If this is a non-static `struct'
24336         constructor which doesn't have any initializer, call
24337         Block.AddThisVariable() to tell the flow analysis code that all
24338         struct elements must be initialized before control returns from
24339         the constructor.
24340
24341         * statement.cs (MyStructInfo): New public class.
24342         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
24343         argument to this indexer.  If non-zero, check an individual struct
24344         member, not the whole struct.
24345         (FlowBranching.CheckOutParameters): Check struct members.
24346         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
24347         overloaded versions of these methods which take an additional
24348         `int field_idx' argument to check struct members.
24349         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
24350         overloaded versions of these methods which take an additional
24351         `string field_name' argument to check struct member.s
24352         (VariableInfo): Implement the IVariable interface.
24353         (VariableInfo.StructInfo): New public property.  Returns the
24354         MyStructInfo instance of the variable if it's a struct or null.
24355         (Block.AddThisVariable): New public method.  This is called from
24356         Constructor.Emit() for non-static `struct' constructor which do
24357         not have any initializer.  It creates a special variable for the
24358         "this" instance variable which will be checked by the flow
24359         analysis code to ensure that all of the struct's fields are
24360         initialized before control returns from the constructor.
24361         (UsageVector): Added support for struct members.  If a
24362         variable/parameter is a struct with N members, we reserve a slot
24363         in the usage vector for each member.  A struct is considered fully
24364         initialized if either the struct itself (slot 0) or all its
24365         members are initialized.
24366
24367 2002-08-08  Martin Baulig  <martin@gnome.org>
24368
24369         * driver.cs (Driver.MainDriver): Only report an error CS5001
24370         if there were no compilation errors.
24371
24372         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
24373         `UnsafeContext' property to determine whether the parent is in
24374         unsafe context rather than checking the parent's ModFlags:
24375         classes nested in an unsafe class are unsafe as well.
24376
24377 2002-08-08  Martin Baulig  <martin@gnome.org>
24378
24379         * statement.cs (UsageVector.MergeChildren): Distinguish between
24380         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
24381         we return.  Added test17() and test18() to test-154.cs.
24382
24383 2002-08-08  Martin Baulig  <martin@gnome.org>
24384
24385         * typemanager.cs (TypeManager.FilterWithClosure): If we have
24386         Family access, make sure the invoking type isn't a subclass of the
24387         queried type (that'd be a CS1540).
24388
24389         * ecore.cs (Expression.MemberLookup): Added overloaded version of
24390         this method which takes an additional `Type invocation_type'.
24391
24392         * expression.cs (BaseAccess.DoResolve): Use the base type as
24393         invocation and query type.
24394         (MemberAccess.DoResolve): If the lookup failed and we're about to
24395         report a CS0122, try a lookup with the ec.ContainerType - if this
24396         succeeds, we must report a CS1540.
24397
24398 2002-08-08  Martin Baulig  <martin@gnome.org>
24399
24400         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24401         (MethodGroupExpr): Implement the IMemberExpr interface.
24402
24403         * expression (MemberAccess.ResolveMemberAccess): No need to have
24404         any special code for MethodGroupExprs anymore, they're now
24405         IMemberExprs.   
24406
24407 2002-08-08  Martin Baulig  <martin@gnome.org>
24408
24409         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24410         Family, FamANDAssem and FamORAssem permissions.
24411         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24412
24413 2002-08-08  Martin Baulig  <martin@gnome.org>
24414
24415         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24416         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24417         or loop block.
24418
24419 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24420
24421         * driver.cs: implemented /resource option to embed managed resources.
24422
24423 2002-08-07  Martin Baulig  <martin@gnome.org>
24424
24425         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24426         (FieldBase.HasFieldInitializer): New public property.
24427         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24428         returns the field initializer and makes sure it is only resolved once.
24429         (TypeContainer.EmitFieldInitializers): Call
24430         FieldBase.GetInitializerExpression to get the initializer, this ensures
24431         that it isn't resolved multiple times.
24432
24433         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24434         the resolving process (SimpleName/MemberLookup) that we're currently
24435         emitting a field initializer (which must not access any instance members,
24436         this is an error CS0236).
24437
24438         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24439         argument, if the `IsFieldInitializer' flag is set, we must report and
24440         error CS0236 and not an error CS0120.   
24441
24442 2002-08-07  Martin Baulig  <martin@gnome.org>
24443
24444         * ecore.cs (IMemberExpr): New public interface.
24445         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24446         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24447         if the expression is an IMemberExpr.
24448
24449         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24450         to be null, implicitly default to `this' if we're non-static in
24451         this case.  Simplified the code a lot by using the new IMemberExpr
24452         interface.  Also fixed bug #28176 here.
24453
24454 2002-08-06  Martin Baulig  <martin@gnome.org>
24455
24456         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24457         ParameterReferences during semantic analysis so that we can do a
24458         type-only search when resolving Cast, TypeOf and SizeOf.
24459         (block): Pass the `current_local_parameters' to the Block's
24460         constructor.
24461
24462         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24463         argument to the constructor.
24464         (ConstructorInitializer.Resolve): Create a temporary implicit
24465         block with the parameters.
24466
24467         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24468         references here if we aren't doing a type-only search.
24469
24470         * statement.cs (Block): Added constructor which takes a
24471         `Parameters parameters' argument.
24472         (Block.Parameters): New public property.
24473
24474         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24475         to `Parameters' and made it public readonly.
24476
24477 2002-08-06  Martin Baulig  <martin@gnome.org>
24478
24479         * ecore.cs (Expression.Warning): Made this public as well.
24480
24481         * report.cs (Report.Debug): Print the contents of collections.
24482
24483 2002-08-06  Martin Baulig  <martin@gnome.org>
24484
24485         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24486         used to tell Resolve() which kinds of expressions it may return.
24487         (Expression.Resolve): Added overloaded version of this method which
24488         takes a `ResolveFlags flags' argument.  This can be used to tell
24489         Resolve() which kinds of expressions it may return.  Reports a
24490         CS0118 on error.
24491         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24492         ResolveFlags.SimpleName.
24493         (Expression.Error118): Added overloaded version of this method which
24494         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24495         which kinds of expressions are allowed.
24496
24497         * expression.cs (Argument.ResolveMethodGroup): New public method.
24498         Resolves an argument, but allows a MethodGroup to be returned.
24499         This is used when invoking a delegate.
24500
24501         * TODO: Updated a bit.
24502
24503 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24504
24505         Fixed compilation with csc.
24506
24507         * ecore.cs: Expression.Error made public. Is this correct? Should
24508         Warning be made public too?
24509
24510         * expression.cs: use ea.Location instead of ea.loc.
24511         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24512
24513 2002-08-06  Martin Baulig  <martin@gnome.org>
24514
24515         * ecore.cs (Expression.loc): Moved the location here instead of
24516         duplicating it in all derived classes.
24517         (Expression.Location): New public property.
24518         (Expression.Error, Expression.Warning): Made them non-static and
24519         removed the location argument.
24520         (Expression.Warning): Added overloaded version which takes an
24521         `int level' argument.
24522         (Expression.Error118): Make this non-static and removed the
24523         expression and location arguments.
24524         (TypeExpr): Added location argument to the constructor.
24525
24526         * expression.cs (StaticCallExpr): Added location argument to
24527         the constructor.
24528         (Indirection, PointerArithmetic): Likewise.
24529         (CheckedExpr, UnCheckedExpr): Likewise.
24530         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24531         (StringPtr): Likewise.
24532
24533
24534 2002-08-05  Martin Baulig  <martin@gnome.org>
24535
24536         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24537
24538         * assign.cs (Assign.DoResolve): Check whether the source
24539         expression is a value or variable.
24540
24541         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24542         while resolving the corresponding blocks.
24543
24544         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24545         an error, don't silently return null.
24546
24547         * statement.cs (Block.AddVariable): Do the error reporting here
24548         and distinguish between CS0128 and CS0136.
24549         (Block.DoResolve): Report all unused labels (warning CS0164).
24550         (LabeledStatement): Pass the location to the constructor.
24551         (LabeledStatement.HasBeenReferenced): New property.
24552         (LabeledStatement.Resolve): Set it to true here.
24553
24554         * statement.cs (Return.Emit): Return success even after reporting
24555         a type mismatch error (CS0126 or CS0127), this is what csc does and
24556         it avoids confusing the users with any consecutive errors.
24557
24558 2002-08-05  Martin Baulig  <martin@gnome.org>
24559
24560         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
24561
24562         * const.cs (Const.LookupConstantValue): Catch circular definitions.
24563
24564         * expression.cs (MemberAccess.DoResolve): Silently return if an
24565         error has already been reported.
24566
24567         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
24568         error has already been reported.
24569
24570 2002-08-05  Martin Baulig  <martin@gnome.org>
24571
24572         * statement.cs (UsageVector): Only initialize the `parameters'
24573         vector if we actually have any "out" parameters.
24574
24575 2002-08-05  Martin Baulig  <martin@gnome.org>
24576
24577         * expression.cs (Binary.ResolveOperator): When combining delegates,
24578         they must have the same type.
24579
24580 2002-08-05  Martin Baulig  <martin@gnome.org>
24581
24582         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
24583         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
24584         work with the ms runtime and we also don't need it: if we're a
24585         PropertyBuilder and not in the `indexer_arguments' hash, then we
24586         are a property and not an indexer.
24587
24588         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
24589         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
24590         since the latter one doesn't work with the ms runtime.
24591
24592 2002-08-03  Martin Baulig  <martin@gnome.org>
24593
24594         Fixed bugs #27998 and #22735.
24595
24596         * class.cs (Method.IsOperator): New public field.
24597         (Method.CheckBase): Report CS0111 if there's already a method
24598         with the same parameters in the current class.  Report CS0508 when
24599         attempting to change the return type of an inherited method.
24600         (MethodData.Emit): Report CS0179 if a method doesn't have a body
24601         and it's not marked abstract or extern.
24602         (PropertyBase): New abstract base class for Property and Indexer.
24603         (PropertyBase.CheckBase): Moved here from Property and made it work
24604         for indexers.
24605         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
24606         the same so we can reuse it there.
24607         (Property, Indexer): Derive from PropertyBase.
24608         (MethodSignature.inheritable_property_signature_filter): New delegate
24609         to find properties and indexers.
24610
24611         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
24612         argument and improved error reporting.
24613
24614         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
24615         EmptyReadOnlyParameters and made it a property.
24616
24617         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
24618         version of this method which takes a `PropertyInfo indexer'.
24619         (TypeManager.RegisterIndexer): New method.
24620
24621         * class.cs: Added myself as author of this file :-)
24622
24623 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24624
24625         * class.cs: fixed compilation on windoze.
24626
24627 2002-08-03  Martin Baulig  <martin@gnome.org>
24628
24629         * interface.cs (Interface.GetInterfaceBases): Check whether all
24630         base interfaces are at least as accessible than the current one.
24631
24632         * class.cs (TypeContainer.GetClassBases): Check whether base types
24633         are at least as accessible than the current type.
24634         (TypeContainer.AsAccessible): Implemented and made non-static.
24635         (MemberBase.CheckParameters): Report errors if the accessibility
24636         checks fail.
24637
24638         * delegate.cs (Delegate.Delegate): The default visibility is
24639         internal for top-level types and private for nested types.
24640         (Delegate.Define): Report errors if the accessibility checks fail.
24641
24642         * enum.cs (Enum.Enum): The default visibility is internal for
24643         top-level types and private for nested types.
24644         (Enum.DefineType): Compute the correct visibility.
24645
24646         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
24647         function which takes a `bool is_toplevel' instead of a TypeContainer.
24648
24649         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
24650         builtin type.
24651
24652 2002-08-02  Martin Baulig  <martin@gnome.org>
24653
24654         * expression.cs (LocalVariableReferenc): Added constructor which
24655         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
24656         (LocalVariableReference.IsReadOnly): New property.
24657         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
24658         variable is readonly, use our own readonly flag to do this; you can
24659         use the new constructor to get a writable reference to a read-only
24660         variable.
24661
24662         * cs-parser.jay (foreach_statement, using_statement): Get a writable
24663         reference to the local variable.
24664
24665 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
24666
24667         * rootcontext.cs (ResolveCore): Also include System.Exception
24668
24669         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
24670         we reach an EmptyStatement.
24671
24672         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
24673         is also fine.
24674
24675         * expression.cs (Binary.ResolveOperator): Check error result in
24676         two places.
24677
24678         use brtrue/brfalse directly and avoid compares to null.
24679
24680 2002-08-02  Martin Baulig  <martin@gnome.org>
24681
24682         * class.cs (TypeContainer.Define): Define all nested interfaces here.
24683         Fixes bug #28407, added test-155.cs.
24684
24685 2002-08-01  Martin Baulig  <martin@gnome.org>
24686
24687         * class.cs (Event.EmitDefaultMethod): Make this work with static
24688         events.  Fixes #28311, added verify-3.cs.
24689
24690 2002-08-01  Martin Baulig  <martin@gnome.org>
24691
24692         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
24693         `is_disposable' fields.
24694         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
24695         `hm.is_disposable' if we're using the collection pattern.
24696         (Foreach.EmitCollectionForeach): Use the correct type for the
24697         enumerator's local variable, only emit the try/finally block if
24698         necessary (fixes #27713).
24699
24700 2002-08-01  Martin Baulig  <martin@gnome.org>
24701
24702         * ecore.cs (Expression.report118): Renamed to Error118 and made
24703         it public static.
24704
24705         * statement.cs (Throw.Resolve): Check whether the expression is of
24706         the correct type (CS0118) and whether the type derives from
24707         System.Exception (CS0155).
24708         (Catch.Resolve): New method.  Do the type lookup here and check
24709         whether it derives from System.Exception (CS0155).
24710         (Catch.CatchType, Catch.IsGeneral): New public properties.
24711
24712         * typemanager.cs (TypeManager.exception_type): Added.
24713
24714 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
24715
24716         * driver.cs: Updated About function.
24717
24718 2002-07-31  Martin Baulig  <martin@gnome.org>
24719
24720         Implemented Control Flow Analysis.
24721
24722         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
24723         (EmitContext.CurrentBranching): Added.
24724         (EmitContext.StartFlowBranching): Added.
24725         (EmitContext.EndFlowBranching): Added.
24726         (EmitContext.KillFlowBranching): Added.
24727         (EmitContext.IsVariableAssigned): Added.
24728         (EmitContext.SetVariableAssigned): Added.
24729         (EmitContext.IsParameterAssigned): Added.
24730         (EmitContext.SetParameterAssigned): Added.
24731         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
24732         Added control flow analysis stuff here.
24733
24734         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
24735         resolve the expression as lvalue.
24736         (LocalVariableReference.DoResolve): Check whether the variable has
24737         already been assigned.
24738         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
24739         the parameter as assigned here.
24740         (ParameterReference.DoResolve): Check whether the parameter has already
24741         been assigned.
24742         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
24743         expression as lvalue.
24744
24745         * statement.cs (FlowBranching): New class for the flow analysis code.
24746         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
24747         (LabeledStatement.IsDefined): New public property.
24748         (LabeledStatement.AddUsageVector): New public method to tell flow
24749         analyis that the label may be reached via a forward jump.
24750         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
24751         flow analysis.
24752         (VariableInfo.Number): New public field.  This is used by flow analysis
24753         to number all locals of a block.
24754         (Block.CountVariables): New public property.  This is the number of
24755         local variables in this block (including the locals from all parent
24756         blocks).
24757         (Block.EmitMeta): Number all the variables.
24758
24759         * statement.cs: Added flow analysis support to all classes.
24760
24761 2002-07-31  Martin Baulig  <martin@gnome.org>
24762
24763         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
24764         To get debugging messages, compile mcs with /define:MCS_DEBUG and
24765         then use this argument.
24766
24767         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
24768
24769         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
24770         use this to specify /define options.
24771
24772 2002-07-29  Martin Baulig  <martin@gnome.org>
24773
24774         * statement.cs (Fixed): Moved all code that does variable lookups
24775         and resolvings from Emit to Resolve.
24776
24777         * statement.cs (For): Moved all code that does variable lookups
24778         and resolvings from Emit to Resolve.
24779
24780         * statement.cs (Using): Moved all code that does variable lookups
24781         and resolvings from Emit to Resolve.
24782
24783 2002-07-29  Martin Baulig  <martin@gnome.org>
24784
24785         * attribute.cs (Attribute.Resolve): Explicitly catch a
24786         System.NullReferenceException when creating the
24787         CustromAttributeBuilder and report a different warning message.
24788
24789 2002-07-29  Martin Baulig  <martin@gnome.org>
24790
24791         * support.cs (ParameterData.ParameterName): Added method to
24792         get the name of a parameter.
24793
24794         * typemanager.cs (TypeManager.IsValueType): New public method.
24795
24796 2002-07-29  Martin Baulig  <martin@gnome.org>
24797
24798         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
24799         is a flag which specifies that it's either ref or out.
24800         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
24801         the out parameter to `out Parameter.Modifier mod', also set the
24802         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
24803
24804         * support.cs (InternalParameters.ParameterModifier): Distinguish
24805         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24806         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24807
24808         * expression.cs (Argument.GetParameterModifier): Distinguish
24809         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24810         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24811
24812 2002-07-29  Martin Baulig  <martin@gnome.org>
24813
24814         * expression.cs (ParameterReference.ParameterReference): Added
24815         `Location loc' argument to the constructor.
24816
24817         * cs-parser.jay: Pass location to ParameterReference.
24818
24819 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
24820
24821         * statement.cs (Try): Initialize the location.
24822
24823         * cs-parser.jay: pass location to Try.
24824
24825         * expression.cs (Unary.Reduce): Change the prototype to return
24826         whether a constant fold could be performed or not.  The result is
24827         returned in an out parameters.  In the case of Indirection and
24828         AddressOf, we want to perform the full tests.
24829
24830 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
24831
24832         * statement.cs (Statement.Emit): Flag dead code.
24833
24834 2002-07-27  Andrew Birkett  <andy@nobugs.org>
24835
24836         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
24837
24838 2002-07-27  Martin Baulig  <martin@gnome.org>
24839
24840         * class.cs (MethodData.Define): Put back call to
24841         TypeManager.AddMethod(), accidentally commented this out.
24842
24843         * report.cs (Debug): New public method to print debugging information,
24844         this is `[Conditional ("DEBUG")]'.
24845
24846 2002-07-26  Martin Baulig  <martin@gnome.org>
24847
24848         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
24849         (switch_statement): Push the current_block to the switch_stack and
24850         pop it again when we're done with the switch.
24851         (switch_section): The new block is a child of the current_block.
24852         Fixes bug #24007, added test-152.cs.
24853
24854 2002-07-27  Martin Baulig  <martin@gnome.org>
24855
24856         * expression.cs (Invocation.EmitArguments): When calling a varargs
24857         function with only its fixed arguments, we need to pass an empty
24858         array.
24859
24860 2002-07-27  Martin Baulig  <martin@gnome.org>
24861
24862         Mono 0.13 has been released.
24863
24864 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
24865
24866         * driver.cs: Rename --resource to --linkres, because that is what
24867         we do currently, we dont support --resource yet.
24868
24869         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
24870
24871 2002-07-25  Martin Baulig  <martin@gnome.org>
24872
24873         * class.cs (MethodData): New public class.  This is a `method builder'
24874         class for a method or one accessor of a Property/Indexer/Event.
24875         (MethodData.GetMethodFlags): Moved here from MemberBase.
24876         (MethodData.ApplyAttributes): Likewise.
24877         (MethodData.ApplyObsoleteAttribute): Likewise.
24878         (MethodData.ApplyConditionalAttribute): Likewise.
24879         (MethodData.ApplyDllImportAttribute): Likewise.
24880         (MethodData.CheckAbstractAndExternal): Likewise.
24881         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
24882         (MethodData.Emit): Formerly known as Method.Emit().
24883         (MemberBase): Moved everything which was specific to a single
24884         accessor/method to MethodData.
24885         (Method): Create a new MethodData and call Define() and Emit() on it.
24886         (Property, Indexer, Event): Create a new MethodData objects for each
24887         accessor and call Define() and Emit() on them.
24888
24889 2002-07-25  Martin Baulig  <martin@gnome.org>
24890
24891         Made MethodCore derive from MemberBase to reuse the code from there.
24892         MemberBase now also checks for attributes.
24893
24894         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
24895         (MemberBase.GetMethodFlags): Moved here from class Method and marked
24896         as virtual.
24897         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
24898         `CallingConventions cc' and `Attributes opt_attrs' arguments.
24899         (MemberBase.ApplyAttributes): New virtual method; applies the
24900         attributes to a method or accessor.
24901         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
24902         (MemberBase.ApplyConditionalAttribute): Likewise.
24903         (MemberBase.ApplyDllImportAttribute): Likewise.
24904         (MemberBase.CheckAbstractAndExternal): Likewise.
24905         (MethodCore.ParameterTypes): This is now a property instead of a
24906         method, it's initialized from DoDefineParameters().
24907         (MethodCore.ParameterInfo): Removed the set accessor.
24908         (MethodCore.DoDefineParameters): New protected virtual method to
24909         initialize ParameterTypes and ParameterInfo.
24910         (Method.GetReturnType): We can now simply return the MemberType.
24911         (Method.GetMethodFlags): Override the MemberBase version and add
24912         the conditional flags.
24913         (Method.CheckBase): Moved some code from Define() here, call
24914         DoDefineParameters() here.
24915         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
24916         here to avoid some larger code duplication.
24917         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
24918         ensure that abstract and external accessors don't declare a body.
24919
24920         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
24921         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
24922         lookup in the attribute's parent classes, so we need to abort as soon
24923         as we found the first match.
24924         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
24925         the attribute has no arguments.
24926
24927         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
24928         of a Method.
24929
24930 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24931
24932         * cs-parser.jay: reverted previous patch.
24933
24934 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24935
24936         * cs-parser.jay: fixed bug #22119.
24937
24938 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24939
24940         * attribute.cs: fixed compilation. The error was:
24941         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
24942         be assigned to before control leaves the current method."
24943         [FIXME:  Filed as bug #28186: MCS must report this error.]
24944
24945 2002-07-25  Martin Baulig  <martin@gnome.org>
24946
24947         * attribute.cs (Attribute.Conditional_GetConditionName): New static
24948         method to pull the condition name ouf of a Conditional attribute.
24949         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
24950         the obsolete message and error flag out of an Obsolete attribute.
24951
24952         * class.cs (Method.GetMethodFlags): New public method to get the
24953         TypeManager.MethodFlags for this method.
24954         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
24955         private methods.
24956         (Method.Define): Get and apply the Obsolete and Conditional attributes;
24957         if we're overriding a virtual function, set the new private variable
24958         `parent_method'; call the new TypeManager.AddMethod().
24959
24960         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
24961         the MethodBuilder and the Method in a PtrHashtable.
24962         (TypeManager.builder_to_method): Added for this purpose.
24963         (TypeManager.MethodFlags): Added IsObsoleteError.
24964         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
24965         Obsolete and Conditional arguments in MethodBuilders.  If we discover
24966         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
24967         the message from the attribute.
24968
24969 2002-07-24  Martin Baulig  <martin@gnome.org>
24970
24971         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
24972         preprocessor directives, ensure that the argument to #define/#undef is
24973         exactly one identifier and that it's actually an identifier.
24974
24975         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
24976         did not work ....
24977
24978 2002-07-24  Martin Baulig  <martin@gnome.org>
24979
24980         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
24981         initialize it to TypeManager.object_type in the constructor.
24982         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
24983         of the `hm.get_current' method if we're using the collection pattern.
24984         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
24985         for the explicit conversion to make it work when we're using the collection
24986         pattern and the `Current' property has a different return type than `object'.
24987         Fixes #27713.
24988
24989 2002-07-24  Martin Baulig  <martin@gnome.org>
24990
24991         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
24992         does not match, but don't report any errors.  This method is called in
24993         order for all methods in a MethodGroupExpr until a matching method is
24994         found, so we don't want to bail out if the first method doesn't match.
24995         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
24996         matches, report the 123.  Fixes #28070.
24997
24998 2002-07-24  Martin Baulig  <martin@gnome.org>
24999
25000         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25001         TypeManager.TypeToCoreType() to the top of the method so the
25002         following equality checks will work.  Fixes #28107.
25003
25004 2002-07-24  Martin Baulig  <martin@gnome.org>
25005
25006         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25007         operand is of type uint, and the other operand is of type sbyte,
25008         short or int, the operands are converted to type long." -
25009         Actually do what this comment already told us.  Fixes bug #28106,
25010         added test-150.cs.
25011
25012 2002-07-24  Martin Baulig  <martin@gnome.org>
25013
25014         * class.cs (MethodBase): New abstract class.  This is now a base
25015         class for Property, Indexer and Event to avoid some code duplication
25016         in their Define() and DefineMethods() methods.
25017         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25018         generic methods for Define() and DefineMethods().
25019         (FieldBase): Derive from MemberBase, not MemberCore.
25020         (Property): Derive from MemberBase, not MemberCore.
25021         (Property.DefineMethod): Moved all the code from this method to the
25022         new MethodBase.DefineAccessor(), just call it with appropriate
25023         argumetnts.
25024         (Property.Define): Call the new Property.DoDefine(), this does some
25025         sanity checks and we don't need to duplicate the code everywhere.
25026         (Event): Derive from MemberBase, not MemberCore.
25027         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25028         accessors, this will also make them work with interface events.
25029         (Indexer): Derive from MemberBase, not MemberCore.
25030         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25031         (Indexer.Define): Use the new MethodBase functions.
25032
25033         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25034         argument to the constructor.
25035         (Interface.FindMembers): Added support for interface events.
25036         (Interface.PopluateEvent): Implemented.
25037
25038         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25039
25040 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25041
25042         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25043         but this is required to check for a method name being the same as
25044         the containing class.  
25045
25046         Handle this now.
25047
25048 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25049
25050         * interface.cs: initialize variable.
25051
25052 2002-07-23  Martin Baulig  <martin@gnome.org>
25053
25054         Implemented the IndexerName attribute in interfaces.
25055
25056         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25057         name if this is an explicit interface implementation.
25058         (Indexer.InterfaceIndexerName): New public variable.  If we're
25059         implementing an interface indexer, this is the IndexerName in that
25060         interface.  Otherwise, it's the IndexerName.
25061         (Indexer.DefineMethod): If we're implementing interface indexer,
25062         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25063         and Pending.ImplementIndexer methods.
25064         (Indexer.Define): Also define the PropertyBuilder if we're
25065         implementing an interface indexer and this is neither an explicit
25066         interface implementation nor do the IndexerName match the one in
25067         the interface.
25068
25069         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25070         If a method is defined here, then we always need to create a proxy
25071         for it.  This is used when implementing interface indexers.
25072         (Pending.IsInterfaceIndexer): New public method.
25073         (Pending.ImplementIndexer): New public method.
25074         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25075         This is used when implementing interface indexers to define a proxy
25076         if necessary.
25077         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25078         define a proxy if necessary.
25079
25080         * interface.cs (Interface.IndexerName): New public variable.
25081         (Interface.PopulateIndexer): Set the IndexerName.
25082         (Interface.DefineIndexers): New private method.  Populate all the
25083         indexers and make sure their IndexerNames match.
25084
25085         * typemanager.cs (IndexerPropertyName): Added support for interface
25086         indexers.
25087
25088 2002-07-22  Martin Baulig  <martin@gnome.org>
25089
25090         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25091         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25092         ret if HasReturnLabel.
25093         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25094         variables.
25095
25096         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25097         and set the ec.LoopBeginTryCatchLevel.
25098         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25099         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25100         the current ec.TryCatchLevel, the branch goes out of an exception
25101         block.  In this case, we need to use Leave and not Br.
25102
25103 2002-07-22  Martin Baulig  <martin@gnome.org>
25104
25105         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25106         block unless the block does not always return or it is contained in
25107         another try { ... } catch { ... } block.  Fixes bug #26506.
25108         Added verify-1.cs to the test suite.
25109
25110 2002-07-22  Martin Baulig  <martin@gnome.org>
25111
25112         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25113         then we do not always return.  Fixes bug #24985.
25114
25115 2002-07-22  Martin Baulig  <martin@gnome.org>
25116
25117         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25118         lookup on a per-class level; ie. walk up the class hierarchy until we
25119         found at least one applicable method, then choose the best among them.
25120         Fixes bug #24463 and test-29.cs.
25121
25122 2002-07-22  Martin Baulig  <martin@gnome.org>
25123
25124         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25125         return types of the methods.  The return type is not part of the
25126         signature and we must not check it to make the `new' modifier work.
25127         Fixes bug #27999, also added test-147.cs.
25128         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25129
25130         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25131         on the method's return type.
25132
25133 2002-07-21  Martin Baulig  <martin@gnome.org>
25134
25135         * assign.cs: Make this work if the rightmost source is a constant and
25136         we need to do an implicit type conversion.  Also adding a few more tests
25137         to test-38.cs which should have caught this.
25138
25139         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25140         target in the makefile for this.  The makefile.gnu is primarily intended
25141         for end-users who don't want to debug the compiler.
25142
25143 2002-07-21  Martin Baulig  <martin@gnome.org>
25144
25145         * assign.cs: Improved the Assign class so it can now handle embedded
25146         assignments (X = Y = Z = something).  As a side-effect this'll now also
25147         consume less local variables.  test-38.cs now passes with MCS, added
25148         a few new test cases to that test.
25149
25150 2002-07-20  Martin Baulig  <martin@gnome.org>
25151
25152         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25153         instructions.  Fixes bug #27977, also added test-146.cs.
25154
25155 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25156
25157         * cs-tokenizer.cs: fixed getHex ().
25158
25159 2002-07-19  Martin Baulig  <martin@gnome.org>
25160
25161         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25162         not Type.GetType() to lookup the array type.  This is needed when
25163         we're constructing an array of a user-defined type.
25164         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25165         single-dimensional arrays, but also for single-dimensial arrays of
25166         type decimal.
25167
25168 2002-07-19  Martin Baulig  <martin@gnome.org>
25169
25170         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25171         this function is called, it's not allowed to share LocalBuilders
25172         among ILGenerators.
25173
25174 2002-07-19  Martin Baulig  <martin@gnome.org>
25175
25176         * expression.cs (Argument.Resolve): Report an error 118 when trying
25177         to pass a type as argument.
25178
25179 2002-07-18  Martin Baulig  <martin@gnome.org>
25180
25181         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25182         Conv_R_Un for the signed `long' type.
25183
25184 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25185
25186         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25187         `expr' for the temporary result, as that will fail if we do
25188         multiple resolves on the same expression.
25189
25190 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25191
25192         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25193         ec.TypeContainer for looking up aliases. 
25194
25195         * class.cs (TypeContainer): Remove LookupAlias from here.
25196
25197         * decl.cs (DeclSpace); Move here.
25198
25199 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25200
25201         * class.cs (FindMembers): Only call filter if the constructor
25202         bulider is not null.
25203
25204         Also handle delegates in `NestedTypes' now.  Now we will perform
25205         type lookups using the standard resolution process.  This also
25206         fixes a bug.
25207
25208         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25209         This uses Expressions (the limited kind that can be parsed by the
25210         tree) instead of strings.
25211
25212         * expression.cs (ComposedCast.ToString): Implement, used to flag
25213         errors since now we have to render expressions.
25214
25215         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25216         FormArrayType. 
25217
25218         * ecore.cs (SimpleName.ToString): ditto.
25219
25220         * cs-parser.jay: Instead of using strings to assemble types, use
25221         Expressions to assemble the type (using SimpleName, ComposedCast,
25222         MemberAccess).  This should fix the type lookups in declarations,
25223         because we were using a different code path for this.
25224
25225         * statement.cs (Block.Resolve): Continue processing statements
25226         even when there is an error.
25227
25228 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25229
25230         * class.cs (Event.Define): Also remove the `remove' method from
25231         the list of pending items.
25232
25233         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25234         generate more compact code. 
25235
25236 2002-07-17  Martin Baulig  <martin@gnome.org>
25237
25238         * const.cs (Const.LookupConstantValue): Add support for constant
25239         `unchecked' and `checked' expressions.
25240         Also adding test case test-140.cs for this.
25241
25242 2002-07-17  Martin Baulig  <martin@gnome.org>
25243
25244         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25245         check whether mi.ReturnType implements the IEnumerator interface; the
25246         `==' and the IsAssignableFrom() will fail in this situation.
25247
25248 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25249
25250         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25251         here too.
25252
25253 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25254
25255         * expression.cs: fixed bug #27811.
25256
25257 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25258
25259         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25260         Molaro: when we are a ref, the value already contains a pointer
25261         value, do not take the address of it.
25262
25263 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25264         * removed mb-parser.jay and mb-tokenizer.cs
25265
25266 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25267
25268         * expression.cs: check against the building corlib void type.
25269
25270 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25271
25272         * ecore.cs: fix for valuetype static readonly fields: when 
25273         initializing them, we need their address, not the address of a copy.
25274
25275 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25276
25277         * typemanager.cs: register also enum_type in corlib.
25278
25279 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25280
25281         * class.cs: allow calling this (but not base) initializers in structs.
25282
25283 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25284
25285         * ecore.cs: make sure we compare against the building base types
25286         in GetTypeSize ().
25287
25288 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25289
25290         * typemanager.cs: fix TypeToCoreType() to handle void and object
25291         (corlib gets no more typerefs after this change).
25292
25293 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25294
25295         * expression.cs (ArrayCreation.EmitArrayArguments): use
25296         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25297
25298         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25299         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25300         array indexes, the runtime actually forbids them.
25301
25302         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25303         for array arguments here.
25304
25305         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25306         instead of the default for ValueTypes.
25307
25308         (New.DoEmit): Use IsValueType instead of
25309         IsSubclassOf (value_type)
25310         (New.DoResolve): ditto.
25311         (Invocation.EmitCall): ditto.
25312
25313         * assign.cs (Assign): ditto.
25314
25315         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25316         Statements *are* currently doing part of their resolution during
25317         Emit.  
25318
25319         Expressions do always resolve during resolve, but statements are
25320         only required to propagate resolution to their children.
25321
25322 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25323
25324         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25325
25326         (LoadAssembly): Do not add the dll if it is already specified
25327
25328         (MainDriver): Add the System directory to the link path at the end,
25329         after all the other -L arguments. 
25330
25331         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
25332         wrong opcode for loading bytes and bools (ldelem.i1 instead of
25333         ldelem.u1) and using the opposite for sbytes.
25334
25335         This fixes Digger, and we can finally run it.
25336
25337         * driver.cs (UnixParseOption): Move the option parsing here.  
25338         (CSCParseOption): Implement CSC-like parsing of options.
25339
25340         We now support both modes of operation, the old Unix way, and the
25341         new CSC-like way.  This should help those who wanted to make cross
25342         platform makefiles.
25343
25344         The only thing broken is that /r:, /reference: and /lib: are not
25345         implemented, because I want to make those have the same semantics
25346         as the CSC compiler has, and kill once and for all the confussion
25347         around this.   Will be doing this tomorrow.
25348
25349         * statement.cs (Unsafe.Resolve): The state is checked during
25350         resolve, not emit, so we have to set the flags for IsUnsfe here.
25351
25352 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25353
25354         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
25355         not catch the Error_ObjectRefRequired in SimpleName (as it is
25356         possible to have a class/instance variable name that later gets
25357         deambiguated), we have to check this here.      
25358
25359 2002-07-10  Ravi Pratap  <ravi@ximian.com>
25360
25361         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
25362         make static and put into Expression.
25363
25364         (Event.Define): Register the private field of the event with the 
25365         TypeManager so that GetFieldFromEvent can get at it.
25366
25367         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
25368         keep track of the private field associated with an event which
25369         has no accessors.
25370
25371         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
25372         private field.
25373
25374         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
25375
25376 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25377
25378         * expression.cs (Binary.EmitBranchable): this routine emits the
25379         Binary expression in a branchable context.  This basically means:
25380         we need to branch somewhere, not just get the value on the stack.
25381
25382         This works together with Statement.EmitBoolExpression.
25383
25384         * statement.cs (Statement.EmitBoolExpression): Use
25385         EmitBranchable. 
25386
25387 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
25388
25389         * statement.cs (For): Reduce the number of jumps in loops.
25390
25391         (For): Implement loop inversion for the For statement.
25392
25393         (Break): We can be breaking out of a Try/Catch controlled section
25394         (foreach might have an implicit try/catch clause), so we need to
25395         use Leave instead of Br.
25396
25397         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25398         now).  If the instace expression supports IMemoryLocation, we use
25399         the AddressOf method from the IMemoryLocation to extract the
25400         address instead of emitting the instance.
25401
25402         This showed up with `This', as we were emitting the instance
25403         always (Emit) instead of the Address of This.  Particularly
25404         interesting when This is a value type, as we dont want the Emit
25405         effect (which was to load the object).
25406
25407 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25408
25409         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25410
25411         * statement.cs (Checked): Set the CheckedState during the resolve
25412         process too, as the ConvCast operations track the checked state on
25413         the resolve process, and not emit.
25414
25415         * cs-parser.jay (namespace_member_declaration): Flag that we have
25416         found a declaration when we do.  This is used to flag error 1529
25417
25418         * driver.cs: Report ok when we display the help only.
25419
25420 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25421
25422         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25423
25424 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25425
25426         * cs-tokenizer.cs (define): We also have to track locally the
25427         defines.  AllDefines is just used for the Conditional Attribute,
25428         but we also need the local defines for the current source code. 
25429
25430 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25431
25432         * statement.cs (While, For, Do): These loops can exit through a
25433         Break statement, use this information to tell whether the
25434         statement is the last piece of code.
25435
25436         (Break): Flag that we break.
25437
25438         * codegen.cs (EmitContexts): New `Breaks' state variable.
25439
25440 2002-07-03  Martin Baulig  <martin@gnome.org>
25441
25442         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25443         modifiers in method declarations in structs.  Otherwise, you won't
25444         be able to override things like Object.Equals().
25445
25446 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25447
25448         * class.cs (Method, Property, Indexer): Do not allow the public
25449         modifier to be used in explicit interface implementations.
25450
25451         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25452         override modifiers in method declarations in structs
25453
25454 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25455
25456         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25457         integer or real overflow, report an error
25458
25459 2002-07-02  Martin Baulig  <martin@gnome.org>
25460
25461         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25462         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25463         to tell the runtime about our newly created System.Object and
25464         System.ValueType types.
25465
25466 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25467
25468         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25469         struct instead of Ldarg/Starg.
25470
25471 2002-07-02  Martin Baulig  <martin@gnome.org>
25472
25473         * expression.cs (Indirection.Indirection): Call
25474         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25475
25476 2002-07-02  Martin Baulig  <martin@gnome.org>
25477
25478         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25479         ValueType, call TypeManager.TypeToCoreType() on it.
25480         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25481         the OpCodes.Newarr argument.
25482
25483 2002-07-02  Martin Baulig  <martin@gnome.org>
25484
25485         * expression.cs (Invocation.EmitCall): When compiling corlib,
25486         replace all calls to the system's System.Array type to calls to
25487         the newly created one.
25488
25489         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25490         System.Array methods.
25491         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25492         from the system's System.Array type which must be replaced.
25493
25494 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25495
25496         * typemanager.cs: load unverifiable_code_ctor so we can build
25497         corlib using the correct type. Avoid using GetTypeCode() with
25498         TypeBuilders.
25499         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25500         TypeManager.object_type to allow building corlib.
25501
25502 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25503
25504         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25505
25506 2002-07-01  Martin Baulig  <martin@gnome.org>
25507
25508         * class.cs: Make the last change actually work, we need to check
25509         whether `ifaces != null' to avoid a crash.
25510
25511 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25512
25513         * class.cs: when we build structs without fields that implement
25514         interfaces, we need to add the interfaces separately, since there is
25515         no API to both set the size and add the interfaces at type creation
25516         time.
25517
25518 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25519
25520         * expression.cs: the dimension arguments to the array constructors
25521         need to be converted if they are a long.
25522
25523 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25524
25525         * class.cs: don't emit ldarg.0 if there is no parent constructor
25526         (fixes showstopper for corlib).
25527
25528 2002-06-29  Martin Baulig  <martin@gnome.org>
25529
25530         MCS now compiles corlib on GNU/Linux :-)
25531
25532         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25533         ie. check for MethodImplOptions.InternalCall.
25534
25535         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25536         and TypeManager.attribute_type are null, so we must explicitly check
25537         whether parent is not null to find out whether it's an attribute type.
25538         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25539         and SetBuilder, not only if the property is neither abstract nor external.
25540         This is necessary to set the MethodImplOptions on the accessor methods.
25541         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25542         SetBuilder, see Property.Emit().
25543
25544         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25545         populate "System.Object", "System.ValueType" and "System.Attribute" since
25546         they've already been populated from BootCorlib_PopulateCoreTypes().
25547
25548 2002-06-29  Martin Baulig  <martin@gnome.org>
25549
25550         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
25551         is the NullLiteral, we also need to make sure that target_type is not
25552         an enum type.   
25553
25554 2002-06-29  Martin Baulig  <martin@gnome.org>
25555
25556         * rootcontext.cs (RootContext.ResolveCore): We must initialize
25557         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
25558         before calling BootstrapCorlib_ResolveDelegate ().
25559
25560 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25561
25562         * statement.cs: fixed build-breaker. All tests passed ok.
25563
25564 2002-06-27  Martin Baulig  <martin@gnome.org>
25565
25566         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
25567         for System.Decimal when compiling corlib.
25568
25569 2002-06-27  Martin Baulig  <martin@gnome.org>
25570
25571         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
25572         switch blocks which contain nothing but a default clause.
25573
25574 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
25575
25576        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
25577
25578 2002-06-27  Martin Baulig  <martin@gnome.org>
25579
25580         * ecore.cs (PropertyExpr.PropertyExpr): Call
25581         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
25582
25583         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
25584         is already a TypeBuilder.
25585
25586 2002-06-27  Martin Baulig  <martin@gnome.org>
25587
25588         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
25589         `target_type == TypeManager.array_type', not IsAssignableFrom() in
25590         the "from an array-type to System.Array" case.  This makes it work
25591         when compiling corlib.
25592
25593 2002-06-27  Martin Baulig  <martin@gnome.org>
25594
25595         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
25596         non-static PropertyExpr, set its InstanceExpression.  This makes
25597         the `ICollection.Count' property work in System/Array.cs.
25598
25599 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
25600
25601         * driver.cs: Made error handling more consistent.  Errors now
25602         tracked by Report class, so many methods which used to return int
25603         now return void.  Main() now prints success/failure and 
25604         errors/warnings message.
25605
25606         Renamed '--probe' compiler argument to '--expect-error'.  Removed
25607         the magic number return values (123 and 124).  Now, if the
25608         expected error occurs, the compiler exits with success (exit value
25609         0).  If the compilation completes without seeing that particular
25610         error, the compiler exits with failure (exit value 1).  The
25611         makefile in mcs/errors has been changed to handle the new behaviour.
25612
25613         * report.cs: Made 'expected error' number a property and renamed
25614         it from 'Probe' to 'ExpectedError'.
25615
25616         * genericparser.cs: Removed error handling support, since it is
25617         now all done by Report class.
25618
25619         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
25620         class, so parse() no longer returns an int.
25621
25622         * namespace.cs: Use Report.Error instead of GenericParser.error
25623
25624 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
25625
25626         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
25627         TypeContainer.AddOperator): At the front of the list put the
25628         explicit implementations, so they get resolved/defined first. 
25629
25630 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
25631
25632         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
25633         interface type is implemented by this TypeContainer.  Used during
25634         explicit interface implementation.
25635
25636         (Property.Define, Indexer.Define, Method.Define): Validate that
25637         the given interface in the explicit implementation is one of the
25638         base classes for the containing type.
25639
25640         Also if we are explicitly implementing an interface, but there is
25641         no match in the pending implementation table, report an error.
25642
25643         (Property.Define): Only define the property if we are
25644         not explicitly implementing a property from an interface.  Use the
25645         correct name also for those properties (the same CSC uses,
25646         although that is really not needed).
25647
25648         (Property.Emit): Do not emit attributes for explicitly implemented
25649         properties, as there is no TypeBuilder.
25650
25651         (Indexer.Emit): ditto.
25652
25653         Hiding then means that we do not really *implement* a pending
25654         implementation, which makes code fail.
25655
25656 2002-06-22  Martin Baulig  <martin@gnome.org>
25657
25658         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
25659         the return value of Object.GetType().  [FIXME: we need to do this whenever
25660         we get a type back from the reflection library].
25661
25662 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
25663
25664         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
25665
25666 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
25667
25668         * attribute.cs: Return null if we can not look up the type.
25669
25670         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
25671         the interface types found.
25672
25673         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
25674         interface types found.
25675
25676         * typemanager.cs (GetInterfaces): Make this routine returns alll
25677         the interfaces and work around the lame differences between
25678         System.Type and System.Reflection.Emit.TypeBuilder in the results
25679         result for GetInterfaces.
25680
25681         (ExpandInterfaces): Given an array of interface types, expand and
25682         eliminate repeated ocurrences of an interface.  This expands in
25683         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
25684         be IA, IB, IC.
25685
25686 2002-06-21  Martin Baulig  <martin@gnome.org>
25687
25688         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
25689         on System.Enum.
25690
25691 2002-06-21  Martin Baulig  <martin@gnome.org>
25692
25693         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
25694         and called with one of the core types, return the corresponding typebuilder for
25695         that type.
25696
25697         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
25698         element type.
25699
25700 2002-06-21  Martin Baulig  <martin@gnome.org>
25701
25702         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
25703         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
25704         (Expression.ConvertReferenceExplicit): Likewise.
25705
25706         * expression.cs (ElementAccess.DoResolve): Likewise.
25707         (ElementAccess.DoResolveLValue): Likewise.
25708
25709 2002-06-10  Martin Baulig  <martin@gnome.org>
25710
25711         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
25712         add the "value" parameter to the parameter list.
25713
25714         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
25715         to our caller.
25716
25717 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
25718
25719         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
25720         the argument to an int, uint, long or ulong, per the spec.  Also
25721         catch negative constants in array creation.
25722
25723 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
25724
25725         * class.cs: do not allow the same interface to appear twice in
25726         the definition list.
25727
25728 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
25729
25730         * ecore.cs: don't use ldlen with System.Array.
25731
25732 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
25733
25734         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
25735
25736 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
25737
25738         * modifiers.cs: produce correct field attributes for protected
25739         internal. Easy fix so miguel can work on ther harder stuff:-)
25740
25741 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
25742
25743         * pending.cs: New file.  Move the code from class.cs here.
25744         Support clearning the pending flag for all methods (when not doing
25745         explicit interface implementation).
25746
25747 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
25748
25749         * rootcontext.cs: added a couple more types needed to bootstrap.
25750
25751 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
25752
25753         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
25754         constructor in the type, instead of any constructor in the type
25755         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
25756         a bug in the Mono runtime when applying the params attribute). 
25757
25758 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
25759         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
25760
25761 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
25762
25763         * expression.cs (Unary.ResolveOperator): Use TypeManager
25764         to resolve the type.
25765
25766 2002-06-13  Ravi Pratap  <ravi@ximian.com>
25767
25768         * cs-parser.jay (enum_member_declaration): Pass in the attributes
25769         attached.
25770
25771         * enum.cs (AddEnumMember): Add support to store the attributes associated 
25772         with each member too.
25773
25774         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
25775         field builders too - this takes care of the enum member case.
25776
25777 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
25778
25779         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
25780         address-of operator on both value types and pointers.
25781
25782 2002-06-10  Martin Baulig  <martin@gnome.org>
25783
25784         * interface.cs (Interface.PopulateIndexer): Add the indexer's
25785         PropertyBuilder to the `property_builders' list.
25786
25787         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
25788         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
25789         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
25790         find any indexers which are inherited from an interface.
25791
25792 2002-06-09  Martin Baulig  <martin@gnome.org>
25793
25794         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
25795         the same type as the constant if necessary.  There's also a test-130.cs
25796         for this.
25797
25798         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
25799
25800         * typemanager.cs (TypeManager.ChangeType): Previously known as
25801         Enum.ChangeEnumType().
25802
25803 2002-06-09  Martin Baulig  <martin@gnome.org>
25804
25805         * expression.cs (Cast.TryReduce): Added support for consts.
25806
25807 2002-06-08  Ravi Pratap  <ravi@ximian.com>
25808
25809         * class.cs (Accessor): Hold attributes information so we can pass
25810         it along.
25811
25812         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
25813         Modify to pass in attributes attached to the methods.
25814
25815         (add_accessor_declaration, remove_accessor_declaration): Ditto.
25816
25817         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
25818         to handle the Accessor kind :-)
25819
25820         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
25821
25822 2002-06-08  Martin Baulig  <martin@gnome.org>
25823
25824         * expression.cs (Unary.TryReduceNegative): Added support for
25825         ULongConstants.
25826
25827 2002-06-08  Martin Baulig  <martin@gnome.org>
25828
25829         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
25830         name can't be found in the `defined_names' - the caller will do a
25831         MemberLookup in this case and thus find methods in System.Enum
25832         such as Enum.IsDefined().
25833
25834 2002-06-08  Martin Baulig  <martin@gnome.org>
25835
25836         * enum.cs (Enum.ChangeEnumType): This is a custom version of
25837         Convert.ChangeType() which works with TypeBuilder created types.
25838         (Enum.LookupEnumValue, Enum.Define): Use it here.
25839
25840         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
25841         `TypeBuilder.BaseType != null' check.
25842         (TypeContainer.FindMembers): Only lookup parent members if we
25843         actually have a parent.
25844         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
25845         (ConstructorInitializer.Resolve): Likewise.
25846
25847         * interface.cs (Interface.FindMembers): Added
25848         `TypeBuilder.BaseType != null' check.
25849
25850         * rootcontext.cs (RootContext.ResolveCore): Added
25851         "System.Runtime.CompilerServices.IndexerNameAttribute" to
25852         classes_second_stage.
25853
25854         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
25855         debug_type and trace_type when compiling with --nostdlib.       
25856
25857 2002-06-07  Martin Baulig  <martin@gnome.org>
25858
25859         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
25860         (AddField): Set it to true when adding a non-static field.
25861         (DefineType): Use `have_nonstatic_fields' to find out whether we
25862         have non-static fields, not `Fields != null'.
25863
25864 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
25865
25866         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
25867         dereferencing a null on the static-field code path)
25868
25869 2002-05-30  Martin Baulig  <martin@gnome.org>
25870
25871         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
25872         to take command line arguments.  Use reflection to call the new
25873         custom `Initialize' function on the symbol writer and pass it the
25874         command line arguments.
25875
25876         * driver.cs (--debug-args): New command line argument to pass command
25877         line arguments to the symbol writer.
25878
25879 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
25880
25881         * assign.cs (DoResolve): Forgot to do the implicit conversion to
25882         the target type for indexers and properties.  Thanks to Joe for
25883         catching this.
25884
25885 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
25886
25887         * typemanager.cs (MethodFlags): returns the method flags
25888         (Obsolete/ShouldIgnore) that control warning emission and whether
25889         the invocation should be made, or ignored. 
25890
25891         * expression.cs (Invocation.Emit): Remove previous hack, we should
25892         not do this on matching a base type, we should do this based on an attribute
25893
25894         Only emit calls to System.Diagnostics.Debug and
25895         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
25896         on the command line.
25897
25898         * rootcontext.cs: Global settings for tracing and debugging.
25899
25900         * cs-tokenizer.cs (define): New utility function to track
25901         defines.   Set the global settings for TRACE and DEBUG if found.
25902
25903 2002-05-25  Ravi Pratap  <ravi@ximian.com>
25904
25905         * interface.cs (Populate*): Pass in the TypeContainer as well as
25906         the DeclSpace as parameters so that we can create EmitContexts and
25907         then use that to apply attributes etc.
25908
25909         (PopulateMethod, PopulateEvent, PopulateProperty)
25910         (PopulateIndexer): Apply attributes everywhere.
25911
25912         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
25913         etc.
25914
25915         (ApplyAttributes): Update accordingly.
25916
25917         We now apply interface attributes for all members too.
25918
25919 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
25920
25921         * class.cs (Indexer.Define); Correctly check if we are explicit
25922         implementation (instead of checking the Name for a ".", we
25923         directly look up if the InterfaceType was specified).
25924
25925         Delay the creation of the PropertyBuilder.
25926
25927         Only create the PropertyBuilder if we are not an explicit
25928         interface implementation.   This means that explicit interface
25929         implementation members do not participate in regular function
25930         lookups, and hence fixes another major ambiguity problem in
25931         overload resolution (that was the visible effect).
25932
25933         (DefineMethod): Return whether we are doing an interface
25934         implementation. 
25935
25936         * typemanager.cs: Temporary hack until we get attributes in
25937         interfaces (Ravi is working on that) and we get IndexerName
25938         support in interfaces.
25939
25940         * interface.cs: Register the indexers as properties.
25941
25942         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
25943         warning, I have verified that this is a bug in the .NET runtime
25944         (JavaScript suffers of the same problem).
25945
25946         * typemanager.cs (MemberLookup): When looking up members for
25947         interfaces, the parent of an interface is the implicit
25948         System.Object (so we succeed in searches of Object methods in an
25949         interface method invocation.  Example:  IEnumerable x;  x.ToString
25950         ()) 
25951
25952 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
25953
25954         * class.cs (Event): Events should also register if they do
25955         implement the methods that an interface requires.
25956
25957         * typemanager.cs (MemberLookup); use the new GetInterfaces
25958         method. 
25959
25960         (GetInterfaces): The code used to lookup interfaces for a type is
25961         used in more than one place, factor it here. 
25962
25963         * driver.cs: Track the errors at the bottom of the file, we kept
25964         on going.
25965
25966         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
25967         instance if the method we are calling is static!
25968
25969 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
25970
25971         * attribute.cs (ApplyAttributes): Make this function filter out
25972         the IndexerName attribute (as that attribute in reality is never
25973         applied) and return the string constant for the IndexerName
25974         attribute. 
25975
25976         * class.cs (TypeContainer.Emit): Validate that all the indexers
25977         have the same IndexerName attribute, and if so, set the
25978         DefaultName attribute on the class. 
25979
25980         * typemanager.cs: The return value might contain other stuff (not
25981         only methods).  For instance, consider a method with an "Item"
25982         property and an Item method.
25983
25984         * class.cs: If there is a problem with the parameter types,
25985         return. 
25986
25987 2002-05-24  Ravi Pratap  <ravi@ximian.com>
25988
25989         * ecore.cs (ImplicitConversionExists): Wrapper function which also
25990         looks at user defined conversion after making a call to 
25991         StandardConversionExists - we need this for overload resolution.
25992
25993         * expression.cs : Update accordingly the various method calls.
25994
25995         This fixes 2 bugs filed against implicit user defined conversions 
25996
25997 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
25998
25999         * statement.cs: Track the result of the assignment.
26000
26001 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26002
26003         * expression.cs (MemberAccess): Improved error reporting for
26004         inaccessible members.
26005
26006 2002-05-22  Martin Baulig  <martin@gnome.org>
26007
26008         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26009         itself with debugging support.
26010
26011 2002-05-22  Martin Baulig  <martin@gnome.org>
26012
26013         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26014         Removed, this isn't needed anymore.
26015
26016 2002-05-20  Martin Baulig  <martin@gnome.org>
26017
26018         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26019         be underlying type for an enum.
26020
26021 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26022
26023         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26024         that splits out the loading of just the core types.
26025
26026         * rootcontext.cs (ResolveCore): Split the struct resolution in
26027         two, so we can load the enumeration underlying types before any
26028         enums are used.
26029
26030         * expression.cs (Is): Bandaid until we fix properly Switch (see
26031         bug #24985 for details).
26032
26033         * typemanager.cs (ImplementsInterface): The hashtable will contain
26034         a null if there are no interfaces implemented.
26035
26036 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26037
26038         * cs-parser.jay (indexer_declarator): It is fine to have array
26039         parameters
26040
26041 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26042
26043         * typemanager.cs: (RegisterBuilder): New function used to register
26044         TypeBuilders that implement interfaces.  Since
26045         TypeBuilder.GetInterfaces (as usual) does not work with lame
26046         Reflection.Emit. 
26047         (AddUserType): register interfaces.
26048
26049         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26050         dealing with TypeBuilder.  Also, arrays are showing up as
26051         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26052         methods can not be invoked on them!
26053
26054         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26055         (ImplicitReferenceConversionExists): Split out from
26056         StandardConversionExists. 
26057
26058         * expression.cs (As): We were only implementing one of the three
26059         cases for the as operator.  We now implement them all.
26060         (Is): Implement the various other cases for Is as well.
26061
26062         * typemanager.cs (CACHE): New define used to control if we want or
26063         not the FindMembers cache.  Seems to have a negative impact on
26064         performance currently
26065
26066         (MemberLookup): Nested types have full acess to
26067         enclosing type members
26068
26069         Remove code that coped with instance/static returns for events, we
26070         now catch this in RealFindMembers.
26071
26072         (RealFindMembers): only perform static lookup if the instance
26073         lookup did not return a type or an event.  
26074
26075 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26076
26077         * assign.cs (CompoundAssign): We pass more semantic information
26078         now to Compound Assignments than we did before: now we have all
26079         the information at hand, and now we resolve the target *before* we
26080         do the expression expansion, which allows the "CacheValue" method
26081         to have the effect we intended (before, a [x] += 1 would generate
26082         two differen ArrayAccess expressions from the ElementAccess,
26083         during the resolution process).
26084
26085         (CompoundAssign.DoResolve): Resolve target and original_source here.
26086
26087 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26088
26089         * expression.cs (ArrayAccess): dropped debugging information. 
26090
26091         * typemanager.cs: Small bug fix: I was always returning i_members,
26092         instead of one of i_members or s_members (depending on which had
26093         the content).
26094
26095         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26096         method is invoked before any code generation takes place, and it
26097         is a mechanism to inform that the expression will be invoked more
26098         than once, and that the method should use temporary values to
26099         avoid having side effects
26100
26101         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26102
26103         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26104         implementation.
26105
26106         * expression.cs (Indirection, ArrayAccess): Add support for
26107         CacheTemporaries in these two bad boys. 
26108
26109         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26110         ldobj or ldind_ref.  
26111         (StoreFromPtr): Handle stobj as well.
26112
26113         * expression.cs (UnaryMutator): Share more code.
26114
26115         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26116         down: I was not tracking the Filter function as well, which
26117         was affecting the results of the cache.
26118
26119 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26120
26121         * attribute.cs: Remove the hack to handle the CharSet property on
26122         StructLayouts. 
26123
26124 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26125
26126         * attribute.cs (DoResolve): More uglyness, we now only try to
26127         resolve the attribute partially, to extract the CharSet
26128         information (only if we are a StructLayout attribute).  Otherwise 
26129
26130         (GetExtraTypeInfo): Add some code to conditionally kill in the
26131         future this.   I am more and more convinced that the .NET
26132         framework has special code to handle the attribute setting on
26133         certain elements.
26134
26135         * expression.cs (IsParamsMethodApplicable): Revert my previous
26136         foreach change here, it was wrong.
26137
26138 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26139
26140         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26141         (pp_expr): do not abort on unknown input, just return.
26142         (eval): abort if there are pending chars.
26143
26144         * attribute.cs (Attribute.Resolve): Positional parameters are
26145         optional.  Deal with that case.
26146
26147         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26148         the Ansi/Unicode/Auto information for the type.
26149
26150         (TypeContainer.DefineType): instantiate the EmitContext here, as
26151         we will be using it during the type definition (to resolve
26152         attributes) and during the emit phase.
26153
26154         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26155         to pull type information out of the attributes
26156
26157         (Attribute.Resolve): track the constructor builder, and allow for
26158         multiple invocations (structs and classes will use this).
26159
26160         * ecore.cs (MemberLookupFinal): new version with all the
26161         parameters customizable.
26162
26163         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26164         constructors.  Return if the result value is null (as the error
26165         would have been flagged already by MemberLookupFinal)
26166
26167         Do not allow instances of abstract classes or interfaces to be
26168         created.
26169
26170         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26171         We have to compare the assembly property here when dealing with
26172         FamANDAssem and Assembly access modifiers, because we might be
26173         creating an assembly from *modules* (that means that we are not
26174         getting TypeBuilders for types defined in other modules that are
26175         part of this assembly).
26176
26177         (Method.Emit): If the method is marked abstract and has a body,
26178         emit an error. 
26179
26180         (TypeContainer.DefineMembers): If both the defined member and the
26181         parent name match are methods, then do not emit any warnings: let
26182         the Method.Define routine take care of flagging warnings.  But if
26183         there is a mismatch (method overrides something else, or method is
26184         overriwritten by something, then emit warning).
26185
26186         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26187         set to null, this means `do not check for the return type on the
26188         signature'. 
26189
26190         (Method.Define): set the return type for the method signature to
26191         null, so that we get methods with the same name and parameters and
26192         different return types.  This is used to flag warning 114 (you are
26193         hiding a method, and you probably want to use the new/override
26194         keywords instead).
26195
26196         * typemanager.cs (MemberLookup): Implemented proper access
26197         control, closing a long standing set of bug reports.  The problem
26198         was that the Framework only has two bits: Public and NonPublic,
26199         and NonPublic includes private and protected methods, but we need
26200         to enforce the FamANDAssem, FamOrAssem and Family. 
26201
26202 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26203
26204         * statement.cs (GotoCase): Return true: Ammounts to giving up
26205         knowledge on whether we return or not, and letting the other case
26206         be responsible for it.
26207
26208 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26209
26210         * driver.cs: Do not load directories for each file processed, only
26211         do it if there is a pattern.
26212
26213         * ecore.cs: Report readonly assigns here as well, as we might have
26214         been resolved only by MemberAccess.
26215
26216         (SimpleName.SimpleNameResolve): Also be useful for LValue
26217         resolution.   We need this to propagate assign to local readonly variables
26218
26219         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26220         do not want to reuse potential criteria memory.
26221
26222         * class.cs (MyEventBuilder): Set reflected_type;
26223
26224         * ecore.cs (Constantify): Added support for constifying bools.
26225
26226         (RootContext.LookupType): Added a cache for values looked up in
26227         the declaration space.
26228
26229         * typemanager.cs (FindMembers): Now is a front-end to
26230         RealFindMembers, and provides a two-level hashtable-based cache to
26231         the request.  
26232
26233         15% performance improvement: from 22.5 to 19.2 seconds.
26234
26235         * expression.cs (IsParamsMethodApplicable): use foreach.
26236         (Invocation.DoResolve): ditto.
26237         (New.DoResolve): ditto.
26238         (ArrayCreation.DoResolve): ditto.
26239
26240         * ecore.cs (FindMostEncompassingType): use foreach.
26241
26242         * delegate.cs (NewDelegate.DoResolve): Use foreach
26243
26244         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26245         (RemoveMethods): use foreach.
26246
26247         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26248         nested foreach statements instead of for, and also break out of
26249         the inner loop once a match is found.
26250
26251         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26252
26253 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26254
26255         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26256         we actually unwrap the expression to allow for extra information
26257         to be extracted. 
26258
26259         * expression.cs: Use Shr_Un on unsigned operations. 
26260
26261 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26262
26263         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26264         applicable operators was not being considered correctly. This closes
26265         the bug Miguel reported.
26266
26267 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26268
26269         * attribute.cs: check that the type derives from System.Attribute
26270         and report the correct error in that case (moved the duplicate code to
26271         its own method, too).
26272
26273 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26274
26275         * attribute.cs: lookup attribute type name as the spec says: first the
26276         bare attribute name and then name + "Attribute" (nant compiles with
26277         mcs after this fix).
26278
26279 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26280
26281         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26282         Because of the way we parse things, we should try to see if a
26283         UIntConstant can fit in an integer.
26284
26285 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26286
26287         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26288         when we are in an explicit context.
26289
26290         (ConvertReferenceExplicit): When converting from Iface type S to Class
26291         T make sure the rules are implemented as an OR.
26292
26293         * parameter.cs (ParameterType): Make it a property for now although the
26294         purpose really isn't anything immediate.
26295
26296         * expression.cs (Is*Applicable): Do better checking on the parameter type
26297         of a ref/out parameter. The ones from the system assemblies are already 
26298         marked with the correct type so we don't need to do any correction.
26299
26300         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26301         the object type is standard too so include that.
26302
26303 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26304
26305         * ecore.cs (StandardConversionExists): Augment with missing code:
26306         deal with IntConstant, LongConstants and Enumerations.
26307
26308         * assign.cs: Report the error, instead of failing silently
26309
26310         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26311         typecontainer that they are declared, because the
26312         typecontainer/namespace will have the list of using clauses that
26313         need to be applied.
26314
26315         Assembly Attributes were escaping the normal registration
26316         mechanism. 
26317
26318         (EmitCode): Apply attributes within an EmitContext that represents
26319         the container they were declared on.
26320
26321         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26322
26323 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26324
26325         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26326         Revamp completely - make much cleaner as we now operate only
26327         on a set of Types.
26328
26329         (FindMostSpecificSource, FindMostSpecificTarget): New methods
26330         to implement the logic detailed in the spec more correctly.
26331
26332         (UserDefinedConversion): Update accordingly.
26333
26334 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26335
26336         * statement.cs: Return flow analysis information up.
26337
26338         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
26339         and the default.
26340
26341         (token): Do not consume an extra character before calling
26342         decimal_digits.
26343
26344 2002-05-06  Piers Haken <piersh@friskit.com>
26345
26346         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
26347
26348 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26349
26350         * class.cs (Constructor.Emit): Set the IsStatic flag in the
26351         EmitContext during the instance constructor initializer
26352         resolution, to stop access to instance variables.
26353
26354         This is mandated by the spec, last paragraph of the `constructor
26355         initializers' section. 
26356
26357 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
26358
26359         * cs-parser.jay, class.cs (Accessor): new class used to represent
26360         an accessor (get or set).  In the past we used `null' to represent
26361         a missing accessor.  But this is ambiguous because there was no
26362         way to tell in abstract indexers/properties if one of them was
26363         specified.
26364
26365         Now there is a way of addressing that.
26366
26367         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
26368         instead of FindMembers.
26369
26370         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
26371         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
26372
26373         * attribute.cs: Treat indexers and properties as the same in terms
26374         of applying attributes
26375
26376         * ecore.cs (FindMostEncompassedType): Use statically initialized
26377         EmptyExpressions()s like we do elsewhere to avoid creating useless
26378         objects (and we take this out of the tight loop).
26379
26380         (GetConversionOperators): Move the code to extract the actual
26381         operators to a separate routine to clean things up.
26382
26383 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
26384
26385         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
26386         events are always registered FieldBuilders.
26387
26388         * class.cs (FieldBase): New class shared by Fields 
26389
26390         * delegate.cs: If we are a toplevel delegate, use our full name.
26391         If we are a nested delegate, then only use our tail name.
26392
26393 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26394
26395         * expression.cs (IsApplicable): Ensure that we add the "&" to
26396         ref/out types before comparing it with the type of the argument.
26397
26398         (IsParamsMethodApplicable): Ditto.
26399
26400         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26401         silly me ;-)
26402
26403         * delegate.cs : Handle the case when we have more than one applicable
26404         method. Flag an error only when we finish checking all.
26405
26406 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26407
26408         * expression.cs: Add support for boolean static initializers.
26409
26410 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26411
26412         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26413
26414         * parameter.cs (ComputeParameterTypes,
26415         ComputeAndDefineParameterTypes): Better error handling: now we
26416         clear the `types' cache if we fail during any of the type lookups.
26417         We also return the status code correctly to our caller
26418
26419         * delegate.cs: If we fail to define a delegate, abort the extra
26420         steps. 
26421
26422         * expression.cs (Binary.ResolveOperator): for
26423         operator==(object,object) and operator !=(object, object) we also
26424         have to verify that there is an implicit conversion from one to
26425         the other.
26426
26427         (ArrayAccess.DoResolve): Array Access can operate on
26428         non-variables. 
26429
26430 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26431
26432         * assign.cs (CompoundAssign): A new class used as a "flag" that
26433         the assignment actually is happening as part of a compound
26434         assignment operator.
26435
26436         During compound assignment, a few new rules exist to enable things
26437         like:
26438
26439         byte b |= 1 + 2
26440
26441         From the spec:
26442
26443         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26444         to the type of x) if y is implicitly convertible to the type of x,
26445         and the operator is a builtin operator and the return type of the
26446         operator is explicitly convertible to the type of x. 
26447
26448         * rootcontext.cs: Reset warning level to 2.  4 catches various
26449         "interesting" features in mcs, we must clean this up at some
26450         point, but currently am trying to kill other bugs ;-)
26451
26452         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26453         in container classes as well.  
26454
26455         * expression.cs (Binary.ResolveOperator): Handle string case
26456         before anything else (as operator overloading does emit an error
26457         before doing anything else).
26458
26459         This code could go away when we move to a table driven model, but
26460         i could not come up with a good plan last night.
26461
26462 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26463
26464         * typemanager.cs (CSharpName): reimplementation using regex.
26465         * class.cs: added null check for fields in Emit
26466         * rootcontext.cs: set warninglevel to 4
26467
26468 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26469
26470         * typemanager.cs (CSharpName): reimplemented with Lupus
26471         suggestion.
26472
26473 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26474
26475         * statement.cs (If): correclty implement Resolve, because we were
26476         not catching sem errors in there.  The same process is needed
26477         everywhere else. 
26478         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26479
26480
26481         (Statement.Warning_DeadCodeFound): Factorize code.
26482         (While): Report dead code here too.
26483
26484         (Statement): Added Resolve virtual method to allow
26485         for resolution split from the emit code.
26486
26487 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26488
26489         * statement.cs (EmitBoolExpression): No longer try to resolve the
26490         expression here.    
26491         (MakeBoolean): New utility function that resolve, implicitly
26492         converts to boolean and tags the expression. 
26493
26494
26495         (If, Do): Implement dead code elimination.
26496         (While): Implement loop inversion
26497
26498         (Do, While, For, If): Resolve the expression prior to calling our
26499         code generation.
26500
26501 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26502
26503         * class.cs:
26504           - added method Report28 (warning: program has more than one entry point)
26505           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26506           - modified method Method.Define, the part at the end of the method
26507
26508         * rootcontext.cs: added static public Location EntryPointLocation;
26509           
26510         * ../errors/cs0028.cs : Add test case for the above warning.              
26511
26512         * typemanager.cs:
26513           - modified method CSharpName to allow arrays of primitive type to
26514             be printed nicely (e.g. instead of System.Int32[][] it now prints
26515             int[][])
26516           - added method CSharpSignature: returns the signature of a method
26517             in string format to be used in reporting errors, warnings, etc.
26518
26519         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26520         with String.Empty.
26521
26522 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26523
26524         * delegate.cs (Define): Fix extremely silly bug where I was
26525         setting the type of the 'object' parameter of the BeginInvoke
26526         method to System.IAsyncResult instead of System.Object ;-)
26527
26528 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26529
26530         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26531         here. 
26532
26533         (Constructor.Emit): return if we fail to initialize the
26534         constructor.  Another door closed!  
26535
26536         * expression.cs (New.DoResolve): Improve error message (from -6 to
26537         1501).  Use DeclaredOnly lookup to find the exact constructor.
26538
26539         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26540         loop.  This is useful.
26541
26542         * cs-parser.jay: Adjust the default parameters so that destructors
26543         have the proper signature.
26544
26545 2002-04-26  Martin Baulig  <martin@gnome.org>
26546
26547         * driver.cs (LoadAssembly): If `assembly' contains any characters
26548         which are only valid in path names and not in assembly names
26549         (currently slash, backslash and point), use Assembly.LoadFrom ()
26550         instead of Assembly.Load () on the `assembly' (before iteration
26551         over the link_paths).
26552
26553 2002-04-26  Martin Baulig  <martin@gnome.org>
26554
26555         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
26556
26557 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
26558
26559         * class.cs (Property): use the new typemanager.MemberLookup
26560
26561         (TypeContainer.MemberLookup): Implement using the
26562         TypeManager.MemberLookup now. 
26563
26564         * typemanager.cs: Make MemberLookup a function of the TypeManager,
26565         and return MemberInfos, so that these can be used without an
26566         EmitContext (what we had before).
26567
26568 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
26569
26570         * expression.cs: Fix the case where the argument to params if the
26571         type of the params.  I omitted handling this before.   Fixed
26572
26573 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26574
26575         * driver.cs: Call BootCorlib_PopulateCoreType
26576
26577         * class.cs (Property.CheckBase): Check for properties only, not
26578         for all members. 
26579
26580         * interface.cs: Temporary hack: try/catch around the
26581         CustomAttributeBuilder, because I am getting an exception that I
26582         do not understand.
26583
26584         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
26585         types whose definitions are required to be there (attributes are
26586         defined before standard types).
26587
26588         Compute definitions as we boot the various types, as they are used
26589         immediately (value_type class will need object_type, but if we do
26590         not initialize object_type, we will pass a null, which will let
26591         the runtime pick the System.Object from the existing corlib, which
26592         is not what we want).
26593
26594 2002-04-22  Patrik Torstensson <totte@labs2.com>
26595
26596         * cs-tokenizer.cs: fixed a number of trim() issues.
26597
26598 2002-04-22  Ravi Pratap  <ravi@ximian.com>
26599
26600         * expression.cs (Argument.Type): Ensure that we return the correct
26601         type when we have out or ref parameters [in which case we 
26602         append a "&"].
26603
26604 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26605
26606         * class.cs (Property, Indexer): Allow extern modifier in there. 
26607
26608         * typemanager.cs (InitBaseTypes): Initializes object_type and
26609         value_type, since those will be used early on during the bootstrap
26610         process to compile corlib.
26611
26612         (InitCoreTypes): Move code from here to InitBaseTypes.
26613
26614 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
26615
26616         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
26617         single-dimension arrays as using the ldlen opcode.  
26618
26619         Daniel Lewis discovered this optimization.  
26620
26621         * typemanager.cs: Add signature for System.Array::get_Length
26622
26623 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26624
26625         * statement.cs: report the error when the foreach does not apply to an
26626         array nor a collection.
26627
26628 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
26629
26630         * expression.cs: Add implicit conversions to the operator ~.
26631
26632         * constant.cs (DecimalConstant.Emit): Emit decimal value.
26633
26634         * typemanager.cs: Locate the decimal constructor.
26635
26636 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26637
26638         * attribute.cs: use the new property of TypeOf.
26639         * expression.cs: added 'get' property around typearg.
26640
26641         These changes fix a build breaker reported by NickD. Is this the
26642         correct way to fix?  If not, please, revert my changes and make it
26643         work :-).
26644
26645 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
26646
26647         * attribute.cs: Add support for typeof in attribute invocations.
26648         I am not sure that this is right though.
26649
26650 2002-04-14  Duncan Mak  <duncan@ximian.com>
26651
26652         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
26653         Binary.Operator.Division case.
26654
26655 2002-04-13  Ravi Pratap  <ravi@ximian.com>
26656
26657         * class.cs (DefineType): Ensure that we do a proper check on
26658         attribute types and also register it with the TypeManager.
26659
26660         (TypeContainer.Targets): The default for attribute types is
26661         AttributeTargets.All.
26662
26663         * attribute.cs (ApplyAttributes): Registering the attribute type
26664         is done elsewhere, not when we discover we have a Usage attribute.
26665
26666 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26667
26668         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
26669         and get rid of is_delegate parameter.
26670
26671         * everywhere : update.
26672
26673 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26674
26675         * cs-parser.jay (compilation_unit): Revamp completely to use
26676         some new ideas that I got from Rhys' grammar to solve the problems
26677         with assembly level attributes.
26678
26679         (outer_declaration): New grammar production.
26680
26681         (attribute_sections): Add.
26682
26683         (opt_attributes): Base on attribute_sections
26684
26685         (namespace_declaration): Allow opt_attributes to tackle the case
26686         when we have assembly level attributes - we are clever in this
26687         regard now ;-)
26688
26689         * attribute.cs (ApplyAttributes): Do not worry about assembly 
26690         attributes in the non-global context.
26691
26692         * rootcontext.cs (AddGlobalAttributes): Go back to using this
26693         instead of SetGlobalAttributes.
26694
26695         * class.cs, rootcontext.cs : Ensure we define and generate 
26696         attribute types before anything else.
26697
26698         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
26699         and flag the new error -20 for the case when the attribute type
26700         does not have valid targets specified. csc does not catch this.
26701
26702         * ../errors/errors.txt : update for error # -20
26703
26704 2002-04-11  Ravi Pratap  <ravi@ximian.com>
26705
26706         * support.cs (InternalParameters.ParameterModifier): Do some null
26707         checking and return sane values.
26708
26709         * class.cs (Method.Define): If we are a PInvoke method, ensure
26710         that we are static and extern. Report error # 601
26711
26712         * ../errors/cs0601.cs : Add test case for the above error.
26713
26714 2002-04-07  Ravi Pratap  <ravi@ximian.com>
26715
26716         * rootcontext.cs (attribute_types): We need to keep type of
26717         all attribute types separately and emit code for them first.
26718
26719         (RegisterAttribute) : Implement.
26720
26721         * class.cs (DefineType): Check if the current Type is a custom
26722         attribute type and register it accordingly.
26723
26724         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
26725         adding the first attribute twice and rename to
26726
26727         (SetGlobalAttributes): this.
26728
26729         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
26730         lookups.
26731
26732         * attribute.cs (ApplyAttributes): Take an additional argument telling us
26733         if we are processing global arguments. Hmm, I am unsure of this.
26734
26735 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26736
26737         * expression.cs: added static array of strings to avoid calling
26738         Enum.ToString () for Operator in Binary. Significant recover of
26739         performance.
26740
26741 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
26742
26743         * class.cs (FindMembers): Allow the Builders of the various
26744         members to be null.  If they are skip them.  This only happens
26745         during the PInvoke declaration.
26746
26747 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
26748
26749         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
26750         failure, so we do not keep going afterwards.
26751
26752         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
26753         wanted to pass `false' as the `is_delegate' argument.  If this is
26754         the case, why not use delegate_type == null to mean `is_delegate =
26755         false' and anything else as is_delegate = true.
26756
26757 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
26758
26759         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
26760         code for the section, not the beginning of the tests.
26761
26762 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
26763
26764         * cfold.cs: Handle operator + (Enum x, Underlying x) 
26765
26766         * expression.cs (Binary): same.  Warn about errors where we have
26767         Enum/Enum in operator + as well.
26768
26769 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
26770
26771         * statement.cs:
26772                 - added support for switch(bool)
26773                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
26774                 - add TableSwitchEmit() to handle table-based switch statements
26775
26776 2002-04-05  Ravi Pratap  <ravi@ximian.com>
26777
26778         * expression.cs (Invocation.OverloadResolve): Factor out code which
26779         does parameter compatibility checking with arguments so that we can 
26780         re-use the code even from Delegate.VerifyApplicability
26781
26782         (VerifyArgumentsCompat): Move above code here.
26783
26784         * delegate.cs (VerifyApplicability): Get rid of duplicate code
26785         and instead make a call to the above method.
26786
26787 2002-03-31  Ravi Pratap  <ravi@ximian.com>
26788
26789         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
26790         We use it to keep track of classes which are attribute types.
26791
26792 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
26793
26794         * delegate.cs (Delegate.Define): Correctly define the types in the
26795         presence of fixed and array parameters.
26796
26797         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
26798         doing FindMembers.
26799
26800         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
26801         include NonPublic after the first iteration.
26802
26803         * class.cs (Indexer.CheckBase): Only check if both parents are
26804         non-null. 
26805
26806         * cs-parser.jay (accessor_body): If empty, set to null.
26807
26808         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
26809         same code path here to resolve constants names that we did have in
26810         MemberAccess.DoResolve.  There is too much code duplicated here.
26811
26812 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
26813
26814         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
26815
26816         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
26817         to MakeUnionSet.
26818
26819         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
26820         tokens, numbers and strings.
26821
26822         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
26823         parenthesis.
26824
26825         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
26826         asyncronous parameters and the regular parameters.  
26827
26828         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
26829         specify the target directory.
26830
26831         * expression.cs: (This.DoResolve): Simplify
26832         (As.Emit): Optimize, do not generate IsInst if the expression is
26833         always of the given type.
26834
26835         (Is.DoResolve): Bug fix, we were reporting both always/never for
26836         the is expression.
26837
26838         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
26839         creating too many unnecessary arrays.
26840
26841 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
26842
26843         * class.cs (EmitFieldInitializer): Use Assign expression to assign
26844         fields instead of rolling our own initializer.   Takes care of all
26845         implicit conversions, and drops unnecessary static checks/argument.
26846
26847 2002-03-31  Dick Porter  <dick@ximian.com>
26848
26849         * driver.cs: use the GetDirectories() return values properly, and
26850         use "/" as path separator.
26851
26852 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
26853
26854         * expression.cs (Unary): Optimize - - expr into expr.
26855         (Binary): Optimize a + (-b) into a -b.
26856
26857         * codegen.cs (CodeGen): Made all methods static.
26858
26859 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
26860
26861         * rootcontext.cs: 
26862
26863         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
26864         TypeBuilder property.
26865
26866         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
26867         instead. 
26868
26869         * tree.cs: Removed the various RecordXXXX, and replaced with a
26870         single RecordDecl.  Removed all the accessor methods, and just
26871         left a single access point Type 
26872
26873         * enum.cs: Rename DefineEnum to DefineType.
26874
26875         * decl.cs: New abstract method `DefineType' used to unify the
26876         Defines for Enumerations, Interfaces, TypeContainers and
26877         Delegates.
26878
26879         (FindType): Moved LookupInterfaceOrClass here.  Moved the
26880         LookupBaseClasses method that used to live in class.cs and
26881         interface.cs here, and renamed to FindType.
26882
26883         * delegate.cs: Implement DefineType.  Take advantage of the
26884         refactored pattern for locating the parent builder without taking
26885         the parent_builder argument (which we know does not work if we are
26886         nested, and triggering a toplevel definition).
26887
26888 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26889
26890         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
26891         accessibility of a member has changed during override and report
26892         an error if so.
26893
26894         * class.cs (Method.Define, Property.Define): Only complain on
26895         overrides if the method is private, any other accessibility is
26896         fine (and since we just checked the permission is the same, we are
26897         good to go).
26898
26899         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
26900         and elif are processed always.  The other pre-processing
26901         directives are only processed if we are "taking" the path
26902
26903 2002-03-29  Martin Baulig  <martin@gnome.org>
26904
26905         * class.cs (Method.Emit): Only emit symbolic debugging info if the
26906         current location is not Null.
26907
26908         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
26909         a separate method so we can profile it.
26910
26911         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
26912         `span.Seconds' are just seconds, but no minutes or hours.
26913         (MainDriver): Profile the CodeGen.SaveSymbols calls.
26914
26915 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26916
26917         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
26918         Remove the gratuitous set of Final:
26919
26920                                 // If an interface implementation, then we can set Final.
26921                                 if (((flags & MethodAttributes.Abstract) == 0) &&
26922                                     implementing.DeclaringType.IsInterface)
26923                                         flags |= MethodAttributes.Final;
26924
26925         I do not know what I was smoking when I used that.
26926
26927
26928         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
26929         step into fixing the name resolution issues for delegates and
26930         unifying the toplevel name resolution.
26931
26932 2002-03-28  Martin Baulig  <martin@gnome.org>
26933
26934         * class.cs (Method.Emit): If we have a symbol writer, call its
26935         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
26936         tell it about the current method.
26937
26938         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
26939         writer that we're going to emit the first byte of IL code for a new
26940         statement (a new source line).
26941         (EmitContext.EmitTopBlock): If we have a symbol writer, call
26942         EmitContext.Mark() before emitting any code.
26943
26944         * location.cs (SymbolDocument): Return null when we're Null.
26945
26946         * statement.cs (Statement): Moved the `Location loc' variable here.
26947         (Statement.EmitBoolExpression): If we have a symbol writer, call
26948         ec.Mark() before emitting any code to tell it that we're at the
26949         beginning of a new statement.
26950         (StatementExpression): Added `Location' argument to the constructor.
26951         (Block): Added public readonly variable `StartLocation' and public
26952         variable `EndLocation'.  The latter is to be set using SetEndLocation().
26953         (Block): Added constructor which takes a start and end location.
26954         (Block.SetEndLocation): New method. This sets the end location.
26955         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
26956         local variables we create.
26957         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
26958         each statement and do also mark the begin and end of the block.
26959
26960         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
26961         tell it the current lexer.Location, use Location.Null for the end of the
26962         block.
26963         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
26964         current block, set its end location using SetEndLocation().
26965         (statement_expression): StatementExpression constructor now takes the
26966         lexer.Location as additional argument.
26967         (for_statement, declare_local_variables): Likewise.
26968         (declare_local_variables): When creating a new implicit block, use the
26969         new Block constructor and pass it the lexer.Location.
26970
26971 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26972
26973         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
26974         members also on the parent interfaces recursively.
26975
26976 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
26977
26978         * report.cs: Use new formats, since Gonzalo finished the missing
26979         bits. 
26980
26981         * expression.cs (Binary.ResolveOperator): added missing operator|
26982         operator& and operator^ for bool/bool.
26983
26984         * cs-parser.jay: CheckDef now takes a Location argument that is
26985         used to report errors more precisly (instead of reporting the end
26986         of a definition, we try to track something which is a lot closer
26987         to the source of the problem).
26988
26989         * cs-tokenizer.cs: Track global token use, so we can properly flag
26990         the use of #define/#undef after the first token has been seen.
26991
26992         Also, rename the reportXXXX to Error_DescriptiveName
26993
26994         * decl.cs (DeclSpace.IsTopLevel): Move property here from
26995         TypeContainer, so that Enum and Interface can use this too.
26996
26997         * class.cs (TypeContainer.LookupInterfaceOrClass,
26998         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
26999         `builder' argument.  Typically this was used to pass the parent
27000         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27001         the definition).  
27002
27003         The problem is that a nested class could trigger the definition of
27004         a toplevel class, and the builder would be obviously wrong in that
27005         case. 
27006
27007         So we drop this argument, and we compute dynamically the
27008         TypeBuilder/ModuleBuilder (the correct information was available
27009         to us anyways from DeclSpace.Parent)
27010
27011         * interface.cs (Interface.DefineInterface): Drop builder
27012         parameter cleanup like class.cs
27013
27014         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27015         like class.cs
27016
27017         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27018         values. 
27019
27020         (Try.Emit): Propagate the returns value from the statement.
27021
27022         (Return.Emit): Even if we are leavning 
27023
27024         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27025
27026         * modifiers.cs: Fix the computation of MethodAttributes flags.
27027
27028 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27029
27030         * driver.cs: allow compilation of files that start with '/'.
27031         Add a default case when checking the argument of --target.
27032
27033 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27034
27035         * interface.cs: Implement the same search algorithm for types in
27036         the interface code.
27037
27038         * delegate.cs: Do not allow multiple definition.
27039
27040         * Recovered ChangeLog that got accidentally amputated
27041
27042         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27043
27044         * rootcontext.cs: Load manually enum to allow core classes to
27045         contain enumerations.
27046
27047         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27048         Update to new static methods in TypeManager.
27049
27050         * typemanager.cs (GetMethod, GetConstructor): Use our
27051         implementation of FindMembers to find the members, since during
27052         corlib compilation, the types are TypeBuilders and GetMethod and
27053         GetConstructor do not work.
27054
27055         Make all methods in TypeManager static.
27056
27057         (InitCodeHelpers): Split the functionality from
27058         the InitCodeTypes function.
27059
27060         * driver.cs: Call InitCodeHelpers after we have populated the
27061         types. 
27062
27063         * cs-parser.jay (delegate_declaration): we did not used to compute
27064         the delegate name correctly for void delegates.
27065
27066 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27067
27068         * rootcontext.cs (RootContext): Init the interface_resolve_order
27069         and type_container_resolve_order always.
27070
27071         (ResolveCore, BootstrapCorlib_ResolveClass,
27072         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27073         compiler when compiling with --nostdlib
27074
27075         * class.cs (TypeContainer.DefineType): Check that our parent is
27076         not null.  This test is most important when we are bootstraping
27077         the core types.
27078
27079         * codegen.cs: Split out the symbol writing code.
27080
27081 2002-03-25  Martin Baulig  <martin@gnome.org>
27082
27083         * driver.cs (-g): Made -g an alias for --debug.
27084
27085 2002-03-24  Martin Baulig  <martin@gnome.org>
27086
27087         * codegen.cs (SymbolWriter): New public variable. Returns the
27088         current symbol writer.
27089         (CodeGen): Added `bool want_debugging_support' argument to the
27090          constructor. If true, tell the ModuleBuild that we want debugging
27091         support and ask it for the ISymbolWriter.
27092         (Save): If we have a symbol writer, call it's Close() method after
27093         saving the assembly.
27094
27095         * driver.c (--debug): New command line argument to create a
27096         debugger information file.
27097
27098         * location.cs (SymbolDocument): New public property. Returns an
27099         ISymbolDocumentWriter object for the current source file or null
27100         if we don't have a symbol writer.
27101
27102 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27103
27104         * driver.cs (LoadAssembly): Correctly return when all the paths
27105         have been tried and not before.
27106
27107         * statement.cs (Switch.Emit): return the actual coverage for this
27108         statement (returns/not-returns)
27109
27110         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27111         switch of the statement if we are the last switch section.  That
27112         kills two problems: try/catch problems (we used to emit an empty
27113         nop at the end) and switch statements where all branches would
27114         return. 
27115
27116 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27117
27118         * driver.cs: Add default assemblies (the equivalent to the
27119         Microsoft CSC.RSP file)
27120
27121         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27122         also update tokens_seen and set it to false.
27123
27124         * driver.cs: Implement --recurse for Mike.
27125
27126         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27127         correctly splitting out the paths.
27128
27129 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27130
27131         * interface.cs (Interface.PopulateProperty): Instead of using
27132         `parent' as the declaration space for the set parameters, use
27133         `this' 
27134
27135         * support.cs (InternalParameters): InternalParameters constructor
27136         takes a DeclSpace instead of a TypeContainer.
27137
27138         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27139         types are being initialized, load the address of it before calling
27140         the function.  
27141
27142         (New): Provide a mechanism to disable the generation of local
27143         value type temporaries when the caller will be providing us with
27144         an address to store it.
27145
27146         (ArrayCreation.EmitDynamicInitializers): Use it.
27147
27148 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27149
27150         * expression.cs (Invocation.EmitArguments): Only probe for array
27151         property if there is more than one argument.  Sorry about that.
27152
27153         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27154         empty param arrays.
27155
27156         * class.cs (Method.LabelParameters): Fix incorrect code path that
27157         prevented the `ParamArrayAttribute' from being applied to the
27158         params attribute.
27159
27160 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27161
27162         * support.cs (ReflectionParameters): Correctly compute whether the
27163         last argument is a params array.  Fixes the problem with
27164         string.Split ('a')
27165
27166         * typemanager.cs: Make the assemblies array always be non-null
27167         (empty, but non-null)
27168
27169         * tree.cs (RecordDecl): New function that abstracts the recording
27170         of names.  This reports error 101, and provides a pointer to the
27171         previous declaration.  Fixes a crash in the compiler.
27172
27173         * cs-parser.jay (constructor_declaration): Update to new grammar,
27174         and provide a constructor_body that can be empty.
27175
27176 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27177
27178         * driver.cs: Add support for --resources.
27179
27180         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27181         Make all types for the various array helper methods be integer.
27182
27183         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27184         CheckState to ConvCast.
27185
27186         (ConvCast): Now it takes a `checked' state argument, to avoid
27187         depending on the emit context for the conversion, and just using
27188         the resolve time setting.
27189
27190         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27191         instead of Invocation.EmitArguments.  We do not emit the original
27192         arguments, instead we emit those which have been converted to
27193         unsigned int expressions.
27194
27195         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27196
27197         * codegen.cs: ditto.
27198
27199         * expression.cs (LocalVariableReference): Drop the use of the
27200         Store function that depended on the variable index.
27201
27202         * statement.cs (VariableInfo): Drop the `Idx' property from this
27203         class, as this is not taking into account the indexes for
27204         temporaries tat we generate during the execution, getting the
27205         indexes wrong.
27206
27207         * class.cs: First emit class initializers, then call the parent
27208         constructor. 
27209
27210         * expression.cs (Binary): Fix opcode emision.
27211         (UnaryMutator.EmitCode): Support checked code generation
27212
27213         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27214         matches for events for both the Static and Instance scans,
27215         pointing to the same element.   Fix that.
27216
27217 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27218
27219         * rootcontext.cs (ResolveTree): Always set the
27220         interface_resolve_order, because nested interfaces will be calling
27221         into us.
27222
27223         * class.cs (GetInterfaceOrClass): Track the same resolution
27224         process used by TypeManager.LookupType.  This fixes the nested
27225         type lookups in class declarations (separate path from
27226         LookupType). 
27227
27228         (TypeContainer.DefineType): Also define nested interfaces.
27229         (TypeContainer.RegisterOrder): New public function used to
27230         register the order in which child interfaces need to be closed.
27231
27232         Nested interfaces need to be closed after their parents have been
27233         created. 
27234
27235         * interface.cs (InterfaceAttr): Put all the logic for computing
27236         the interface attribute here. 
27237
27238         (DefineInterface): Register our interface order with the
27239         RootContext or with the TypeContainer depending on the case.
27240
27241 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27242
27243         * cs-parser.jay: rework foreach statement to work with the new
27244         changes to the policy on SimpleNames.
27245
27246         * report.cs: support Stacktrace on warnings as well.
27247
27248         * makefile: drop --unsafe and /unsafe from the compile.
27249
27250 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27251
27252         * ecore.cs (StandardConversionExists): Modify to take an Expression
27253         as the first parameter. Ensure we do null -> reference type conversion
27254         checking.
27255
27256         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27257         temporary Expression objects.
27258
27259 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27260
27261         * interface.cs: workaround bug in method overloading resolution
27262         (there is already a bugzilla bug for it).
27263
27264 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27265
27266         We could also solve this problem by having a separate path for
27267         performing type lookups, instead of DoResolve, we could have a
27268         ResolveType entry point, and only participating pieces of the
27269         production (simplename, deref, array) would implement this. 
27270
27271         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27272         signal SimpleName to only resolve type names and not attempt to
27273         resolve anything else.
27274
27275         * expression.cs (Cast): Set the flag.
27276
27277         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27278
27279         * class.cs: Only report 108 if there is no `new' modifier.
27280
27281         * cs-parser.jay: rework foreach statement to work with the new
27282         changes to the policy on SimpleNames.
27283
27284         * report.cs: support Stacktrace on warnings as well.
27285
27286         * makefile: drop --unsafe and /unsafe from the compile.
27287
27288 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27289
27290         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27291         lookups here, instead of doing that at parse time.  This means
27292         that our grammar will not introduce `LocalVariableReferences' as
27293         expressions at this point.  That solves the problem of code like
27294         this:
27295
27296         class X {
27297            static void Main ()
27298            { int X = 1;
27299             { X x = null }}}
27300
27301         This is only half the fix.  The full fix requires parameters to
27302         also be handled in this way.
27303
27304         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27305         makes the use more obvious of the DeclSpace.  The
27306         ec.TypeContainer.TypeBuilder is now only used to pull the
27307         TypeBuilder for it.
27308
27309         My theory is that I can get rid of the TypeBuilder completely from
27310         the EmitContext, and have typecasts where it is used (from
27311         DeclSpace to where it matters).  
27312
27313         The only pending problem is that the code that implements Aliases
27314         is on TypeContainer, and probably should go in DeclSpace.
27315
27316         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27317         lookups here, instead of doing that at parse time.  This means
27318         that our grammar will not introduce `LocalVariableReferences' as
27319         expressions at this point.  That solves the problem of code like
27320         this:
27321
27322         class X {
27323            static void Main ()
27324            { int X = 1;
27325             { X x = null }}}
27326
27327         This is only half the fix.  The full fix requires parameters to
27328         also be handled in this way.
27329
27330         * class.cs (Property.DefineMethod): When implementing an interface
27331         method, set newslot, when implementing an abstract method, do not
27332         set the flag (before we tried never setting it, or always setting
27333         it, which is the difference).
27334         (Indexer.DefineMethod): same.
27335         (Method.DefineMethod): same.
27336
27337         * ecore.cs: Only set the status used flag if we get back a Field.
27338
27339         * attribute.cs: Temporary hack, so Paolo can keep working.
27340
27341 2002-03-08  Ravi Pratap  <ravi@ximian.com>
27342
27343         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
27344         the unmanaged type in the case we have a MarshalAs attribute.
27345
27346         (Resolve): Handle the case when we are parsing the special MarshalAs
27347         attribute [we need to store the unmanaged type to use later]
27348
27349         * typemanager.cs (marshal_as_attr_type): Built in type for the 
27350         MarshalAs Attribute.
27351
27352         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
27353         on parameters and accordingly set the marshalling info.
27354
27355 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
27356
27357         * class.cs: Optimizing slightly by removing redundant code after
27358         we switched to the `NoTypes' return value.
27359         (Property.DefineMethod): use NoTypes here too.
27360
27361         This fixes the bug I introduced in my last batch of changes.
27362
27363 2002-03-05  Ravi Pratap  <ravi@ximian.com>
27364
27365         * tree.cs (RecordEnum): Add. We now keep track of enums too.
27366
27367         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
27368         Enums since those are types too. 
27369
27370         * cs-parser.jay (enum_declaration): Record enums as we parse them.
27371
27372         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
27373         thanks to a call during the lookup process.
27374
27375 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
27376
27377         * statement.cs (Foreach): Lots of work to accomodate a particular
27378         kind of foreach statement that I had not kept in mind.  It is
27379         possible to have foreachs on classes that provide a GetEnumerator
27380         method that return objects that implement the "pattern" for using
27381         a foreach, there is no need to support GetEnumerator
27382         specifically. 
27383
27384         This is needed to compile nant.
27385
27386         * decl.cs: Only report 114 if the member is not `Finalize' and if
27387         the warning level is at least 2.
27388
27389         * class.cs: Moved the compare function from Method to
27390         MethodSignature. 
27391
27392         (MethodSignature.InheritableMemberSignatureCompare): Add new
27393         filter function that is used to extract inheritable methods from a
27394         class. 
27395
27396         (Method.Define): Use the new `inheritable_method_signature_filter'
27397         delegate
27398
27399         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27400         command. 
27401
27402 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27403
27404         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27405
27406         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27407
27408         * expression.cs: Pass location information to
27409         ConvertImplicitStandard. 
27410
27411         * class.cs: Added debugging code to track return values from
27412         interfaces. 
27413
27414 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27415
27416         * expression.cs (Is.DoResolve): If either side of the `is' is an
27417         interface, do not flag the warning.
27418
27419         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27420         for interfaces
27421
27422         * report.cs: Allow for --fatal to be used with --probe.
27423
27424         * typemanager.cs (NoTypes): Move the definition for the empty Type
27425         array here. 
27426
27427         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27428         properties. 
27429         (TypeContainer.DefineProxy): New function used to proxy to parent
27430         implementations when implementing interfaces.
27431         (TypeContainer.ParentImplements): used to lookup if our parent
27432         implements a public function that is required by an interface.
27433         (TypeContainer.VerifyPendingMethods): Hook this up.
27434
27435         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27436         `modules' and `assemblies' arraylists into arrays.  We only grow
27437         these are the very early start up of the program, so this improves
27438         the speedof LookupType (nicely measured).
27439
27440         * expression.cs (MakeByteBlob): Replaced unsafe code with
27441         BitConverter, as suggested by Paolo.
27442
27443         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27444         folding of string concatenation, but if either side is a string,
27445         and the other is not, then return null, and let the runtime use
27446         the concatenation on the string plus the object (using
27447         `Object.ToString'). 
27448
27449 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27450
27451         Constant Folding has been implemented now.
27452
27453         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27454         the error instead on types that are not supported in one's
27455         complement. 
27456
27457         * constant.cs (Constant and all children): New set of functions to
27458         perform implict and explicit conversions.
27459
27460         * ecore.cs (EnumConstant): Implement the new functions to perform
27461         conversion by proxying to the child expression.
27462
27463         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27464         own separate setting that can not be turned off from the command
27465         line using --unchecked or --checked and is only controlled using
27466         the checked/unchecked statements and expressions.  This setting is
27467         used by the constant folder to flag errors.
27468
27469         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27470         ConstantCheckState as well.   
27471
27472         During Resolve, they also have to flag the state, because the
27473         constant folder runs completely in the Resolve phase.
27474
27475         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27476         well.
27477
27478 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27479
27480         * cfold.cs: New file, this file contains the constant folder.
27481
27482         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27483         argument to track whether we are using the resulting address to
27484         load or store a value and provide better error messages. 
27485
27486         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27487         new AddressOf arguments.
27488
27489         * statement.cs (Foreach.EmitCollectionForeach): Update
27490
27491         * expression.cs (Argument.Emit): Call AddressOf with proper
27492         arguments to track usage.
27493
27494         (New.DoEmit): Call AddressOf with new arguments.
27495
27496         (Unary.Emit): Adjust AddressOf call.
27497
27498 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27499
27500         * cs-parser.jay (member_access): Change the case for pre-defined types
27501         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27502         this suggestion.
27503
27504         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27505         a method body.
27506
27507         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27508         essentially like methods and apply attributes like MethodImplOptions to them too.
27509
27510         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27511         not being null.
27512
27513         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27514         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27515         is the DeclSpace.
27516
27517         * Update code everywhere accordingly.
27518
27519         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27520
27521         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27522
27523 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27524
27525         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27526         try performing lookups against those instead of jumping straight into using
27527         the 'using' clauses.
27528
27529         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27530
27531         (LookupType): Perform lookups in implicit parents too.
27532
27533         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27534         sequence as RootContext.LookupType. 
27535
27536         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27537         the various cases of namespace lookups into this method.
27538
27539 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27540
27541         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27542         in positional arguments)
27543
27544         * class.cs (Operator): Update the AllowedModifiers to contain
27545         extern. 
27546
27547         * cs-parser.jay: Update operator declaration to allow for the
27548         operator body to be empty.
27549
27550         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
27551         values. 
27552
27553 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
27554
27555         * class.cs (Method.Emit): Label parameters.
27556
27557         * driver.cs: Return 1 or 0 as the program exit code.
27558
27559 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
27560
27561         * expression.cs: Special case the `null' object when trying to
27562         auto-compute the type, as anything can be explicitly converted to
27563         that. 
27564
27565         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
27566         spotting this Paolo.
27567
27568         (Expression.ImplicitNumericConversion): Perform comparissions of
27569         the type using the underlying type in the case of an enumeration
27570         rather than using the enumeration type for the compare.
27571
27572         Cope with the underlying == type case, which is not possible to
27573         catch before. 
27574
27575         (Expression.ConvertNumericExplicit): Perform comparissions of
27576         the type using the underlying type in the case of an enumeration
27577         rather than using the enumeration type for the compare.
27578
27579         * driver.cs: If the user does not supply an extension, assume .exe
27580
27581         * cs-parser.jay (if_statement): Rewrote so that we can track the
27582         location for the if statement.
27583
27584         * expression.cs (Binary.ConstantFold): Only concat strings when
27585         the operation is "+", not everything ;-)
27586
27587         * statement.cs (Statement.EmitBoolExpression): Take a location
27588         argument. 
27589         (If, While, Do): Track location.
27590
27591         * expression.cs (Binary.ResolveOperator): In the object + string
27592         case, I was missing a call to ConvertImplicit
27593
27594 2002-02-25  Ravi Pratap  <ravi@ximian.com>
27595
27596         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
27597         Location arguments. Ensure we use RootContext.LookupType to do our work
27598         and not try to do a direct Type.GetType and ModuleBuilder.GetType
27599
27600         * interface.cs (PopulateMethod): Handle the type of the parameter being
27601         null gracefully.
27602
27603         * expression.cs (Invocation.BetterFunction): Handle the case when we 
27604         have a params method with no fixed arguments and a call is made with no
27605         arguments.
27606
27607 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
27608
27609         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
27610         the verbatim-string-literal
27611
27612         * support.cs (InternalParameters.ParameterModifier): handle null
27613         fixed parameters.
27614         (InternalParameters.ParameterType): ditto.
27615
27616         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
27617         duplicating the name of the variable parameter.
27618         (GetParameterByName): Fix bug where we were not looking up array
27619         paramters if they were the only present (thanks Paolo!).
27620         (GetParameterInfo): We only have an empty set of types if both
27621         fixed and array are set to null.
27622         (GetParameterInfo-idx): Handle FixedParameter == null
27623
27624         * cs-parser.jay: Handle the case where there is no catch
27625         statements (missing null test).
27626
27627 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
27628
27629         * driver.cs (MainDriver): Be conservative on our command line
27630         handling.
27631
27632         Catch DirectoryNotFoundException when calling GetFiles.
27633
27634         (SplitPathAndPattern): Used to split the input specification into
27635         a path and a pattern that we can feed to Directory.GetFiles.
27636
27637 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
27638
27639         * statement.cs (Fixed): Implement the last case of the Fixed
27640         statement (string handling).
27641
27642         * expression.cs (StringPtr): New class used to return a char * to
27643         a string;  Used by the Fixed statement.
27644
27645         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
27646
27647         * expression.cs (Binary.ResolveOperator): Remove redundant
27648         MemberLookup pn parent type.
27649         Optimize union call, we do not need a union if the types are the same.
27650         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
27651         type.
27652
27653         Specialize the use of MemberLookup everywhere, instead of using
27654         the default settings. 
27655
27656         (StackAlloc): Implement stackalloc keyword.
27657
27658         * cs-parser.jay: Add rule to parse stackalloc.
27659
27660         * driver.cs: Handle /h, /help, /?
27661
27662         * expression.cs (MakeByteBlob): Removed the hacks we had in place
27663         before we supported unsafe code.
27664
27665         * makefile: add --unsafe to the self compilation of mcs.
27666
27667 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
27668
27669         * expression.cs (PointerArithmetic): New class that is used to
27670         perform pointer arithmetic.
27671         (Binary.Resolve): Handle pointer arithmetic
27672         Handle pointer comparission.
27673         (ArrayPtr): Utility expression class that is used to take the
27674         address of an array.
27675
27676         (ElementAccess): Implement array access for pointers
27677
27678         * statement.cs (Fixed): Implement fixed statement for arrays, we
27679         are missing one more case before we are done.
27680
27681         * expression.cs (Indirection): Implement EmitAssign and set the
27682         ExprClass to Variable.  This allows pointer dereferences to be
27683         treated as variables, and to have values assigned to them.
27684
27685         * ecore.cs (Expression.StoreFromPtr): New utility function to
27686         store values dereferencing.
27687
27688 2002-02-20  Ravi Pratap  <ravi@ximian.com>
27689
27690         * expression.cs (Binary.ResolveOperator): Ensure that we are
27691         not trying to operate on a void type - this fixes the reported
27692         bug.
27693
27694         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
27695         the parent implementation is sealed.
27696
27697         * ../errors/cs0239.cs : Add.
27698
27699         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
27700
27701         * typemanager.cs (unverifiable_code_type): Corresponds to 
27702         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
27703         which have unsafe code in them.
27704
27705         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
27706         unsafe context.
27707
27708 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
27709
27710         * cs-tokenizer.cs: Add support for @"litreal strings"
27711
27712         Make tokenizer accept pre-processor directives
27713         on any column (remove the old C-like limitation). 
27714
27715         * rootcontext.cs (EmitCode): Emit any global attributes.
27716         (AddGlobalAttributes): Used to keep track of assembly attributes. 
27717
27718         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
27719
27720         * cs-parser.jay: Add support for global attributes.  
27721
27722 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
27723
27724         * expression.cs (Indirection): New helper class.  Unary will
27725         create Indirection classes to be able to implement the
27726         IMemoryLocation interface on it.
27727
27728 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
27729
27730         * cs-parser.jay (fixed_statement): reference the right statement.
27731
27732         * statement.cs (Fixed.Emit): Finish implementing the fixed
27733         statement for the &x case.
27734
27735 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
27736
27737         * class.cs (Property.Define, Method.Define): Remove newslot when
27738         `implementing'.  
27739
27740         * modifiers.cs: My use of NewSlot when `Abstract' was set was
27741         wrong.  NewSlot should only be used if the `new' keyword is present.
27742
27743         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
27744         locating our system dir.  Sorry about this.
27745
27746 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27747
27748         * driver.cs (GetSystemDir): Compute correctly the location of our
27749         system assemblies.  I was using the compiler directory instead of
27750         the library directory.
27751
27752 2002-02-13  Ravi Pratap  <ravi@ximian.com>
27753
27754         * expression.cs (BetterFunction): Put back in what Miguel commented out
27755         since it is the correct fix. The problem is elsewhere ;-)
27756
27757         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
27758         parameters of the parms method are themselves compatible or not !
27759
27760         (StandardConversionExists): Fix very dangerous bug where we were forgetting
27761         to check that a class implements an interface before saying that an implicit
27762         conversion was allowed. Use ImplementsInterface to do the checking.
27763
27764 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27765
27766         * class.cs (Method.Define): Track whether we are an explicit
27767         implementation or not.  And only call DefineMethodOverride if we
27768         are an explicit implementation.
27769
27770         (Property.DefineMethod): Ditto.
27771
27772 2002-02-11  Ravi Pratap  <ravi@ximian.com>
27773
27774         * expression.cs (BetterFunction): Catch hideous bug which was
27775          preventing us from detecting ambiguous calls due to implicit casts i.e
27776         cs0121.
27777
27778 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
27779
27780         * support.cs (Pair): Remove un-needed method.  I figured why I was
27781         getting the error in cs-parser.jay, the variable in a foreach loop
27782         is readonly, and the compiler does not really treat this as a variable.
27783
27784         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
27785         instead of EQUALS in grammar.  
27786
27787         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
27788
27789         * expression.cs (Unary.DoResolve): Check whether the argument is
27790         managed or not.
27791
27792 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
27793
27794         * support.cs: Api for Pair to set a value.  Despite the fact that
27795         the variables are public the MS C# compiler refuses to compile
27796         code that accesses the field if the variable is part of a foreach
27797         statement. 
27798
27799         * statement.cs (Fixed): Begin implementation of the fixed
27800         statement.
27801
27802         (Block.AddVariable): Return the VariableInfo on success and null
27803         on failure instead of true/false. 
27804
27805         * cs-parser.jay (foreach): Catch errors on variables already
27806         defined (we were ignoring this value before) and properly unwind
27807         the block hierarchy
27808
27809         (fixed_statement): grammar for the fixed statement.
27810
27811 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
27812
27813         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
27814         pointer types to be incretemented.
27815
27816         (SizeOf): Implement.
27817
27818         * cs-parser.jay (pointer_member_access): Implement
27819         expr->IDENTIFIER production.
27820
27821         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
27822         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
27823         on safe contexts.
27824
27825         (Unary): Implement indirection.
27826
27827         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
27828         use in non-unsafe context).
27829
27830         (SimpleName.DoResolve): Check for pointers in field access on safe
27831         contexts. 
27832
27833         (Expression.LoadFromPtr): Factor the load-indirect code in this
27834         function.  This was duplicated in UnboxCast and ParameterReference
27835
27836 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
27837
27838         * expression.cs (ComposedCast): report an error if a pointer cast
27839         is used in a safe region.
27840
27841         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
27842         pointer type casts in unsafe context.
27843
27844         * codegen.cs (EmitContext): Set up IsUnsafe.
27845
27846         * cs-parser.jay (non_expression_type): Add productions for pointer
27847         casts. 
27848
27849         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
27850         code.  We should not use force into static mode if the method is
27851         not virtual.  Fixes bug in MIS
27852
27853         * statement.cs (Do.Emit, While.Emit, For.Emit,
27854         Statement.EmitBoolExpression): Add support to Do and While to
27855         propagate infinite loop as `I do return' semantics.
27856
27857         Improve the For case to also test for boolean constants.
27858
27859         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
27860         to the list of attributes we can add.
27861
27862         Remove `EmitContext' argument.
27863
27864         * class.cs (Method.Define): Apply parameter attributes.
27865         (Constructor.Define): Apply parameter attributes.
27866         (MethodCore.LabelParameters): Move here the core of labeling
27867         parameters. 
27868
27869         * support.cs (ReflectionParameters.ParameterModifier,
27870         InternalParameters.ParameterModifier): Use IsByRef on the type and
27871         only return the OUT bit for these parameters instead of in/out/ref
27872         flags.
27873
27874         This is because I miss-understood things.  The ParameterInfo.IsIn
27875         and IsOut represent whether the parameter has the [In] and [Out]
27876         attributes set.  
27877
27878 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
27879
27880         * ecore.cs (FieldExpr.Emit): Release temporaries.
27881
27882         * assign.cs (LocalTemporary.Release): new function.
27883
27884         * codegen.cs (EmitContext.GetTemporaryStorage,
27885         EmitContext.FreeTemporaryStorage): Rework the way we deal with
27886         temporary storage.  Now we can "put back" localbuilders when we
27887         are done with them
27888
27889 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
27890
27891         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
27892         need to make a copy of the variable to generate verifiable code.
27893
27894 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
27895
27896         * driver.cs: Compute dynamically the system directory.
27897
27898         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
27899         Slower, but more generally useful.  Used by the abstract
27900         registering implementation. 
27901
27902         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
27903         the rules for the special rule on Type/instances.  First check if
27904         we have the same name, and if so, try that special static path
27905         rather than the instance path.
27906
27907 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
27908
27909         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
27910         for, while and if.
27911
27912         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
27913         Enum, ValueType, Delegate or Array for non-corlib compiles.
27914
27915         * cs-tokenizer.cs: Catch long identifiers (645)
27916
27917         * typemanager.cs (IndexerPropetyName): Ravi never tested this
27918         piece of code.
27919
27920         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
27921         fix, we were returning too early, so we were not registering
27922         pending methods from abstract classes.
27923
27924         Do not register pending methods if the class is abstract.
27925
27926         * expression.cs (Conditional.DoResolve): Report circular implicit
27927         conversions when we neecd to compute it for conditional
27928         expressions. 
27929
27930         (Is.DoResolve): If the expression is always of the provided type,
27931         flag warning 183.  If the expression can not ever be of the
27932         provided type flag warning 184.
27933
27934         * class.cs: Catch 169 as well.
27935
27936         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
27937         read. 
27938
27939 2002-01-18  Nick Drochak  <ndrochak@gol.com>
27940
27941         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
27942
27943 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
27944
27945         * interface.cs: (PopulateMethod): Check for pointers being defined
27946         only if the unsafe context is active.
27947         (PopulateProperty): ditto.
27948         (PopulateIndexer): ditto.
27949
27950         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
27951         specified.  If pointers are present, make sure that they are
27952         present in an unsafe context.
27953         (Constructor, Constructor.Define): ditto.
27954         (Field, Field.Define): ditto.
27955         (Property, Property.Define): ditto.
27956         (Event, Event.Define): ditto.
27957
27958         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
27959         hashtable if there are classes or structs defined.
27960
27961         * expression.cs (LocalVariableReference.DoResolve): Simplify this
27962         code, as the constant resolution moved.
27963
27964         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
27965         the metadata, so we can flag error 133. 
27966
27967         * decl.cs (MemberCore.UnsafeOK): New function to test that a
27968         pointer is being declared in an unsafe context.
27969
27970 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
27971
27972         * modifiers.cs (Modifiers.Check): Require a Location argument.
27973         Report error 227 for Unsafe use.
27974
27975         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
27976
27977         * statement.cs (For.Emit): If the test is null, then report that
27978         we do `return', as we wont reach anything afterwards.
27979
27980         (Switch.SwitchGoverningType): Track the expression that matched
27981         the conversion.
27982
27983         * driver.cs: Allow negative numbers as an error code to flag.
27984
27985         * cs-parser.jay: Handle 1551.
27986
27987         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
27988
27989 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
27990
27991         * cs-parser.jay: Report 1518 (type declaration can only contain
27992         class, struct, interface, enum or delegate)
27993
27994         (switch_label): Report 1523 (keywords `case' or `default' must
27995         preced code)
27996
27997         (opt_switch_sections): Report 1522 (empty switch)
27998
27999         * driver.cs: Report 1515 (response file specified multiple times)
28000         Report 1516 (Source file specified multiple times).
28001
28002         * expression.cs (Argument.Resolve): Signal 1510
28003
28004         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28005         access not allowed in static code)
28006
28007 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28008
28009         * typemanager.cs (IsPointerType): Utility method which we are going
28010         to need a lot.
28011
28012         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28013         the object type, so we take care of that.
28014
28015         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28016
28017         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28018         added to non-params parameters :-)
28019
28020         * typemanager.cs (CSharpName): Include 'void' type too. 
28021
28022         (void_ptr_type): Include in the set of core types.
28023
28024         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28025         duplicating code.
28026
28027         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28028         an unsafe context.
28029
28030         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28031         completely forgotten about it.
28032
28033 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28034
28035         * cs-parser.jay (pointer_type): Add. This begins our implementation
28036         of parsing rules for unsafe code.
28037
28038         (unsafe_statement): Implement.
28039
28040         (embedded_statement): Modify to include the above.
28041
28042         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28043
28044         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28045         if the current context is an unsafe one.
28046
28047         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28048         are handled differently, we need separate rules for them.
28049
28050         (local_variable_declaration): Update to use local_variable_pointer_type
28051         to allow variable declarations of unmanaged pointer types.
28052
28053         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28054         in unsafe contexts.
28055
28056         * ../errors/cs0214.cs : Add.
28057
28058 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28059
28060         * makefile: remove 'response' file when cleaning.
28061
28062 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28063
28064         * cs-parser.jay: Report 1524.
28065
28066 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28067
28068         * typemanager.cs (RegisterMethod): drop checking if we have
28069         registered this from here
28070
28071 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28072
28073         * class.cs (Method.EmitDestructor): Implement calling our base
28074         destructor. 
28075
28076         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28077         value of InFinally.
28078
28079         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28080         this routine and will wrap the call in a try/catch block.  Deal
28081         with the case.
28082
28083 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28084
28085         * ecore.cs (Expression.MemberLookup): instead of taking a
28086         parameter `same_type' that was used to tell whether we could
28087         access private members we compute our containing type from the
28088         EmitContext.
28089
28090         (FieldExpr): Added partial support for volatile fields.  This does
28091         not work for volatile fields exposed from assemblies, as I can not
28092         figure out how to extract the modreq from it.
28093
28094         Updated all the source files to use this.
28095
28096         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28097         because it is referenced by MemberLookup very often. 
28098
28099 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28100
28101         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28102         TypeBuilder.GetCustomAttributes to retrieve what we need.
28103
28104         Get rid of redundant default_member_attr_type as this is the same as
28105         default_member_type which already exists.
28106
28107         * interface.cs, attribute.cs : Update accordingly.
28108
28109 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28110
28111         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28112         work for TYpeBuilders though.  Ravi, can you please fix this?
28113
28114         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28115
28116         * expression.cs (Argument.Emit): Handle the case of ref objects
28117         being passed to ref functions;  
28118
28119         (ParameterReference.EmitLoad): Loads the content of the pointer
28120         without dereferencing.
28121
28122 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28123
28124         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28125
28126 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28127
28128         * class.cs (Indexer.DefineMethod): Incorporate the interface
28129         type in the name of the method if we are doing explicit interface
28130         implementation.
28131
28132         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28133
28134         (BetterConversion): Fix extremely trivial bug where we were referring to
28135         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28136         again !
28137
28138         * ../errors/bug16.cs : Add although we have fixed it.
28139
28140 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28141
28142         * expression.cs (BaseIndexer): Begin implementation.
28143
28144         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28145
28146         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28147         production directly to remove a shift/reduce, and implement
28148         explicit interface implementation.
28149
28150         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28151         after a floating point suffix.
28152
28153         * expression.cs (DoNumericPromotions): Improved the conversion for
28154         uint/uint.  If we have a constant, we avoid doing a typecast to a
28155         larger type.
28156
28157         * class.cs (Indexer): Implement explicit interface implementation
28158         for indexers.
28159
28160 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28161
28162         * class.cs: make the default instance constructor public and hidebysig.
28163
28164 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28165
28166         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28167         so we can call it from elsewhere.
28168
28169         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28170         we emit it internally if the class has a defined indexer; otherwise the user
28171         emits it by decorating the class definition with the DefaultMemberAttribute.
28172
28173         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28174         attribute is not used on a type which defines an indexer.
28175
28176         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28177         character when we skip whitespace.
28178
28179         * ../errors/cs0646.cs : Add.
28180
28181 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28182
28183         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28184         again. 
28185
28186         * makefile: Add practical target `mcs3.exe' which builds the third
28187         generation compiler. 
28188
28189         * expression.cs (New): Fix structures constructor calling.
28190
28191         * class.cs (Property, Method, Indexer): Emit Final flag on the
28192         method if we are an interface implementation and we are not
28193         abstract. 
28194
28195         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28196         whether this property is referencing a `base' method.
28197
28198         * expression.cs (Invocation.EmitCall): take an extra argument:
28199         is_base, this is used to determine whether the `call' or
28200         `callvirt' opcode should be used.
28201
28202
28203         * delegate.cs: update EmitCall.
28204
28205         * class.cs (Method.Define): Set NewSlot for the cases where we are
28206         not implementing an interface method.
28207
28208         (Property.Define): ditto.
28209
28210 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28211
28212         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28213         'r'.  Allows mcs to parse itself fully.
28214
28215 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28216
28217         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28218         of the number of initializers that require the InitializeArray method.
28219
28220         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28221         update the above field where necessary.
28222
28223         (MakeByteBlob): Update accordingly.
28224
28225         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28226         greater than 2.
28227
28228         (EmitDynamicInitializers): Update in accordance with the new optimization.
28229
28230         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28231         same OpCode applies.
28232
28233         * cs-parser.jay : Fix some glaring errors I introduced.
28234
28235 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28236
28237         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28238         so that we can check for name clashes there too.
28239
28240         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28241         for interface indexers.
28242
28243         * interfaces.cs (Define): Emit the default member attribute.
28244
28245         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28246         variable was being referred to while setting the value ;-)
28247
28248 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28249
28250         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28251         byte-by-byte information when we know the data is zero.
28252
28253         Make the block always a multiple of 4, because
28254         DefineInitializedData has a bug.
28255
28256         * assign.cs: Fix, we should assign from the temporary, not from
28257         the source. 
28258
28259         * expression.cs (MakeByteBlob): Fix my incorrect code.
28260
28261 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28262
28263         * typemanager.cs (EnumToUnderlying): This function is used to get
28264         the underlying type from an enumeration, because it does not
28265         always work. 
28266
28267         * constant.cs: Use the I4_S form for values between -128 and 127.
28268
28269         * statement.cs (Block.LookupLabel): Looks up a label.
28270         (Block): Drop support for labeled blocks.
28271
28272         (LabeledStatement): New kind of statement that represents a label
28273         only.
28274
28275         (Goto): Finally implement this bad boy.
28276
28277         * cs-parser.jay: Update to reflect new mechanism to implement
28278         labels.
28279
28280 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28281
28282         * codegen.cs (EmitContext.This): a codegen property that keeps the
28283         a single instance of this instead of creating many different this
28284         instances. 
28285
28286         * delegate.cs (Delegate.DoResolve): Update to use the property;
28287
28288         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28289
28290         * expression.cs (BaseAccess.DoResolve): Ditto.
28291
28292 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28293
28294         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28295         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28296
28297         (InitCoreTypes): Update accordingly.
28298
28299         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28300         so we can quickly store the state.
28301
28302         (ApplyAttributes): Set the correct implementation flags
28303         for InternalCall methods.
28304
28305 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28306
28307         * expression.cs (EmitCall): if a method is not virtual, then do
28308         not use callvirt on it.
28309
28310         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28311         user defined stuff) requires the use of stobj, which takes an
28312         address on the stack instead of an array and an index.  So emit
28313         the Ldelema operation for it.
28314
28315         (EmitStoreOpcode): Use stobj for valuetypes.
28316
28317         (UnaryMutator.EmitCode): Use the right 1 value depending on
28318         whether we are dealing with int64/uint64, float or doubles.
28319
28320         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28321         constructors that I implemented last night.
28322
28323         (Constructor.IsDefault): Fix to work properly for static
28324         constructors.
28325
28326         * cs-parser.jay (CheckDef): report method signature errors.
28327         Update error number 103 to be 132.
28328
28329         * decl.cs: New AdditionResult enumeration value: MethodExists.
28330         Although we do this check for methods later on in the semantic
28331         analysis, catching repeated default constructors is so easy that
28332         we catch these here. 
28333
28334         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
28335         promotions code.
28336
28337         (ParameterReference.EmitAssign, Emit): handle
28338         bools as bytes.
28339
28340         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
28341         (ArrayAccess.EmitStoreOpcode): ditto.
28342
28343         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
28344
28345         * expression.cs (MakeByteBlob): Complete all the missing types
28346         (uint, short, ushort, byte, sbyte)
28347
28348         * class.cs: Only init instance field initializers on instance
28349         constructors. 
28350
28351         Rename `constructors' to instance_constructors. 
28352
28353         (TypeContainer.AddConstructor): Only add constructors to the list
28354         if it is not static.
28355
28356         Make sure that we handle default_static_constructor independently
28357         everywhere where we handle instance_constructors
28358
28359 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
28360
28361         * class.cs: Do not lookup or create a base initializer for a
28362         static constructor.
28363
28364         (ConstructorInitializer.Resolve): use the proper type to lookup
28365         for constructors.
28366
28367         * cs-parser.jay: Report error 1585 (modifiers between type and name).
28368
28369         * enum.cs, interface.cs: Remove CloseType, this is taken care by
28370         in DeclSpace. 
28371
28372         * decl.cs: CloseType is now an virtual method, the default
28373         implementation just closes this type.
28374
28375 2001-12-28  Ravi Pratap  <ravi@ximian.com>
28376
28377         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
28378         to PreserveSig by default. Also emit HideBySig on such methods.
28379
28380         Basically, set the defaults to standard values.
28381
28382         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
28383         argument, if candidate is better, it can't be worse than the best !
28384
28385         (Invocation): Re-write bits to differentiate between methods being
28386         applicable in their expanded form and their normal form - for params
28387         methods of course.
28388
28389         Get rid of use_standard everywhere as only standard conversions are allowed
28390         in overload resolution. 
28391
28392         More spec conformance.
28393
28394 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28395
28396         * driver.cs: Add --timestamp, to see where the compiler spends
28397         most of its time.
28398
28399         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28400         `this' in static code.
28401
28402         (SimpleName.DoResolve): Implement in terms of a helper function
28403         that allows static-references to be passed upstream to
28404         MemberAccess.
28405
28406         (Expression.ResolveWithSimpleName): Resolve specially simple
28407         names when called by MemberAccess to implement the special
28408         semantics. 
28409
28410         (Expression.ImplicitReferenceConversion): Handle conversions from
28411         Null to reference types before others, as Null's type is
28412         System.Object. 
28413
28414         * expression.cs (Invocation.EmitCall): Handle the special case of
28415         calling methods declared on a reference type from a ValueType
28416         (Base classes System.Object and System.Enum)
28417
28418         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28419         the left hand side is a TypeExpr, not on every enumeration. 
28420
28421         (Binary.Resolve): If types are reference types, then do a cast to
28422         object on operators != and == of both arguments.
28423
28424         * typemanager.cs (FindMembers): Extract instance and static
28425         members if requested.
28426
28427         * interface.cs (PopulateProperty): Use void_type instead of null
28428         as the return type for the setter method.
28429
28430         (PopulateIndexer): ditto.
28431
28432 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28433
28434         * support.cs (ReflectionParameters): Fix minor bug where we
28435         were examining the wrong parameter for the ParamArray attribute.
28436
28437         Cope with requests for the type of the parameter at position
28438         greater than the params parameter's. We now return the element
28439         type of the params array as that makes more sense.
28440
28441         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28442         accordingly as we no longer have to extract the element type
28443         ourselves.
28444
28445         (Invocation.OverloadResolve): Update.
28446
28447 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28448
28449         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28450         against IEnumerator, test whether the return value is a descendant
28451         of the IEnumerator interface.
28452
28453         * class.cs (Indexer.Define): Use an auxiliary method to implement
28454         the other bits of the method definition.  Begin support for
28455         explicit interface implementation.
28456
28457         (Property.DefineMethod): Use TypeManager.void_type instead of null
28458         for an empty return value.
28459
28460 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28461
28462         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28463         dealing with a FieldExpr which is composed of a FieldBuilder, in
28464         the code path we did extract the constant, but we should have
28465         obtained the underlying value to be able to cast it (otherwise we
28466         end up in an infinite loop, this is what Ravi was running into).
28467
28468         (ArrayCreation.UpdateIndices): Arrays might be empty.
28469
28470         (MemberAccess.ResolveMemberAccess): Add support for section
28471         14.5.4.1 that deals with the special case of E.I when E is a type
28472         and something else, that I can be a reference to a static member.
28473
28474         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28475         handle a particular array type to create byte blobs, it is just
28476         something we dont generate byteblobs for.
28477
28478         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28479         arguments. 
28480
28481         * location.cs (Push): remove the key from the hashtable that we
28482         are about to add.   This happens for empty files.
28483
28484         * driver.cs: Dispose files after we have parsed them.
28485
28486         (tokenize): new function that only runs the tokenizer on its
28487         input, for speed testing.
28488
28489 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28490
28491         * class.cs (Event.Define): Define the private field only if there
28492         are no accessors defined.
28493
28494         * expression.cs (ResolveMemberAccess): If there is no associated
28495         field with the event, that means we have an event defined with its
28496         own accessors and we should flag error cs0070 since transforming
28497         ourselves into a field is not valid in that case.
28498
28499         * ecore.cs (SimpleName.DoResolve): Same as above.
28500
28501         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28502         and charset to sane values.
28503
28504 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28505
28506         * assign.cs (DoResolve): Perform check on events only if they 
28507         are being accessed outside the declaring type.
28508
28509         * cs-parser.jay (event_declarations): Update rules to correctly
28510         set the type of the implicit parameter etc.
28511
28512         (add_accessor, remove_accessor): Set current local parameters.
28513
28514         * expression.cs (Binary): For delegate addition and subtraction,
28515         cast the return value from the method into the appropriate delegate
28516         type.
28517
28518 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28519
28520         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28521         of these as the workaround is unnecessary.
28522
28523         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28524         delegate data - none of that is needed at all.
28525
28526         Re-write bits to extract the instance expression and the delegate method
28527         correctly.
28528
28529         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28530         on delegates too.
28531
28532         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28533         of attaching attributes instead of duplicating code everywhere.
28534
28535         * everywhere : Update code to do attribute emission using the above method.
28536
28537 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28538
28539         * expression.cs (IsParamsMethodApplicable): if there are not
28540         parameters, return immediately.
28541
28542         * ecore.cs: The 0 literal can be implicity converted to an enum
28543         type. 
28544
28545         (SimpleName.DoResolve): First lookup the type, then lookup the
28546         members. 
28547
28548         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28549         want to get its address.  If the InstanceExpression is not
28550         addressable, store the result in a temporary variable, then get
28551         the address of it.
28552
28553         * codegen.cs: Only display 219 errors on warning level or above. 
28554
28555         * expression.cs (ArrayAccess): Make it implement the
28556         IMemoryLocation interface.
28557
28558         (Binary.DoResolve): handle the operator == (object a, object b)
28559         and operator != (object a, object b) without incurring into a
28560         BoxedCast (because 5 != o should never be performed).
28561
28562         Handle binary enumerator operators.
28563
28564         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
28565         value type, otherwise use Ldelem_ref.
28566
28567         Use precomputed names;
28568
28569         (AddressOf): Implement address of
28570
28571         * cs-parser.jay (labeled_statement): Fix recursive block
28572         addition by reworking the production.
28573
28574         * expression.cs (New.DoEmit): New has a special case:
28575                 
28576                  If we are dealing with a ValueType, we have a few
28577                  situations to deal with:
28578                 
28579                     * The target of New is a ValueType variable, that is
28580                       easy, we just pass this as the variable reference
28581                 
28582                     * The target of New is being passed as an argument,
28583                       to a boxing operation or a function that takes a
28584                       ValueType.
28585                 
28586                       In this case, we need to create a temporary variable
28587                       that is the argument of New.
28588
28589
28590 2001-12-23  Ravi Pratap  <ravi@ximian.com>
28591
28592         * rootcontext.cs (LookupType): Check that current_type is not null before
28593         going about looking at nested types.
28594
28595         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
28596         not implement the IAssignMethod interface any more.
28597
28598         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
28599         where we tranform them into FieldExprs if they are being resolved from within
28600         the declaring type.
28601
28602         * ecore.cs (SimpleName.DoResolve): Do the same here.
28603
28604         * assign.cs (DoResolve, Emit): Clean up code considerably. 
28605
28606         * ../errors/bug10.cs : Add.
28607
28608         * ../errors/cs0070.cs : Add.
28609
28610         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
28611
28612         * assign.cs : Get rid of EventIsLocal everywhere.
28613
28614 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28615
28616         * ecore.cs (ConvertIntLiteral): finished the implementation.
28617
28618         * statement.cs (SwitchLabel): Convert the value we are using as a
28619         key before looking up the table.
28620
28621 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28622
28623         * codegen.cs (EmitTopBlock): Require a Location argument now.
28624
28625         * cs-parser.jay (constructor_declarator): We need to setup
28626         current_local_parameters before we parse the
28627         opt_constructor_initializer, to allow the variables to be bound
28628         to the constructor arguments.
28629
28630         * rootcontext.cs (LookupType): First lookup nested classes in our
28631         class and our parents before we go looking outside our class.
28632
28633         * expression.cs (ConstantFold): Extract/debox the values at the
28634         beginnning. 
28635
28636         * rootcontext.cs (EmitCode): Resolve the constants first before we
28637         resolve the types.  This is not really needed, but it helps debugging.
28638
28639         * statement.cs: report location.
28640
28641         * cs-parser.jay: pass location to throw statement.
28642
28643         * driver.cs: Small bug fix.
28644
28645         * report.cs: Updated format to be 4-zero filled digits.
28646
28647 2001-12-22  Ravi Pratap  <ravi@ximian.com>
28648
28649         * expression.cs (CheckIndices): Fix minor bug where the wrong
28650         variable was being referred to ;-)
28651
28652         (DoEmit): Do not call EmitStaticInitializers when the 
28653         underlying type is System.Object.
28654
28655 2001-12-21  Ravi Pratap  <ravi@ximian.com>
28656
28657         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
28658         and do the usual workaround for SRE.
28659
28660         * class.cs (MyEventBuilder.EventType): New member to get at the type
28661         of the event, quickly.
28662
28663         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
28664
28665         * assign.cs (Assign.DoResolve): Handle the case when the target
28666         is an EventExpr and perform the necessary checks.
28667
28668         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
28669         interface.
28670
28671         (SimpleName.MemberStaticCheck): Include check for EventExpr.
28672
28673         (EventExpr): Set the type in the constructor itself since we 
28674         are meant to be born fully resolved.
28675
28676         (EventExpr.Define): Revert code I wrote earlier.
28677                 
28678         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
28679         instance expression is null. The instance expression is a This in that case
28680         or a null, depending on whether it is a static method or not.
28681
28682         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
28683         refers to more than one method.
28684
28685         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
28686         and accordingly flag errors.
28687
28688 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28689
28690         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
28691
28692 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28693
28694         * location.cs (ToString): Provide useful rutine.
28695
28696 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28697
28698         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
28699         objects, return the actual integral boxed.
28700
28701         * statement.cs (SwitchLabel): define an ILLabel for each
28702         SwitchLabel. 
28703
28704         (Switch.CheckSwitch): If the value is a Literal, extract
28705         the underlying literal.
28706
28707         Also in the unused hashtable we had, add the SwitchLabel so we can
28708         quickly look this value up.
28709
28710         * constant.cs: Implement a bunch of new constants.  Rewrite
28711         Literal based on this.  Made changes everywhere to adapt to this.
28712
28713         * expression.cs (Expression.MakeByteBlob): Optimize routine by
28714         dereferencing array only once, and also copes with enumrations.
28715
28716         bytes are two bytes wide, not one.
28717
28718         (Cast): Perform constant conversions.
28719
28720         * ecore.cs (TryImplicitIntConversion): Return literals instead of
28721         wrappers to the literals here.
28722
28723         * expression.cs (DoNumericPromotions): long literals can converted
28724         to ulong implicity (this is taken care of elsewhere, but I was
28725         missing this spot).
28726
28727         * ecore.cs (Expression.Literalize): Make the return type Literal,
28728         to improve type checking.
28729
28730         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
28731
28732 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28733
28734         * literal.cs: Revert code from ravi that checked the bounds.  The
28735         bounds are sane by the definition of the type itself. 
28736
28737         * typemanager.cs: Fix implementation of ImplementsInterface.  We
28738         need to actually look up in our parent hierarchy for interfaces
28739         implemented. 
28740
28741         * const.cs: Use the underlying type for enumerations
28742
28743         * delegate.cs: Compute the basename for the delegate creation,
28744         that should fix the delegate test case, and restore the correct
28745         Type Lookup semantics in rootcontext
28746
28747         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
28748         referencing a nested type with the Reflection API is using the "+"
28749         sign. 
28750
28751         * cs-parser.jay: Do not require EOF token at the end.
28752
28753 2001-12-20  Ravi Pratap  <ravi@ximian.com>
28754
28755         * rootcontext.cs (LookupType): Concatenate type names with
28756         a '.' instead of a '+' The test suite passes again.
28757
28758         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
28759         field of the enumeration.
28760
28761         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
28762         the case when the member is an EventExpr.
28763
28764         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
28765         static has an associated instance expression.
28766
28767         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
28768
28769         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
28770
28771         * class.cs (Event.Define): Register event and perform appropriate checks
28772         for error #111.
28773
28774         We define the Add and Remove methods even if the use provides none because
28775         in that case, we provide default implementations ourselves.
28776
28777         Define a private field of the type of the event. This is done by the CSC compiler
28778         and we should be doing it too ;-)
28779
28780         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
28781         More methods we use in code we generate.
28782
28783         (multicast_delegate_type, delegate_type): Two separate types since the distinction
28784         is important.
28785
28786         (InitCoreTypes): Update accordingly for the above.
28787
28788         * class.cs (Event.Emit): Generate code for default accessors that we provide
28789
28790         (EmitDefaultMethod): Do the job in the above.
28791
28792         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
28793         appropriate place.
28794
28795 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28796
28797         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
28798         builders even if we were missing one.
28799
28800         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
28801         pass the Basename as our class name instead of the Name.  The
28802         basename will be correctly composed for us.
28803
28804         * parameter.cs (Paramters): Now takes a Location argument.
28805
28806         * decl.cs (DeclSpace.LookupType): Removed convenience function and
28807         make all the code call directly LookupType in RootContext and take
28808         this chance to pass the Location information everywhere.
28809
28810         * Everywhere: pass Location information.
28811
28812 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
28813
28814         * class.cs (Constructor.Define): Updated way of detecting the
28815         length of the parameters.
28816
28817         (TypeContainer.DefineType): Use basename as the type name for
28818         nested types.
28819
28820         (TypeContainer.Define): Do not recursively define types here, as
28821         definition is taken care in order by the RootContext.
28822
28823         * tree.cs: Keep track of namespaces in a per-file basis.
28824
28825         * parameter.cs (Parameter.ComputeSignature): Update to use
28826         DeclSpace. 
28827
28828         (Parameters.GetSignature): ditto.
28829
28830         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
28831         instead of a TypeContainer.
28832
28833         (Interface.SemanticAnalysis): Use `this' instead of our parent to
28834         resolve names.  Because we need to be resolve in our context, not
28835         our parents.
28836
28837         * driver.cs: Implement response files.
28838
28839         * class.cs (TypeContainer.DefineType): If we are defined, do not
28840         redefine ourselves.
28841
28842         (Event.Emit): Emit the code for add/remove handlers.
28843         (Event.Define): Save the MethodBuilders for add/remove.
28844
28845         * typemanager.cs: Use pair here too.
28846
28847         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
28848         DictionaryEntry requires the first argument to be non-null.  
28849
28850         (enum_declaration): Compute full name for registering the
28851         enumeration.
28852
28853         (delegate_declaration): Instead of using
28854         formal_parameter_list, use opt_formal_parameter_list as the list
28855         can be empty.
28856
28857         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
28858         (EventParsing): New property that controls whether `add' and
28859         `remove' are returned as tokens or identifiers (for events);
28860
28861 2001-12-19  Ravi Pratap  <ravi@ximian.com>
28862
28863         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
28864         use MyEventBuilder only and let it wrap the real builder for us.
28865
28866         (MyEventBuilder): Revamp constructor etc.
28867
28868         Implement all operations that we perform on EventBuilder in precisely the same
28869         way here too.
28870
28871         (FindMembers): Update to use the EventBuilder member.
28872
28873         (Event.Emit): Update accordingly.
28874
28875 2001-12-18  Ravi Pratap  <ravi@ximian.com>
28876
28877         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
28878         by calling the appropriate methods.
28879
28880         (GetCustomAttributes): Make stubs as they cannot possibly do anything
28881         useful.
28882
28883         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
28884
28885 2001-12-17  Ravi Pratap  <ravi@ximian.com>
28886
28887         * delegate.cs (Delegate.Populate): Check that the return type
28888         and various parameters types are indeed accessible.
28889
28890         * class.cs (Constructor.Define): Same here.
28891
28892         (Field.Define): Ditto.
28893
28894         (Event.Define): Ditto.
28895
28896         (Operator.Define): Check that the underlying Method defined itself
28897         correctly - so it's MethodBuilder should not be null.
28898
28899         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
28900         expression happens to be null.
28901
28902         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
28903         members but as of now we don't seem to be able to do anything really useful with it.
28904
28905         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
28906         not the EventBuilder.
28907
28908 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
28909
28910         * cs-tokenizer.cs: Add support for defines.
28911         Add support for #if, #elif, #else, #endif
28912
28913         (eval_var): evaluates a variable.
28914         (eval): stubbed for evaluating functions.
28915
28916         * cs-parser.jay: Pass the defines information
28917
28918         * driver.cs: Add --define command line option.
28919
28920         * decl.cs: Move MemberCore here.
28921
28922         Make it the base class for DeclSpace.  This allows us to catch and
28923         report 108 and 109 for everything now.
28924
28925         * class.cs (TypeContainer.Define): Extract all the members
28926         before populating and emit the warning 108 (new keyword required
28927         to override) instead of having each member implement this.
28928
28929         (MemberCore.Define): New abstract method, we will be using this in
28930         the warning reporting engine in Populate.
28931
28932         (Operator.Define): Adjust to new MemberCore protocol. 
28933
28934         * const.cs (Const): This does not derive from Expression, it is a
28935         temporary object we use to create fields, it is a MemberCore. 
28936
28937         * class.cs (Method.Define): Allow the entry point to be in a
28938         specific class.
28939
28940         * driver.cs: Rewrite the argument handler to clean it up a bit.
28941
28942         * rootcontext.cs: Made it just an auxiliary namespace feature by
28943         making everything static.
28944
28945         * driver.cs: Adapt code to use RootContext type name instead of
28946         instance variable.
28947
28948         * delegate.cs: Remove RootContext argument.
28949
28950         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
28951         argument. 
28952
28953         * class.cs (Event.Define): The lookup can fail.
28954
28955         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
28956
28957         * expression.cs: Resolve the this instance before invoking the code.
28958
28959 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
28960
28961         * cs-parser.jay: Add a production in element_access that allows
28962         the thing to become a "type" reference.  This way we can parse
28963         things like "(string [])" as a type.
28964
28965         Note that this still does not handle the more complex rules of
28966         casts. 
28967
28968
28969         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
28970
28971         * ecore.cs: (CopyNewMethods): new utility function used to
28972         assemble the list of methods from running FindMembers.
28973
28974         (MemberLookup): Rework FindMembers so that 
28975
28976 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
28977
28978         * class.cs (TypeContainer): Remove Delegates who fail to be
28979         defined.
28980
28981         * delegate.cs (Populate): Verify that we dont get null return
28982         values.   TODO: Check for AsAccessible.
28983
28984         * cs-parser.jay: Use basename to emit error 574 (destructor should
28985         have the same name as container class), not the full name.
28986
28987         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
28988         possible representation.  
28989
28990         Also implements integer type suffixes U and L.
28991
28992 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
28993
28994         * expression.cs (ArrayCreation.DoResolve): We need to do the
28995         argument resolution *always*.
28996
28997         * decl.cs: Make this hold the namespace.  Hold the root context as
28998         well.
28999         (LookupType): Move here.
29000
29001         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29002
29003         * location.cs (Row, Name): Fixed the code, it was always returning
29004         references to the first file.
29005
29006         * interface.cs: Register properties defined through interfaces.
29007
29008         * driver.cs: Add support for globbing on the command line
29009
29010         * class.cs (Field): Make it derive from MemberCore as well.
29011         (Event): ditto.
29012
29013 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29014
29015         * class.cs (Event::Define): Check that the type of the event is a delegate
29016         type else flag error #66.
29017
29018         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29019         same.
29020
29021         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29022         values of EntryPoint, CharSet etc etc.
29023
29024         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29025
29026         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29027         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29028         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29029         which needs this to do its work.
29030
29031         * ../errors/cs0066.cs : Add.
29032
29033 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29034
29035         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29036         helper functions.
29037
29038         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29039         clears out the parameters field.
29040         (MemberSignatureCompare): Cleanup
29041
29042         (MemberCore): New base class used to share code between MethodCore
29043         and Property.
29044
29045         (RegisterRequiredImplementations) BindingFlags.Public requires
29046         either BindingFlags.Instace or Static.  Use instance here.
29047
29048         (Property): Refactored code to cope better with the full spec.
29049
29050         * parameter.cs (GetParameterInfo): Return an empty array instead
29051         of null on error.
29052
29053         * class.cs (Property): Abstract or extern properties have no bodies.
29054
29055         * parameter.cs (GetParameterInfo): return a zero-sized array.
29056
29057         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29058         method modifier validation to the typecontainer so we can reuse
29059         this on properties.
29060
29061         (MethodCore.ParameterTypes): return an empty sized array of types.
29062
29063         (Property.Define): Test property modifier validity.
29064
29065         Add tests for sealed/override too.
29066
29067         (Method.Emit): abstract or extern methods have no bodies.
29068
29069 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29070
29071         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29072         thing.
29073
29074         (Method::Define, ::Emit): Modify accordingly.
29075
29076         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29077
29078         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29079
29080         * makefile: Pass in /unsafe.
29081
29082 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29083
29084         * class.cs (MakeKey): Kill routine.
29085
29086         * class.cs (TypeContainer.Define): Correctly define explicit
29087         method implementations (they require the full interface name plus
29088         the method name).
29089
29090         * typemanager.cs: Deply the PtrHashtable here and stop using the
29091         lame keys.  Things work so much better.
29092
29093         This of course broke everyone who depended on `RegisterMethod' to
29094         do the `test for existance' test.  This has to be done elsewhere.
29095
29096         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29097         the object stupid Equals method (because, that like fails all over
29098         the place).  We still do not use it.
29099
29100         * class.cs (TypeContainer.SetRequiredInterface,
29101         TypeContainer.RequireMethods): Killed these two routines and moved
29102         all the functionality to RegisterRequiredImplementations.
29103
29104         (TypeContainer.RegisterRequiredImplementations): This routine now
29105         registers all the implementations required in an array for the
29106         interfaces and abstract methods.  We use an array of structures
29107         which can be computed ahead of time to reduce memory usage and we
29108         also assume that lookups are cheap as most classes will not
29109         implement too many interfaces.
29110
29111         We also avoid creating too many MethodSignatures.
29112
29113         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29114         clear the "pending" bit if we find that there are problems with
29115         the declaration.
29116
29117         (TypeContainer.VerifyPendingMethods): Update to report errors of
29118         methods that look like implementations but are not.
29119
29120         (TypeContainer.Define): Add support for explicit interface method
29121         implementation. 
29122
29123 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29124
29125         * typemanager.cs: Keep track of the parameters here instead of
29126         being a feature of the TypeContainer.
29127
29128         * class.cs: Drop the registration of parameters here, as
29129         InterfaceMethods are also interface declarations.
29130
29131         * delegate.cs: Register methods with the TypeManager not only with
29132         the TypeContainer.  This code was buggy.
29133
29134         * interface.cs: Full registation here.
29135
29136 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29137
29138         * expression.cs: Remove reducer for binary expressions, it can not
29139         be done this way.
29140
29141         * const.cs: Put here the code that used to go into constant.cs
29142
29143         * constant.cs: Put here the code for constants, this is a new base
29144         class for Literals.
29145
29146         * literal.cs: Make Literal derive from Constant.
29147
29148 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29149
29150         * statement.cs (Return.Emit): Report error 157 if the user
29151         attempts to return from a finally block.
29152
29153         (Return.Emit): Instead of emitting a return, jump to the end of
29154         the function.
29155
29156         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29157         LocalBuilder to store the result of the function.  ReturnLabel is
29158         the target where we jump.
29159
29160
29161 2001-12-09  Radek Doulik  <rodo@ximian.com>
29162
29163         * cs-parser.jay: remember alias in current namespace
29164
29165         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29166         namespaces
29167
29168         * class.cs (LookupAlias): lookup alias in my_namespace
29169
29170         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29171         aliases hashtable
29172         (LookupAlias): lookup alias in this and if needed in parent
29173         namespaces
29174
29175 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29176
29177         * support.cs: 
29178
29179         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29180         making things static.  I need this to avoid passing the
29181         TypeContainer when calling ParameterType.
29182
29183         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29184         that did string manipulation to compute the type and then call
29185         GetType.  Use Parameter.ParameterType instead.
29186
29187         * cs-tokenizer.cs: Consume the suffix for floating values.
29188
29189         * expression.cs (ParameterReference): figure out whether this is a
29190         reference parameter or not.  Kill an extra variable by computing
29191         the arg_idx during emission.
29192
29193         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29194         function that returns whether a parameter is an out/ref value or not.
29195
29196         (Parameter.ParameterType): The type of the parameter (base,
29197         without ref/out applied).
29198
29199         (Parameter.Resolve): Perform resolution here.
29200         (Parameter.ExternalType): The full type (with ref/out applied).
29201
29202         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29203         support for expressions on the using statement.
29204
29205 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29206
29207         * statement.cs (Using.EmitLocalVariableDecls): Split the
29208         localvariable handling of the using statement.
29209
29210         (Block.EmitMeta): Keep track of variable count across blocks.  We
29211         were reusing slots on separate branches of blocks.
29212
29213         (Try.Emit): Emit the general code block, we were not emitting it. 
29214
29215         Check the type of the declaration to be an IDisposable or
29216         something that can be implicity converted to it. 
29217
29218         Emit conversions if required.
29219
29220         * ecore.cs (EmptyExpression): New utility class.
29221         (Expression.ImplicitConversionExists): New utility function.
29222
29223 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29224
29225         * statement.cs (Using): Implement.
29226
29227         * expression.cs (LocalVariableReference): Support read only variables.
29228
29229         * statement.cs: Remove the explicit emit for the Leave opcode.
29230         (VariableInfo): Add a readonly field.
29231
29232 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29233
29234         * ecore.cs (ConvCast): new class used to encapsulate the various
29235         explicit integer conversions that works in both checked and
29236         unchecked contexts.
29237
29238         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29239         properly generate the overflow opcodes.
29240
29241 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29242
29243         * statement.cs: The correct type for the EmptyExpression is the
29244         element_type, not the variable type.  Ravi pointed this out.
29245
29246 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29247
29248         * class.cs (Method::Define): Handle PInvoke methods specially
29249         by using DefinePInvokeMethod instead of the usual one.
29250
29251         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29252         above to do the task of extracting information and defining the method.
29253
29254 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29255
29256         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29257         of the condition for string type.
29258
29259         (Emit): Move that here. 
29260
29261         (ArrayCreation::CheckIndices): Keep string literals in their expression
29262         form.
29263
29264         (EmitDynamicInitializers): Handle strings appropriately.
29265
29266 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29267
29268         * codegen.cs (EmitContext): Replace multiple variables with a
29269         single pointer to the current Switch statement.
29270
29271         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29272         EmitContext.
29273
29274 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29275
29276         * statement.cs 
29277
29278         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29279         default'.
29280
29281         (Foreach.Emit): Foreach on arrays was not setting
29282         up the loop variables (for break/continue).
29283
29284         (GotoCase): Semi-implented.
29285
29286 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29287
29288         * attribute.cs (CheckAttribute): Handle system attributes by using
29289         Attribute.GetAttributes to examine information we need.
29290
29291         (GetValidPlaces): Same here.
29292
29293         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29294
29295         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29296
29297         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29298
29299         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29300
29301         (Method::Emit): Handle the case when we are a PInvoke method.
29302
29303 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29304
29305         * expression.cs: Use ResolveWithSimpleName on compound names.
29306
29307 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29308
29309         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29310         before trying to reduce it.
29311
29312         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29313
29314         * constant.cs (LookupConstantValue): Implement.
29315
29316         (EmitConstant): Use the above in emitting the constant.
29317
29318         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29319         that are user-defined by doing a LookupConstantValue on them.
29320
29321         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29322         too, like above.
29323
29324 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29325
29326         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29327
29328         (BaseAccess.DoResolve): Implement.
29329
29330         (MemberAccess.DoResolve): Split this routine into a
29331         ResolveMemberAccess routine that can be used independently
29332
29333 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
29334
29335         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
29336         As that share bits of the implementation.  Is returns a boolean,
29337         while As returns the Type that is being probed.
29338
29339 2001-12-01  Ravi Pratap  <ravi@ximian.com>
29340
29341         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
29342         instead of a Literal - much easier.
29343
29344         (EnumInTransit): Remove - utterly useless :-)
29345
29346         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
29347
29348         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
29349
29350         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
29351         chain when we have no associated expression.
29352
29353 2001-11-30  Ravi Pratap  <ravi@ximian.com>
29354
29355         * constant.cs (Define): Use Location while reporting the errror.
29356
29357         Also emit a warning when 'new' is used and there is no inherited
29358         member to hide.
29359
29360         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
29361         populated.
29362
29363         (LookupEnumValue): Implement to lookup an enum member's value and define it
29364         if necessary.
29365
29366         (Populate): Re-write accordingly to use the above routine.
29367
29368 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
29369
29370         * expression.cs (This): Fix prototype for DoResolveLValue to
29371         override the base class DoResolveLValue.
29372
29373         * cs-parser.cs: Report errors cs574 and cs575 (destructor
29374         declarations) 
29375
29376         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
29377         (we need to load the address of the field here).  This fixes
29378         test-22. 
29379
29380         (FieldExpr.DoResolveLValue): Call the DoResolve
29381         function to initialize the Instance expression.
29382
29383         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
29384         correctly the GetEnumerator operation on a value type.
29385
29386         * cs-parser.jay: Add more simple parsing error catches.
29387
29388         * statement.cs (Switch): Add support for string switches.
29389         Handle null specially.
29390
29391         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
29392
29393 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29394
29395         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29396
29397         (declare_local_constant): New helper function.
29398
29399         * statement.cs (AddConstant): Keep a separate record of constants
29400
29401         (IsConstant): Implement to determine if a variable is a constant.
29402
29403         (GetConstantExpression): Implement.
29404
29405         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29406
29407         * statement.cs (IsVariableDefined): Re-write.
29408
29409 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29410
29411         * class.cs (TypeContainer::FindMembers): Look for constants
29412         in the case when we are looking for MemberTypes.Field
29413
29414         * expression.cs (MemberAccess::DoResolve): Check that in the
29415         case we are a FieldExpr and a Literal, we are not being accessed
29416         by an instance reference.
29417
29418         * cs-parser.jay (local_constant_declaration): Implement.
29419
29420         (declaration_statement): Implement for constant declarations.
29421
29422 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29423
29424         * statement.cs (Switch): Catch double defaults.
29425
29426         (Switch): More work on the switch() statement
29427         implementation.  It works for integral values now, need to finish
29428         string support.
29429
29430
29431 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29432
29433         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29434         integer literals into other integer literals.  To be used by
29435         switch. 
29436
29437 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29438
29439         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29440         some memory.
29441
29442         (EmitDynamicInitializers): Cope with the above since we extract data
29443         directly from ArrayData now.
29444
29445         (ExpectInitializers): Keep track of whether initializers are mandatory
29446         or not.
29447
29448         (Bounds): Make it a hashtable to prevent the same dimension being 
29449         recorded for every element in that dimension.
29450
29451         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29452         from being found.
29453
29454         Also fix bug which was causing the indices to be emitted in the reverse
29455         order.
29456
29457 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29458
29459         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29460         unfinished.  They do not work, because the underlying code is
29461         sloppy.
29462
29463 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29464
29465         * cs-parser.jay: Remove bogus fixme.
29466
29467         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29468         on Switch statement.
29469
29470 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29471
29472         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29473         the same. 
29474
29475         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29476         parameter. Apparently, any expression is allowed. 
29477
29478         (ValidateInitializers): Update accordingly.
29479
29480         (CheckIndices): Fix some tricky bugs thanks to recursion.
29481
29482         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29483         I was being completely brain-dead.
29484
29485         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29486         and re-write acordingly.
29487
29488         (DelegateInvocation): Re-write accordingly.
29489
29490         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29491
29492         (MakeByteBlob): Handle types more correctly.
29493
29494         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29495         initialization from expressions but it is incomplete because I am a complete
29496         Dodo :-|
29497
29498 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29499
29500         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29501         on If.  Basically, we have to return `true' (ie, we do return to
29502         our caller) only if both branches of the if return.
29503
29504         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29505         short-circuit operators, handle them as short circuit operators. 
29506
29507         (Cast.DoResolve): Resolve type.
29508         (Cast.Cast): Take an expression as the target type.
29509
29510         * cs-parser.jay (cast_expression): Remove old hack that only
29511         allowed a limited set of types to be handled.  Now we take a
29512         unary_expression and we resolve to a type during semantic
29513         analysis.
29514
29515         Use the grammar productions from Rhys to handle casts (this is
29516         not complete like Rhys syntax yet, we fail to handle that corner
29517         case that C# has regarding (-x), but we will get there.
29518
29519 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29520
29521         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29522         field which is an array type.
29523
29524         * cs-parser.jay (declare_local_variables): Support array initialization too.
29525
29526         * typemanager.cs (MakeKey): Implement.
29527
29528         (everywhere): Use the above appropriately.
29529
29530         * cs-parser.jay (for_statement): Update for array initialization while
29531         declaring variables.
29532
29533         * ecore.cs : The error message was correct, it's the variable's names that
29534         were misleading ;-) Make the code more readable.
29535
29536         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29537         the correct type etc.
29538
29539         (ConvertExplicit): Handle Enum types by examining the underlying type.
29540
29541 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29542
29543         * parameter.cs (GetCallingConvention): Always return
29544         CallingConventions.Standard for now.
29545
29546 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29547
29548         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29549         and `r' after calling DoNumericPromotions.
29550
29551         * ecore.cs: Fix error message (the types were in the wrong order).
29552
29553         * statement.cs (Foreach.ProbeCollectionType): Need to pass
29554         BindingFlags.Instance as well 
29555
29556         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
29557         implicit int literal conversion in an empty cast so that we
29558         propagate the right type upstream.
29559
29560         (UnboxCast): new class used to unbox value types.
29561         (Expression.ConvertExplicit): Add explicit type conversions done
29562         by unboxing.
29563
29564         (Expression.ImplicitNumericConversion): Oops, forgot to test for
29565         the target type before applying the implicit LongLiterals to ULong
29566         literal cast.
29567
29568 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
29569
29570         * cs-parser.jay (for_statement): Reworked the way For works: now
29571         we declare manually any variables that are introduced in
29572         for_initializer to solve the problem of having out-of-band code
29573         emition (that is what got for broken).
29574
29575         (declaration_statement): Perform the actual variable declaration
29576         that used to be done in local_variable_declaration here.
29577
29578         (local_variable_declaration): Do not declare anything, just pass
29579         the information on a DictionaryEntry
29580
29581 2001-11-20  Ravi Pratap  <ravi@ximian.com>
29582
29583         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
29584         re-write of the logic to now make it recursive.
29585
29586         (UpdateIndices): Re-write accordingly.
29587
29588         Store element data in a separate ArrayData list in the above methods.
29589
29590         (MakeByteBlob): Implement to dump the array data into a byte array.
29591
29592 2001-11-19  Ravi Pratap  <ravi@ximian.com>
29593
29594         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
29595         into CheckIndices.
29596
29597         * constant.cs (Define): Implement.
29598
29599         (EmitConstant): Re-write fully.
29600
29601         Pass in location info.
29602
29603         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
29604         respectively.
29605
29606         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
29607         DictionaryEntry since we need location info too.
29608
29609         (constant_declaration): Update accordingly.
29610
29611         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
29612         code into another method : UpdateIndices.
29613
29614 2001-11-18  Ravi Pratap  <ravi@ximian.com>
29615
29616         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
29617         some type checking etc.
29618
29619 2001-11-17  Ravi Pratap  <ravi@ximian.com>
29620
29621         * expression.cs (ArrayCreation::ValidateInitializers): Implement
29622         bits to provide dimension info if the user skips doing that.
29623
29624         Update second constructor to store the rank correctly.
29625
29626 2001-11-16  Ravi Pratap  <ravi@ximian.com>
29627
29628         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
29629         and try to implement.
29630
29631         * ../errors/cs0150.cs : Add.
29632
29633         * ../errors/cs0178.cs : Add.
29634
29635 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
29636
29637         * statement.cs: Implement foreach on multi-dimensional arrays. 
29638
29639         * parameter.cs (Parameters.GetParameterByName): Also lookup the
29640         name of the params argument.
29641
29642         * expression.cs: Use EmitStoreOpcode to get the right opcode while
29643         initializing the array.
29644
29645         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
29646         we can use this elsewhere.
29647
29648         * statement.cs: Finish implementation of foreach for single
29649         dimension arrays.
29650
29651         * cs-parser.jay: Use an out-of-band stack to pass information
29652         around, I wonder why I need this.
29653
29654         foreach_block: Make the new foreach_block the current_block.
29655
29656         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
29657         function used to return a static Parameters structure.  Used for
29658         empty parameters, as those are created very frequently.
29659
29660         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
29661
29662 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29663
29664         * interface.cs : Default modifier is private, not public. The
29665         make verify test passes again.
29666
29667 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29668
29669         * support.cs (ReflectionParameters): Fix logic to determine
29670         whether the last parameter is a params one. Test 9 passes again.
29671
29672         * delegate.cs (Populate): Register the builders we define with
29673         RegisterParameterForBuilder. Test 19 passes again.
29674
29675         * cs-parser.jay (property_declaration): Reference $6 instead
29676         of $$ to get at the location.
29677
29678         (indexer_declaration): Similar stuff.
29679
29680         (attribute): Ditto.
29681
29682         * class.cs (Property): Register parameters for the Get and Set methods
29683         if they exist. Test 23 passes again.
29684
29685         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
29686         call to EmitArguments as we are sure there aren't any params arguments. 
29687         Test 32 passes again.
29688
29689         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
29690         IndexOutOfRangeException. 
29691
29692         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
29693         Test 33 now passes again.
29694
29695 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
29696
29697         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
29698         broke a bunch of things.  Will have to come up with a better way
29699         of tracking locations.
29700
29701         * statement.cs: Implemented foreach for single dimension arrays.
29702
29703 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29704
29705         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
29706         an error.  This removes the lookup from the critical path.
29707
29708         * cs-parser.jay: Removed use of temporary_loc, which is completely
29709         broken. 
29710
29711 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
29712
29713         * support.cs (ReflectionParameters.ParameterModifier): Report
29714         whether the argument is a PARAMS argument or not.
29715
29716         * class.cs: Set the attribute `ParamArrayAttribute' on the
29717         parameter argument.
29718
29719         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
29720         and cons_param_array_attribute (ConstructorInfo for
29721         ParamArrayAttribute)., 
29722
29723         * codegen.cs: Emit the return using the `Return' statement, that
29724         way we can report the error correctly for missing return values. 
29725
29726         * class.cs (Method.Emit): Clean up.
29727
29728         * expression.cs (Argument.Resolve): Take another argument: the
29729         location where this argument is used.  Notice that this is not
29730         part of the "Argument" class as to reduce the size of the
29731         structure (we know the approximate location anyways).
29732
29733         Test if the argument is a variable-reference, if not, then
29734         complain with a 206.
29735
29736         (Argument.Emit): Emit addresses of variables.
29737
29738         (Argument.FullDesc): Simplify.
29739
29740         (Invocation.DoResolve): Update for Argument.Resolve.
29741
29742         (ElementAccess.DoResolve): ditto.
29743
29744         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
29745         method should be virtual, as this method is always virtual.
29746
29747         (NewDelegate.DoResolve): Update for Argument.Resolve.
29748
29749         * class.cs (ConstructorInitializer.DoResolve): ditto.
29750
29751         * attribute.cs (Attribute.Resolve): ditto.
29752
29753 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
29754
29755         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
29756
29757         * expression.cs (ParameterReference): Drop IStackStorage and implement
29758         IAssignMethod instead. 
29759
29760         (LocalVariableReference): ditto.
29761
29762         * ecore.cs (FieldExpr): Drop IStackStorage and implement
29763         IAssignMethod instead. 
29764
29765 2001-11-13  Miguel de Icaza <miguel@ximian.com>
29766
29767         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
29768         enumerations that are used in heavily used structures derive from
29769         byte in a laughable and pathetic attempt to reduce memory usage.
29770         This is the kind of pre-optimzations that you should not do at
29771         home without adult supervision.
29772
29773         * expression.cs (UnaryMutator): New class, used to handle ++ and
29774         -- separatedly from the other unary operators.  Cleans up the
29775         code, and kills the ExpressionStatement dependency in Unary.
29776
29777         (Unary): Removed `method' and `Arguments' from this class, making
29778         it smaller, and moving it all to SimpleCall, so I can reuse this
29779         code in other locations and avoid creating a lot of transient data
29780         strucutres when not required.
29781
29782         * cs-parser.jay: Adjust for new changes.
29783
29784 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
29785
29786         * enum.cs (Enum.Populate): If there is a failure during
29787         definition, return
29788
29789         * cs-parser.jay (opt_enum_base): we used to catch type errors
29790         here, but this is really incorrect.  The type error should be
29791         catched during semantic analysis.
29792
29793 2001-12-11  Ravi Pratap  <ravi@ximian.com>
29794
29795         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
29796         current_local_parameters as expected since I, in my stupidity, had forgotten
29797         to do this :-)
29798
29799         * attribute.cs (GetValidPlaces): Fix stupid bug.
29800
29801         * class.cs (Method::Emit): Perform check on applicability of attributes.
29802
29803         (Constructor::Emit): Ditto.
29804
29805         (Field::Emit): Ditto.
29806
29807         (Field.Location): Store location information.
29808
29809         (Property, Event, Indexer, Operator): Ditto.
29810
29811         * cs-parser.jay (field_declaration): Pass in location for each field.
29812
29813         * ../errors/cs0592.cs : Add.
29814
29815 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29816
29817         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
29818
29819         (InitCoreTypes): Update accordingly.
29820
29821         (RegisterAttrType, LookupAttr): Implement.
29822
29823         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
29824         info about the same.
29825
29826         (Resolve): Update to populate the above as necessary.
29827
29828         (Error592): Helper.
29829
29830         (GetValidPlaces): Helper to the above.
29831
29832         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
29833
29834         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
29835
29836 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29837
29838         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
29839
29840         * ../errors/cs0617.cs : Add.
29841
29842 2001-11-11  Ravi Pratap  <ravi@ximian.com>
29843
29844         * enum.cs (Emit): Rename to Populate to be more consistent with what
29845         we expect it to do and when exactly it is called.
29846
29847         * class.cs, rootcontext.cs : Update accordingly.
29848
29849         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
29850         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
29851
29852         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
29853
29854         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
29855         of a fieldinfo using the above, when dealing with a FieldBuilder.
29856
29857 2001-11-10  Ravi Pratap  <ravi@ximian.com>
29858
29859         * ../errors/cs0031.cs : Add.
29860
29861         * ../errors/cs1008.cs : Add.
29862
29863         * ../errrors/cs0543.cs : Add.
29864
29865         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
29866         enum type.
29867
29868         (FindMembers): Implement.
29869
29870         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
29871         enums and delegates too.
29872
29873         (enum_types): Rename to builder_to_enum.
29874
29875         (delegate_types): Rename to builder_to_delegate.
29876
29877         * delegate.cs (FindMembers): Implement.
29878
29879 2001-11-09  Ravi Pratap  <ravi@ximian.com>
29880
29881         * typemanager.cs (IsEnumType): Implement.
29882
29883         * enum.cs (Emit): Re-write parts to account for the underlying type
29884         better and perform checking etc.
29885
29886         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
29887         of the underlying type.
29888
29889         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
29890         value
29891
29892         * enum.cs (error31): Helper to report error #31.
29893
29894         * cs-parser.jay (enum_declaration): Store location of each member too.
29895
29896         * enum.cs (member_to_location): New hashtable. 
29897
29898         (AddEnumMember): Update location hashtable.
29899
29900         (Emit): Use the location of each member while reporting errors.
29901
29902 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29903
29904         * cs-parser.jay: A for_initializer if is a
29905         local_variable_declaration really ammount to have an implicit
29906         block with the variable declaration and no initializer for for.
29907
29908         * statement.cs (For.Emit): Cope with null initializers.
29909
29910         This fixes the infinite loop on for initializers.
29911
29912 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
29913
29914         * enum.cs: More cleanup.
29915
29916         * ecore.cs: Remove dead code.
29917
29918         * class.cs (Property.Emit): More simplification.
29919         (Event.Emit): ditto.
29920
29921         Reworked to have less levels of indentation.
29922
29923 2001-11-08  Ravi Pratap  <ravi@ximian.com>
29924
29925         * class.cs (Property): Emit attributes.
29926
29927         (Field): Ditto.
29928
29929         (Event): Ditto.
29930
29931         (Indexer): Ditto.
29932
29933         (Operator): Ditto.
29934
29935         * enum.cs (Emit): Ditto.
29936
29937         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
29938         Enums too.
29939
29940         * class.cs (Field, Event, etc.): Move attribute generation into the
29941         Emit method everywhere.
29942
29943         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
29944         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
29945         as we had no way of defining nested enums !
29946
29947         * rootcontext.cs : Adjust code accordingly.
29948
29949         * typemanager.cs (AddEnumType): To keep track of enum types separately.
29950
29951 2001-11-07  Ravi Pratap  <ravi@ximian.com>
29952
29953         * expression.cs (EvalConstantExpression): Move into ecore.cs
29954
29955         * enum.cs (Enum): Rename some members and make them public and readonly
29956         according to our convention.
29957
29958         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
29959         nothing else.
29960
29961         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
29962
29963         (Enum::Emit): Write a simple version for now which doesn't try to compute
29964         expressions. I shall modify this to be more robust in just a while.
29965
29966         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
29967
29968         (TypeContainer::CloseType): Create the Enum types too.
29969
29970         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
29971
29972         * expression.cs (EvalConstantExpression): Get rid of completely.
29973
29974         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
29975         user-defined values and other cases.
29976
29977         (IsValidEnumLiteral): Helper function.
29978
29979         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
29980         out there in the case we had a literal FieldExpr.
29981
29982         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
29983
29984         (Literalize): Revamp a bit to take two arguments.
29985
29986         (EnumLiteral): New class which derives from Literal to wrap enum literals.
29987
29988 2001-11-06  Ravi Pratap  <ravi@ximian.com>
29989
29990         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
29991
29992         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
29993
29994         (Resolve): Use the above to ensure we have proper initializers.
29995
29996 2001-11-05  Ravi Pratap  <ravi@ximian.com>
29997
29998         * expression.cs (Expression::EvalConstantExpression): New method to 
29999         evaluate constant expressions.
30000
30001         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30002
30003 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30004
30005         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30006         in an array.
30007
30008         (Binary.ResolveOperator): Handle operator != (object a, object b)
30009         and operator == (object a, object b);
30010
30011         (Binary.DoNumericPromotions): Indicate whether the numeric
30012         promotion was possible.
30013
30014         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30015         Implement.  
30016
30017         Made the ArrayAccess implement interface IAssignMethod instead of
30018         IStackStore as the order in which arguments are passed reflects
30019         this.
30020
30021         * assign.cs: Instead of using expr.ExprClass to select the way of
30022         assinging, probe for the IStackStore/IAssignMethod interfaces.
30023
30024         * typemanager.cs: Load InitializeArray definition.
30025
30026         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30027         static data that can be used to initialize arrays. 
30028
30029 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30030
30031         * expression.cs: Handle operator== and operator!= for booleans.
30032
30033         (Conditioal.Reduce): Implement reducer for the ?: operator.
30034
30035         (Conditional.Resolve): Implement dead code elimination.
30036
30037         (Binary.Resolve): Catch string literals and return a new
30038         concatenated string.
30039
30040         (Unary.Reduce): Implement reduction of unary expressions.
30041
30042         * ecore.cs: Split out the expression core handling here.
30043
30044         (Expression.Reduce): New method used to perform constant folding
30045         and CSE.  This is needed to support constant-expressions. 
30046
30047         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30048         targets, and optimize for !x.
30049
30050 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30051
30052         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30053         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30054         set custom atttributes.
30055
30056         * literal.cs (Literal::GetValue): New abstract method to return the actual
30057         value of the literal, cast as an object.
30058
30059         (*Literal): Implement GetValue method.
30060
30061         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30062         expressions to the arraylist but objects of type Argument.
30063
30064         * class.cs (TypeContainer::Emit): Emit our attributes too.
30065
30066         (Method::Emit, Constructor::Emit): Ditto.
30067
30068         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30069         to be ignoring earlier.
30070
30071 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30072
30073         * attribute.cs (AttributeSection::Define): Implement to do the business
30074         of constructing a CustomAttributeBuilder.
30075
30076         (Attribute): New trivial class. Increases readability of code.  
30077
30078         * cs-parser.jay : Update accordingly.
30079
30080         (positional_argument_list, named_argument_list, named_argument): New rules
30081
30082         (attribute_arguments): Use the above so that we are more correct.
30083
30084 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30085
30086         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30087         to perform all checks for a method with a params parameter.
30088
30089         (Invocation::OverloadResolve): Update to use the above method and therefore
30090         cope correctly with params method invocations.
30091
30092         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30093         params too.
30094
30095         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30096         constructors in our parent too because we can't afford to miss out on 
30097         protected ones ;-)
30098
30099         * attribute.cs (AttributeSection): New name for the class Attribute
30100
30101         Other trivial changes to improve readability.
30102
30103         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30104         use the new class names.
30105
30106 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30107
30108         * class.cs (Method::Define): Complete definition for params types too
30109
30110         (Indexer::Define): Ditto.
30111
30112         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30113         Cope everywhere with a request for info about the array parameter.
30114
30115 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30116
30117         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30118
30119         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30120         local_variable_type to extract the string corresponding to the type.
30121
30122         (local_variable_type): Fixup the action to use the new helper method.
30123
30124         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30125         go.
30126
30127         * expression.cs : Clean out code which uses the above.
30128
30129 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30130
30131         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30132         and bale out if necessary by returning a false.
30133
30134         (RegisterProperty): Ditto.
30135
30136         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30137         and print out appropriate error messages.
30138
30139         * interface.cs (everywhere): Ditto.
30140
30141         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30142         location to constructor.
30143
30144         * class.cs (Property, Event, Indexer): Update accordingly.
30145
30146         * ../errors/cs111.cs : Added.
30147
30148         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30149         of a method, as laid down by the spec.
30150
30151         (Invocation::OverloadResolve): Use the above method.
30152
30153 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30154
30155         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30156         now take a TypeContainer and a Parameters object.
30157
30158         (ParameterData): Modify return type of ParameterModifier method to be 
30159         Parameter.Modifier and not a string.
30160
30161         (ReflectionParameters, InternalParameters): Update accordingly.
30162
30163         * expression.cs (Argument::GetParameterModifier): Same here.
30164
30165         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30166         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30167         symbol in it at all so maybe this is only for now.
30168
30169 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30170
30171         * support.cs (InternalParameters): Constructor now takes an extra argument 
30172         which is the actual Parameters class.
30173
30174         (ParameterDesc): Update to provide info on ref/out modifiers.
30175
30176         * class.cs (everywhere): Update call to InternalParameters to pass in
30177         the second argument too.
30178
30179         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30180         to return the modifier info [ref/out etc]
30181
30182         (InternalParameters, ReflectionParameters): Implement the above.
30183
30184         * expression.cs (Argument::ParameterModifier): Similar function to return
30185         info about the argument's modifiers.
30186
30187         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30188         too.
30189
30190         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30191         a new SetFormalParameters object which we pass to InternalParameters.
30192
30193 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30194
30195         * expression.cs (NewArray): Merge into the ArrayCreation class.
30196
30197 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30198
30199         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30200         NewUserdefinedArray into one as there wasn't much of a use in having
30201         two separate ones.
30202
30203         * expression.cs (Argument): Change field's name to ArgType from Type.
30204
30205         (Type): New readonly property which returns the proper type, taking into 
30206         account ref/out modifiers.
30207
30208         (everywhere): Adjust code accordingly for the above.
30209
30210         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30211         whether we are emitting for a ref or out parameter.
30212
30213         * expression.cs (Argument::Emit): Use the above field to set the state.
30214
30215         (LocalVariableReference::Emit): Update to honour the flag and emit the
30216         right stuff.
30217
30218         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30219
30220         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30221
30222         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30223
30224         (ReflectionParameters, InternalParameters): Implement the above method.
30225
30226         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30227         reporting errors.
30228
30229         (Invocation::FullMethodDesc): Ditto. 
30230
30231 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30232
30233         * cs-parser.jay: Add extra production for the second form of array
30234         creation. 
30235
30236         * expression.cs (ArrayCreation): Update to reflect the above
30237         change. 
30238
30239         * Small changes to prepare for Array initialization.
30240
30241 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30242
30243         * typemanager.cs (ImplementsInterface): interface might be null;
30244         Deal with this problem;
30245
30246         Also, we do store negative hits on the cache (null values), so use
30247         this instead of calling t.GetInterfaces on the type everytime.
30248
30249 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30250
30251         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30252
30253         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30254         split functionality out into different classes.
30255
30256         (New::FormArrayType): Move into NewBuiltinArray.
30257
30258         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30259         quite useless.
30260
30261         (NewBuiltinArray): New class to handle creation of built-in arrays.
30262
30263         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30264         account creation of one-dimensional arrays.
30265
30266         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30267
30268         (NewUserdefinedArray::DoResolve): Implement.
30269
30270         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30271
30272         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30273         we maintain inside the TypeManager. This is necessary to perform lookups on the
30274         module builder.
30275
30276         (LookupType): Update to perform GetType on the module builders too.     
30277
30278         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30279
30280         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30281
30282 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30283
30284         * expression.cs (New::DoResolve): Implement guts of array creation.
30285
30286         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30287
30288 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30289
30290         * expression.cs: Fix bug I introduced lsat night that broke
30291         Delegates. 
30292
30293         (Expression.Resolve): Report a 246 error (can not resolve name)
30294         if we find a SimpleName in the stream.
30295
30296         (Expression.ResolveLValue): Ditto.
30297
30298         (Expression.ResolveWithSimpleName): This function is a variant of
30299         ResolveName, this one allows SimpleNames to be returned without a
30300         warning.  The only consumer of SimpleNames is MemberAccess
30301
30302 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30303
30304         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30305         might arrive here.  I have my doubts that this is correct.
30306
30307         * statement.cs (Lock): Implement lock statement.
30308
30309         * cs-parser.jay: Small fixes to support `lock' and `using'
30310
30311         * cs-tokenizer.cs: Remove extra space
30312
30313         * driver.cs: New flag --checked, allows to turn on integer math
30314         checking. 
30315
30316         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30317         Threading.Monitor.Exit 
30318
30319 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30320
30321         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30322         Expression Class to be IndexerAccess.
30323
30324         Notice that Indexer::DoResolve sets the eclass to Value.
30325
30326 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30327
30328         * class.cs (TypeContainer::Emit): Emit code for indexers.
30329
30330         * assign.cs (IAssignMethod): New interface implemented by Indexers
30331         and Properties for handling assignment.
30332
30333         (Assign::Emit): Simplify and reuse code. 
30334
30335         * expression.cs (IndexerAccess, PropertyExpr): Implement
30336         IAssignMethod, clean up old code. 
30337
30338 2001-10-22  Ravi Pratap  <ravi@ximian.com>
30339
30340         * typemanager.cs (ImplementsInterface): New method to determine if a type
30341         implements a given interface. Provides a nice cache too.
30342
30343         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
30344         method.
30345
30346         (ConvertReferenceExplicit): Ditto.
30347
30348         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
30349         various methods, with correct names etc.
30350
30351         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
30352         Operator.UnaryNegation.
30353
30354         * cs-parser.jay (operator_declarator): Be a little clever in the case where
30355         we have a unary plus or minus operator.
30356
30357         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
30358         UnaryMinus.
30359
30360         * everywhere : update accordingly.
30361
30362         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
30363         respectively.
30364
30365         * class.cs (Method::Define): For the case where we are implementing a method
30366         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
30367         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
30368
30369 2001-10-21  Ravi Pratap  <ravi@ximian.com>
30370
30371         * interface.cs (FindMembers): Implement to work around S.R.E
30372         lameness.
30373
30374         * typemanager.cs (IsInterfaceType): Implement.
30375
30376         (FindMembers): Update to handle interface types too.
30377
30378         * expression.cs (ImplicitReferenceConversion): Re-write bits which
30379         use IsAssignableFrom as that is not correct - it doesn't work.
30380
30381         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
30382         and accordingly override EmitStatement.
30383
30384         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
30385         using the correct logic :-)
30386
30387 2001-10-19  Ravi Pratap  <ravi@ximian.com>
30388
30389         * ../errors/cs-11.cs : Add to demonstrate error -11 
30390
30391 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
30392
30393         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30394         then pass this as a hint to ResolveLValue.
30395
30396         * expression.cs (FieldExpr): Add Location information
30397
30398         (FieldExpr::LValueResolve): Report assignment to readonly
30399         variable. 
30400
30401         (Expression::ExprClassFromMemberInfo): Pass location information.
30402
30403         (Expression::ResolveLValue): Add new method that resolves an
30404         LValue. 
30405
30406         (Expression::DoResolveLValue): Default invocation calls
30407         DoResolve. 
30408
30409         (Indexers): New class used to keep track of indexers in a given
30410         Type. 
30411
30412         (IStackStore): Renamed from LValue, as it did not really describe
30413         what this did.  Also ResolveLValue is gone from this interface and
30414         now is part of Expression.
30415
30416         (ElementAccess): Depending on the element access type
30417
30418         * typemanager.cs: Add `indexer_name_type' as a Core type
30419         (System.Runtime.CompilerServices.IndexerNameAttribute)
30420
30421         * statement.cs (Goto): Take a location.
30422
30423 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30424
30425         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30426         if two delegates are compatible.
30427
30428         (NewDelegate::DoResolve): Update to take care of the case when
30429         we instantiate a delegate from another delegate.
30430
30431         * typemanager.cs (FindMembers): Don't even try to look up members
30432         of Delegate types for now.
30433
30434 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30435
30436         * delegate.cs (NewDelegate): New class to take care of delegate
30437         instantiation.
30438
30439         * expression.cs (New): Split the delegate related code out into 
30440         the NewDelegate class.
30441
30442         * delegate.cs (DelegateInvocation): New class to handle delegate 
30443         invocation.
30444
30445         * expression.cs (Invocation): Split out delegate related code into
30446         the DelegateInvocation class.
30447
30448 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30449
30450         * expression.cs (New::DoResolve): Implement delegate creation fully
30451         and according to the spec.
30452
30453         (New::DoEmit): Update to handle delegates differently.
30454
30455         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30456         because of which we were printing out arguments in reverse order !
30457
30458         * delegate.cs (VerifyMethod): Implement to check if the given method
30459         matches the delegate.
30460
30461         (FullDelegateDesc): Implement.
30462
30463         (VerifyApplicability): Implement.
30464
30465         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30466         delegate invocations too.
30467
30468         (Invocation::Emit): Ditto.
30469
30470         * ../errors/cs1593.cs : Added.
30471
30472         * ../errors/cs1594.cs : Added.
30473
30474         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30475
30476 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30477
30478         * typemanager.cs (intptr_type): Core type for System.IntPtr
30479
30480         (InitCoreTypes): Update for the same.
30481
30482         (iasyncresult_type, asynccallback_type): Ditto.
30483
30484         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30485         correct.
30486
30487         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30488         too.
30489
30490         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30491         the builders for the 4 members of a delegate type :-)
30492
30493         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30494         type.
30495
30496         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30497
30498         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30499
30500 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30501
30502         * statement.cs (Break::Emit): Implement.   
30503         (Continue::Emit): Implement.
30504
30505         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30506         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30507         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30508         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30509         end loop
30510
30511         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30512         properties that track the label for the current loop (begin of the
30513         loop and end of the loop).
30514
30515 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30516
30517         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30518         use of emitting anything at all.
30519
30520         * class.cs, rootcontext.cs : Get rid of calls to the same.
30521
30522         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30523
30524         (Populate): Define the constructor correctly and set the implementation
30525         attributes.
30526
30527         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30528         have been defined.
30529
30530         (AddDelegateType): Implement.
30531
30532         (IsDelegateType): Implement helper method.
30533
30534         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30535
30536         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30537         and accordingly handle it.
30538
30539         * delegate.cs (Populate): Take TypeContainer argument.
30540         Implement bits to define the Invoke method. However, I still haven't figured out
30541         how to take care of the native int bit :-(
30542
30543         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30544         Qualify the name of the delegate, not its return type !
30545
30546         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30547         conversion.
30548
30549         (StandardConversionExists): Checking for array types turns out to be recursive.
30550
30551         (ConvertReferenceExplicit): Implement array conversion.
30552
30553         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
30554
30555 2001-10-12  Ravi Pratap  <ravi@ximian.com>
30556
30557         * cs-parser.jay (delegate_declaration): Store the fully qualified
30558         name as it is a type declaration.
30559
30560         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
30561         readonly.
30562
30563         (DefineDelegate): Renamed from Define. Does the same thing essentially,
30564         as TypeContainer::DefineType.
30565
30566         (Populate): Method in which all the definition of the various methods (Invoke)
30567         etc is done.
30568
30569         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
30570         see.
30571
30572         (CloseDelegate): Finally creates the delegate.
30573
30574         * class.cs (TypeContainer::DefineType): Update to define delegates.
30575         (Populate, Emit and CloseType): Do the same thing here too.
30576
30577         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
30578         delegates in all these operations.
30579
30580 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
30581
30582         * expression.cs: LocalTemporary: a new expression used to
30583         reference a temporary that has been created.
30584
30585         * assign.cs: Handle PropertyAccess back here, so that we can
30586         provide the proper semantic access to properties.
30587
30588         * expression.cs (Expression::ConvertReferenceExplicit): Implement
30589         a few more explicit conversions. 
30590
30591         * modifiers.cs: `NEW' modifier maps to HideBySig.
30592
30593         * expression.cs (PropertyExpr): Make this into an
30594         ExpressionStatement, and support the EmitStatement code path. 
30595
30596         Perform get/set error checking, clean up the interface.
30597
30598         * assign.cs: recognize PropertyExprs as targets, and if so, turn
30599         them into toplevel access objects.
30600
30601 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
30602
30603         * expression.cs: PropertyExpr::PropertyExpr: use work around the
30604         SRE.
30605
30606         * typemanager.cs: Keep track here of our PropertyBuilders again to
30607         work around lameness in SRE.
30608
30609 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
30610
30611         * expression.cs (LValue::LValueResolve): New method in the
30612         interface, used to perform a second resolution pass for LValues. 
30613
30614         (This::DoResolve): Catch the use of this in static methods.
30615
30616         (This::LValueResolve): Implement.
30617
30618         (This::Store): Remove warning, assigning to `this' in structures
30619         is 
30620
30621         (Invocation::Emit): Deal with invocation of
30622         methods on value types.  We need to pass the address to structure
30623         methods rather than the object itself.  (The equivalent code to
30624         emit "this" for structures leaves the entire structure on the
30625         stack instead of a pointer to it). 
30626
30627         (ParameterReference::DoResolve): Compute the real index for the
30628         argument based on whether the method takes or not a `this' pointer
30629         (ie, the method is static).
30630
30631         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
30632         value types returned from functions when we need to invoke a
30633         method on the sturcture.
30634
30635
30636 2001-10-11  Ravi Pratap  <ravi@ximian.com>
30637
30638         * class.cs (TypeContainer::DefineType): Method to actually do the business of
30639         defining the type in the Modulebuilder or Typebuilder. This is to take
30640         care of nested types which need to be defined on the TypeBuilder using
30641         DefineNestedMethod.
30642
30643         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
30644         methods in RootContext, only ported to be part of TypeContainer.
30645
30646         (TypeContainer::GetInterfaceOrClass): Ditto.
30647
30648         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
30649
30650         * interface.cs (Interface::DefineInterface): New method. Does exactly
30651         what RootContext.CreateInterface did earlier, only it takes care of nested types 
30652         too.
30653
30654         (Interface::GetInterfaces): Move from RootContext here and port.
30655
30656         (Interface::GetInterfaceByName): Same here.
30657
30658         * rootcontext.cs (ResolveTree): Re-write.
30659
30660         (PopulateTypes): Re-write.
30661
30662         * class.cs (TypeContainer::Populate): Populate nested types too.
30663         (TypeContainer::Emit): Emit nested members too.
30664
30665         * typemanager.cs (AddUserType): Do not make use of the FullName property,
30666         instead just use the name argument passed in as it is already fully
30667         qualified.
30668
30669         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
30670         to TypeContainer mapping to see if a type is user-defined.
30671
30672         * class.cs (TypeContainer::CloseType): Implement. 
30673
30674         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
30675         the default constructor.
30676
30677         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
30678         twice.
30679
30680         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
30681
30682         * interface.cs (CloseType): Create the type here.
30683
30684         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
30685         the hierarchy.
30686
30687         Remove all the methods which are now in TypeContainer.
30688
30689 2001-10-10  Ravi Pratap  <ravi@ximian.com>
30690
30691         * delegate.cs (Define): Re-write bits to define the delegate
30692         correctly.
30693
30694 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
30695
30696         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
30697
30698         * expression.cs (ImplicitReferenceConversion): handle null as well
30699         as a source to convert to any reference type.
30700
30701         * statement.cs (Return): Perform any implicit conversions to
30702         expected return type.  
30703
30704         Validate use of return statement.  
30705
30706         * codegen.cs (EmitContext): Pass the expected return type here.
30707
30708         * class.cs (Method, Constructor, Property): Pass expected return
30709         type to EmitContext.
30710
30711 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
30712
30713         * expression.cs: Make DoResolve take an EmitContext instead of a
30714         TypeContainer.
30715
30716         Replaced `l' and `location' for `loc', for consistency.
30717
30718         (Error, Warning): Remove unneeded Tc argument.
30719
30720         * assign.cs, literal.cs, constant.cs: Update to new calling
30721         convention. 
30722
30723         * codegen.cs: EmitContext now contains a flag indicating whether
30724         code is being generated in a static method or not.
30725
30726         * cs-parser.jay: DecomposeQI, new function that replaces the old
30727         QualifiedIdentifier.  Now we always decompose the assembled
30728         strings from qualified_identifier productions into a group of
30729         memberaccesses.
30730
30731 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
30732
30733         * rootcontext.cs: Deal with field-less struct types correctly now
30734         by passing the size option to Define Type.
30735
30736         * class.cs: Removed hack that created one static field. 
30737
30738 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30739
30740         * statement.cs: Moved most of the code generation here. 
30741
30742 2001-10-09  Ravi Pratap  <ravi@ximian.com>
30743
30744         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
30745         seem very right.
30746
30747         (ElementAccess): Remove useless bits for now - keep checks as the spec
30748         says.
30749
30750 2001-10-08  Ravi Pratap  <ravi@ximian.com>
30751
30752         * expression.cs (ElementAccess::DoResolve): Remove my crap code
30753         and start performing checks according to the spec.
30754
30755 2001-10-07  Ravi Pratap  <ravi@ximian.com>
30756
30757         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
30758         rank_specifiers instead.
30759
30760         (rank_specifiers): Change the order in which the rank specifiers are stored
30761
30762         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
30763
30764         * expression.cs (ElementAccess): Implement the LValue interface too.
30765
30766 2001-10-06  Ravi Pratap  <ravi@ximian.com>
30767
30768         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
30769         except that user defined conversions are not included.
30770
30771         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
30772         perform the conversion of the return type, if necessary.
30773
30774         (New::DoResolve): Check whether we are creating an array or an object
30775         and accordingly do the needful.
30776
30777         (New::Emit): Same here.
30778
30779         (New::DoResolve): Implement guts of array creation.
30780
30781         (New::FormLookupType): Helper function.
30782
30783 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30784
30785         * codegen.cs: Removed most of the code generation here, and move the
30786         corresponding code generation bits to the statement classes. 
30787
30788         Added support for try/catch/finalize and throw.
30789
30790         * cs-parser.jay: Added support for try/catch/finalize.
30791
30792         * class.cs: Catch static methods having the flags override,
30793         virtual or abstract.
30794
30795         * expression.cs (UserCast): This user cast was not really doing
30796         what it was supposed to do.  Which is to be born in fully resolved
30797         state.  Parts of the resolution were being performed at Emit time! 
30798
30799         Fixed this code.
30800
30801 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30802
30803         * expression.cs: Implicity convert the result from UserCast.
30804
30805 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30806
30807         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
30808         prevented it from working correctly. 
30809
30810         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
30811         merely ConvertImplicit.
30812
30813 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30814
30815         * typemanager.cs: Make the LookupTypeContainer function static,
30816         and not per-instance.  
30817
30818         * class.cs: Make static FindMembers (the one that takes a Type
30819         argument). 
30820
30821         * codegen.cs: Add EmitForeach here.
30822
30823         * cs-parser.jay: Make foreach a toplevel object instead of the
30824         inline expansion, as we need to perform semantic analysis on it. 
30825
30826 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30827
30828         * expression.cs (Expression::ImplicitUserConversion): Rename to
30829         UserDefinedConversion.
30830
30831         (Expression::UserDefinedConversion): Take an extra argument specifying 
30832         whether we look for explicit user conversions too.
30833
30834         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
30835
30836         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
30837
30838         (ExplicitUserConversion): Make it a call to UserDefinedConversion
30839         with the appropriate arguments.
30840
30841         * cs-parser.jay (cast_expression): Record location too.
30842
30843         * expression.cs (Cast): Record location info.
30844
30845         (Expression::ConvertExplicit): Take location argument.
30846
30847         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
30848         to determine if we are doing explicit conversions.
30849
30850         (UserCast::Emit): Update accordingly.
30851
30852         (Expression::ConvertExplicit): Report an error if everything fails.
30853
30854         * ../errors/cs0030.cs : Add.
30855
30856 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
30857
30858         * modifiers.cs: If the ABSTRACT keyword is present, also set the
30859         virtual and newslot bits. 
30860
30861         * class.cs (TypeContainer::RegisterRequiredImplementations):
30862         Record methods we need.
30863
30864         (TypeContainer::MakeKey): Helper function to make keys for
30865         MethodBases, since the Methodbase key is useless.
30866
30867         (TypeContainer::Populate): Call RegisterRequiredImplementations
30868         before defining the methods.   
30869
30870         Create a mapping for method_builders_to_methods ahead of time
30871         instead of inside a tight loop.
30872
30873         (::RequireMethods):  Accept an object as the data to set into the
30874         hashtable so we can report interface vs abstract method mismatch.
30875
30876 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
30877
30878         * report.cs: Make all of it static.
30879
30880         * rootcontext.cs: Drop object_type and value_type computations, as
30881         we have those in the TypeManager anyways.
30882
30883         Drop report instance variable too, now it is a global.
30884
30885         * driver.cs: Use try/catch on command line handling.
30886
30887         Add --probe option to debug the error reporting system with a test
30888         suite. 
30889
30890         * report.cs: Add support for exiting program when a probe
30891         condition is reached.
30892
30893 2001-10-03  Ravi Pratap  <ravi@ximian.com>
30894
30895         * expression.cs (Binary::DoNumericPromotions): Fix the case when
30896         we do a forcible conversion regardless of type, to check if 
30897         ForceConversion returns a null.
30898
30899         (Binary::error19): Use location to report error.
30900
30901         (Unary::error23): Use location here too.
30902
30903         * ../errors/cs0019.cs : Check in.
30904
30905         * ../errors/cs0023.cs : Check in.
30906
30907         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
30908         case of a non-null MethodInfo object with a length of 0 !
30909
30910         (Binary::ResolveOperator): Flag error if overload resolution fails to find
30911         an applicable member - according to the spec :-)
30912         Also fix logic to find members in base types.
30913
30914         (Unary::ResolveOperator): Same here.
30915
30916         (Unary::report23): Change name to error23 and make first argument a TypeContainer
30917         as I was getting thoroughly confused between this and error19 :-)
30918
30919         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
30920         (::FindMostEncompassedType): Implement.
30921         (::FindMostEncompassingType): Implement.
30922         (::StandardConversionExists): Implement.
30923
30924         (UserImplicitCast): Re-vamp. We now need info about most specific
30925         source and target types so that we can do the necessary conversions.
30926
30927         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
30928         mathematical union with no duplicates.
30929
30930 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
30931
30932         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
30933         in order from base classes to child classes, so that we can in
30934         child classes look up in our parent for method names and
30935         attributes (required for handling abstract, virtual, new, override
30936         constructs: we need to instrospect our base class, and if we dont
30937         populate the classes in order, the introspection might be
30938         incorrect.  For example, a method could query its parent before
30939         the parent has any methods and would determine that the parent has
30940         no abstract methods (while it could have had them)).
30941
30942         (RootContext::CreateType): Record the order in which we define the
30943         classes.
30944
30945 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
30946
30947         * class.cs (TypeContainer::Populate): Also method definitions can
30948         fail now, keep track of this.
30949
30950         (TypeContainer::FindMembers): Implement support for
30951         DeclaredOnly/noDeclaredOnly flag.
30952
30953         (Constructor::Emit) Return the ConstructorBuilder.
30954
30955         (Method::Emit) Return the MethodBuilder. 
30956         Check for abstract or virtual methods to be public.
30957
30958         * rootcontext.cs (RootContext::CreateType): Register all the
30959         abstract methods required for the class to be complete and the
30960         interface methods that must be implemented. 
30961
30962         * cs-parser.jay: Report error 501 (method requires body if it is
30963         not marked abstract or extern).
30964
30965         * expression.cs (TypeOf::Emit): Implement.
30966
30967         * typemanager.cs: runtime_handle_type, new global type.
30968
30969         * class.cs (Property::Emit): Generate code for properties.
30970
30971 2001-10-02  Ravi Pratap  <ravi@ximian.com>
30972
30973         * expression.cs (Unary::ResolveOperator): Find operators on base type
30974         too - we now conform exactly to the spec.
30975
30976         (Binary::ResolveOperator): Same here.
30977
30978         * class.cs (Operator::Define): Fix minor quirk in the tests.
30979
30980         * ../errors/cs0215.cs : Added.
30981
30982         * ../errors/cs0556.cs : Added.
30983
30984         * ../errors/cs0555.cs : Added.
30985
30986 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
30987
30988         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
30989         single integer which is really efficient
30990
30991 2001-10-01  Ravi Pratap  <ravi@ximian.com>
30992
30993         *  expression.cs (Expression::ImplicitUserConversion): Use location
30994         even in the case when we are examining True operators.
30995  
30996         * class.cs (Operator::Define): Perform extensive checks to conform
30997         with the rules for operator overloading in the spec.
30998
30999         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31000         some of the other conversions mentioned in the spec.
31001
31002         * typemanager.cs (array_type): New static member for the System.Array built-in
31003         type.
31004
31005         (cloneable_interface): For System.ICloneable interface.
31006
31007         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31008         we start resolving the tree and populating types.
31009
31010         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31011  
31012 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31013
31014         * expression.cs (Expression::ExprClassFromMemberInfo,
31015         Expression::Literalize): Create literal expressions from
31016         FieldInfos which are literals.
31017
31018         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31019         type casts, because they were wrong.  The test suite in tests
31020         caught these ones.
31021
31022         (ImplicitNumericConversion): ushort to ulong requires a widening
31023         cast. 
31024
31025         Int32 constant to long requires widening cast as well.
31026
31027         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31028         for integers because the type on the stack is not i4.
31029
31030 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31031
31032         * expression.cs (report118): require location argument. 
31033
31034         * parameter.cs: Do not dereference potential null value.
31035
31036         * class.cs: Catch methods that lack the `new' keyword when
31037         overriding a name.  Report warnings when `new' is used without
31038         anything being there to override.
31039
31040         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31041
31042         * class.cs: Only add constructor to hashtable if it is non-null
31043         (as now constructors can fail on define).
31044
31045         (TypeManager, Class, Struct): Take location arguments.
31046
31047         Catch field instance initialization in structs as errors.
31048
31049         accepting_filter: a new filter for FindMembers that is static so
31050         that we dont create an instance per invocation.
31051
31052         (Constructor::Define): Catch errors where a struct constructor is
31053         parameterless 
31054
31055         * cs-parser.jay: Pass location information for various new
31056         constructs. 
31057
31058         * delegate.cs (Delegate): take a location argument.
31059
31060         * driver.cs: Do not call EmitCode if there were problesm in the
31061         Definition of the types, as many Builders wont be there. 
31062
31063         * decl.cs (Decl::Decl): Require a location argument.
31064
31065         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31066         into integers, and find the most appropiate integer for it.
31067
31068         * literal.cs: Implement ULongLiteral.
31069
31070         * rootcontext.cs: Provide better information about the location of
31071         failure when CreateType fails.
31072
31073 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31074
31075         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31076         as well.
31077
31078         * expression.cs (Binary::CheckShiftArguments): Add missing type
31079         computation.
31080         (Binary::ResolveOperator): Add type to the logical and and logical
31081         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31082         before.
31083
31084         (Binary::DoNumericPromotions): In the case where either argument
31085         is ulong (and most signed types combined with ulong cause an
31086         error) perform implicit integer constant conversions as well.
31087
31088 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31089
31090         * expression.cs (UserImplicitCast): Method should always be
31091         non-null. 
31092         (Invocation::BetterConversion): Simplified test for IntLiteral.
31093
31094         (Expression::ImplicitNumericConversion): Split this routine out.
31095         Put the code that performs implicit constant integer conversions
31096         here. 
31097
31098         (Expression::Resolve): Become a wrapper around DoResolve so we can
31099         check eclass and type being set after resolve.
31100
31101         (Invocation::Badness): Remove this dead function
31102
31103         (Binary::ResolveOperator): Do not compute the expensive argumnets
31104         unless we have a union for it.
31105
31106         (Probe::Emit): Is needs to do an isinst and then
31107         compare against null.
31108
31109         (::CanConvert): Added Location argument.  If the Location argument
31110         is null (Location.Null), then we do not report errors.  This is
31111         used by the `probe' mechanism of the Explicit conversion.  We do
31112         not want to generate an error for something that the user
31113         explicitly requested to be casted.  But the pipeline for an
31114         explicit cast first tests for potential implicit casts.
31115
31116         So for now, if the Location is null, it means `Probe only' to
31117         avoid adding another argument.   Might have to revise this
31118         strategy later.
31119
31120         (ClassCast): New class used to type cast objects into arbitrary
31121         classes (used in Explicit Reference Conversions).
31122
31123         Implement `as' as well.
31124
31125         Reverted all the patches from Ravi below: they were broken:
31126
31127                 * The use of `level' as a mechanism to stop recursive
31128                   invocations is wrong.  That was there just to catch the
31129                   bug with a strack trace but not as a way of addressing
31130                   the problem.
31131
31132                   To fix the problem we have to *understand* what is going
31133                   on and the interactions and come up with a plan, not
31134                   just get things going.
31135
31136                 * The use of the type conversion cache that I proposed
31137                   last night had an open topic: How does this work across
31138                   protection domains.  A user defined conversion might not
31139                   be public in the location where we are applying the
31140                   conversion, a different conversion might be selected
31141                   (ie, private A->B (better) but public B->A (worse),
31142                   inside A, A->B applies, but outside it, B->A will
31143                   apply).
31144
31145                 * On top of that (ie, even if the above is solved),
31146                   conversions in a cache need to be abstract.  Ie, `To
31147                   convert from an Int to a Short use an OpcodeCast', not
31148                   `To convert from an Int to a Short use the OpcodeCast on
31149                   the variable 5' (which is what this patch was doing).
31150
31151 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31152
31153         * expression.cs (Invocation::ConversionExists): Re-write to use
31154         the conversion cache
31155
31156         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31157         cache all conversions done, not just user-defined ones.
31158
31159         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31160         to determine if a conversion exists instead of acutually trying to 
31161         perform the conversion. It's faster too.
31162
31163         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31164         and only then attempt the implicit conversion.
31165
31166 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31167
31168         * expression.cs (ConvertImplicit): Use a cache for conversions
31169         already found. Check level of recursion and bail out if necessary.
31170
31171 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31172
31173         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31174         Export standard methods that we expect for string operations.
31175
31176         * statement.cs (Block::UsageWarning): Track usage of variables and
31177         report the errors for not used variables.
31178
31179         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31180         operator. 
31181
31182 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31183
31184         * codegen.cs: remove unnneded code 
31185
31186         * expression.cs: Removed BuiltinTypeAccess class
31187
31188         Fix the order in which implicit conversions are
31189         done.  
31190
31191         The previous fixed dropped support for boxed conversions (adding a
31192         test to the test suite now)
31193
31194         (UserImplicitCast::CanConvert): Remove test for source being null,
31195         that code is broken.  We should not feed a null to begin with, if
31196         we do, then we should track the bug where the problem originates
31197         and not try to cover it up here.
31198
31199         Return a resolved expression of type UserImplicitCast on success
31200         rather than true/false.  Ravi: this is what I was talking about,
31201         the pattern is to use a static method as a "constructor" for
31202         objects. 
31203
31204         Also, do not create arguments until the very last minute,
31205         otherwise we always create the arguments even for lookups that
31206         will never be performed. 
31207
31208         (UserImplicitCast::Resolve): Eliminate, objects of type
31209         UserImplicitCast are born in a fully resolved state. 
31210
31211         * typemanager.cs (InitCoreTypes): Init also value_type
31212         (System.ValueType). 
31213
31214         * expression.cs (Cast::Resolve): First resolve the child expression.
31215
31216         (LValue): Add new method AddressOf to be used by
31217         the `&' operator.  
31218
31219         Change the argument of Store to take an EmitContext instead of an
31220         ILGenerator, because things like FieldExpr need to be able to call
31221         their children expression to generate the instance code. 
31222
31223         (Expression::Error, Expression::Warning): Sugar functions for
31224         reporting errors.
31225
31226         (Expression::MemberLookup): Accept a TypeContainer instead of a
31227         Report as the first argument.
31228
31229         (Expression::ResolvePrimary): Killed.  I still want to improve
31230         this as currently the code is just not right.
31231
31232         (Expression::ResolveMemberAccess): Simplify, but it is still
31233         wrong. 
31234
31235         (Unary::Resolve): Catch errors in AddressOf operators.
31236
31237         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31238         index to a byte for the short-version, or the compiler will choose
31239         the wrong Emit call, which generates the wrong data.
31240
31241         (ParameterReference::Emit, ::Store): same.
31242
31243         (FieldExpr::AddressOf): Implement.
31244
31245         * typemanager.cs: TypeManager: made public variable instead of
31246         property.
31247
31248         * driver.cs: document --fatal.
31249
31250         * report.cs (ErrorMessage, WarningMessage): new names for the old
31251         Error and Warning classes.
31252
31253         * cs-parser.jay (member_access): Turn built-in access to types
31254         into a normal simplename
31255
31256 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31257
31258         * expression.cs (Invocation::BetterConversion): Fix to cope
31259         with q being null, since this was introducing a bug.
31260
31261         * expression.cs (ConvertImplicit): Do built-in conversions first.
31262
31263 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31264
31265         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31266
31267 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31268
31269         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31270         I had introduced long ago (what's new ?).
31271
31272         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31273         the work of all the checking. 
31274         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31275         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31276
31277         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31278         that is the right way. 
31279
31280         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31281         overloading resolution. Use everywhere instead of cutting and pasting code.
31282
31283         (Binary::ResolveOperator): Use MakeUnionSet.
31284
31285         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31286         we have to convert to bool types. Not complete yet.
31287
31288 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31289
31290         * typemanager.cs (TypeManager::CSharpName): support ushort.
31291
31292         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31293         to provide an expression that performsn an implicit constant int
31294         conversion (section 6.1.6).
31295         (Expression::ConvertImplicitRequired): Reworked to include
31296         implicit constant expression conversions.
31297
31298         (Expression::ConvertNumericExplicit): Finished.
31299
31300         (Invocation::Emit): If InstanceExpression is null, then it means
31301         that we perform a call on this.
31302
31303 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31304
31305         * expression.cs (Unary::Emit): Remove some dead code.
31306         (Probe): Implement Resolve and Emit for `is'.
31307         (Expression::ConvertImplicitRequired): Attempt to do constant
31308         expression conversions here.  Maybe should be moved to
31309         ConvertImplicit, but I am not sure.
31310         (Expression::ImplicitLongConstantConversionPossible,
31311         Expression::ImplicitIntConstantConversionPossible): New functions
31312         that tell whether is it possible to apply an implicit constant
31313         expression conversion.
31314
31315         (ConvertNumericExplicit): Started work on explicit numeric
31316         conversions.
31317
31318         * cs-parser.jay: Update operator constants.
31319
31320         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31321         (Parameters::GetSignature): Hook up VerifyArgs here.
31322         (Parameters::VerifyArgs): Verifies that no two arguments have the
31323         same name. 
31324
31325         * class.cs (Operator): Update the operator names to reflect the
31326         ones that the spec expects (as we are just stringizing the
31327         operator names).
31328
31329         * expression.cs (Unary::ResolveOperator): Fix bug: Use
31330         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
31331         previous usage did only work for our methods.
31332         (Expression::ConvertImplicit): Handle decimal implicit numeric
31333         conversions as well.
31334         (Expression::InternalTypeConstructor): Used to invoke constructors
31335         on internal types for default promotions.
31336
31337         (Unary::Emit): Implement special handling for the pre/post
31338         increment/decrement for overloaded operators, as they need to have
31339         the same semantics as the other operators.
31340
31341         (Binary::ResolveOperator): ditto.
31342         (Invocation::ConversionExists): ditto.
31343         (UserImplicitCast::Resolve): ditto.
31344
31345 2001-09-26  Ravi Pratap  <ravi@ximian.com>
31346
31347         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
31348         operator, return after emitting body. Regression tests pass again !
31349
31350         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
31351         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
31352         (Invocation::OverloadResolve): Ditto.
31353         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
31354
31355         * everywhere : update calls to the above methods accordingly.
31356
31357 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31358
31359         * assign.cs (Assign): Make it inherit from ExpressionStatement.
31360
31361         * expression.cs (ExpressionStatement): New base class used for
31362         expressions that can appear in statements, so that we can provide
31363         an alternate path to generate expression that do not leave a value
31364         on the stack.
31365
31366         (Expression::Emit, and all the derivatives): We no longer return
31367         whether a value is left on the stack or not.  Every expression
31368         after being emitted leaves a single value on the stack.
31369
31370         * codegen.cs (EmitContext::EmitStatementExpression): Use the
31371         facilties of ExpressionStatement if possible.
31372
31373         * cs-parser.jay: Update statement_expression.
31374
31375 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
31376
31377         * driver.cs: Change the wording of message
31378
31379 2001-09-25  Ravi Pratap  <ravi@ximian.com>
31380
31381         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
31382         the type of the expression to the return type of the method if
31383         we have an overloaded operator match ! The regression tests pass again !
31384         (Unary::ResolveOperator): Ditto.
31385
31386         * expression.cs (Invocation::ConversionExists): Correct the member lookup
31387         to find "op_Implicit", not "implicit" ;-)
31388         (UserImplicitCast): New class to take care of user-defined implicit conversions.
31389         (ConvertImplicit, ForceConversion): Take TypeContainer argument
31390
31391         * everywhere : Correct calls to the above accordingly.
31392
31393         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31394         (ConvertImplicit): Do user-defined conversion if it exists.
31395
31396 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31397
31398         * assign.cs: track location.
31399         (Resolve): Use implicit conversions on assignment.
31400
31401         * literal.cs: Oops.  Not good, Emit of short access values should
31402         pass (Bytes) or the wrong argument will be selected.
31403
31404         * expression.cs (Unary::Emit): Emit code for -expr.
31405
31406         (Unary::ResolveOperator): Handle `Substract' for non-constants
31407         (substract from zero from the non-constants).
31408         Deal with Doubles as well. 
31409
31410         (Expression::ConvertImplicitRequired): New routine that reports an
31411         error if no implicit conversion exists. 
31412
31413         (Invocation::OverloadResolve): Store the converted implicit
31414         expressions if we make them
31415
31416 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31417
31418         * class.cs (ConstructorInitializer): Take a Location argument.
31419         (ConstructorBaseInitializer): Same here.
31420         (ConstructorThisInitializer): Same here.
31421
31422         * cs-parser.jay : Update all calls accordingly.
31423
31424         * expression.cs (Unary, Binary, New): Take location argument.
31425         Update accordingly everywhere.
31426
31427         * cs-parser.jay : Update all calls to the above to take a location
31428         argument.
31429
31430         * class.cs : Ditto.
31431
31432 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31433
31434         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31435         (Invocation::BetterConversion): Same here
31436         (Invocation::ConversionExists): Ditto.
31437
31438         (Invocation::ConversionExists): Implement.
31439
31440 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31441
31442         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31443         Also take an additional TypeContainer argument.
31444
31445         * All over : Pass in TypeContainer as argument to OverloadResolve.
31446
31447         * typemanager.cs (CSharpName): Update to check for the string type and return
31448         that too.
31449
31450         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31451         a given method.
31452
31453 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31454
31455         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31456         (Invocation::BetterFunction): Implement.
31457         (Invocation::BetterConversion): Implement.
31458         (Invocation::ConversionExists): Skeleton, no implementation yet.
31459
31460         Okay, things work fine !
31461
31462 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31463
31464         * typemanager.cs: declare and load enum_type, delegate_type and
31465         void_type. 
31466
31467         * expression.cs (Expression::Emit): Now emit returns a value that
31468         tells whether a value is left on the stack or not.  This strategy
31469         might be reveted tomorrow with a mechanism that would address
31470         multiple assignments.
31471         (Expression::report118): Utility routine to report mismatches on
31472         the ExprClass.
31473
31474         (Unary::Report23): Report impossible type/operator combination
31475         utility function.
31476
31477         (Unary::IsIncrementableNumber): Whether the type can be
31478         incremented or decremented with add.
31479         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31480         complemented. 
31481         (Unary::ResolveOperator): Implement ++, !, ~,
31482
31483         (Invocation::Emit): Deal with new Emit convetion.
31484
31485         * All Expression derivatives: Updated their Emit method to return
31486         whether they leave values on the stack or not.
31487
31488         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31489         stack for expressions that are statements. 
31490
31491 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31492
31493         * expression.cs (LValue): New interface.  Must be implemented by
31494         LValue objects.
31495         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31496         LValue interface.
31497
31498         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31499         interface for generating code, simplifies the code.
31500
31501 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31502
31503         * expression.cs (everywhere): Comment out return statements in ::Resolve
31504         methods to avoid the warnings.
31505
31506 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31507
31508         * driver.cs (parse): Report error 2001 if we can not open the
31509         source file.
31510
31511         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31512         not resolve it.
31513
31514         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31515         object. 
31516
31517         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31518         otherwise nested blocks end up with the same index.
31519
31520         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31521
31522         * expression.cs:  Instead of having FIXMEs in the Resolve
31523         functions, throw exceptions so it is obvious that we are facing a
31524         bug. 
31525
31526         * cs-parser.jay (invocation_expression): Pass Location information.
31527
31528         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31529         Use a basename for those routines because .NET does not like paths
31530         on them. 
31531
31532         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31533         already defined.
31534
31535 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31536
31537         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31538         are loading the correct data types (throws an exception if not).
31539         (TypeManager::InitCoreTypes): Use CoreLookupType
31540
31541         * expression.cs (Unary::ResolveOperator): return the child
31542         expression for expressions which are just +expr.
31543         (Unary::ResolveOperator): Return negative literals for -LITERAL
31544         expressions (otherwise they are Unary {Literal}).
31545         (Invocation::Badness): Take into account `Implicit constant
31546         expression conversions'.
31547
31548         * literal.cs (LongLiteral): Implement long literal class.
31549         (IntLiteral): export the `Value' of the intliteral. 
31550
31551 2001-09-19  Ravi Pratap  <ravi@ximian.com>
31552
31553         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
31554
31555         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
31556         instead of 'Operator'
31557
31558         * expression.cs (Binary::ResolveOperator): Update accordingly.
31559         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
31560         and 'Minus'
31561
31562         * cs-parser.jay (unary_expression): Update to use the new names.
31563
31564         * gen-treedump.cs (GetUnary): Same here.
31565
31566         * expression.cs (Unary::Resolve): Implement.
31567         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
31568         operators are found instead of making noise ;-)
31569         (Unary::ResolveOperator): New method to do precisely the same thing which
31570         Binary::ResolveOperator does for Binary expressions.
31571         (Unary.method, .Arguments): Add.
31572         (Unary::OperName): Implement.   
31573         (Unary::ForceConversion): Copy and Paste !
31574
31575         * class.cs (Operator::Define): Fix a small bug for the case when we have 
31576         a unary operator.
31577
31578         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
31579         for the inbuilt operators. Only overloading works for now ;-)
31580
31581 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
31582
31583         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
31584         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
31585
31586         * expression.cs (This::Emit): Implement. 
31587         (This::Resolve): Implement.
31588         (TypeOf:Resolve): Implement.
31589         (Expression::ResolveSimpleName): Add an implicit this to instance
31590         field references. 
31591         (MemberAccess::Resolve): Deal with Parameters and Fields. 
31592         Bind instance variable to Field expressions.
31593         (FieldExpr::Instance): New field used to track the expression that
31594         represents the object instance.
31595         (FieldExpr::Resolve): Track potential errors from MemberLookup not
31596         binding 
31597         (FieldExpr::Emit): Implement.
31598
31599         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
31600         the last instruction contains a return opcode to avoid generating
31601         the last `ret' instruction (this generates correct code, and it is
31602         nice to pass the peverify output).
31603
31604         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
31605         initializer for static and instance variables.
31606         (Constructor::Emit): Allow initializer to be null in the case of
31607         static constructors.  Only emit initializer for instance
31608         constructors. 
31609
31610         (TypeContainer::FindMembers): Return a null array if there are no
31611         matches.
31612
31613         Also fix the code for the MemberTypes.Method branch, as it was not
31614         scanning that for operators (or tried to access null variables before).
31615
31616         * assign.cs (Assign::Emit): Handle instance and static fields. 
31617
31618         * TODO: Updated.
31619
31620         * driver.cs: Stop compilation if there are parse errors.
31621
31622         * cs-parser.jay (constructor_declaration): Provide default base
31623         initializer for non-static constructors.
31624         (constructor_declarator): Do not provide a default base
31625         initializers if none was specified.
31626         Catch the fact that constructors should not have parameters.
31627
31628         * class.cs: Do not emit parent class initializers for static
31629         constructors, that should be flagged as an error.
31630
31631 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31632
31633         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
31634         Move back code into TypeContainer::Populate.
31635
31636 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31637
31638         * class.cs (TypeContainer::AddConstructor): Fix the check to
31639         compare against Name, not Basename. 
31640         (Operator::OpType): Change Plus and Minus to Add and Subtract.
31641
31642         * cs-parser.jay : Update accordingly.
31643
31644         * class.cs (TypeContainer::FindMembers): For the case where we are searching
31645         for methods, don't forget to look into the operators too.
31646         (RegisterMethodBuilder): Helper method to take care of this for
31647         methods, constructors and operators.
31648         (Operator::Define): Completely revamp.
31649         (Operator.OperatorMethod, MethodName): New fields.
31650         (TypeContainer::Populate): Move the registering of builders into
31651         RegisterMethodBuilder.
31652         (Operator::Emit): Re-write.
31653
31654         * expression.cs (Binary::Emit): Comment out code path to emit method
31655         invocation stuff for the case when we have a user defined operator. I am
31656         just not able to get it right !
31657
31658 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31659
31660         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
31661         argument. 
31662
31663         (Expression::MemberLookup): Provide a version that allows to
31664         specify the MemberTypes and BindingFlags. 
31665
31666         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
31667         so it was not fetching variable information from outer blocks.
31668
31669         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
31670         Beforefieldinit as it was buggy.
31671
31672         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
31673         that Ravi put here.  
31674
31675         * class.cs (Constructor::Emit): Only emit if block is not null.
31676         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
31677         deal with this by semantically definining it as if the user had
31678         done it.
31679
31680         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
31681         constructors as we now "emit" them at a higher level.
31682
31683         (TypeContainer::DefineDefaultConstructor): Used to define the
31684         default constructors if none was provided.
31685
31686         (ConstructorInitializer): Add methods Resolve and Emit. 
31687
31688         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
31689
31690 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31691
31692         * class.cs (TypeContainer::EmitDefaultConstructor): Register
31693         the default constructor builder with our hashtable for methodbuilders
31694         to methodcores.
31695
31696         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
31697         and argument_count is 0 in which case we have a match.
31698         (Binary::ResolveOperator): More null checking and miscellaneous coding
31699         style cleanup.
31700
31701 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31702
31703         * rootcontext.cs (IsNameSpace): Compare against null.
31704
31705         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
31706
31707         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
31708         and Unary::Operator.
31709
31710         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
31711         accordingly.
31712
31713         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
31714         we have overloaded operators.
31715         (Binary::ResolveOperator): Implement the part which does the operator overload
31716         resolution.
31717
31718         * class.cs (Operator::Emit): Implement.
31719         (TypeContainer::Emit): Emit the operators we have too.
31720
31721         * expression.cs (Binary::Emit): Update to emit the appropriate code for
31722         the case when we have a user-defined operator.
31723
31724 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31725
31726         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
31727
31728 2001-09-16  Ravi Pratap  <ravi@ximian.com>
31729
31730         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
31731         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
31732         (Constructor::Emit): Implement.
31733         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
31734         if we have no work to do. 
31735         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
31736         Emit method.
31737
31738         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
31739         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
31740
31741         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
31742         of parent.parent.
31743
31744 2001-09-15  Ravi Pratap  <ravi@ximian.com>
31745
31746         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
31747         in the source.
31748         (Tree::RecordNamespace): Method to do what the name says ;-)
31749         (Tree::Namespaces): Property to get at the namespaces hashtable.
31750
31751         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
31752         keep track.
31753
31754         * rootcontext.cs (IsNamespace): Fixed it :-)
31755
31756 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31757
31758         * class.cs (TypeContainer::FindMembers): Add support for
31759         constructors. 
31760         (MethodCore): New class that encapsulates both the shared aspects
31761         of a Constructor and a Method.  
31762         (Method, Constructor): Factored pieces into MethodCore.
31763
31764         * driver.cs: Added --fatal which makes errors throw exceptions.
31765         Load System assembly as well as part of the standard library.
31766
31767         * report.cs: Allow throwing exceptions on errors for debugging.
31768
31769         * modifiers.cs: Do not use `parent', instead use the real type
31770         container to evaluate permission settings.
31771
31772         * class.cs: Put Ravi's patch back in.  He is right, and we will
31773         have to cope with the
31774
31775 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31776
31777         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
31778         FamORAssem, not FamANDAssem.
31779
31780 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31781
31782         * driver.cs: Added --parse option that only parses its input files
31783         and terminates.
31784
31785         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
31786         incorrect.  IsTopLevel is not used to tell whether an object is
31787         root_types or not (that can be achieved by testing this ==
31788         root_types).  But to see if this is a top-level *class* (not
31789         necessarly our "toplevel" container). 
31790
31791 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31792
31793         * enum.cs (Enum::Define): Modify to call the Lookup method on the
31794         parent instead of a direct call to GetType.
31795
31796 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31797
31798         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
31799         Modifiers.TypeAttr. This should just be a call to that method.
31800
31801         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
31802         object so that we can determine if we are top-level or not.
31803
31804         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
31805         TypeContainer too.
31806
31807         * enum.cs (Enum::Define): Ditto.
31808
31809         * modifiers.cs (FieldAttr): Re-write.
31810
31811         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
31812         (TypeContainer::HaveStaticConstructor): New property to provide access
31813         to precisely that info.
31814
31815         * modifiers.cs (MethodAttr): Re-write.
31816         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
31817
31818         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
31819         of top-level types as claimed.
31820
31821 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31822
31823         * expression.cs (MemberLookup): Fruitless attempt to lookup
31824         constructors.  Maybe I need to emit default constructors?  That
31825         might be it (currently .NET emits this for me automatically).
31826         (Invocation::OverloadResolve): Cope with Arguments == null.
31827         (Invocation::EmitArguments): new function, shared by the new
31828         constructor and us.
31829         (Invocation::Emit): Handle static and instance methods.  Emit
31830         proper call instruction for virtual or non-virtual invocations.
31831         (New::Emit): Implement.
31832         (New::Resolve): Implement.
31833         (MemberAccess:Resolve): Implement.
31834         (MethodGroupExpr::InstanceExpression): used conforming to the spec
31835         to track instances.
31836         (FieldExpr::Resolve): Set type.
31837
31838         * support.cs: Handle empty arguments.
31839                 
31840         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
31841         SimpleLookup): Auxiliary routines to help parse a qualifier
31842         identifier.  
31843
31844         Update qualifier_identifier rule.
31845
31846         * codegen.cs: Removed debugging messages.
31847
31848         * class.cs: Make this a global thing, this acts just as a "key" to
31849         objects that we might have around.
31850
31851         (Populate): Only initialize method_builders_to_methods once.
31852
31853         * expression.cs (PropertyExpr): Initialize type from the
31854         PropertyType. 
31855
31856         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
31857         Resolve pattern.  Attempt to implicitly convert value to boolean.
31858         Emit code.
31859
31860         * expression.cs: Set the type for the int32/int32 argument case.
31861         (Binary::ResolveOperator): Set the return type to boolean for
31862         comparission operators
31863
31864         * typemanager.cs: Remove debugging print code.
31865
31866         (Invocation::Resolve): resolve type.
31867
31868         * class.cs: Allocate a MemberInfo of the correct size, as the code
31869         elsewhere depends on the test to reflect the correct contents.
31870
31871         (Method::) Keep track of parameters, due to System.Reflection holes
31872
31873         (TypeContainer::Populate): Keep track of MethodBuilders to Method
31874         mapping here.
31875
31876         (TypeContainer::FindMembers): Use ArrayList and then copy an array
31877         of the exact size and return that.
31878
31879         (Class::LookupMethodByBuilder): New function that maps
31880         MethodBuilders to its methods.  Required to locate the information
31881         on methods because System.Reflection bit us again.
31882
31883         * support.cs: New file, contains an interface ParameterData and
31884         two implementations: ReflectionParameters and InternalParameters
31885         used to access Parameter information.  We will need to grow this
31886         as required.
31887
31888         * expression.cs (Invocation::GetParameterData): implement a cache
31889         and a wrapper around the ParameterData creation for methods. 
31890         (Invocation::OverloadResolve): Use new code.
31891
31892 2001-09-13  Ravi Pratap  <ravi@ximian.com>
31893
31894         * class.cs (TypeContainer::EmitField): Remove and move into 
31895         (Field::Define): here and modify accordingly.
31896         (Field.FieldBuilder): New member.
31897         (TypeContainer::Populate): Update accordingly.
31898         (TypeContainer::FindMembers): Implement.
31899
31900 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31901
31902         * statement.cs: (VariableInfo::VariableType): New field to be
31903         initialized with the full type once it is resolved. 
31904
31905 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
31906
31907         * parameter.cs (GetParameterInfo): Use a type cache to compute
31908         things only once, and to reuse this information
31909
31910         * expression.cs (LocalVariableReference::Emit): Implement.
31911         (OpcodeCast::Emit): fix.
31912
31913         (ParameterReference::Resolve): Implement.
31914         (ParameterReference::Emit): Implement.
31915
31916         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
31917         that are expressions need to stay as Expressions.
31918
31919         * typemanager.cs (CSharpName): Returns the C# name of a type if
31920         possible. 
31921
31922         * expression.cs (Expression::ConvertImplicit): New function that
31923         implements implicit type conversions.
31924
31925         (Expression::ImplicitReferenceConversion): Implements implicit
31926         reference conversions.
31927
31928         (EmptyCast): New type for transparent casts.
31929
31930         (OpcodeCast): New type for casts of types that are performed with
31931         a sequence of bytecodes.
31932
31933         (BoxedCast): New type used for casting value types into reference
31934         types.  Emits a box opcode.
31935
31936         (Binary::DoNumericPromotions): Implements numeric promotions of
31937         and computation of the Binary::Type.
31938
31939         (Binary::EmitBranchable): Optimization.
31940
31941         (Binary::Emit): Implement code emission for expressions.
31942
31943         * typemanager.cs (TypeManager): Added two new core types: sbyte
31944         and byte.
31945
31946 2001-09-12  Ravi Pratap  <ravi@ximian.com>
31947
31948         * class.cs (TypeContainer::FindMembers): Method which does exactly
31949         what Type.FindMembers does, only we don't have to use reflection. No
31950         implementation yet.
31951
31952         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
31953         typecontainer objects as we need to get at them.
31954         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
31955
31956         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
31957         typecontainer object.
31958
31959         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
31960         of just a Report object.
31961
31962 2001-09-11  Ravi Pratap  <ravi@ximian.com>
31963
31964         * class.cs (Event::Define): Go back to using the prefixes "add_" and
31965         "remove_"
31966         (TypeContainer::Populate): Now define the delegates of the type too.
31967         (TypeContainer.Delegates): Property to access the list of delegates defined
31968         in the type.
31969
31970         * delegates.cs (Delegate::Define): Implement partially.
31971
31972         * modifiers.cs (TypeAttr): Handle more flags.
31973
31974 2001-09-11  Ravi Pratap  <ravi@ximian.com>
31975
31976         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
31977         and not <=
31978         (Operator::Define): Re-write logic to get types by using the LookupType method
31979         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
31980         (Indexer::Define): Ditto.
31981         (Event::Define): Ditto.
31982         (Property::Define): Ditto.
31983
31984 2001-09-10  Ravi Pratap  <ravi@ximian.com>
31985
31986         * class.cs (TypeContainer::Populate): Now define operators too. 
31987         (TypeContainer.Operators): New property to access the list of operators
31988         in a type.
31989         (Operator.OperatorMethodBuilder): New member to hold the method builder
31990         for the operator we are defining.
31991         (Operator::Define): Implement.
31992
31993 2001-09-10  Ravi Pratap  <ravi@ximian.com>
31994
31995         * class.cs (Event::Define): Make the prefixes of the accessor methods
31996         addOn_ and removeOn_ 
31997
31998         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
31999         of the location being passed in too. Ideally, this should go later since all
32000         error reporting should be done through the Report object.
32001
32002         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32003         (Populate): Iterate thru the indexers we have and define them too.
32004         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32005         for the get and set accessors.
32006         (Indexer::Define): Implement.
32007
32008 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32009
32010         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32011         my previous implementation, did not work.
32012
32013         * typemanager.cs: Add a couple of missing types (the longs).
32014
32015         * literal.cs: Use TypeManager.bool_type instead of getting it.
32016
32017         * expression.cs (EventExpr): New kind of expressions.
32018         (Expressio::ExprClassFromMemberInfo): finish
32019
32020 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32021
32022         * assign.cs: Emit stores to static fields differently.
32023
32024 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32025
32026         * Merge in changes and adjust code to tackle conflicts. Backed out my
32027         code in Assign::Resolve ;-) 
32028
32029 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32030
32031         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32032         instead Report.Error and also pass in the location.
32033         (CSharpParser::Lexer): New readonly property to return the reference
32034         to the Tokenizer object.
32035         (declare_local_variables): Use Report.Error with location instead of plain 
32036         old error.
32037         (CheckDef): Ditto.
32038
32039         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32040         (Operator.CheckBinaryOperator): Ditto.
32041
32042         * cs-parser.jay (operator_declarator): Update accordingly.
32043
32044         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32045         (CheckBinaryOperator): Same here.
32046
32047         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32048         on the name without any prefixes of namespace names etc. This is because we
32049         already might have something already fully qualified like 
32050         'System.Console.WriteLine'
32051
32052         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32053
32054 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32055
32056         * cs-tokenizer.cs (location): Return a string which also contains
32057         the file name.
32058
32059         * expression.cs (ElementAccess): New class for expressions of the
32060         type 'element access.'
32061         (BaseAccess): New class for expressions of the type 'base access.'
32062         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32063         respectively.
32064
32065         * cs-parser.jay (element_access): Implement action.
32066         (base_access): Implement actions.
32067         (checked_expression, unchecked_expression): Implement.
32068
32069         * cs-parser.jay (local_variable_type): Correct and implement.
32070         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32071
32072         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32073
32074         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32075         name and the specifiers.
32076
32077         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32078
32079         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32080         making them all public ;-)
32081
32082         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32083         class anyways.
32084
32085 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32086
32087         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32088         PropertyExprs.
32089         (FieldExpr, PropertyExprs): New resolved expressions.
32090         (SimpleName::MemberStaticCheck): Perform static checks for access
32091         to non-static fields on static methods. Maybe this should be
32092         generalized for MemberAccesses. 
32093         (SimpleName::ResolveSimpleName): More work on simple name
32094         resolution. 
32095
32096         * cs-parser.jay (primary_expression/qualified_identifier): track
32097         the parameter index.
32098
32099         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32100         (EmitContext::EmitBoolExpression): Chain to expression generation
32101         instead of temporary hack.
32102         (::EmitStatementExpression): Put generic expression code generation.
32103
32104         * assign.cs (Assign::Emit): Implement variable assignments to
32105         local variables, parameters and fields.
32106
32107 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32108
32109         * statement.cs (Block::GetVariableInfo): New method, returns the
32110         VariableInfo for a variable name in a block.
32111         (Block::GetVariableType): Implement in terms of GetVariableInfo
32112
32113         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32114         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32115
32116 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32117
32118         * cs-parser.jay (operator_declaration): Continue on my quest : update
32119         to take attributes argument.
32120         (event_declaration): Ditto.
32121         (enum_declaration): Ditto.
32122         (indexer_declaration): Ditto.
32123
32124         * class.cs (Operator::Operator): Update constructor accordingly.
32125         (Event::Event): Ditto.
32126
32127         * delegate.cs (Delegate::Delegate): Same here.
32128
32129         * enum.cs (Enum::Enum): Same here.
32130
32131 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32132
32133         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32134
32135         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32136
32137         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32138         being passed around as an arraylist.
32139         (Attributes::AddAttribute): Method to add attribute sections.
32140
32141         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32142         (struct_declaration): Update accordingly.
32143         (constant_declaration): Update.
32144         (field_declaration): Update.
32145         (method_header): Update.
32146         (fixed_parameter): Update.
32147         (parameter_array): Ditto.
32148         (property_declaration): Ditto.
32149         (destructor_declaration): Ditto.
32150
32151         * class.cs (Struct::Struct): Update constructors accordingly.
32152         (Class::Class): Ditto.
32153         (Field::Field): Ditto.
32154         (Method::Method): Ditto.
32155         (Property::Property): Ditto.
32156         (TypeContainer::OptAttribute): update property's return type.
32157
32158         * interface.cs (Interface.opt_attributes): New member.
32159         (Interface::Interface): Update to take the extra Attributes argument.
32160
32161         * parameter.cs (Parameter::Parameter): Ditto.
32162
32163         * constant.cs (Constant::Constant): Ditto.
32164
32165         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32166         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32167         the attributes as a parameter.
32168         (InterfaceProperty): Update constructor call.
32169         (InterfaceEvent): Ditto.
32170         (InterfaceMethod): Ditto.
32171         (InterfaceIndexer): Ditto.
32172
32173         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32174         pass the attributes too.
32175         (interface_event_declaration): Ditto.
32176         (interface_property_declaration): Ditto.
32177         (interface_method_declaration): Ditto.
32178         (interface_declaration): Ditto.
32179
32180 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32181
32182         * class.cs (Method::Define): Track the "static Main" definition to
32183         create an entry point. 
32184
32185         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32186         EntryPoint if we find it. 
32187
32188         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32189         (EmitContext::ig): Make this variable public.
32190
32191         * driver.cs: Make the default output file be the first file name
32192         with the .exe extension.  
32193
32194         Detect empty compilations
32195
32196         Handle various kinds of output targets.  Handle --target and
32197         rename -t to --dumper.
32198
32199         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32200         methods inherited from Expression return now an Expression.  This
32201         will is used during the tree rewriting as we resolve them during
32202         semantic analysis.
32203
32204         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32205         the spec.  Missing entirely is the information about
32206         accessability of elements of it.
32207
32208         (Expression::ExprClassFromMemberInfo): New constructor for
32209         Expressions that creates a fully initialized Expression based on
32210         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32211         a Type.
32212
32213         (Invocation::Resolve): Begin implementing resolution of invocations.
32214
32215         * literal.cs (StringLiteral):  Implement Emit.
32216
32217 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32218
32219         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32220         member.
32221
32222 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32223
32224         * cs-parser.jay (attribute_arguments): Implement actions.
32225         (attribute): Fix bug in production. Implement action.
32226         (attribute_list): Implement.
32227         (attribute_target): Implement.
32228         (attribute_target_specifier, opt_target_specifier): Implement
32229         (CheckAttributeTarget): New method to check if the attribute target
32230         is valid.
32231         (attribute_section): Implement.
32232         (opt_attributes): Implement.
32233
32234         * attribute.cs : New file to handle attributes.
32235         (Attribute): Class to hold attribute info.
32236
32237         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32238         (attribute_section): Modify production to use 2 different rules to 
32239         achieve the same thing. 1 s/r conflict down !
32240         Clean out commented, useless, non-reducing dimension_separator rules.
32241
32242         * class.cs (TypeContainer.attributes): New member to hold list
32243         of attributes for a type.
32244         (Struct::Struct): Modify to take one more argument, the attribute list.
32245         (Class::Class): Ditto.
32246         (Field::Field): Ditto.
32247         (Method::Method): Ditto.
32248         (Property::Property): Ditto.
32249
32250         * cs-parser.jay (struct_declaration): Update constructor call to
32251         pass in the attributes too.
32252         (class_declaration): Ditto.
32253         (constant_declaration): Ditto.
32254         (field_declaration): Ditto.
32255         (method_header): Ditto.
32256         (fixed_parameter): Ditto.
32257         (parameter_array): Ditto.
32258         (property_declaration): Ditto.
32259
32260         * constant.cs (Constant::Constant): Update constructor similarly.
32261         Use System.Collections.
32262
32263         * parameter.cs (Parameter::Parameter): Update as above.
32264
32265 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32266
32267         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32268         (TypeContainer.delegates): New member to hold list of delegates.
32269
32270         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32271         this time as I seem to be on crack ;-)
32272
32273 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32274
32275         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32276         tell whether an identifier represents a namespace.
32277
32278         * expression.cs (NamespaceExpr): A namespace expression, used only
32279         temporarly during expression resolution.
32280         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32281         utility functions to resolve names on expressions.
32282
32283 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32284
32285         * codegen.cs: Add hook for StatementExpressions. 
32286
32287         * class.cs: Fix inverted test for static flag in methods.
32288
32289 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32290
32291         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32292         to make it coincide with MS' number.
32293         (Operator::CheckBinaryOperator): Ditto.
32294
32295         * ../errors/errors.txt : Remove error numbers added earlier.
32296
32297         * ../errors/cs1019.cs : Test case for error # 1019
32298
32299         * ../errros/cs1020.cs : Test case for error # 1020
32300
32301         * cs-parser.jay : Clean out commented cruft.
32302         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32303         used anywhere - non-reducing rule.
32304         (namespace_declarations): Non-reducing rule - comment out.
32305
32306         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32307         with TypeContainer::AddEnum.
32308
32309         * delegate.cs : New file for delegate handling classes.
32310         (Delegate): Class for declaring delegates.
32311
32312         * makefile : Update.
32313
32314         * cs-parser.jay (delegate_declaration): Implement.
32315
32316 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32317
32318         * class.cs (Event::Define): Implement.
32319         (Event.EventBuilder): New member.
32320
32321         * class.cs (TypeContainer::Populate): Update to define all enums and events
32322         we have.
32323         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32324         readonly fields for all these cases ?
32325
32326 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32327
32328         * class.cs (Property): Revamp to use the convention of making fields readonly.
32329         Accordingly modify code elsewhere.
32330
32331         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
32332         the Define method of the Property class.
32333
32334         * class.cs : Clean up applied patch and update references to variables etc. Fix 
32335         trivial bug.
32336         (TypeContainer::Populate): Update to define all the properties we have. Also
32337         define all enumerations.
32338
32339         * enum.cs (Define): Implement.
32340
32341 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32342
32343         * cs-parser.jay (overloadable_operator): The semantic value is an
32344         enum of the Operator class.
32345         (operator_declarator): Implement actions.
32346         (operator_declaration): Implement.
32347
32348         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
32349         validity of definitions.
32350         (Operator::CheckBinaryOperator): Static method to check for binary operators
32351         (TypeContainer::AddOperator): New method to add an operator to a type.
32352
32353         * cs-parser.jay (indexer_declaration): Added line to actually call the
32354         AddIndexer method so it gets added ;-)
32355
32356         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
32357         already taken care of by the MS compiler ?  
32358
32359 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32360
32361         * class.cs (Operator): New class for operator declarations.
32362         (Operator::OpType): Enum for the various operators.
32363
32364 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32365
32366         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
32367         ostensibly handle this in semantic analysis.
32368
32369         * cs-parser.jay (general_catch_clause): Comment out
32370         (specific_catch_clauses, specific_catch_clause): Ditto.
32371         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
32372         (catch_args, opt_catch_args): New productions.
32373         (catch_clause): Rewrite to use the new productions above
32374         (catch_clauses): Modify accordingly.
32375         (opt_catch_clauses): New production to use in try_statement
32376         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
32377         and re-write the code in the actions to extract the specific and
32378         general catch clauses by being a little smart ;-)
32379
32380         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
32381         Hooray, try and catch statements parse fine !
32382
32383 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32384
32385         * statement.cs (Block::GetVariableType): Fix logic to extract the type
32386         string from the hashtable of variables.
32387
32388         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
32389         I end up making that mistake ;-)
32390         (catch_clauses): Fixed gross error which made Key and Value of the 
32391         DictionaryEntry the same : $1 !!
32392
32393 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32394
32395         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32396
32397         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32398         when the add and remove accessors are specified. 
32399
32400 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32401
32402         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32403         information about indexer_declarator.
32404         (indexer_declarator): Implement actions.
32405         (parsing_indexer): New local boolean used to keep track of whether
32406         we are parsing indexers or properties. This is necessary because 
32407         implicit_parameters come into picture even for the get accessor in the 
32408         case of an indexer.
32409         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32410
32411         * class.cs (Indexer): New class for indexer declarations.
32412         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32413         (TypeContainer::indexers): New member to hold list of indexers for the
32414         type.
32415
32416 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32417
32418         * cs-parser.jay (add_accessor_declaration): Implement action.
32419         (remove_accessor_declaration): Implement action.
32420         (event_accessors_declaration): Implement
32421         (variable_declarators): swap statements for first rule - trivial.
32422
32423         * class.cs (Event): New class to hold information about event
32424         declarations.
32425         (TypeContainer::AddEvent): New method to add an event to a type
32426         (TypeContainer::events): New member to hold list of events.
32427
32428         * cs-parser.jay (event_declaration): Implement actions.
32429
32430 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32431
32432         * cs-parser.jay (dim_separators): Implement. Make it a string
32433         concatenating all the commas together, just as they appear.
32434         (opt_dim_separators): Modify accordingly
32435         (rank_specifiers): Update accordingly. Basically do the same
32436         thing - instead, collect the brackets here.
32437         (opt_rank_sepcifiers): Modify accordingly.
32438         (array_type): Modify to actually return the complete type string
32439         instead of ignoring the rank_specifiers.
32440         (expression_list): Implement to collect the expressions
32441         (variable_initializer): Implement. We make it a list of expressions
32442         essentially so that we can handle the array_initializer case neatly too.
32443         (variable_initializer_list): Implement.
32444         (array_initializer): Make it a list of variable_initializers
32445         (opt_array_initializer): Modify accordingly.
32446
32447         * expression.cs (New::NType): Add enumeration to help us
32448         keep track of whether we have an object/delegate creation
32449         or an array creation.
32450         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32451         members to hold data about array creation.
32452         (New:New): Modify to update NewType
32453         (New:New): New Overloaded contructor for the array creation
32454         case.
32455
32456         * cs-parser.jay (array_creation_expression): Implement to call
32457         the overloaded New constructor.
32458
32459 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32460
32461         * class.cs (TypeContainer::Constructors): Return member
32462         constructors instead of returning null.
32463
32464 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32465
32466         * typemanager.cs (InitCoreTypes): Initialize the various core
32467         types after we have populated the type manager with the user
32468         defined types (this distinction will be important later while
32469         compiling corlib.dll)
32470
32471         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32472         on Expression Classification.  Now all expressions have a method
32473         `Resolve' and a method `Emit'.
32474
32475         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32476         generation from working.     Also add some temporary debugging
32477         code. 
32478
32479 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32480
32481         * codegen.cs: Lots of code generation pieces.  This is only the
32482         beginning, will continue tomorrow with more touches of polish.  We
32483         handle the fundamentals of if, while, do, for, return.  Others are
32484         trickier and I need to start working on invocations soon.
32485
32486         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32487         s.InitStatement. 
32488
32489         * codegen.cs (EmitContext): New struct, used during code
32490         emission to keep a context.   Most of the code generation will be
32491         here. 
32492
32493         * cs-parser.jay: Add embedded blocks to the list of statements of
32494         this block.  So code generation proceeds in a top down fashion.
32495
32496 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32497
32498         * statement.cs: Add support for multiple child blocks.
32499
32500 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32501
32502         * codegen.cs (EmitCode): New function, will emit the code for a
32503         Block of code given a TypeContainer and its ILGenerator. 
32504
32505         * statement.cs (Block): Standard public readonly optimization.
32506         (Block::Block constructors): Link children. 
32507         (Block::Child): Child Linker.
32508         (Block::EmitVariables): Emits IL variable declarations.
32509
32510         * class.cs: Drop support for MethodGroups here, delay until
32511         Semantic Analysis.
32512         (Method::): Applied the same simplification that I did before, and
32513         move from Properties to public readonly fields.
32514         (Method::ParameterTypes): Returns the parameter types for the
32515         function, and implements a cache that will be useful later when I
32516         do error checking and the semantic analysis on the methods is
32517         performed.
32518         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32519         and made a method, optional argument tells whether this is a class
32520         or a structure to apply the `has-this' bit.
32521         (Method::GetCallingConvention): Implement, returns the calling
32522         convention. 
32523         (Method::Define): Defines the type, a second pass is performed
32524         later to populate the methods.
32525
32526         (Constructor::ParameterTypes): implement a cache similar to the
32527         one on Method::ParameterTypes, useful later when we do semantic
32528         analysis. 
32529
32530         (TypeContainer::EmitMethod):  New method.  Emits methods.
32531
32532         * expression.cs: Removed MethodGroup class from here.
32533
32534         * parameter.cs (Parameters::GetCallingConvention): new method.
32535
32536 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32537
32538         * class.cs (TypeContainer::Populate): Drop RootContext from the
32539         argument. 
32540
32541         (Constructor::CallingConvention): Returns the calling convention.
32542         (Constructor::ParameterTypes): Returns the constructor parameter
32543         types. 
32544
32545         (TypeContainer::AddConstructor): Keep track of default constructor
32546         and the default static constructor.
32547
32548         (Constructor::) Another class that starts using `public readonly'
32549         instead of properties. 
32550
32551         (Constructor::IsDefault): Whether this is a default constructor. 
32552
32553         (Field::) use readonly public fields instead of properties also.
32554
32555         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
32556         track of static constructors;  If none is used, turn on
32557         BeforeFieldInit in the TypeAttributes. 
32558
32559         * cs-parser.jay (opt_argument_list): now the return can be null
32560         for the cases where there are no arguments. 
32561
32562         (constructor_declarator): If there is no implicit `base' or
32563         `this', then invoke the default parent constructor. 
32564
32565         * modifiers.cs (MethodAttr): New static function maps a set of
32566         modifiers flags into a MethodAttributes enum
32567         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
32568         MethodAttr, TypeAttr to represent the various mappings where the
32569         modifiers are used.
32570         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
32571
32572 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
32573
32574         * parameter.cs (GetParameterInfo): Fix bug where there would be no
32575         method arguments.
32576
32577         * interface.cs (PopulateIndexer): Implemented the code generator
32578         for interface indexers.
32579
32580 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
32581
32582         * interface.cs (InterfaceMemberBase): Now we track the new status
32583         here.  
32584
32585         (PopulateProperty): Implement property population.  Woohoo!  Got
32586         Methods and Properties going today. 
32587
32588         Removed all the properties for interfaces, and replaced them with
32589         `public readonly' fields. 
32590
32591 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
32592
32593         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
32594         initialize their hashtables/arraylists only when they are needed
32595         instead of doing this always.
32596
32597         * parameter.cs: Handle refs and out parameters.
32598
32599         * cs-parser.jay: Use an ArrayList to construct the arguments
32600         instead of the ParameterCollection, and then cast that to a
32601         Parameter[] array.
32602
32603         * parameter.cs: Drop the use of ParameterCollection and use
32604         instead arrays of Parameters.
32605
32606         (GetParameterInfo): Use the Type, not the Name when resolving
32607         types. 
32608
32609 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
32610
32611         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
32612         and instead use public readonly fields.
32613
32614         * class.cs: Put back walking code for type containers.
32615
32616 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
32617
32618         * class.cs (MakeConstant): Code to define constants.
32619
32620         * rootcontext.cs (LookupType): New function.  Used to locate types 
32621
32622
32623 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
32624
32625         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
32626         this System.Reflection code is.  Kudos to Microsoft
32627
32628         * typemanager.cs: Implement a type cache and avoid loading all
32629         types at boot time.  Wrap in LookupType the internals.  This made
32630         the compiler so much faster.  Wow.  I rule!
32631
32632         * driver.cs: Make sure we always load mscorlib first (for
32633         debugging purposes, nothing really important).
32634
32635         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
32636         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
32637
32638         * rootcontext.cs: Lookup types on their namespace;  Lookup types
32639         on namespaces that have been imported using the `using' keyword.
32640
32641         * class.cs (TypeContainer::TypeAttr): Virtualize.
32642         (Class::TypeAttr): Return attributes suitable for this bad boy.
32643         (Struct::TypeAttr): ditto.
32644         Handle nested classes.
32645         (TypeContainer::) Remove all the type visiting code, it is now
32646         replaced with the rootcontext.cs code
32647
32648         * rootcontext.cs (GetClassBases): Added support for structs. 
32649
32650 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
32651
32652         * interface.cs, statement.cs, class.cs, parameter.cs,
32653         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
32654         Drop use of TypeRefs, and use strings instead.
32655
32656 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
32657
32658         * rootcontext.cs: 
32659
32660         * class.cs (Struct::Struct): set the SEALED flags after
32661         checking the modifiers.
32662         (TypeContainer::TypeAttr): new property, returns the
32663         TypeAttributes for a class.  
32664
32665         * cs-parser.jay (type_list): Oops, list production was creating a
32666         new list of base types.
32667
32668         * rootcontext.cs (StdLib): New property.
32669         (GetInterfaceTypeByName): returns an interface by type name, and
32670         encapsulates error handling here.
32671         (GetInterfaces): simplified.
32672         (ResolveTree): Encapsulated all the tree resolution here.
32673         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
32674         types. 
32675
32676         * driver.cs: Add support for --nostdlib, to avoid loading the
32677         default assemblies.
32678         (Main): Do not put tree resolution here. 
32679
32680         * rootcontext.cs: Beginning of the class resolution.
32681
32682 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
32683
32684         * rootcontext.cs: Provide better error reporting. 
32685
32686         * cs-parser.jay (interface_base): set our $$ to be interfaces.
32687
32688         * rootcontext.cs (CreateInterface): Handle the case where there
32689         are no parent interfaces.
32690
32691         (CloseTypes): Routine to flush types at the end.
32692         (CreateInterface): Track types.
32693         (GetInterfaces): Returns an array of Types from the list of
32694         defined interfaces.
32695
32696         * typemanager.c (AddUserType): Mechanism to track user types (puts
32697         the type on the global type hash, and allows us to close it at the
32698         end). 
32699
32700 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
32701
32702         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
32703         RecordInterface instead.
32704
32705         * cs-parser.jay: Updated to reflect changes above.
32706
32707         * decl.cs (Definition): Keep track of the TypeBuilder type that
32708         represents this type here.  Not sure we will use it in the long
32709         run, but wont hurt for now.
32710
32711         * driver.cs: Smaller changes to accomodate the new code.
32712
32713         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
32714         when done. 
32715
32716         * rootcontext.cs (CreateInterface):  New method, used to create
32717         the System.TypeBuilder type for interfaces.
32718         (ResolveInterfaces): new entry point to resolve the interface
32719         hierarchy. 
32720         (CodeGen): Property, used to keep track of the code generator.
32721
32722 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
32723
32724         * cs-parser.jay: Add a second production for delegate_declaration
32725         with `VOID'.
32726
32727         (enum_body): Put an opt_comma here instead of putting it on
32728         enum_body or enum_member_declarations so we can handle trailing
32729         commas on enumeration members.  Gets rid of a shift/reduce.
32730
32731         (type_list): Need a COMMA in the middle.
32732
32733         (indexer_declaration): Tell tokenizer to recognize get/set
32734
32735         * Remove old targets.
32736
32737         * Re-add the parser target.
32738
32739 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32740
32741         * cs-parser.jay: Add precendence rules for a number of operators
32742         ot reduce the number of shift/reduce conflicts in the grammar.
32743
32744 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
32745
32746         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
32747         and put it here.
32748
32749         Get rid of old crufty code.
32750
32751         * rootcontext.cs: Use this to keep track of the parsed
32752         representation and the defined types available to the program. 
32753
32754         * gen-treedump.cs: adjust for new convention.
32755
32756         * type.cs: Split out the type manager, and the assembly builder
32757         from here. 
32758
32759         * typemanager.cs: the type manager will live here now.
32760
32761         * cil-codegen.cs: And the code generator here. 
32762
32763 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
32764
32765         * makefile: Fixed up for easy making.
32766
32767 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32768
32769         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
32770         the 
32771
32772         (unary_expression): Expand pre_increment_expression and
32773         post_decrement_expression to reduce a shift/reduce.
32774
32775 2001-07-11  Simon Cozens
32776
32777         * cs-tokenizer.cs: Hex numbers should begin with a 0.
32778
32779         Improve allow_keyword_as_indent name.
32780
32781 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
32782
32783         * Adjustments for Beta2. 
32784
32785 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
32786
32787         * decl.cs: Added `Define' abstract method.
32788         (InTransit): new property, used to catch recursive definitions. 
32789
32790         * interface.cs: Implement `Define'. 
32791
32792         * modifiers.cs: Map Modifiers.constants to
32793         System.Reflection.TypeAttribute flags.
32794
32795         * class.cs: Keep track of types and user-defined types.
32796         (BuilderInit): New method for creating an assembly
32797         (ResolveType): New function to launch the resolution process, only
32798         used by interfaces for now.
32799
32800         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
32801         that are inserted into the name space. 
32802
32803 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
32804
32805         * ARGH.  I have screwed up my tree so many times due to the use of
32806         rsync rather than using CVS.  Going to fix this at once. 
32807
32808         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
32809         load types.
32810
32811 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
32812
32813         * Experiment successful: Use System.Type rather that our own
32814         version of Type.  
32815
32816 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
32817
32818         * cs-parser.jay: Removed nsAliases from here.
32819
32820         Use new namespaces, handle `using XXX;' 
32821
32822         * namespace.cs: Reimplemented namespace handling, use a recursive
32823         definition of the class.  Now we can keep track of using clauses
32824         and catch invalid using clauses.
32825
32826 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
32827
32828         * gen-treedump.cs: Adapted for all the renaming.
32829
32830         * expression.cs (Expression): this class now has a Type property
32831         which returns an expression Type.
32832
32833         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
32834         `Type', as this has a different meaning now in the base
32835
32836 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
32837
32838         * interface.cs, class.cs: Removed from all the sources the
32839         references to signature computation, as we can not do method
32840         signature computation during the parsing time, as we are not
32841         trying to solve at that point distinguishing:
32842
32843         class X {
32844                 void a (Blah x) {}
32845                 void a (NS.Blah x) {}
32846         }
32847
32848         Which depending on the context might be valid or not, as we do not
32849         know if Blah is the same thing as NS.Blah at that point.
32850
32851         * Redid everything so the code uses TypeRefs now instead of
32852         Types.  TypeRefs are just temporary type placeholders, that need
32853         to be resolved.  They initially have a pointer to a string and the
32854         current scope in which they are used.  This is used later by the
32855         compiler to resolve the reference to an actual Type. 
32856
32857         * DeclSpace is no longer a CIR.Type, and neither are
32858         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
32859         are all DeclSpaces, but no Types. 
32860
32861         * type.cs (TypeRefManager): This implements the TypeRef manager,
32862         which keeps track of all the types that need to be resolved after
32863         the parsing has finished. 
32864
32865 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
32866
32867         * ARGH.  We are going to have to store `foreach' as a class rather
32868         than resolving it, as we need to verify error 1579 after name
32869         resolution.   *OR* we could keep a flag that says `This request to
32870         IEnumerator comes from a foreach statement' which we can then use
32871         to generate the error.
32872
32873 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
32874
32875         * class.cs (TypeContainer.AddMethod): we now add methods to the
32876         MethodGroup instead of the method hashtable.  
32877
32878         * expression.cs: Add MethodGroup abstraction, which gets us one
32879         step closer to the specification in the way we handle method
32880         declarations.  
32881
32882         * cs-parser.jay (primary_expression): qualified_identifier now
32883         tried to match up an identifier to a local variable reference or
32884         to a parameter reference.
32885
32886         current_local_parameters is now a parser global variable that
32887         points to the current parameters for the block, used during name
32888         lookup.
32889
32890         (property_declaration): Now creates an implicit `value' argument to
32891         the set accessor.
32892
32893 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
32894
32895         * parameter.cs: Do not use `param' arguments as part of the
32896         signature, per the spec.
32897
32898 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
32899
32900         * decl.cs: Base class for classes, structs and interfaces.  This
32901         is the "Declaration Space" 
32902
32903         * cs-parser.jay: Use CheckDef for checking declaration errors
32904         instead of having one on each function.
32905
32906         * class.cs: Factor out some code for handling error handling in
32907         accordance to the "Declarations" section in the "Basic Concepts"
32908         chapter in the ECMA C# spec.
32909
32910         * interface.cs: Make all interface member classes derive from
32911         InterfaceMemberBase.
32912
32913 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
32914
32915         * Many things: all interfaces are parsed and generated in
32916         gen-treedump.  Support for member variables, constructors,
32917         destructors, properties, constants is there.
32918
32919         Beginning of the IL backend, but very little done, just there for
32920         testing purposes. 
32921
32922 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
32923
32924         * cs-parser.jay: Fix labeled statement.
32925
32926         * cs-tokenizer.cs (escape): Escape " and ' always.
32927         ref_line, ref_name: keep track of the line/filename as instructed
32928         by #line by the compiler.
32929         Parse #line.
32930
32931 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
32932
32933         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
32934         to match the values in System.CodeDOM.
32935
32936         Divid renamed to Divide.
32937
32938         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
32939         statements. 
32940         (Statements.set): remove.
32941
32942         * System.CodeDOM/CodeCatchClause.cs: always have a valid
32943         statements. 
32944
32945         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
32946         falseStatements always have valid values. 
32947
32948         * cs-parser.jay: Use System.CodeDOM now.
32949