2009-08-03 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2009-08-03  Marek Safar  <marek.safar@gmail.com>
2
3         * anonymous.cs: Fully initialize generic hoisted field expression.
4
5 2009-08-02  Miguel de Icaza  <miguel@novell.com>
6
7         * cs-parser.jay: Flag variables declared on the interactive shell
8         as used to prevent the 168 warning about local variable not being
9         used. 
10
11 2009-07-31  Marek Safar  <marek.safar@gmail.com>
12
13         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
14         attribute.cs: Emit dynamic export attribute.
15
16 2009-07-30  Marek Safar  <marek.safar@gmail.com>
17
18         * expression.cs: More verifier work.
19
20 2009-07-29  Marek Safar  <marek.safar@gmail.com>
21
22         * nullable.cs: Fixed SRE crash during corlib compilation.
23
24 2009-07-29  Marek Safar  <marek.safar@gmail.com>
25
26         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
27         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
28         More TypeManager.TypeToCoreType needed.
29
30 2009-07-29  Marek Safar  <marek.safar@gmail.com>
31
32         * anonymous.cs: Update after recent SRE fixes.
33
34 2009-07-28  Marek Safar  <marek.safar@gmail.com>
35
36         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
37         version of GetFieldHandle for fields of generic types.
38
39 2009-07-27  Marek Safar  <marek.safar@gmail.com>
40
41         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
42         ecore.cs: Add TypeManager.IsDynamicType,
43         PredefinedAttributes.Dynamic.
44
45 2009-07-27  Marek Safar  <marek.safar@gmail.com>
46
47         A fix for bug #415375
48         * expression.cs: Fixed object and reference type parameter
49         comparison.
50
51 2009-07-27  Marek Safar  <marek.safar@gmail.com>
52
53         A fix for bug #525342
54         * class.cs: Attach partial method attributes to method
55         implementation.
56
57 2009-07-24  Marek Safar  <marek.safar@gmail.com>
58
59         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
60         Dynamic arguments.
61
62 2009-07-24  Marek Safar  <marek.safar@gmail.com>
63
64         * anonymous.cs (MutateField): Add imported types handling.
65
66 2009-07-23  Marek Safar  <marek.safar@gmail.com>
67
68         * expression.cs, delegate.cs: Moved arguments resolve into their
69         counterparts expressions. Removed argument resolve from
70         CollectionElementInitializer.
71
72 2009-07-23  Marek Safar  <marek.safar@gmail.com>
73
74         A fix for bug #523683
75         * convert.cs, delegate.cs: Use common overload mechanism for method
76         group conversion check.
77
78 2009-07-22  Marek Safar  <marek.safar@gmail.com>
79
80         A fix for bug #523899
81         * generics.cs: Exact type inference with other bound types.
82
83 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
84
85         Don't complain when the same type is implemented by the output
86         assembly as well as multiple referenced assemblies
87         * namespace.cs (RootNamespace.LookupTypeReflection): Add
88         'must_be_unique' flag.
89         (GlobalRootNamespace): Update to changes.
90         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
91         already have a type in hand.
92
93 2009-07-22  Marek Safar  <marek.safar@gmail.com>
94
95         * expression.cs: More verifier instrumentation.
96         
97         * statement.cs: Do proper throw expression conversion.
98
99 2009-07-22  Marek Safar  <marek.safar@gmail.com>
100
101         A fix for bug #522789
102         * expression.cs: Mutate invocation return type.
103
104 2009-07-16  Marek Safar  <marek.safar@gmail.com>
105
106         * anonymous.cs: Split assignable and readonly generated variable
107         references.
108
109 2009-07-16  Marek Safar  <marek.safar@gmail.com>
110
111         A fix for bug #521671
112         * statement.cs: Fixed crash when checking missing type.
113
114 2009-07-16  Marek Safar  <marek.safar@gmail.com>
115
116         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
117         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
118         class.cs, driver.cs: Work on dynamic binding.
119
120         * dynamic.cs: New file.
121
122         * *.sources, *.proj: Updated.
123
124 2009-07-15  Marek Safar  <marek.safar@gmail.com>
125
126         * expression.cs (Conditional): Avoid double Resolve.
127
128 2009-07-13  Marcus Griep  <marcus@griep.us>
129
130         * ecore.cs: Fix obscure bug with resolving members of interfaces
131         that hide parent interface members. Fixes bug #444388 and corrects
132         bug #323096
133
134 2009-07-13  Marek Safar  <marek.safar@gmail.com>
135
136         * expression.cs (LocalVariableReference): Bounce resolve.
137
138 2009-07-10  Marek Safar  <marek.safar@gmail.com>
139
140         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
141         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
142         types to new class.
143         
144         * support.cs: New dynamic type wrapper.
145
146 2009-07-08  Marek Safar  <marek.safar@gmail.com>
147
148         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
149         typed local variable.
150
151 2009-07-06  Marek Safar  <marek.safar@gmail.com>
152
153         A fix for bug #519005
154         * anonymous.cs: Use null_type as no return type placeholder.
155
156 2009-07-02  Marek Safar  <marek.safar@gmail.com>
157
158         * generic.cs: Handle type inference of identical type parameters
159         with different bounds.
160
161 2009-07-01  Marek Safar  <marek.safar@gmail.com>
162
163         * expression.cs, class.cs: Events variance.
164         
165         * cs-parser.jay: Interface events error messages.
166
167 2009-07-01  Marek Safar  <marek.safar@gmail.com>
168
169         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
170
171 2009-06-29  Marek Safar  <marek.safar@gmail.com>
172
173         * parameter.cs, convert.cs, expression.cs, class.cs: Default
174         parameter expression can be value-type New.
175
176         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
177
178 2009-06-26  Marek Safar  <marek.safar@gmail.com>
179
180         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
181         Implemented C# 4.0 named arguments.
182
183 2009-06-24  Marek Safar  <marek.safar@gmail.com>
184
185         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
186         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
187         parameter modifier. Also fixes bug #515497.
188
189 2009-06-24  Marek Safar  <marek.safar@gmail.com>
190
191         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
192         arguments expression to be implemented.
193         
194         *.sources: Add argument.cs
195
196 2009-06-23  Marek Safar  <marek.safar@gmail.com>
197
198         * parameter.cs: Moved GetParameterIndexByName to base class.
199         
200         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
201         unused AType. Use argument's version of GetExpressionTree.
202
203 2009-06-22  Marek Safar  <marek.safar@gmail.com>
204
205         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
206         arguments grammar.
207
208 2009-06-17  Marek Safar  <marek.safar@gmail.com>
209
210         A fix for bug #514096
211         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
212
213 2009-06-17  Marek Safar  <marek.safar@gmail.com>
214
215         * expression.cs: The first multi-dimensional array nested array
216         initializers was not checked.
217         
218         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
219
220 2009-06-17  Marek Safar  <marek.safar@gmail.com>
221
222         A fix for bug #513400
223         * nullable.cs (EmitEquality): Operands emit could be simplified for
224         built-in types when we now emit user operators differently.
225
226 2009-06-16  Marek Safar  <marek.safar@gmail.com>
227
228         * ecore.cs: Report inaccessible delegate methods correctly.
229
230 2009-06-16  Marek Safar  <marek.safar@gmail.com>
231
232         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
233         cs-parser.jay: Implemented C# 4.0 optional parameters.
234
235 2009-06-16  Marek Safar  <marek.safar@gmail.com>
236
237         * driver.cs: Removed broken DefineManifestResource.
238
239 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
240
241         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
242         Use $(BOOTSTRAP_PROFILE) instead.
243
244 2009-06-12  Jb Evain  <jbevain@novell.com>
245
246         * rootcontext.cs: add a Platform field.
247         * driver.cs: handle /platform.
248         * codegen.cs: pass the proper flags according to
249         the platform when saving the assembly.
250
251 2009-06-11  Marek Safar  <marek.safar@gmail.com>
252
253         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
254         Add optional parameters grammar.
255
256 2009-06-10  Marek Safar  <marek.safar@gmail.com>
257
258         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
259         driver.cs: Split lang version and metadata version.
260
261 2009-06-10  Marek Safar  <marek.safar@gmail.com>
262
263         * decl.cs: Better overload ctor collision error message.
264
265 2009-06-05  Jb Evain  <jbevain@novell.com>
266
267         * driver.cs (EmbededResource): avoid using an internal method
268         in gmcs to embed manifest resources.
269
270 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
271
272         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
273         the compiler from older mono versions (like moon's bots)
274
275 2009-06-04  Marek Safar  <marek.safar@gmail.com>
276
277         * namespace.cs (LookupTypeReflection): Ignore collisions between
278         forwarded types.
279
280 2009-06-04  Marek Safar  <marek.safar@gmail.com>
281
282         * codegen.cs: Enabled generic type forwarders.
283
284 2009-06-04  Marek Safar  <marek.safar@gmail.com>
285
286         * dmcs.*: Add another version of SRE compiler.
287
288 2009-06-03  Marek Safar  <marek.safar@gmail.com>
289
290         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
291         generic-mcs.cs: Fixed variant type conversions.
292
293 2009-06-02  Marek Safar  <marek.safar@gmail.com>
294
295         A fix for bug #507863
296         * codegen.cs: Fixes a crash on invalid string value attribute.
297
298 2009-06-01  Marek Safar  <marek.safar@gmail.com>
299
300         A fix for bug #508334
301         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
302         cs-parser.jay: Fully import __arglist modifier.
303
304 2009-05-29  Marek Safar  <marek.safar@gmail.com>
305
306         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
307         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
308         actually work with closed generic types.
309
310 2009-05-27  Alan McGovern  <amcgovern@novell.com>
311
312         * class.cs, decl.cs, delegate.cs, parameter.cs: 
313         Fix the build by replacing the use of 'var' with the actual type.
314
315 2009-05-27  Marek Safar  <marek.safar@gmail.com>
316
317         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
318     cs-parser.jay, generic-mcs.cs: Report wrong variant types
319         declarations.
320           
321         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
322         filter.
323
324 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
325                         Marek Safar  <marek.safar@gmail.com>
326
327         A fix for bug #377509
328         * parameter.cs: Use predefined and not empty name for implicit
329         setters.
330
331 2009-05-21  Marek Safar  <marek.safar@gmail.com>
332
333         * class.cs: Don't report wrong warnings for event fields.
334
335 2009-05-21  Marek Safar  <marek.safar@gmail.com>
336
337         A fix for bug #504667
338         * class.cs: Check for static class using parent container instead of
339         parent type.
340
341 2009-05-08  Marek Safar  <marek.safar@gmail.com>
342
343         A fix for bug #496922
344         * expression.cs: Always use temporary variable when using object
345         initializer.
346
347 2009-04-28  Marek Safar  <marek.safar@gmail.com>
348
349         A fix for bug #495112
350         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
351         local cache.
352
353 2009-04-27  Miguel de Icaza  <miguel@novell.com>
354
355         * driver.cs: Add a flag to work as a replacement for CSC in VS.
356
357 2009-04-24  Miguel de Icaza  <miguel@novell.com>
358
359         * complete.cs: No idea how gonzalo got a null in the list, but
360         avoid crashing.
361
362 2009-04-24  Miguel de Icaza  <miguel@novell.com>
363
364         * complete.cs (CompletionElementInitializer): New completion class
365         to support completing inside a C# 3 element initializer, so this
366         allows completion for Silverlight situations where it is very
367         common to do:
368
369         new TextBlock () { Fo<TAB>
370
371         (CompletionSimpleName): Expose the prefix that was
372         passed to the simple name.
373
374         * cs-parser.jay (object_or_collection_initializer): Add support
375         for element_initializers.
376
377         * expression.cs (CollectionOrObjectInitializers.DoResolve):
378         special case completion expressions as this method aggressively
379         collects data before it operates, and errors were being thrown
380         earlier than we were able to complete.
381
382 2009-04-23  Miguel de Icaza  <miguel@novell.com>
383
384         * eval.cs: Make getcompletions silent and enable debugging output
385         if the -v option is passed.
386
387         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
388         Consider looking up the namespace that matches the prefix being
389         used. 
390
391         This is part of the support for allowing completions like:
392         `System.Co<TAB>' to complete to System.Console.
393
394         * complete.cs (CompletionSimpleName.AppendResults): Make this
395         routine reusable.
396
397 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
398
399         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
400         COMPLETE_COMPLETION as internal.
401
402 2009-04-17  Miguel de Icaza  <miguel@novell.com>
403
404         * complete.cs: Include namespace resolution in simple names as
405         well as global types and types in the using scope in the
406         resolution. 
407
408         * namespace.cs: Supporting infrastrcture to provide completions
409         based on the current using scope. 
410
411         * eval.cs: Introduce an entry point that allows for initialization
412         to return a list of the files passed on the command line.
413
414 2009-04-14  Marek Safar  <marek.safar@gmail.com>
415
416         A fix for bug #494243
417         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
418
419 2009-04-13  Marek Safar  <marek.safar@gmail.com>
420
421         A fix for bug #493887
422         * statement.cs: Don't skip string multi-section with default or
423         null label when populating string hashtable.
424
425 2009-04-06  Marek Safar  <marek.safar@gmail.com>
426
427         A fix for bug #492329
428         * expression.cs (New): Load variable when assigning type parameter
429         to ref variable.
430
431 2009-04-06  Marek Safar  <marek.safar@gmail.com>
432
433         A fix for bug #488960
434         * decl.cs: Compare MVAR types using non-null values.
435
436 2009-03-27  Marek Safar  <marek.safar@gmail.com>
437
438         * typemanager.cs, expression.cs: Removed unused nullable checks.
439
440 2009-03-27  Marek Safar  <marek.safar@gmail.com>
441
442         * *.cs: Removed some gmcs conditionals.
443
444 2009-03-26  Marek Safar  <marek.safar@gmail.com>
445
446         * generic.cs, support.cs: Moved generics stuff out of support.cs
447
448 2009-03-24  Marek Safar  <marek.safar@gmail.com>
449
450         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
451         DeclaringType.
452
453 2009-03-23  Marek Safar  <marek.safar@gmail.com>
454
455         * attribute.cs: Consider all members for error reporting when
456         checking named arguments.
457
458 2009-03-23  Marek Safar  <marek.safar@gmail.com>
459
460         A fix for bug #487625
461         * namespace.cs: Use a warning for all predefined type conflicts.
462
463 2009-03-23  Marek Safar  <marek.safar@gmail.com>
464
465         A fix for bug #485706
466         * statement.cs: Explicitly type catch type argument to pass verifier
467         check.
468
469 2009-03-22  Miguel de Icaza  <miguel@novell.com>
470
471         Initial support to provide code completion facilities to consumers
472         of the evaluator API.
473         
474         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
475         support the completion engine.   When we reach the end of the
476         input stream instead of returning EOF, when this flag is true the
477         tokenizer instead produces:
478
479                 One GENERATE_COMPLETION token: this token then must be
480                 handled in the grammar at every point where the user
481                 would likely request a completion.
482
483                 As many COMPLETE_COMPLETION tokens as necessary.   These
484                 tokens are generated to assist the parser in unwinding and
485                 producing a valid parse tree.    
486
487         The parser rules do not have to be perfect, the parser needs to be
488         augmented with judicious use of GENERATE_COMPLETION tokens to
489         improve the areas where we can provide completion and the parser
490         needs to add support for COMPLETE_COMPLETION tokens in productions
491         to make them work.
492
493         It is common to not have enough support for COMPLETE_COMPLETION
494         under certain rules and that even if we generated the
495         GENERATE_COMPLETION token that the resulting tree will be invalid
496         due to the missing rules that support COMPLETE_COMPLETION.
497
498         The final EOF token is produced by having the parser notify the
499         tokenizer when it reaches the root production that the next token
500         should be EOF.
501
502         * support.cs (CompletionResult): New Exception.   This exception
503         is thrown to return the completion results when one of the special
504         completion expressions is reached.
505
506         This exception is thrown by the completing ExpressionStatements
507         classes that live in complete.cs
508
509         * complete.cs (CompletingExpression): a new base class for
510         completing expressions.   This derives from the
511         ExpressionStatement class and not from Expression as it allows
512         completion to happen not only where expressions are expected in
513         the grammar, but also where statements are expected.
514
515         (CompletionSimpleName): A new class used to provide completions
516         for SimpleNames.     This currently only resolves to local
517         variables from the evaluator context (GetVars call).
518
519         (CompletionMemberAccess): Implements support for completing member
520         access patterns. 
521
522         * cs-parser.jay: Add support for completion in a few places. 
523
524         * eval.cs (GetCompletions): New public API for the evaluator that
525         returns a list of possible completions given the input.   The
526         return value is an array of completions 
527
528         * anonymous.cs (Compatible): If the exception thrown from the
529         resolved expression is a CompletionResult exception let that one
530         through instead of printing a diagnostic error in the try/catch. 
531 <       
532 2009-03-22  Miguel de Icaza  <miguel@novell.com>
533
534         * 
535
536         * driver.cs (Main): Use Environment.Exit to quit quickly and
537         prevent the compiler from doing the usual wait for helper thread
538         to terminate.  
539
540         This is to prevent a slowdown that was reported by Gonzalo on
541         ASP.NET 
542
543 2009-03-19  Marek Safar  <marek.safar@gmail.com>
544
545         * ecore.cs: Load build-in types directly instead of accessing
546         an internal field.
547
548 2009-03-18  Marek Safar  <marek.safar@gmail.com>
549
550         * ecore.cs: Always use unbox.any when available.
551
552 2009-03-18  Marek Safar  <marek.safar@gmail.com>
553
554         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
555
556 2009-03-17  Marek Safar  <marek.safar@gmail.com>
557
558         * generic.cs: Removed obsolete version of type inference.
559
560 2009-03-16  Marek Safar  <marek.safar@gmail.com>
561
562         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
563         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
564         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
565         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
566
567 2009-03-11  Marek Safar  <marek.safar@gmail.com>
568
569         A fix for bug #482996
570         * anonymous.cs: Make sure we are not infering return type when
571         checking type compatibility.
572
573 2009-03-11  Marek Safar  <marek.safar@gmail.com>
574
575         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
576         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
577         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
578         attributes in their own structure. Needed when accessing their
579         properties before they are resolved.
580
581 2009-03-09  Marek Safar  <marek.safar@gmail.com>
582
583         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
584         hashtable (~10x faster).
585         
586         * driver.cs: Removed wrong Reset.
587
588 2009-03-08  Marek Safar  <marek.safar@gmail.com>
589
590         * class.cs: Use correct common base type for unmanaged delayed
591         check.
592
593         * rootcontext.cs: Wrap unhandled exception.
594
595 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
596
597         Make SeekableStreamReader self-tuning and arbitrarily seekable
598         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
599         the buffer.
600         (SeekableStreamReader.Position.set): Use it.  Simplify logic
601         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
602         buffer size when the stream needs to be re-read from the beginning.
603
604 2009-03-05  Marek Safar  <marek.safar@gmail.com>
605
606         A fix for bug #480100
607         * parameter.cs: A parameter is not hoisted when used directly as ET.
608
609 2009-03-04  Marek Safar  <marek.safar@gmail.com>
610
611         * statement.cs: Fixed an issue when using variable is of interface
612         type.
613
614 2009-03-03  Marek Safar  <marek.safar@gmail.com>
615
616         A fix for bug #480319
617         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
618
619 2009-03-03  Marek Safar  <marek.safar@gmail.com>
620
621         A fix for bug #480867
622         * typemanager.cs, expression.cs, ecore.cs: Changed method group
623         expression to have no valid type.
624
625 2009-03-03  Marek Safar  <marek.safar@gmail.com>
626
627         A fix for bug #481258
628         * class.cs: Set extension method flag in partial container.
629
630 2009-03-03  Marek Safar  <marek.safar@gmail.com>
631
632         * statement.cs, typemanager.cs: Use expression for StringEmitter.
633         
634         * attribute.cs: Add sanity check.
635
636 2009-02-27  Marek Safar  <marek.safar@gmail.com>
637
638         * class.cs: Add external constructor error.
639
640 2009-02-26  Marek Safar  <marek.safar@gmail.com>
641
642         A fix for bug #475354
643         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
644         correctly user defined nullable equality operators.
645
646 2009-02-25  Marek Safar  <marek.safar@gmail.com>
647
648         A fix for bug #479532
649         * expression.cs: Implement NewInitialize::AddressOf.
650
651 2009-02-25  Marek Safar  <marek.safar@gmail.com>
652
653         A fix for bug #413633
654         * expression.cs: Iterate all base class-constraint types.
655
656 2009-02-24  Marek Safar  <marek.safar@gmail.com>
657
658         A fix for bug #479209
659         * literal.cs: Mutate null underlying type.
660
661 2009-02-24  Marek Safar  <marek.safar@gmail.com>
662
663         A fix for bug #476295
664         * convert.cs: Avoid wrapping implicitly convertible reference type.
665
666 2009-02-23  Marek Safar  <marek.safar@gmail.com>
667
668         * iterators.cs: Create MemberName correctly.
669
670 2009-02-23  Marek Safar  <marek.safar@gmail.com>
671
672         A fix for bug #478655
673         * literal.cs: Check also underlying null type conversion.
674
675 2009-02-21  Marek Safar  <marek.safar@gmail.com>
676
677         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
678
679 2009-02-20  Marek Safar  <marek.safar@gmail.com>
680
681         A fix for bug #477447
682         * statement.cs: Add reference to correct parent storey when this
683         is accessible from deep children storey (more than 1 level).
684
685 2009-02-19  Marek Safar  <marek.safar@gmail.com>
686
687         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
688         * class.cs: Define base type members before setting up member cache.
689
690 2009-02-18  Marek Safar  <marek.safar@gmail.com>
691
692         A fix for bug #477378
693         * nullable.cs, expression.cs, statement.cs: More precise null type
694         sanity checks.
695
696 2009-02-18  Marek Safar  <marek.safar@gmail.com>
697
698         A fix for bug #472805
699         * typemanager.cs, namespace.cs: Import only visible extension method
700         types.
701
702 2009-02-18  Marek Safar  <marek.safar@gmail.com>
703
704         A fix for bug #476895
705         * attribute.cs: Use correct resolve context for attribute type.
706
707 2009-02-18  Marek Safar  <marek.safar@gmail.com>
708
709         A fix for bug #476266
710         * anonymous.cs: Mutate multi-dimensional arrays.
711
712 2009-02-18  Marek Safar  <marek.safar@gmail.com>
713
714         A fix for bug #476400
715         * statement.cs, expression.cs: Removed wrong Dispose optimization.
716
717 2009-02-18  Marek Safar  <marek.safar@gmail.com>
718
719         A fix for bug #476811
720         * generics.cs: Fixed null-literal check.
721
722 2009-02-17  Marek Safar  <marek.safar@gmail.com>
723
724         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
725         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
726         messing with static variables.
727
728 2009-02-16  Marek Safar  <marek.safar@gmail.com>
729
730         A fix for bug #475965
731         * generics.cs: Check generic parameter type after extracting from
732         Expression<T>.
733
734 2009-02-16  Marek Safar  <marek.safar@gmail.com>
735
736         A fix for bug #475823
737         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
738         typed-null support.
739
740 2009-02-14  Marek Safar  <marek.safar@gmail.com>
741
742         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
743         Simplified event field definition using backing field and not
744         field builder directly.
745
746         * expression.cs (EmitLdArg): Optimize fast paths.
747
748 2009-02-13  Marek Safar  <marek.safar@gmail.com>
749
750         A fix for bug #475327
751         * expression.cs (ArrayCreation): Don't mutate values optimized away.
752
753 2009-02-13  Marek Safar  <marek.safar@gmail.com>
754
755         A fix for bug #475342
756         * cs-parser.jay: Using 'super' instead of 'base' to call base
757         constructor crashes compiler.
758
759 2009-02-13  Marek Safar  <marek.safar@gmail.com>
760
761         A fix for bug #475354
762         * expression.cs (Constantify): Add nullable types.
763         
764         * const.cs (EmitDecimalConstant): Avoid explicit cast.
765
766 2009-02-12  Marek Safar  <marek.safar@gmail.com>
767
768         A fix for bug #475246
769         * expression.cs: More broken flowanalysis hacking needed.
770
771 2009-02-12  Marek Safar  <marek.safar@gmail.com>
772
773         * attribute.cs: Compare only ref/out array modifiers. 
774
775 2009-02-11  Marek Safar  <marek.safar@gmail.com>
776
777         * statement.cs: Use member cache when looking for foreach members.
778
779 2009-02-11  Marek Safar  <marek.safar@gmail.com>
780
781         * expression.cs: Don't expose internal initializer types.
782         
783         * statement.cs: Check also explicit conversions for goto case.
784
785 2009-02-11  Marek Safar  <marek.safar@gmail.com>
786
787         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
788
789 2009-02-10  Marek Safar  <marek.safar@gmail.com>
790
791         * *.cs: Replace null-type with NullLiteral where appropriate.
792
793 2009-02-09  Marek Safar  <marek.safar@gmail.com>
794
795         * expression.cs: Initializer of reference argument use temporary
796         variable to be verifiable.
797         
798         * parameter.cs: Share EmitLdArg.
799
800 2009-02-09  Marek Safar  <marek.safar@gmail.com>
801
802         A fix for bug #473559
803         * class.cs: Fixed: Not reporting error about nested class with the
804         same name.
805
806 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
807
808         Contributed under the MIT/X11 license.
809
810         * generic.cs: Added VerifyVariantTypeParameters which performs new
811         variance verification logic. The old logic, based on the spec, was
812         wrong because the spec is full of LIES!
813
814         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
815
816         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
817
818         * class.cs:
819         * ecore.cs: Added calls to the new variance verification logic.
820
821         * parameter.cs:
822         * delegate.cs: Removed calls to the old variance verification logic.
823
824 2009-02-06  Marek Safar  <marek.safar@gmail.com>
825
826         * delegate.cs: Use cached Invoke method directly.
827
828 2009-02-06  Marek Safar  <marek.safar@gmail.com>
829
830         * expression.cs: Emit expression tree for hoisted variable access.
831
832 2009-02-04  Marek Safar  <marek.safar@gmail.com>
833
834         * namespace.cs: Add better extension class check.
835
836 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
837
838         * generic.cs: Fixed typeo (TypeParameter.Variacne).
839
840 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
841
842         This patch adds initial generic variance support to the compiler.
843         It is contributed under the MIT/X11 license.
844
845         * typemanager.cs: Modified ImplementsInterface to check variance.
846         Added VerifyVariantTypeParameters which checks the specified type to see
847         if it uses a variant type parameter as a type argument (which is not
848         allowed). Added IsVariantOf which determins if the first type is a
849         variant of the second. NOTE: This only supports reference types at
850         the moment to conform with the current level of VM support. When the
851         VM supports value types, this will follow step.
852
853         * generic.cs: Added the Variance enum. Added a Variance property to
854         TypeParameter and added variance support to definition phase. Added a
855         Variance property to TypeParameterName. Also check to make sure that
856         no variant types appear in generic method parameters.
857
858         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
859         keywords if the langversion supports it.
860
861         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
862         that variant types are only used in legal positions. Also added
863         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
864         parameters.
865
866         * decl.cs: Construct TypeParameter with the variance information.
867
868         * convert.cs: Checks variance in ImplicitReferenceConversionExists
869         and ImplicitConversionStandard.
870
871         * rootcontext.cs: Added new "Future" language version.
872
873         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
874         type parameters are not used as type arguments in interface inheritance.
875         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
876         parameters are not used as method return types. In MemberBase.
877         ResolveMemberType, ensure that variant type parameters are not used
878         as type arguments. Also call VerifyNoVariantTypeParameters on every
879         set of parameters which are resolved.
880
881         * delegate.cs: Modified Delegate.Define to ensure that variant
882         parameters are not used as type arguments and that a contravariant
883         parameter is not used as the return type. Also call
884         VerifyNoVariantTypeParameters on the delegate parameters.
885
886         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
887         to specify generic variance.
888
889         * driver.cs: Added support for LanguageVersion.Future in the form of
890         "-langversion:future".
891
892         * generic-mcs.cs: Stubbed out new members in generic.cs.
893
894 2009-02-03  Marek Safar  <marek.safar@gmail.com>
895
896         * class.cs, generic.cs: Emit type parameter constraints for nested
897         types.
898
899 2009-02-02  Marek Safar  <marek.safar@gmail.com>
900
901         A fix for bug #471213
902         * class.cs: Avoid emitting backing field for abstract event fields.
903
904 2009-02-01  Marek Safar  <marek.safar@gmail.com>
905
906         A fix for bug #359731
907         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
908         expressions.
909
910 2009-01-30  Marek Safar  <marek.safar@gmail.com>
911
912         A fix for bug #470767
913         * statement.cs: Introduced BlockScopeExpression, needed when 
914         expression tree conversion has to emit scope variables.
915
916 2009-01-29  Marek Safar  <marek.safar@gmail.com>
917
918         * class.cs: Remove duplicate CallingConvention.
919
920 2009-01-29  Marek Safar  <marek.safar@gmail.com>
921
922         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
923         when I finally found the right naming convention.
924
925 2009-01-29  Marek Safar  <marek.safar@gmail.com>
926
927         * cs-tokenizer.cs: Put back different open parens optimization.
928
929 2009-01-28  Marek Safar  <marek.safar@gmail.com>
930
931         A fix for bug #470227
932         * cs-tokenizer.cs: Remove too agressive parser optimization.
933
934 2009-01-28  Marek Safar  <marek.safar@gmail.com>
935
936         A fix for bug #324319
937         * class.cs: Remove too early base type resolve.
938
939 2009-01-27  Marek Safar  <marek.safar@gmail.com>
940
941         A fix for bug #324319
942         * ecore.cs: Explicitly type null when assigning to type argument to
943         make pass verifier check.
944
945 2009-01-27  Marek Safar  <marek.safar@gmail.com>
946
947         * anonymous.cs: Fixed recent regression when initializing captured 
948         this.
949
950 2009-01-26  Marek Safar  <marek.safar@gmail.com>
951
952         A fix for bug #469019
953         * anonymous.cs: Use all parent type parameters when instantiating
954         nested generic storey.
955
956 2009-01-26  Marek Safar  <marek.safar@gmail.com>
957
958         * expression.cs: Check for null instance methodgroup expression.
959
960 2009-01-26  Marek Safar  <marek.safar@gmail.com>
961
962         A fix for bug #469244
963         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
964         instance inside a conditional expression.
965
966 2009-01-23  Marek Safar  <marek.safar@gmail.com>
967
968         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
969         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
970         GetElementType and HasElementType. IsValueType clean up.
971
972 2009-01-23  Marek Safar  <marek.safar@gmail.com>
973
974         * nullable.cs: Use common EmitCall.
975         
976         * expression.cs: Emit constraint. for virtual calls only.
977
978 2009-01-23  Marek Safar  <marek.safar@gmail.com>
979
980         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
981         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
982         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
983         checks.
984
985 2009-01-22  Jb Evain  <jbevain@novell.com>
986
987         * anonymous.cs: make anonymous types' ToString implementation
988         match what csc outputs.
989
990 2009-01-21  Marek Safar  <marek.safar@gmail.com>
991
992         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
993         up.
994
995 2009-01-17  Marek Safar  <marek.safar@gmail.com>
996
997         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
998         verifier checks.
999
1000 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1001
1002         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1003         expressions.
1004
1005 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1006
1007         A fix for bug #466634
1008         * statement.cs: Add reference for nested storey when only this
1009         is captured.
1010
1011 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1012
1013         A fix for bug #466474
1014         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1015         was specified.
1016
1017 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1018
1019         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1020         Fixed nested stories parent referencing process. Also fixes #463985.
1021
1022 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1023
1024         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1025         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1026         implementation. Also fixes #463108.
1027
1028 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1029
1030         A fix for bug #416109
1031         * decl.cs: Issue correct CLSAttribute warning location.
1032
1033 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1034
1035         A fix for bug #456775
1036         * attribute.cs: Use attribute owner scope when resolving attribute
1037         arguments.
1038
1039 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1040
1041         A fix for bug #457257
1042         * decl.cs: Fixed incorrect member declaring type comparison.
1043
1044 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1045
1046         A fix for bug #460896
1047         * driver.cs: Handle /RES resources as embeddable.
1048
1049 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1050
1051         A fix for bug #462515
1052         * ecore.cs: Report inacessible members upwards.
1053
1054 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1055
1056         A fix for bug #463190, #463192
1057         * decl.cs, namespace.cs: Also import internal extension classes.
1058
1059 2009-01-04  Marek Safar  <marek.safar@gmail.com>
1060
1061         A fix for bug #463415
1062         * generic.cs: Use right index for RemoveDependentTypes.
1063
1064 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1065
1066         A fix for bug #463196
1067         * expression.cs: Fixed enum to null comparison.
1068
1069 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1070
1071         A fix for bug #463121
1072         * nullable.cs: Fixed nullable user equality operator comparison.
1073
1074 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1075
1076         A fix for bug #462950
1077         * class.cs, decl.cs: Use full explicit name when defining automatic
1078         property backing field.
1079
1080 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1081
1082         A fix for bug #462592
1083         * pending.cs: Emit type arguments for generic proxy method.
1084
1085 2008-12-30  Marek Safar  <marek.safar@gmail.com>
1086
1087         * expression.cs (As): Mutate all type arguments.
1088
1089 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1090
1091         A fix for bug #462622
1092         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
1093         context.
1094
1095 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1096
1097         A fix for bug #450782
1098         * ecore.cs: Consider more variables of form V.I to be fixed.
1099
1100 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1101
1102         A fix for bug #460712
1103         * typemanager.cs: Core types could be imported.
1104
1105 2008-12-28  Marek Safar  <marek.safar@gmail.com>
1106
1107         A fix for bugs #460847, #460772, #458049, #457339, #447807
1108         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
1109         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
1110         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
1111         user lambdas used inside query clauses.
1112
1113 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1114
1115         A fix for bug #460229
1116         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
1117
1118 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1119
1120         A fix for bug #459952
1121         * decl.cs, namespace.cs: Use common CheckAccessLevel.
1122
1123 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1124
1125         A fix for bug #459630
1126         * convert.cs: Enum to valuetype conversion is not allowed.
1127
1128 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1129
1130         A fix for bug #457087
1131         * generic.cs: Don't crash when constraint comes from type
1132         declaration.
1133
1134 2008-12-16  Marek Safar  <marek.safar@gmail.com>
1135
1136         A fix for bug #459221
1137         * anonymous.cs, statement.cs: Delay only captured this
1138         initialization.
1139
1140 2008-12-12  Marek Safar  <marek.safar@gmail.com>
1141
1142         A fix for bug #457489
1143         * anonymous.cs, statement.cs: Split anonymous storey instantiation
1144         and initialization to capture scope initializers correctly.
1145
1146 2008-12-11  Marek Safar  <marek.safar@gmail.com>
1147
1148         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
1149         ParameterReference refactoring.
1150
1151 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1152
1153         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
1154         to be imported from any assembly.
1155
1156 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1157
1158         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
1159         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
1160         from anonymous method and lambda expression.
1161
1162 2008-12-01  Marek Safar  <marek.safar@gmail.com>
1163
1164         A fix for bug #448560
1165         * expression.cs (As): Box any generic type arguments to be
1166         verifiable.
1167
1168 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1169
1170         Add tripwire for implicit conversion bugs
1171         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
1172         for CS1501 error.
1173         (MethodGroupExpr.OverloadResolve): Add sanity check between
1174         IsApplicable and VerifyArgumentsCompat.
1175         (VerifyArgumentsCompat): Report CS1501 where appropriate.
1176
1177 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1178
1179         Fix build break in System.Data_test
1180         * convert.cs (ImplicitConversionExists): Move NullLiteral
1181         conversions ...
1182         (ImplicitStandardConversionExists): ... here.
1183
1184 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1185
1186         * literal.cs: Emit correctly explicit null to nullable cast.
1187
1188 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1189
1190         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
1191         resolve.
1192
1193 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1194
1195         A fix for bug #449005
1196         * convert.cs, nullable.cs: Use only one implicit nullable
1197         conversion.
1198
1199 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1200
1201         * convert.cs, literal.cs: More Convert cleanup is needed.
1202
1203 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1204
1205         * decl.cs, class.cs: Fixed misleading error message.
1206
1207 2008-11-26  Marek Safar  <marek.safar@gmail.com>
1208
1209         A fix for bug #449005
1210         * nullable.cs (EmitEquality): Disable optimization for user operator
1211         operands.
1212
1213 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1214
1215         A fix for bug #447027
1216         * anonymous.cs (HoistedVariable): Cache also outer access to deal
1217         with context variables stored as expression instances.
1218
1219 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1220
1221         A fix for bug #447027
1222         * delegate.cs: Fixed delegate VerifyMethod logic.
1223
1224 2008-11-24  Marek Safar  <marek.safar@gmail.com>
1225
1226         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
1227         but not verifiable.
1228
1229 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1230
1231         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
1232         member type resolve to follow normal flow, instead of random
1233         property access.
1234
1235 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1236
1237         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
1238         type.
1239
1240 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1241
1242         * const.cs: Emit decimal array constant as literal.
1243
1244 2008-11-20  Marek Safar  <marek.safar@gmail.com>
1245
1246         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
1247
1248 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1249
1250         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
1251         into real property (saves 8 MB for corlib compilation).
1252
1253 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1254
1255         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
1256         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
1257         generic-mcs.cs: Small cleanup of TypeArguments.
1258
1259 2008-11-18  Marek Safar  <marek.safar@gmail.com>
1260
1261         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
1262         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
1263         of ConstructedType expression, renamed to GenericTypeExpr.
1264
1265 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1266
1267         A fix for bug #445303
1268         * location.cs (IsConditionalDefined): Handle undefined global
1269         defines.
1270
1271 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1272
1273         A fix for bug #444678
1274         * expression.cs (TryReduceConstant): Always create new constant
1275         instance.
1276
1277 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1278
1279         A fix for bug #444673
1280         * ecore.cs: Ignore open generic types when used as generic type
1281         instance fields.
1282
1283 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1284
1285         A fix for bug #445458
1286         * expression.cs, cs-parser.jay: Don't crash when an expression
1287         statement is null.
1288
1289 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1290
1291         A fix for bug #445464
1292         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
1293         inside unbound type.
1294
1295 2008-11-14  Jb Evain  <jbevain@novell.com>
1296
1297         * driver.cs: ignore empty -nowarn argument such as
1298         the one in -nowarn:12,13,,.
1299
1300 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1301
1302         A fix for bug #444271
1303         * anonymous.cs: Rescan parent storeys when best candidate was
1304         undone.
1305
1306 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1307
1308         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
1309         useless UnboundTypeExpression.
1310         
1311         * attribute.cs: Do check obsolete attribute on generic types.
1312
1313 2008-11-12  Marek Safar  <marek.safar@gmail.com>
1314
1315         A fix for bugs #425680, #400139
1316         * ecore.cs, expression.cs: Trying to do some almost_matched_members
1317         refactoring.
1318
1319 2008-11-11  Marek Safar  <marek.safar@gmail.com>
1320
1321         A fix for bug #435747
1322         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
1323         compound value types assignment. Few micro optimizations added.
1324
1325 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1326
1327         A fix for bug #442610
1328         * anonymous.cs (MutateConstructor): More SRE hacking.
1329
1330 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1331
1332         A fix for bug #442579
1333         * ecore.cs: Also initialize expanded form of a method with 1 params
1334         parameter.
1335
1336 2008-11-06  Marek Safar  <marek.safar@gmail.com>
1337
1338         * expression.cs (UnaryMutator): Do early l-side check.
1339
1340 2008-11-05  Miguel de Icaza  <miguel@novell.com>
1341
1342         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
1343         Init, otherwise we would crash later on when checking for friend
1344         assemblies. 
1345
1346         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
1347         Otherwise we never get any meaningful information as to what
1348         failed. 
1349
1350 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1351
1352         A fix for bug #436318
1353         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
1354
1355 2008-11-05  Miguel de Icaza  <miguel@novell.com>
1356
1357         * namespace.cs: Turns out that it was a really bad idea to hide
1358         the errors for namespaces not found here in eval mode.    
1359
1360         * eval.cs: When we process using clauses, only enter those into
1361         the list of valid using clauses after they have been validated.   
1362
1363         The above change gives the proper semantics: it does not
1364         senselessly report the same errors with broken using statements by
1365         never storing them in the first place when they are invalid.
1366
1367 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1368
1369         A fix for bug #421839
1370         * cs-parser.jay: Remove expression from coalesce rule to force lower
1371         priority than the assignment operator.
1372
1373 2008-11-05  Marek Safar  <marek.safar@gmail.com>
1374
1375         A fix for bug #437875
1376         * nullable.cs: Compile correctly method group operand used with null
1377         coalescing operator.
1378
1379 2008-11-04  Marek Safar  <marek.safar@gmail.com>
1380
1381         A fix for bug #434589
1382         * expression.cs (Binary): Ignore lifted conversions when at least
1383         one operand is of reference type.
1384
1385 2008-11-04  Marek Safar  <marek.safar@gmail.com>
1386
1387         * cs-parser.jay: Better syntax error report.
1388
1389 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1390
1391         A fix for bug #436792
1392         * cs-parser.jay: Use GetLocation to access location.
1393
1394 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1395
1396         A fix for bug #440774
1397         * cs-parser.jay: Also set current_array_type when parsing local
1398         variables types.
1399
1400 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1401
1402         A fix for bug #440785
1403         * expression.cs (As): Don't resolve self modifing expression
1404         multiple times.
1405
1406 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1407
1408         A fix for bug #439447
1409         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
1410
1411 2008-11-03  Marek Safar  <marek.safar@gmail.com>
1412
1413         A fix for bug #437571
1414         * cs-parser.jay: Fixes internal error for invalid expression
1415         statements.
1416
1417 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1418
1419         * ecore.cs: Resolve correctly ambiguous params delegate methods.
1420
1421 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1422
1423         * generic.cs, anonymous.cs: Simplified GetDeclarations.
1424
1425 2008-10-17  Marek Safar  <marek.safar@gmail.com>
1426
1427         * cs-tokenizer.cs: More precise cast parsing.
1428
1429 2008-10-16  Martin Baulig  <martin@ximian.com>
1430
1431         * anonymous.cs (AnonymousMethodStorey): Put back the
1432         `hoisted_locals' hashtable and use it in EmitType().
1433
1434 2008-10-15  Marek Safar  <marek.safar@gmail.com>
1435
1436         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
1437         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
1438         ~5MB for corlib.
1439
1440 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1441
1442         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
1443
1444 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1445
1446         * statement.cs: Mutate scope initializers.
1447
1448 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1449
1450         * expression.cs: Use typeless value for This constant.
1451         
1452         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
1453
1454 2008-10-14  Marek Safar  <marek.safar@gmail.com>
1455
1456         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
1457         tokenizer.
1458
1459 2008-10-13  Marek Safar  <marek.safar@gmail.com>
1460
1461         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
1462         type to type cast.
1463
1464 2008-10-13  Marek Safar  <marek.safar@gmail.com>
1465
1466         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
1467         parser and tokenizer. Fixes many ambiguities including #433258.
1468
1469 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1470
1471         * cs-parser.jay: Fixed missing accessor recovery.
1472
1473 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1474
1475         A fix for bug #433701
1476         * expression.cs: Better error message.
1477
1478 2008-10-10  Marek Safar  <marek.safar@gmail.com>
1479
1480         * cs-parser.jay, expression.cs: Start reporting real parser errors.
1481         
1482         * Makefile: Disabled unused debug symbols.
1483
1484         Also fixes: #320556, #321097, #321656, #321876, #351316
1485
1486 2008-10-09  Miguel de Icaza  <miguel@novell.com>
1487
1488         * eval.cs: rename "<interactive>" to "{interactive}", to work
1489         around a requirement in the compiler that this be a valid
1490         filename, and in Windows it is not (433886).
1491
1492 2008-10-09  Marek Safar  <marek.safar@gmail.com>
1493
1494         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
1495
1496 2008-10-08  Marek Safar  <marek.safar@gmail.com>
1497
1498         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
1499         cs-parser.jay: Generic type declaration and type arguments cleanup.
1500
1501 2008-10-05  Marek Safar  <marek.safar@gmail.com>
1502
1503         * cs-parser.jay: Allow parsing weird array creation construct.
1504
1505 2008-10-05  Marek Safar  <marek.safar@gmail.com>
1506
1507         * cs-parser.jay: Conflicts reduction.
1508
1509 2008-10-04  Marek Safar  <marek.safar@gmail.com>
1510
1511         * cs-parser.jay: Conflicts reduction.
1512
1513 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
1514
1515         Fix #398325
1516         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
1517         property.  Add a 'count' hint about the use of the shared vector.
1518         Ensure that we don't leak out dirty bits.
1519         (UsageVector.MergeChild): Throw away information about variables
1520         in child vectors.
1521         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
1522
1523 2008-10-03  Marek Safar  <marek.safar@gmail.com>
1524
1525         A fix for bug #431746
1526         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
1527         parameters when iterator is created.
1528
1529 2008-10-03  Marek Safar  <marek.safar@gmail.com>
1530
1531         A fix for bug #431827
1532         * expression.cs: Fixed right based pointer arithmetic operations
1533         emit.
1534
1535 2008-10-03  Marek Safar  <marek.safar@gmail.com>
1536
1537         A fix for bug #353779
1538         * assign.cs, expression.cs: Fixed compound assignment conversions.
1539
1540 2008-10-02  Marek Safar  <marek.safar@gmail.com>
1541
1542         A fix for bug #375262
1543         * statement.cs: Refactor ArrayForeach to be usable with string
1544         indexer. Optimized single dimentional arrays foreach.
1545
1546 2008-10-02  Marek Safar  <marek.safar@gmail.com>
1547
1548         A fix for bug #431255
1549         * anonymous.cs, expression.cs: Removed broken optimization.
1550
1551 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1552
1553         * anonymous.cs: Use full type parameters of parent generic
1554         containers. Removed unnecessary AddParentStoreyReference call.
1555
1556 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1557
1558         A fix for bug #324702
1559         * class.cs: Use better shorter names for explicit interface member
1560         implementations.
1561
1562         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
1563
1564 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1565         
1566         * expression.cs: Use new interface to check fixed expression.
1567
1568 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1569
1570         A fix for bug #421101
1571         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
1572         interface to check for fixed fixed-buffers.
1573
1574 2008-10-01  Marek Safar  <marek.safar@gmail.com>
1575
1576         A fix for bug #429264
1577         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
1578         
1579         * delegate.cs: Removed unnecessary casts.
1580
1581 2008-09-30  Marek Safar  <marek.safar@gmail.com>
1582
1583         A fix for bug #352151
1584         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
1585         class.cs: Fixed already defined explicit interface members check.
1586
1587 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
1588
1589         cs-tokenizer.cs: Fix typo.
1590
1591 2008-09-28  Miguel de Icaza  <miguel@novell.com>
1592
1593         * eval.cs (InteractiveBase): The quit command now just sets a
1594         flag, instead of calling Environment.Exit(), it is milder on
1595         embedded hosts. 
1596
1597         CompiledMethod is now in Mono.CSharp, not nested inside
1598         the Evaluator, it was inconvenient to use.
1599
1600 2008-09-27  Miguel de Icaza  <miguel@novell.com>
1601
1602         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
1603         code to be invoked without having to reparse.
1604
1605 2008-09-27  Miguel de Icaza  <miguel@novell.com>
1606
1607         * ecore.cs: The recent changes to FieldExpr broke this as well.
1608         Fixes LINQ queries in the interactive shell.
1609
1610         * Multiple files: indentation fixing for the Mono coding
1611         guidelines for the switch statement.
1612
1613         * eval.cs: Make the Evaluator API thread safe.
1614
1615 2008-09-26  Marek Safar  <marek.safar@gmail.com>
1616
1617         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
1618         constructor parsing.
1619
1620 2008-09-26  Marek Safar  <marek.safar@gmail.com>
1621
1622         A fix for bug #325326
1623         * statement.cs: Check possible mistaken empty statement using
1624         explicit blocks only.
1625
1626 2008-09-25  Miguel de Icaza  <miguel@novell.com>
1627
1628         * eval.cs (LoadAssembly, ReferenceAssembly): Call
1629         RootNamespace.ComputeNamespaces to update the internal list of
1630         namespaces, this is no longer done for us.
1631
1632         (InteractiveBase): Use the Evaluator APIs instead of calling into
1633         Driver directly
1634
1635 2008-09-25  Marek Safar  <marek.safar@gmail.com>
1636
1637         A fix for bug #429264
1638         * expression.cs: Missing mutator for access to multidimensional
1639         arrays.
1640
1641 2008-09-25  Marek Safar  <marek.safar@gmail.com>
1642
1643         * class.cs, statement: Emit DebuggerHidden attribute for iterator
1644         entry wrapper.
1645         
1646         * driver.cs: Missing input argument check.
1647
1648 2008-09-25  Marek Safar  <marek.safar@gmail.com>
1649
1650         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
1651         expression.cs, statement.cs, rootcontext.cs, class.cs, 
1652         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
1653         DefineMembers.
1654
1655 2008-09-24  Miguel de Icaza  <miguel@novell.com>
1656
1657         * ecore.cs (FieldExpr): Only initialize eclass when we return a
1658         fully constructed FieldExpr, fixes the regression introduced in
1659         the last commit.
1660         
1661         * ecore.cs, expression.cs: Plug back the eclass initialization as
1662         otherwise it regresses `csharp'. 
1663
1664 2008-09-24  Marek Safar  <marek.safar@gmail.com>
1665
1666         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
1667         ecore.cs, attribute.cs: Moved obsolete method checks from emit
1668         phase to resolve phase. It resolves problems with expression trees
1669         and fixes bugs #323796, #325156.
1670
1671 2008-09-23  Marek Safar  <marek.safar@gmail.com>
1672
1673         * codegen.cs: Report better error when symbol writer is missing.
1674
1675 2008-09-23  Marek Safar  <marek.safar@gmail.com>
1676
1677         * codegen.cs: Set .NET symbol writer.
1678         
1679         * decl.cs: Guard against null generic arguments.
1680         
1681         * report.cs: Don't report exactly same additional details.
1682
1683 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1684
1685         A fix for bug #324917
1686         * cs-parser.jay: Add missing multidimensional non-expression type
1687         ranks.
1688         
1689 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1690
1691         A fix for bug #428191
1692         * anonymous.cs: Create an outer generic fields also for non-storey
1693         anonymous methods.
1694
1695 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1696
1697         A fix for bug #378294
1698         * class.cs: Make fixed size buffers gmcs feature only.
1699
1700 2008-09-22  Marek Safar  <marek.safar@gmail.com>
1701
1702         A fix for bug #355622, #324993
1703         * assign.cs, const.cs, class.cs: Create new EmitContext for each
1704         field initializer.
1705
1706 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1707
1708         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
1709         error reporting.
1710
1711 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1712
1713         A fix for bug #416110
1714         * generic.cs: Struct constraint results in default ctor and
1715         ValueType base type constraint to be set.
1716
1717 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1718
1719         A fix for bug #423791
1720         * generic.cs: Fixed params output type type-inference.
1721
1722 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1723
1724         * cs-parser.jay, expression.cs: Fixed few expression crashes.
1725         
1726 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1727
1728         * cs-tokenizer.cs: Don't break on extra partial modifier.
1729
1730 2008-09-19  Marek Safar  <marek.safar@gmail.com>
1731
1732         A fix for bug #427592
1733         * generic.cs: Use common parameter resolve method.
1734
1735 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1736
1737         A fix for bug #414758
1738         * expression.cs, ecore.cs: Fixed crash when accessing non-static
1739         property.
1740
1741 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1742
1743         * driver.cs, namespace.cs: Read types and namespaces after all
1744         requested assemblies are loaded, fixes issues with System.Core
1745         auto-reference, and #419888.
1746
1747 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1748
1749         A fix for bug #417705
1750         * cs-parser.jay: Fixed as/is operator expression split.
1751
1752 2008-09-18  Marek Safar  <marek.safar@gmail.com>
1753
1754         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
1755         Fixed expression tree representation of empty new expression and
1756         new initializer expression.
1757
1758 2008-09-18  Miguel de Icaza  <miguel@novell.com>
1759
1760         * eval.cs: Remove warning, keep reference to driver around.
1761
1762         * Hide fields that do not need to be public.
1763
1764 2008-09-17  Marek Safar  <marek.safar@gmail.com>
1765
1766         A fix for bug #426385
1767         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
1768         conversion for array elements.
1769
1770 2008-09-17  Marek Safar  <marek.safar@gmail.com>
1771
1772         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
1773         void parsing conflicts.
1774
1775 2008-09-15  Marek Safar  <marek.safar@gmail.com>
1776
1777         A fix for bug #425601
1778         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
1779         System.Core only when there is no custom ExtensionAttribute
1780         implementation.
1781
1782 2008-09-15  Miguel de Icaza  <miguel@novell.com>
1783
1784         * namespace.cs: Do not report CS0246 (name
1785
1786 2008-09-12  Marek Safar  <marek.safar@gmail.com>
1787
1788         A fix for bug #425669
1789         * generic.cs: Don't cache generic static anonymous method 
1790         containers.
1791
1792 2008-09-12  Marek Safar  <marek.safar@gmail.com>
1793
1794         * generic.cs, class.cs, delegate.cs: Check recursive inherited
1795         conflicting constraints.
1796
1797 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
1798
1799         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
1800         mcs too.
1801
1802 2008-09-12  Marek Safar  <marek.safar@gmail.com>
1803
1804         * literal.cs, convert.cs, expression.cs, statement.cs: More null
1805         to null pointer conversion fixes.
1806
1807 2008-09-11  Marek Safar  <marek.safar@gmail.com>
1808
1809         * cs-parser.jay, expression.cs: An implicitly typed local variable
1810         declarator cannot use an array initializer.
1811
1812 2008-09-11  Marek Safar  <marek.safar@gmail.com>
1813
1814         * cs-parser.jay: Reduced number of printed tokens, add sorting.
1815
1816 2008-09-11  Marek Safar  <marek.safar@gmail.com>
1817
1818         * generic.cs (InflatedConstraints): Don't crash when constraints
1819         are different.
1820         
1821         * cs-parser.jay: const_declarator is a block.
1822
1823         * constant.cs: Check for not allowed NaN conversions.
1824
1825 2008-09-10  Miguel de Icaza  <miguel@novell.com>
1826
1827         * driver.cs: Drop --shell argument, the compiler is no longer a
1828         REPL. 
1829
1830         * eval.cs: Move most of the code that deals with evaluation into
1831         this file and document the public API from repl.cs
1832
1833         * repl.cs: Remove from here.
1834         
1835 2008-09-10  Marek Safar  <marek.safar@gmail.com>
1836
1837         A fix for bug #424684
1838         * generic.cs: Generic class constraints must come first.
1839
1840 2008-09-09  Miguel de Icaza  <miguel@novell.com>
1841
1842         * cs-parser.jay: Improve error reporting for syntax errors in
1843         statements and expressions, we now report the expected tokens
1844         instead of reporting the useless "; expected".
1845
1846         Drop the strings from the token declaration, it turns out that
1847         they did not do what I thought they did.  Instead they were adding
1848         two sets of tokens to the tables.
1849
1850 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1851
1852         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
1853         delegate.cs: Share special type check.
1854
1855 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1856
1857         A fix for bug #423981
1858         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
1859
1860 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1861
1862         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
1863         ConvertImplicitly.
1864
1865 2008-09-09  Marek Safar  <marek.safar@gmail.com>
1866
1867         A fix for bugs: #324750, #335946
1868         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
1869         lookup rule to determine ?-based tokens.
1870
1871 2008-09-08  Miguel de Icaza  <miguel@novell.com>
1872
1873         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
1874         expressions (like event adding or removing) end up here, so we
1875         need to treat those as statements.
1876
1877         Add LoadAssembly method.
1878
1879 2008-09-04  Miguel de Icaza  <miguel@novell.com>
1880
1881         * repl.cs: Add Time method.
1882
1883 2008-09-05  Marek Safar  <marek.safar@gmail.com>
1884
1885         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
1886
1887 2008-09-05  Miguel de Icaza  <miguel@novell.com>
1888
1889         * repl.cs: Add workaround for old compilers.
1890
1891 2008-09-04  Jb Evain  <jbevain@novell.com>
1892
1893         * repl.cs (PrettyPrint): pretty print everything that
1894         implements IDictionary, as well as IEnumerables. Also,
1895         add a quit helper property.
1896
1897 2008-09-04  Marek Safar  <marek.safar@gmail.com>
1898
1899         * constant.cs: Better error reporting for decimal literals.
1900         
1901         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
1902         field attributes.
1903         
1904 2008-09-04  Marek Safar  <marek.safar@gmail.com>
1905                         Miguel de Icaza  <miguel@novell.com>
1906
1907         A fix for bug #422951
1908         * assign.cs (Assign.DoResolve): Perform the type conversions
1909         checks before we attempt to initialize `New' initializers. 
1910
1911 2008-09-04  Marek Safar  <marek.safar@gmail.com>
1912
1913         A fix for bug #422853
1914         * delegate.cs (DelegateCreation): Add special handling for
1915         EmptyExpression.Null instance expression which is just another
1916         hack for undecided member instance exression.
1917
1918 2008-09-04  Marek Safar  <marek.safar@gmail.com>
1919
1920         * expression.cs, ecore.cs: Emit full expression tree for reduced
1921         binary expressions.
1922
1923 2008-09-04  Marek Safar  <marek.safar@gmail.com>
1924
1925         * expression.cs (This): Guard against multi-resolving.
1926         
1927         * ecore.cs, statement.cs (Throw): Simplified.
1928         
1929         * flowanalysis.cs: Also verify event fields.
1930
1931 2008-09-04  Miguel de Icaza  <miguel@novell.com>
1932
1933         * assign.cs (Assign.DoResolve): Perform the type conversions
1934         checks before we attempt to initialize `New' initializers. 
1935
1936         * repl.cs (PrettyPrint): Add Hashtable prettyprint
1937
1938         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
1939         public. 
1940
1941         * repl.cs: Update help.
1942
1943 2008-09-03  Miguel de Icaza  <miguel@novell.com>
1944
1945         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
1946         handling of the default config handling, including the special
1947         treatment of System.Core assembly. 
1948
1949         Fixes the REPL processing for LINQ.
1950
1951 2008-09-03  Marek Safar  <marek.safar@gmail.com>
1952
1953         A fix for bug #422507
1954         * expression.cs (UnboxCast): Add missing child expression mutator.
1955
1956 2008-09-03  Marek Safar  <marek.safar@gmail.com>
1957
1958         * driver.cs: Don't self reference System.Core assembly.
1959
1960 2008-09-03  Marek Safar  <marek.safar@gmail.com>
1961
1962         A fix for bug #422507
1963         * expression.cs (StringConcat): Add missing type mutator.
1964
1965 2008-09-03  Marek Safar  <marek.safar@gmail.com>
1966
1967         * generic.cs (TypeInferenceContext): Follow equality rule for
1968         constructed type lower bound type inference.
1969
1970 2008-09-02  Miguel de Icaza  <miguel@novell.com>
1971
1972         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
1973         <dblank@cs.brynmawr.edu> which updates the cursor position on
1974         refresh.
1975         
1976 2008-09-02  Marek Safar  <marek.safar@gmail.com>
1977
1978         A fix for bug #367145
1979         * driver.cs: Fixed import of extension methods when using -noconfig
1980         option.
1981
1982 2008-09-02  Marek Safar  <marek.safar@gmail.com>
1983
1984         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
1985         version from non-generic implementation instead.
1986
1987 2008-09-01  Marek Safar  <marek.safar@gmail.com>
1988
1989         A fix for bug #418908
1990         * class.cs: Use AddScopeStatement for field initializers.
1991
1992 2008-09-01  Marek Safar  <marek.safar@gmail.com>
1993
1994         A fix for bug #415385
1995         * ecore.cs, convert.cs: Do method group conversion for equal group types.
1996
1997 2008-09-01  Marek Safar  <marek.safar@gmail.com>
1998
1999         A fix for bug #421736
2000         * iterators.cs: Don't crash on unreachable iterators.
2001
2002 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2003
2004         A fix for bug #421628
2005         * parameter.cs, attribute.cs: Clone also parameter attributes.
2006
2007 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2008
2009         * namespace.cs (LookupType): In EvalMode, try to replace
2010         the TypeBuilder from our cache with a Type as Reflection.Emit does
2011         not  like to mix code from older assemblies emitted and new
2012         assemblies emitted. 
2013
2014         This sounds like a serious Mono bug that prevents multiple
2015         assemblies to be generated and consumed at the same time.
2016
2017         * cs-parser.jay (push_current_class): Do not make interactive
2018         classes internal or private, make them public as we currently
2019         generate each new class in a new assembly.   
2020
2021 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2022
2023         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2024         remove types that are entered into the global namespace during
2025         parsing so that we can remove them on failure.
2026  
2027         * cs-parser.jay: Parsing: we now keep track of types that are
2028         entered into global variables and queue those in case the parsing
2029         or resolution fail.
2030  
2031         This happens in a few situations: during partial-input, we invoke
2032         the parser repeatedly for example with the string "class X", this
2033         would cause X to be registed, and we need to remove this
2034         registration so that another parse attempt later with say "class X {"
2035         would actually work.
2036  
2037         Additionally, if there is an error in the resolution phase, for
2038         example: "class X : NonExistant {}" th
2039         
2040         * cs-parser.jay: Be more precise with the errors being raised,
2041         instead of flagging all exceptions during parsing to be attributed
2042         to the parsing process, distinguish those from errors happening in
2043         the actions and hint that using -v would produce the actual
2044         exception. 
2045
2046         * repl.cs: Do not load all compiler references on each reset,
2047         doing the partial reset takes care of this.
2048         
2049 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2050
2051         * repl.cs: Add support for loading all the files from
2052         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2053         as shell libraries.
2054
2055         Introduce a micro-parser that is able to deambiguate on its input
2056         whether we are dealing with a compilation unit (namespace, class,
2057         interface, struct, delegate) declaration or a statement.   This
2058         allows both declarations and statements to be entered. 
2059
2060         Set history size by default to 300 lines.
2061
2062         Instead of distinguishing based on the parser.InteractiveResult,
2063         have only two cases: statements were parsed, or a compilation unit
2064         was.   Always pull the Using statement additions from the
2065         compilation unit parse.
2066         
2067         * cs-tokenizer.cs: Rename tokens to better describe their intent
2068         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
2069         
2070         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
2071         EvalMode is used to trigger the lookup of global variables while
2072         StatementMode is used turn variable declarations into static
2073         fields.
2074
2075         * getline.cs: Allow history size to be set.
2076         
2077 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2078
2079         A fix for bug #360755
2080         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
2081
2082 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2083
2084         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
2085         
2086         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
2087         member name, it is too confusing
2088         
2089         * decl.cs, class.cs: Don't report unused fields with attached attribute.
2090         
2091         * rootcontext.cs: Finally default to warning level 4.
2092
2093 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2094
2095         * class.cs (CheckBase): Ignore overloaded operators.
2096
2097 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2098
2099         A fix for bug #420830
2100         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
2101
2102 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2103
2104         A fix for bug #420832
2105         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
2106
2107 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2108
2109         A fix for bug #420386
2110         * nullables.cs: Fixed logic of nullable user comparison operators involving
2111         null values.
2112
2113 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2114         
2115         * attribute (IsClsCompliant): Use FALSE value for pointer types.
2116
2117 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2118
2119         * repl.cs: Add support for aborting the running code with C-c. 
2120
2121 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
2122
2123         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
2124
2125 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2126
2127         * cs-parser.jay (interactive_statement_list): A new set of rules
2128         for hosting statements that uses the "interactive_" prefix.   
2129
2130         * repl.cs: Add support for parsing `using' as a statement or as a
2131         directive.  Deambiguating before passing this to the parser.
2132
2133         We need to distinguish statement_expressions that occur at the
2134         toplevel vs those that occur embedded into expressions.
2135
2136         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
2137         that fixes the cursor key handling, and a history bug.
2138         
2139 2008-08-26  Miguel de Icaza  <miguel@novell.com>
2140
2141         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
2142         limitations in Console, instead the 2.0 bootstrap libraries now
2143         include the Console bits.
2144
2145         Also, remove the use of Nullables from getline.cs
2146
2147         ------------
2148         
2149         Interactive support for the C# compiler.   Use gmcs --shell to
2150         enter a read-eval-print loop shell.
2151
2152         Docs: http://www.mono-project.com/CsharpRepl
2153         
2154         * sources: include repl.cs here and getline.cs for gmcs.exe,
2155         everything else is getline.cs impaired.
2156
2157         * Makefile: when bootstrapping pass a special flag
2158         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
2159         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
2160         This distinguishes those two cases.
2161
2162         * repl.cs: Support for a read-eval-print loop.   Will be soon
2163         refactored into eval support and then REPL on top of it.
2164
2165         * ecore.cs: If a simplename lookup fails, before erroring out,
2166         if we are in EvalMode to resolve the name to a declaration in the
2167         Eval-land.    
2168
2169         This means that variable declarations that happened in previous
2170         classes (as repl puts every statement in a separate class) are
2171         made visible in this way.
2172
2173         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
2174         triggered an error due to the end of file being reached.   This is
2175         used to do multi-line input, and notify the caller that the user
2176         needs to provide more text before a successful parse.
2177
2178         Add new grammar rules after the INTERACTIVE_PARSER token is seen
2179         to drive the evaluation with a custom wrapper. 
2180
2181         * driver.cs: Add support for --shell, and refactor some code to be
2182         reused from repl.cs
2183         
2184         * namespace.cs: Add support for serializing the contents of the
2185         namespaces and reloading them.  
2186
2187         * getline.cs: A managed implementation of ReadLine under
2188         X11/Apache2 license terms.  Easy to embed in other applications as
2189         well.
2190
2191         * namespace.cs: Add some functions to save and restore the
2192         namespace state.
2193
2194         * rootcontext.cs: New public field.
2195
2196         * cs-tokenizer.cs: Add support for one of the possible characters
2197         we introduce into the token stream.  
2198
2199         This patch does not affect the regular tokenization process, the
2200         only performance hit would happen if there is an invalid character
2201         on the input string.
2202
2203         * support.cs: Move isatty helper routine here.
2204
2205         * codegen.cs: Small cleanup, and add a mechanism to initialize the
2206         code generator for in-memory assemblies.
2207
2208 2008-08-26  Marek Safar  <marek.safar@gmail.com>
2209
2210         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
2211         parameter cannot be always used as a type.
2212
2213 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2214
2215         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
2216
2217 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2218
2219         * convert.cs: Implement explicit array to IList<T> conversion.
2220
2221 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2222
2223         A fix for bug #362740
2224         * cs-tokenizer.cs: Handle UTF-16 surrogates.
2225
2226 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2227         
2228         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
2229         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
2230         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
2231         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
2232         handling to use just one type of infrastructure and deal with generics
2233         more effectivelly.
2234
2235 2008-07-23  Martin Baulig  <martin@ximian.com>
2236
2237         *** Merged this from trunk revision 108527 ***
2238
2239         * statement.cs
2240         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
2241         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
2242         scope variable.
2243
2244 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2245         
2246         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
2247         error checks.
2248
2249 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2250         
2251         * delegate.cs: Fixed compiler crash when creating delegate using partial
2252         method.
2253         
2254         * typemanager.cs: MulticastDelegate is not a delegate.
2255
2256 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2257         
2258         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
2259         checks.
2260
2261 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
2262
2263         * cs-parser.jay (type): Allow 'var' in mcs too.
2264         (local_variable_type): Likewise.
2265
2266 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2267         
2268         * driver.cs: Removed broken -noconfig variants.
2269
2270 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2271         
2272         A fix for bug #417078
2273         * expression.cs: Emit correctly left side pointer operators.
2274
2275 2008-08-13  Marek Safar  <marek.safar@gmail.com>
2276
2277         * generic.cs, lambda.cs: Inflate method generic arguments only.
2278
2279 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2280
2281         * class.cs: Fixed struct layout check regression.
2282
2283 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2284
2285         * cs-parser.jay, enum.cs: Simplified enum parsing.
2286         
2287         * decl.cs: Check all type parameters conflicts.
2288         
2289         * expression.cs, statement.cs, attribute.cs: More expression checks.
2290
2291 2008-08-11  Marek Safar  <marek.safar@gmail.com>
2292
2293         * generic.cs: Add type inference types restriction.
2294         
2295         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
2296         anonymous.cs, expression.cs: Allocate less accessor parameters.
2297
2298 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2299
2300         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
2301         classes.
2302
2303 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2304
2305         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
2306
2307 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2308
2309         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
2310         Also fixes #362146 and #381592.
2311
2312 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2313
2314         * ecore.cs: Reduced constant cannot be used as an attribute value.
2315         
2316         * cs-parser.jay: Base expression has to be a type.
2317         
2318         * expression.cs (Conditional): Uses ReducedExpression.
2319
2320 2008-08-06  Marek Safar  <marek.safar@gmail.com>
2321
2322         A fix for bug #376826
2323         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
2324         address of hoisted local variable or parameter cannot be taken.
2325
2326 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2327
2328         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
2329         anonymous method inside checked/unchecked expression.
2330
2331 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2332
2333         * typemanager.cs (IsEqual): Guard against null.
2334         
2335         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
2336         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
2337         routine. Fixed few misleading conversion errors.
2338
2339 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2340
2341         * class.cs: Consider generics when checking cycles in struct layout.
2342
2343 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
2344
2345         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
2346
2347 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2348
2349         A fix for bug #414165
2350         * anonymous.cs: Use same anonymous implementation method for all anonymous
2351         method emits.
2352
2353 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2354
2355         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
2356         constraints.
2357
2358 2008-08-04  Marek Safar  <marek.safar@gmail.com>
2359
2360         * cs-parser.jay: Typeof argument has to be a type expression.
2361         
2362         * namespace.cs: Check alias and namespace definitions collisions.
2363         
2364         * class.cs, pending.cs: Moved explicit interface accessor implementation
2365         check.
2366         
2367         * delegate.cs, expression.cs: Verify special name invocations.
2368         
2369 2008-08-01  Marek Safar  <marek.safar@gmail.com>
2370
2371         * cs-parser.jay: Don't choke on empty generic type arguments.
2372         
2373         * cs-tokenizer.cs: Handle escaped preprocessor directives.
2374         
2375         * expression.cs, ecore.cs: Minor expressions bugs.
2376
2377 2008-08-01  Marek Safar  <marek.safar@gmail.com>
2378
2379         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
2380         and added more error handling.
2381         
2382         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
2383         
2384         *  modifiers.cs, enum.cs: Fixed.
2385
2386 2008-07-31  Jb Evain  <jbevain@novell.com>
2387
2388         * driver.cs: remove -pkg ability of smcs.
2389
2390 2008-07-30  Marek Safar  <marek.safar@gmail.com>
2391
2392         * statement.cs (Switch): Correctly set empty default target for single
2393         blocks.
2394
2395 2008-07-30  Marek Safar  <marek.safar@gmail.com>
2396
2397         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
2398         string switch statement implementation to use string dictionary which
2399         significantly (2-8x) improves performance of generated code.
2400
2401 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2402
2403         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
2404         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
2405         
2406 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2407
2408         A fix for bug #412595
2409         * typemanager.cs, convert.cs, expression.cs: Some types are never
2410         convertible to each other.
2411
2412 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2413
2414         * nullable.cs (CreateNullConstant): An error messages update.
2415
2416 2008-07-29  Marek Safar  <marek.safar@gmail.com>
2417
2418         A fix for bug #412595
2419         * cfold.cs: Don't cast undefined bool constant.
2420
2421 2008-07-29  Martin Baulig  <martin@ximian.com>
2422
2423         * symbolwriter.cs
2424         (SymbolWriter.Reset): New public static method.
2425
2426         * driver.cs
2427         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
2428
2429 2008-07-28  Marek Safar  <marek.safar@gmail.com>
2430
2431         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
2432         
2433         * expression.cs (ElementAccess): Exact size allocation.
2434
2435 2008-07-26  Marek Safar  <marek.safar@gmail.com>
2436
2437         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
2438
2439 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2440
2441         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
2442         
2443         * class.cs: Removed $PRIVATE$ field hack which caused problems during
2444         flow analysis.
2445
2446 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2447
2448         A fix for bug #412217
2449         * assign.cs: Mutate also assignment type.
2450
2451 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2452
2453         A fix for bug #323644
2454         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
2455         indexers.
2456
2457 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2458
2459         A fix for bug #412134
2460         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
2461         non-enumerable operands when overloading equality or bitwise operators.
2462
2463 2008-07-25  Marek Safar  <marek.safar@gmail.com>
2464
2465         * anonymous.cs: Cache closed generic anonymous method delegates.
2466
2467 2008-07-24  Marek Safar  <marek.safar@gmail.com>
2468
2469         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
2470         anonymous.cs, statement.cs: Always emit anonymous method as static method
2471         when is instance free. Use nesting for nested anynomous methods blocks.
2472         
2473 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2474
2475         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
2476         types.
2477
2478 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2479
2480         * expression.cs: Removed MakeSimpleCall.
2481
2482 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2483
2484         A fix for bug #323012
2485         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
2486         Base method implementing interface has to be public.
2487
2488 2008-07-23  Marek Safar  <marek.safar@gmail.com>
2489
2490         * cs-parser.jay: Don't break on missing argument.
2491
2492 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2493
2494         A fix for bug #320993
2495         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
2496           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
2497
2498 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2499
2500         A fix for bug #320748
2501         * convert.cs: Implicit user operators cannot convert to interfaces
2502
2503 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2504
2505         A fix for bug #312686
2506         * driver.cs: Ignore empty assembly references.
2507
2508 2008-07-22  Marek Safar  <marek.safar@gmail.com>
2509
2510         A fix for bug #387040
2511         * ecore.cs: Skip constrains check for an explicit implementation.
2512
2513 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2514
2515         A fix for bug #409045
2516         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
2517           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
2518           identifiers are file specific unless passed as input arguments.
2519
2520 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2521
2522          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
2523          to emit UnmanagedMarshal data under 2.0 profile.
2524
2525 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2526
2527         A fix for bug #410369
2528         * parameter.cs: Clone correctly ParamsParameter.
2529
2530 2008-07-21  Marek Safar  <marek.safar@gmail.com>
2531
2532         * expression.cs (Argument): Always report type for type based expressions
2533         errors.
2534
2535 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2536
2537         A fix for bug #410666
2538         * anonymous.cs: Correctly initialize generic storey reference.
2539
2540 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2541
2542         * convert.cs: Don't box same type arguments.
2543
2544 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2545
2546         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
2547         Finished missing generic type mutators.
2548
2549 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2550
2551         * iterators.cs, statement.cs: Finished statements CloneTo.
2552
2553 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2554
2555         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
2556         
2557         * expression.cs: Emit optimized default value expressions in expression tree
2558         array initializer.
2559
2560 2008-07-18  Marek Safar  <marek.safar@gmail.com>
2561
2562         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
2563
2564 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2565
2566         A fix for bug #367536
2567         * cs-parser.jay: Check static constructor of generic types for an access
2568         modifier.
2569
2570 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2571
2572         A fix for bug #353800
2573         * lambda.cs: Emit ret for contextual statements.
2574         
2575         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
2576         up emitting redundant ret for all anonymous methods with return.
2577
2578 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2579
2580         A fix for bug #365188
2581         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
2582         create anonymous method storey in unreachable block.
2583
2584 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2585
2586         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
2587         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
2588         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
2589         statement.cs: Fixed relevant defects found by Gendarme.
2590
2591 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2592
2593         A fix for bug #325291
2594         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
2595         statement.cs: Replaced IAnonymousHost with top level block flag.
2596
2597 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2598
2599         * cs-parser.jay: Clean up unused open_parens.
2600
2601 2008-07-17  Marek Safar  <marek.safar@gmail.com>
2602
2603         * ecore.cs: Custom error message for a range variable assignment.
2604
2605 2008-07-16  Marek Safar  <marek.safar@gmail.com>
2606
2607         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
2608         load.
2609
2610 2008-07-16  Marek Safar  <marek.safar@gmail.com>
2611
2612         * literal.cs: Null literal is of object type.
2613
2614 2008-07-16  Marek Safar  <marek.safar@gmail.com>
2615
2616         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
2617         expression of nullable equality comparison.
2618
2619 2008-07-15  Marek Safar  <marek.safar@gmail.com>
2620
2621         * expression.cs(PointerArithmetic): Removed redundant assignment.
2622
2623 2008-07-15  Marek Safar  <marek.safar@gmail.com>
2624
2625         * decl.cs (GetSignatureForError): Report full namespace name for containers.
2626
2627 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2628
2629         A fix for bug #408361
2630         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
2631         they are replaced by GetMethod.
2632
2633 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2634
2635         A fix for bug #408721 by jeremie.laval@gmail.com
2636         * expression.cs (Indirection): Implemented CloneTo.
2637
2638 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2639
2640         * statement.cs (AssignableSlots): Temporary disabled variable initialization
2641         assert check.
2642
2643 2008-07-14  Marek Safar  <marek.safar@gmail.com>
2644
2645         * report.cs (EnableReporting): Don't reinitialize 0-based values.
2646
2647 2008-07-11  Marek Safar  <marek.safar@gmail.com>
2648
2649         * linq.cs: Reset tranparent parameter counter in probing mode.
2650
2651 2008-07-11  Marek Safar  <marek.safar@gmail.com>
2652
2653         * anonymous.cs: Mutate anonymous method type.
2654
2655 2008-07-11  Marek Safar  <marek.safar@gmail.com>
2656
2657         * ecore.cs, anonymous.cs: Mutate field expressions.
2658
2659 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2660
2661         A fix for bug #369670
2662         * linq.cs, statement.cs: Use explicit block for query expressions variables.
2663
2664 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2665
2666         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
2667
2668 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
2669
2670         Fix bug #314902
2671         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
2672         only one '>', and finds a '>>', abort the generic lookahead.
2673
2674 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2675
2676         A fix for bug #319902
2677         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
2678
2679 2008-07-10  Marek Safar  <marek.safar@gmail.com>
2680
2681         A fix for bug #406371
2682         * statement.cs: Moved EmitSymbolInfo to Block.
2683
2684 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2685
2686         * ecore.cs: Report better error for extension method overload failures.
2687
2688 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2689
2690         * expression.cs (Is): No need to box reference values.
2691
2692 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2693
2694         * class.cs: Use event resolve context when initializing CreateEmitContext.
2695
2696 2008-07-09  Marek Safar  <marek.safar@gmail.com>
2697
2698         A fix for bug #394436
2699         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
2700         method used inside expression trees. Added more LINQ to expression tree
2701         conversions.
2702
2703 2008-07-08  Marek Safar  <marek.safar@gmail.com>
2704
2705         A fix for bug #378189, #370577
2706         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
2707         from expression.
2708
2709 2008-07-08  Marek Safar  <marek.safar@gmail.com>
2710
2711         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
2712         hierarchically.
2713
2714 2008-07-08  Marek Safar  <marek.safar@gmail.com>
2715
2716         A fix for bug #406702
2717         * anonymous.cs: Always park anonymous method in the nearest parent storey.
2718
2719 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2720
2721         A fix for bug #406648
2722         * cs-parser.jay: Report nullable use in mcs for some cases.
2723
2724 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2725
2726         * ecore.cs: Improved argument mismatch error messages.
2727
2728 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2729
2730         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
2731
2732 2008-07-07  Marek Safar  <marek.safar@gmail.com>
2733
2734         * expression.cs (TypeOf): Mutate type argument.
2735
2736 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2737
2738         * class.cs: Report missing partial modifier for correct type.
2739
2740 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2741
2742         * ecore.cs, expression.cs (VariableReference): Variable property is 
2743         protected.
2744
2745 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2746
2747         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
2748         
2749 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2750
2751         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
2752         method delegates.
2753
2754 2008-07-04  Marek Safar  <marek.safar@gmail.com>
2755
2756         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
2757         anonymous method storey to an instance method when only "this" is hoisted.
2758
2759 2008-07-03  Marek Safar  <marek.safar@gmail.com>
2760
2761         A fix for bug #321615
2762         * expression.cs: Pointer comparisons use unsigned operator.
2763
2764 2008-07-03  Marek Safar  <marek.safar@gmail.com>
2765
2766         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
2767
2768 2008-07-02  Marek Safar  <marek.safar@gmail.com>
2769
2770         A fix for bug #404905
2771         * class.cs: Always initialize local unsafe variables.
2772
2773 2008-06-30  Marek Safar  <marek.safar@gmail.com>
2774
2775         A fix for bug #396987
2776         * expression.cs (NewInitialize): Clear local temporary variable for next run
2777
2778 2008-06-27  Marek Safar  <marek.safar@gmail.com>
2779
2780         A fix for bug #401020
2781         * ecore.cs: Both types and modifiers have to match for ref and out arguments
2782
2783 2008-06-27  Marek Safar  <marek.safar@gmail.com>
2784
2785         A fix for bug #398319
2786         * cs-parser.jay: Implemented undocumented base access expression inside
2787         anonymous types.
2788
2789 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2790
2791         A fix for bug #404227
2792         * cs-parser.jay: Parse namespace declaration using qualified identifier.
2793
2794 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2795
2796         A fix for bug #404227
2797         * convert.cs: Fixed explicit array to interface cast.
2798
2799 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2800
2801         A fix for bug #403894
2802         * delegate.cs: Mutate DelegateInvocation type.
2803
2804 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2805
2806         A fix for bug #379348
2807         * delegate.cs: Box a load of generic parameters.
2808
2809 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2810
2811         * expression.cs: Add an array creation arguments mutate.
2812
2813 2008-06-26  Marek Safar  <marek.safar@gmail.com>
2814
2815         A fix for bug #386068
2816         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
2817         parameter.
2818
2819 2008-06-25  Marek Safar  <marek.safar@gmail.com>
2820
2821         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
2822         CloneTo.
2823
2824 2008-06-25  Marek Safar  <marek.safar@gmail.com>
2825
2826         A fix for bug #403518
2827         * delegate.cs: Type correctly anonymous method new invocation.
2828
2829 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2830
2831         A fix for bug #394826
2832         * anonymous.cs: Fully qualify members when resolving anonymous type internal
2833         calls.
2834
2835 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2836
2837         A fix for bug #394826
2838         * anonymous.cs, iterators.cs: Construct generic storey only when is really
2839         needed.
2840
2841 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2842
2843         * class.cs: Clone indexer parameters for localized capturing.
2844
2845 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2846
2847         A fix for bug #402379
2848         * expression.cs: Don't crash when an object initializer resolve fails.
2849
2850 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2851
2852         A fix for bug #402888
2853         * expression.cs: Mutate conditional expression.
2854
2855 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2856
2857         A fix for bug #401012
2858         * class.cs: Keep StructLayout in shared container.
2859
2860 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2861
2862         A fix for bug #400438
2863         * decl.cs, class.cs: Only properties can be automatically implemented.
2864
2865 2008-06-24  Marek Safar  <marek.safar@gmail.com>
2866
2867         * statement.cs (ChangeToIterator): Copy also labels.
2868
2869 2008-06-23  Marek Safar  <marek.safar@gmail.com>
2870
2871         * ecore.cs: Pass type argument details to parent extension method.
2872
2873 2008-06-23  Marek Safar  <marek.safar@gmail.com>
2874
2875         A fix for bug #375966
2876         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
2877
2878 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
2879
2880         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
2881
2882 2008-06-22  Marek Safar  <marek.safar@gmail.com>
2883
2884         A fix for bug #394347
2885         * anonymous.cs: Cache compatible delegates as compatibility check produces
2886         a new method every time.
2887
2888 2008-06-20  Marek Safar  <marek.safar@gmail.com>
2889
2890         * anonymous.cs: Propagate storey reference for single references.
2891
2892 2008-06-20  Marek Safar  <marek.safar@gmail.com>
2893
2894         A fix for bug #387615
2895         * assign.cs, expression.cs: Correctly clone compound assignment.
2896
2897 2008-06-19  Marek Safar  <marek.safar@gmail.com>
2898
2899         A fix for bug #359611, #359604
2900         * anonymous.cs: Mutate all types of hoisted parameters.
2901
2902 2008-06-19  Marek Safar  <marek.safar@gmail.com>
2903
2904         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
2905         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
2906         expression.cs, codegen.cs, statement.cs
2907         
2908         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
2909         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
2910         
2911         ** Anonymous methods, lambda expressions rewrite **
2912         
2913         Anonymous expressions are now resolved when an explicit block is resolved 
2914         and they don't require any registration procedure anymore. Further,
2915         anonymous methods are defined when explicit block is emitted which allows
2916         better control of whole process and opens possibilities for more
2917         optimizations as well as alternative to reverse whole process.
2918         
2919         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
2920         process consistent and to correctly emit hoisted generic methods when they
2921         have at least 1 hoisted variable.
2922         
2923 2008-06-17  Martin Baulig  <martin@ximian.com>
2924
2925         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
2926         iterator method.
2927         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
2928         virtual property; check it in Emit().
2929         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
2930         an iterator.
2931         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
2932         an iterator.
2933         (Indexer.Define): Likewise.
2934
2935 2008-06-17  Marek Safar  <marek.safar@gmail.com>
2936
2937         * convert.cs: Don't use IsInterface on type arguments.
2938         
2939         * delegate.cs: DelegateInvocation uses MethodInfo.
2940         
2941         * parameter.cs: Removed IsTypeParameter.
2942         
2943         * generic-mcs.cs: More missing stuff.
2944
2945 2008-06-16  Martin Baulig  <martin@ximian.com>
2946
2947         * modifiers.cs
2948         (Modifiers.DEBUGGER_HIDDEN): New public const.
2949
2950         * typemanager.cs
2951         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
2952
2953         * class.cs
2954         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
2955         (AbstractPropertyEventMethod): Likewise.
2956         (Constructor.Emit): Likewise.
2957         (SourceMethod.SetCompilerGenerated): Removed.
2958
2959         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
2960         on MoveNext().
2961
2962         * anonymous.cs
2963         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
2964         if we're an `IteratorHost'.
2965         (AnonymousMethodMethod..ctor): Don't set
2966         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
2967         not on the method.
2968
2969 2008-06-16  Marek Safar  <marek.safar@gmail.com>
2970
2971         * statement.cs: Clean-up foreach statements.
2972
2973 2008-06-12  Marek Safar  <marek.safar@gmail.com>
2974
2975         * class.cs: Stop using public method which should not exist
2976         (MethodBuilder.SetGenericMethodSignature).
2977
2978 2008-06-11  Martin Baulig  <martin@ximian.com>
2979
2980         * location.cs
2981         (Location.LookupFile): Add `CompilationUnit' argument; when given
2982         a relative file name, make it relative to the directory the .cs
2983         file is located in instead of using the current directory.
2984
2985 2008-06-11  Martin Baulig  <martin@ximian.com>
2986
2987         * class.cs
2988         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
2989         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
2990         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
2991         (SourceMethod.SetCompilerGenerated): Likewise.
2992
2993 2008-06-11  Marek Safar  <marek.safar@gmail.com>
2994
2995         * codegen.cs, driver: Only write symbol file when it's asked for.
2996
2997 2008-06-11  Marek Safar  <marek.safar@gmail.com>
2998
2999         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3000
3001 2008-06-10  Martin Baulig  <martin@ximian.com>
3002
3003         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3004
3005 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3006
3007         A fix for bug #316290
3008         * expression.cs: Include decimal operators in predefined table.
3009         
3010         * parameters.cs: More readonlyness.
3011
3012 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3013
3014         A fix for bug #397213
3015         * cs-parser.jay: One more missing current_local_parameters reset.
3016
3017 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3018
3019         A fix for bug #396633
3020         * class.cs: Host backing field in partial container.
3021
3022 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3023
3024         A fix for bug #397068
3025         * expression.cs: Check both operand types when predefined operator is used.
3026
3027 2008-06-05  Martin Baulig  <martin@ximian.com>
3028
3029         Merged the `debugger-kahalo' branch.
3030
3031         * class.cs
3032         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3033         we're an iterator method.
3034         (SourceMethod): Reflect latest symbol writer changes;
3035         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3036         now `start_row' and `end_row'.
3037         (Constructor.Emit): Fix the logic whether to emit symbol information.
3038
3039         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3040         generated methods.
3041
3042         * location.cs
3043         (CompilationUnit): New public class; derives from `SourceFile'.
3044         (SourceFileEntry.DefineSymbolInfo): New public method.
3045         (SourceFileEntry.SetChecksum): New public method.
3046         (Location): Encode hidden line numbers by using `column == 255';
3047         the .ctor now accepts `column == -1' to mark a hidden line number.
3048         (Location.Hidden): New public property.
3049         (Location.CheckPoint): Add `CompilationUnit'.
3050         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3051         (Location.Push): Add `CompilationUnit compile_unit' argument.
3052         (Location.CompilationUnit): New public property.
3053
3054         * statement.cs
3055         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
3056
3057         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
3058
3059         * driver.cs: `SourceFile' -> `CompilationUnit'.
3060
3061         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
3062
3063         * namespace.cs: `SourceFile' -> `CompilationUnit'.
3064
3065         * cs-tokenizer.cs: Add support for `#pragma checksum' and
3066         `#line hidden'.
3067
3068         * symbolwriter.cs
3069         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
3070         new symbol writer API to also pass the file.
3071
3072 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3073
3074         * statement.cs: Emit catch variable assignment using variable expression.
3075         
3076 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3077
3078         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
3079         with other variable types.
3080
3081 2008-06-04  Marek Safar  <marek.safar@gmail.com>
3082
3083         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
3084         GetLength method emit, it breaks resolve rules.
3085         
3086 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
3087             Marek Safar  <marek.safar@gmail.com>
3088                         
3089         A fix for bug #395542
3090         * cs-parser.jay: The trailing comma is allowed in anonymous type member
3091         declaration.
3092         
3093 2008-06-02  Marek Safar  <marek.safar@gmail.com>
3094
3095         A fix for bug #395287
3096         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
3097
3098 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3099
3100         A fix for bug #395845
3101         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
3102         non-nullable parameter type.
3103         
3104 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3105
3106         * class.cs: Handle contructor initializer as a statement in top-level block.
3107
3108 2008-05-30  Marek Safar  <marek.safar@gmail.com>
3109
3110         * attribute.cs: Don't mix old and new corlib types when emitting corlib
3111         security attributes.
3112
3113 2008-05-24  Marek Safar  <marek.safar@gmail.com>
3114
3115         * ecore.cs, expression.cs: Small IVariable refactoring.
3116
3117 2008-05-22  Marek Safar  <marek.safar@gmail.com>
3118
3119         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
3120
3121 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3122
3123         * cs-parser.jay: Removed redundant catch type check.
3124
3125 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3126
3127         A fix for bug #390372
3128         * nullable.cs: Set correct return type.
3129
3130 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3131
3132         A fix for bug #391062
3133         * typemanager.cs: Fixed crash when comparing null types.
3134
3135 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3136
3137         A fix for bug #391871
3138         * cs-parser.jay: Better error handling for invalid catch type.
3139
3140 2008-05-20  Marek Safar  <marek.safar@gmail.com>
3141
3142         A fix for bug #392155
3143         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
3144
3145 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3146
3147         A fix for bug #390666
3148         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
3149         expressions.
3150
3151 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3152
3153         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
3154         in getter.
3155
3156 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3157
3158         A fix for bug #389625
3159         * delegate.cs, generic.cs: Some progress on method group return type
3160         inference.
3161
3162 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3163
3164         A fix for bug #378419
3165         * namespace.cs: Inspect also parent namespaces not only namespace entries.
3166
3167 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3168
3169         * class.cs (Constructor): Added IsCompilerGenerated.
3170
3171 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3172
3173         * expression.cs: Enum binary operators can accept non-enum operand only when
3174         is implicitly convertible to underlying type.
3175
3176 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3177
3178         A fix for bug #389272
3179         * support.cs: Workaround System.InvalidOperationException for enums.
3180
3181 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3182
3183         A fix for bug #389073
3184         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
3185
3186 2008-05-10  Marek Safar  <marek.safar@gmail.com>
3187
3188         * driver.cs: Split Parse.
3189         
3190         * location.cs (LookupFile): Uses string.Empty.
3191
3192 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3193
3194         * expression.cs, parameter.cs: Small ParameterReference clean up.
3195
3196 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3197
3198         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
3199         hack. Fixes #387502.
3200
3201 2008-05-06  Martin Baulig  <martin@ximian.com>
3202
3203         * class.cs (Constructor.Emit): Fix the logic whether to emit
3204         symbol information.
3205
3206 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
3207
3208         Fix #385503
3209         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
3210         InvalidOperationException when the iterator is before the start or
3211         after the end.
3212
3213 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3214
3215         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
3216         when left is nullable type.
3217
3218 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3219
3220         A fix for bug #386628
3221         * expression.cs (LocalVariableReference): Continue in resolving when
3222         variable is not assigned.
3223
3224 2008-05-05  Marek Safar  <marek.safar@gmail.com>
3225
3226         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
3227         nullable operations.
3228
3229 2008-05-04  Marek Safar  <marek.safar@gmail.com>
3230
3231         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
3232         it saves many redundant temporary variables for nullable operations.
3233
3234 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3235
3236         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
3237         
3238         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
3239         method.
3240         
3241         * nullable.cs: Constant coalescing operator optimizations.
3242
3243 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3244
3245         * constant.cs: Use unsigned conversion for values which are unsigned only.
3246
3247 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3248
3249         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
3250         coalescing operator as it should be.
3251
3252 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3253
3254         A fix for bug #371016
3255         * expression.cs: All predefined delegate operators require implicit method
3256         group conversion.
3257         
3258 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3259
3260         * constant.cs: Emit long constant as uint when fits the range.
3261         
3262         * convert.cs, expression.cs: Fixed few unsafe conversions.
3263
3264 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3265
3266         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
3267
3268 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
3269
3270         Fix #385758
3271         * convert.cs (ImplicitNumericConversion): Don't modify the type of
3272         'expr'.
3273         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
3274
3275 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3276
3277         * constant.cs, literal.cs: IsLiteral property for error reporting.
3278         
3279         * ecore.cs, expression.cs: Implemented Property expression.
3280
3281 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3282
3283         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
3284         
3285         * nullable.cs: Implemented nullable coalescing null operator.
3286
3287         * ecore.cs, expression.cs: Expression trees work.
3288
3289 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3290
3291         * ecore.cs: CreateExpressionTree is finally abstract.
3292
3293         * expression.cs, linq.cs: Updated.
3294
3295 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3296
3297         * expression.cs, ecore.cs: Block base access expression inside expression
3298         tree.
3299
3300 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3301
3302         A fix for bug #385058
3303         * expression.cs: User-defined operator implementations always take
3304         precedence over predefined operator implementations.
3305
3306 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3307
3308         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
3309         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
3310         expression tree conversions.
3311         
3312 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3313
3314         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
3315         operators method details to Operator class.
3316
3317 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3318
3319         * anonymous.cs: Pass unsafe flags to anonymous container.
3320         
3321         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
3322         inside expression tree.
3323
3324 2008-04-29  Martin Baulig  <martin@ximian.com>
3325
3326         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
3327         (Tokenizer.PopPosition): Also restore the `line'.
3328
3329 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3330
3331         * delegate.cs: Implemented Invoke expression.
3332
3333 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3334
3335         * expression.cs: Fixed equality reference comparison regression.
3336
3337 2008-04-29  Marek Safar  <marek.safar@gmail.com>
3338
3339         * ecore.cs: Clean up EmptyCast hack.
3340         
3341         * expression.cs, nullable.cs: Implemented enum binary and unary operations
3342         using correct conversion rules. Also fixes #383993.
3343
3344 2008-04-28  Martin Baulig  <martin@ximian.com>
3345
3346         * class.cs (Constructor.Emit): Don't emit debugging information
3347         for generated default .ctor's.
3348
3349 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3350
3351         * convert.cs: Empty-cast ushort to int conversion.
3352
3353 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3354
3355         A fix for bug #384191
3356         * ecore.cs, expression.cs: Fixed expression cloning.
3357
3358 2008-04-28  Marek Safar  <marek.safar@gmail.com>
3359
3360         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
3361
3362 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
3363
3364         Fix #381559, test-638.cs, test-639.cs
3365         * assign.cs (CompoundAssign.Helper): New wrapper.
3366         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
3367         access.
3368         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
3369         Pass unconverted expressions to the params array creation expression.
3370         (FieldExpr.EmitAssign): Don't special-case StringConcat.
3371         (PropertyExpr.EmitAssign): Likewise.
3372         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
3373         element if it is of kind CompoundAssign.Helper.
3374         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
3375         first before anything else.
3376         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
3377         (ArrayAccess.LoadArrayAndArguments): Simplify.
3378
3379 2008-04-27  Marek Safar  <marek.safar@gmail.com>
3380
3381         * expression.cs: Fixed cloning of typeof(void).
3382
3383 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
3384
3385         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
3386         (Assign.Emit): Likewise.  Move it to ...
3387         (CompoundAssign.DoResolve): ... here and ...
3388         (CompoundAssign.Emit): ... here.
3389         (EventAddOrRemove): New helper to handle += and -= on events, and
3390         avoid the use of BinaryDelegates.
3391         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
3392         (EventExpr.EmitAddOrRemove): Improve.
3393         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
3394
3395         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
3396         create VarExprs for 'foo.bar.var'.
3397         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
3398         is a highly inappropriate name for its functionality.
3399
3400 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
3401
3402         Simplify handling of multiple assignments
3403         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
3404         inheritable-only.
3405         (SimpleAssign): New.  Class to be used for normal assignments.
3406         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
3407         * expression.cs, parameter.cs, statement.cs: Likewise.
3408
3409 2008-04-25  Marek Safar  <marek.safar@gmail.com>
3410
3411         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
3412         for incompatible underlying types, more to come, uff.
3413
3414 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
3415
3416         Fix gtest-388.cs
3417         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
3418         Handle 'leave_copy'.
3419
3420 2008-04-25  Marek Safar  <marek.safar@gmail.com>
3421
3422         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
3423
3424 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
3425
3426         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
3427         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
3428         * statement.cs (While, Do, For): Allow test to have side effects.
3429         (For.DoEmit): Always emit InitStatement.
3430
3431         Fix test-635.cs
3432         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
3433         Always create SideEffectConstant.
3434         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
3435         of type EnumConstant.
3436
3437         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
3438         Handle 'right' being SideEffectConstant of type 'bool'.
3439
3440         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
3441         Use left.EmitBranchable instead of open coding it, so as to
3442         improve optimization opportunities.
3443
3444         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
3445
3446         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
3447         assumptions.
3448         (Expression.EmitSideEffect): Document.
3449
3450 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3451
3452         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
3453
3454 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3455
3456         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
3457
3458 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3459
3460         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
3461         conversion to expression tree.
3462
3463 2008-04-23  Marek Safar  <marek.safar@gmail.com>
3464
3465         * ecore.cs: Removed unused expression.
3466
3467 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3468
3469         * expression.cs: Implemented NegateChecked and New expressions.
3470
3471 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3472
3473         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
3474
3475 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
3476
3477         Fix #351102
3478         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
3479         needing final 'ret' instruction.
3480
3481 2008-04-22  Marek Safar  <marek.safar@gmail.com>
3482
3483         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
3484
3485 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3486
3487         * expression.cs: Emit ldnull and not null expression as an instance argument
3488          of static method expression calls.
3489
3490 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3491
3492         A fix for bug #378200
3493         * expression.cs: Fixed crash when creating parameterless expression tree
3494         method call.
3495
3496 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3497
3498         A fix for bug #375297
3499         * anonymous.cs: Fixed crash when inferring from null argument anonymous
3500         method.
3501
3502 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3503
3504         A fix for bug #377596
3505         * decl.cs, class.cs: Emit delegate type argument attributes.
3506
3507 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3508
3509         A fix for bug #365314
3510         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
3511         
3512 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3513
3514         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
3515         only.
3516
3517 2008-04-21  Marek Safar  <marek.safar@gmail.com>
3518
3519         * generic.cs (TypeParameter): Removed redundant location.
3520
3521 2008-04-19  Marek Safar  <marek.safar@gmail.com>
3522
3523         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
3524         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
3525         FullNamedExpression in all declaration type expression, statements will come
3526         later.
3527
3528 2008-04-18  Marek Safar  <marek.safar@gmail.com>
3529
3530         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
3531         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
3532
3533 2008-04-18  Marek Safar  <marek.safar@gmail.com>
3534
3535         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
3536         code.
3537
3538 2008-04-17  Marek Safar  <marek.safar@gmail.com>
3539
3540         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
3541         constraints.
3542
3543 2008-04-17  Marek Safar  <marek.safar@gmail.com>
3544
3545         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
3546         name expressions.
3547         Also fixes #340463.
3548
3549 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
3550
3551         Hook up 'EmitSideEffect'
3552         * constant.cs (Constant.EmitSideEffect): New.
3553         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
3554         (SideEffectConstant.EmitSideEffect): New.
3555         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
3556         unconditional branch in EmitBranchable.
3557         (FieldExpr.EmitBranchable): New.
3558         * expression.cs (Unary.EmitSideEffect): New.
3559         (Binary.EmitSideEffect): New.
3560         (VariableReference.EmitSideEffect): New.  Do nothing.
3561
3562 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
3563
3564         Introduce 'EmitSideEffect'
3565         * ecore.cs (Expression.EmitSideEffect): New.
3566         (TypeCast): Rename from EmptyCast.
3567         (EmptyCast): New.
3568         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
3569         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
3570         * convert.cs, nullable.cs: Update to changes.
3571
3572 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3573
3574         * class.cs, cs-parser.jay: Early check for base types expression.
3575
3576 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3577
3578         * decl.cs (MemberName): Declare PrettyName as obsolete.
3579
3580 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3581
3582         * namespace.cs: Use MemberName comparison.
3583
3584 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
3585
3586         Fix build break
3587         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
3588         FullName.
3589         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
3590         (MemberName.FullyQualifiedName): New.  Provides the functionality
3591         that users assume FullName would have.
3592         * ecore.cs, namespace.cs: Update to changes.
3593
3594         * statement.cs (Using.assign): Make into ExpressionStatement.
3595         (Using.EmitPreTryBody): Simplify.
3596
3597 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3598
3599         * report.cs: ColorFormat is protected.
3600         
3601         * rootcontext.cs: Unused fields clean-up.
3602         
3603         * namespace.cs: Made UsingEntry name private.
3604
3605 2008-04-16  Marek Safar  <marek.safar@gmail.com>
3606
3607         * cs-tokenizer.cs, location.cs: Removed unused field.
3608
3609 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
3610             Raja R Harinath  <harinath@hurrynot.org>
3611
3612         Fix #379822
3613         * constant.cs (SideEffectConstant.value): Rename from 'left'.
3614         (SideEffectConstant.side_effect): Rename from 'right'.
3615         (SideEffectConstant..ctor): Normalize 'side_effect'.
3616         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
3617         value of this constant.
3618         * cfold.cs: Update to changes.
3619
3620 2008-04-15  Marek Safar  <marek.safar@gmail.com>
3621
3622         * cs-paser.jay: Removed unused variable.
3623         
3624         * driver.cs: Made Compile instance method.
3625
3626 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
3627
3628         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
3629
3630 2008-04-15  Marek Safar  <marek.safar@gmail.com>
3631
3632         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
3633
3634 2008-04-13  Jb Evain  <jbevain@novell.com>
3635
3636         * namespace.cs: update the System.Core fullname for 2.1
3637         * driver.cs: update the list of required assemblies for 2.1.
3638         Merged from the Moonlight 2 branch.
3639
3640 2008-04-11  Marek Safar  <marek.safar@gmail.com>
3641
3642         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
3643         types and user defined operators. User operators arguments has to be checked
3644         for null value before invocation, which also means no operator is called
3645         when any argument is not convertible to unwrapped nullable type.
3646         
3647 2008-04-09  Marek Safar  <marek.safar@gmail.com>
3648
3649         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
3650         of Unary expressions to follow operator overloading rules precisely.
3651         Also fixes #321794, #323794
3652         
3653 2008-04-08  Marek Safar  <marek.safar@gmail.com>
3654
3655         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
3656         expression.
3657         
3658 2008-04-08  Marek Safar  <marek.safar@gmail.com>
3659
3660         * expression.cs, ecore.cs: Implemented MemberInit expression.
3661         
3662 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
3663
3664         Fix mono/tests/exception4.cs
3665         * statement.cs (ExceptionStatement, TryCatch): Revert to using
3666         ec.NeedReturnLabel () rather emitting a 'nop'.
3667
3668         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
3669         simple heuristic.
3670         (TryCatch.SomeCodeFollows): Likewise.
3671         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
3672         for 'break', 'continue' and 'return' statements inside a try.
3673         We're fairly sure that the generated IL stream will have more
3674         instructions textually following the try.
3675         (FlowBranchingTryCatch): Likewise.
3676
3677         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
3678         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
3679         overrides.
3680
3681         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
3682         wrapper -- forward everything to CollectionForeach.
3683         (CollectionForeach.NonDisposableWrapper): New.
3684         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
3685         instead of a pop + branch to end.
3686
3687 2008-04-07  Marek Safar  <marek.safar@gmail.com>
3688
3689         A fix for bug #377485
3690         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
3691         Propagate location for extension method groups. Report conversion failure at
3692         right place.
3693
3694 2008-04-07  Marek Safar  <marek.safar@gmail.com>
3695
3696         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
3697         ListInit and Field expressions.
3698
3699 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
3700
3701         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
3702         Since $PC is always -1 inside the body of MoveNext, the fault
3703         handler is a no-op.
3704         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
3705         * statement.cs (ExceptionStatement.emit_finally): Likewise.
3706         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
3707
3708         The denouement!  Fix #324708
3709         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
3710         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
3711         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
3712         'finally' inside the finally clause.
3713
3714         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
3715         inside an iterator.  Don't emit the body of the 'finally' inside
3716         the finally clause yet.
3717
3718         Use the ResumableStatement infrastructure for MoveNext ()
3719         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
3720         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
3721         'old_resume_points'.  Move dispatcher upfront.
3722         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
3723         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
3724         in an enumerator.  This encodes the main fix in this patch series
3725         -- we can only jump into the first instruction of a try from the
3726         outside, but we want to emit try/finally regions in iterators and
3727         resume in the middle of them.
3728
3729 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
3730
3731         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
3732         of NeedReturnLabel here.
3733
3734         Introduce a common point for emitting try/finally to IL
3735         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
3736         features of the various subclasses, which are now driven by ...
3737         (ExceptionStatement.EmitPreTryBody): ... this and ...
3738         (ExceptionStatement.EmitTryBody): ... this and the original
3739         EmitFinallyBody.
3740         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
3741         Remove DoEmit and update to follow above protocol.
3742
3743         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
3744         of the dispatcher are the same, skip emitting the 'switch'.
3745         * iterator.cs (Iterator.EmitDispose): Update to changes.
3746
3747         Clean up handling of 'using' statement
3748         * statement.cs (UsingTemporary): New.  Carved out of ...
3749         (Using): ... this.  Simplify drastically.  Handle exactly
3750         one variable.
3751         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
3752         or Using as appropriate.  If there are multiple variable declared,
3753         create nested Using statements.
3754         (resource_acquisition): Kill.
3755
3756         * statement.cs (ExceptionStatement.EmitForDispose): Use
3757         EmitFinallyBody, not EmitFinally.
3758
3759         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
3760         * iterator.cs: Update to changes.
3761
3762         Start using the ResumableStatement infrastructure
3763         * statement.cs (ResumeableStatement.PrepareForDispose): New.
3764         (ResumableStatement.EmitForDispose): New.
3765         (ExceptionStatement): Override them.
3766         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
3767         EmitForDispose to create the body of the Dispose method.  Don't
3768         use OldResumePoint.
3769
3770         * iterator.cs (Iterator.AddResumePoint): Move here from ...
3771         * statement.cs (Toplevel.AddResumePoint): ... here.
3772         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
3773         * flowanalysis.cs (FlowBranchingIterator): New.
3774         * codegen.cs (EmitContext): Update to changes.
3775
3776         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
3777         (Iterator.old_resume_points): Rename from 'resume_points'.
3778         (Iterator.MoveNextStatement): Remove unused class.
3779
3780         New infrastructure for try/finally in iterators (still unused)
3781         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
3782         (FlowBranchingToplevel.AddResumePoint): Hook into
3783         ToplevelBlock.AddResumePoint.
3784         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
3785         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
3786         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
3787         resume points and assign program-counter values.
3788         (ExceptionBlock.AddResumePoint): Collect resume points for
3789         de-muxer at the top of try block.
3790         * iterators.cs (Yield.CheckContext): Simplify.
3791         (Yield.Resolve): Use FlowBranching.AddResumePoint.
3792
3793 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
3794
3795         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
3796         argument to an ExitStatement.
3797         (FlowBranchingException): Refactor saved origins code.
3798         * statement.cs (ExitStatement): Update to cahges.
3799         * iterator.cs (YieldBreak): Likewise.
3800
3801         * statement.cs (ResumableStatement): New.  Common base class for
3802         YieldReturn and ExceptionStatement.
3803         (ExitStatement): New.  Common base class for Return and YieldBreak.
3804         (Return): Update to changes.
3805         * iterator.cs (YieldBreak): Likewise.
3806         * lambda.cs (ContextualReturn): Likewise.
3807
3808         Fix #377028
3809         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
3810         emit a meaningful error message.
3811
3812         Fix #324765, #319508
3813         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
3814         (VariableInfo.SetAssigned): Set it.
3815         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
3816         determine if CS0219 or CS0168 is appropriate.  Don't use
3817         flow-analysis information.
3818         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
3819         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
3820         (EmitContext.EndFlowBranching): ... this.
3821
3822 2008-04-03  Marek Safar  <marek.safar@gmail.com>
3823
3824         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
3825
3826 2008-04-03  Marek Safar  <marek.safar@gmail.com>
3827
3828         A fix for bug #376508
3829         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
3830         ImplicitConversionExists.
3831
3832 2008-04-03  Marek Safar  <marek.safar@gmail.com>
3833
3834         * expression.cs (Binary): Added remaining binary operators to expression
3835         tree builder.
3836
3837         * nullable.cs: Optimize shift with null argument.
3838
3839 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
3840
3841         Fix minor IL regression
3842         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
3843         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
3844         * cs-parser.jay (try_statement): Update to changes.
3845
3846         * statement.cs (TryFinally.need_exc_block): Delete.
3847         (TryFinally): Update to changes.
3848
3849         Now all ExceptionStatements are unconditional
3850         * statement.cs (CollectionForeach.DisposableWrapper): New.
3851         Extract out the try/finally code into a new wrapper.
3852         (CollectionForeach.Resolve): Use it to simplify the code.
3853
3854 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
3855
3856         Start at simplifying ExceptionStatement semantics a bit
3857         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
3858         * cs-parser.jay (try_statement): Update to changes.
3859         (opt_catch_clauses): Remove.
3860         * flowanalysis.cs: Update to changes.
3861         (FlowBranching.BranchingType.TryCatch): New.
3862         (FlowBranchingTryCatch): New.
3863
3864         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
3865         (FlowBranching.CreateBranching): Update to changes.
3866         (FlowBranchingBlock.AddSibling): Add sanity check.
3867         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
3868         Update to changes.
3869
3870         * iterators.cs (Iterator.MarkFinally): Remove.
3871         * statement.cs (ExceptionStatement): Update to changes.
3872
3873         Add support for skipping over finally blocks at runtime.  First
3874         in a series to fix #324708
3875         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
3876         (Iterator.EmitMoveNext): Initialize it.
3877         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
3878         branch over the body of the 'finally' clause.
3879
3880 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
3881
3882         Avoid lopsided use of Foo/DoFoo names
3883         * statement.cs (ExpressionStatement.EmitFinallyBody):
3884         Rename from EmitFinally.
3885         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
3886         * iterator.cs: Update to changes.
3887
3888 2008-04-02  Marek Safar  <marek.safar@gmail.com>
3889
3890         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
3891         based on UserOperatorCall. More binary nullable operators clean up.
3892
3893 2008-04-02  Martin Baulig  <martin@ximian.com>
3894
3895         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
3896
3897 2008-04-02  Marek Safar  <marek.safar@gmail.com>
3898
3899         * nullable.cs: Merge user and empty conversions when lifting expression
3900         trees.
3901         
3902         * expression.cs (StringConcat): Implemented expression tree representation.
3903
3904 2008-04-01  Marek Safar  <marek.safar@gmail.com>
3905
3906         * nullable.cs: When lifting null literal and a user operator exists, no call 
3907         is made.
3908         
3909 2008-04-01  Marek Safar  <marek.safar@gmail.com>
3910
3911         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
3912         null.
3913
3914 2008-04-01  Marek Safar  <marek.safar@gmail.com>
3915
3916         * nullable.cs, expression.cs: Use namespace instead heavily nested
3917         monster abstract class.
3918
3919 2008-04-01  Marek Safar  <marek.safar@gmail.com>
3920
3921         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
3922         lifting of null literal and user operators. Clean up of some temporary
3923         nullable hacks.
3924
3925 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
3926
3927         Fix #368224, test-629.cs
3928         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
3929         if it crossed an unwind-protect boundary.
3930         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
3931         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
3932         inside an unwind-protected region.
3933         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
3934         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
3935         'leave' instead of a 'br' if unwind-protected.
3936         (Iterator.EmitYieldBreak): Likewise.
3937
3938 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
3939
3940         * driver.cs: Only define versioninfo resources if no win32 resource
3941         file was specified.
3942
3943 2008-03-28  Marek Safar  <marek.safar@gmail.com>
3944
3945         A fix for bug #372375
3946         * convert.cs: Fixed boxing of nullable types.
3947
3948 2008-03-28  Marek Safar  <marek.safar@gmail.com>
3949
3950         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
3951         type.
3952
3953 2008-03-28  Marek Safar  <marek.safar@gmail.com>
3954
3955         A fix for bug #374619
3956         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
3957         
3958 2008-03-27  Marek Safar  <marek.safar@gmail.com>
3959
3960         * lambda.cs: Check return type only for invocation.
3961         
3962 2008-03-27  Marek Safar  <marek.safar@gmail.com>
3963
3964         A fix for bug #374214
3965         * ecore.cs: Correctly report argument type mismatch.
3966
3967 2008-03-27  Marek Safar  <marek.safar@gmail.com>
3968
3969         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
3970         and not rely on broken IsEnum.
3971
3972 2008-03-27  Marek Safar  <marek.safar@gmail.com>
3973
3974         * nullable.cs: New file, extracted from generic.cs.
3975         
3976         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
3977
3978 2008-03-27  Marek Safar  <marek.safar@gmail.com>
3979
3980         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
3981         predefined comparison operators and null literals.
3982         
3983         * report.cs: New warning ID.
3984         
3985 2008-03-25  Marek Safar  <marek.safar@gmail.com>
3986
3987         A fix for bug #370577
3988         * lambda.cs: Check return type too.
3989
3990 2008-03-25  Marek Safar  <marek.safar@gmail.com>
3991
3992         A fix for bug #372846
3993         * class.cs: Automatic properties can be declared as unsafe.
3994
3995 2008-03-20  Marek Safar  <marek.safar@gmail.com>
3996
3997         * location.cs: Use string based concatenation.
3998         
3999         * expression.cs: LiftedBinaryOperator is gmcs only.
4000         
4001 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4002
4003         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4004         conversions rules and expression trees.
4005
4006 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4007
4008         * delegate.cs: Use extension method source as delegate target.
4009
4010 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4011
4012         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4013         binary operations to be purely based on binary operations and optimized
4014         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4015         and other ET refactoring.
4016         
4017         * typemanager.cs: Fixed warning.
4018         
4019 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4020
4021         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4022         
4023         * symbolwriter.cs: Fixed.
4024
4025 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4026
4027         * anonymous.cs, driver.cs: Reset anonymous types counters.
4028
4029 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4030
4031         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4032         
4033         * class.cs: Use fullname for all type member definitions.
4034         
4035 2008-02-19  Martin Baulig  <martin@ximian.com>
4036
4037         * class.cs
4038         (IMethodData.EmitExtraSymbolInfo): New interface method.
4039         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4040         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4041         interface method here as an empty public virtual method.
4042
4043         * anonymous.cs
4044         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4045         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4046         CodeGen.SymbolWriter.SetRealMethodName().       
4047
4048 2008-02-18  Martin Baulig  <martin@ximian.com>
4049
4050         * anonymous.cs
4051         (ScopeInfo.EmitType): Override this and emit debugging
4052         information for captured variables.
4053         (RootScopeInfo.EmitType): Override this and emit symbol
4054         information for a captured `this'.
4055
4056 2008-02-15  Martin Baulig  <martin@ximian.com>
4057
4058         * iterators.cs: Emit debugging info.
4059
4060         * codegen.cs
4061         (EmitContext.Flags): Add `OmitDebuggingInfo'.
4062         (EmitContext.OmitDebuggingInfo): New public property.
4063
4064         * statement.cs
4065         (While): Override Emit() and don't emit symbol info there; do it
4066         inside DoEmit() instead.
4067         (Block.Emit): Omit symbol information while emitting the scope
4068         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
4069         block logic.
4070         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
4071         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
4072         .ctor to make `IsIterator' work.
4073
4074 2008-03-14  Martin Baulig  <martin@ximian.com>
4075
4076         * symbolwriter.cs: Added the new symbol writer function from the
4077         debugger's `terrania' branch; temporarily enclose them inside
4078         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
4079         my vacations.
4080
4081 2008-03-14  Martin Baulig  <martin@ximian.com>
4082
4083         * symbolwriter.cs
4084         (SymbolWriter): Make this a public static class.
4085
4086         * codegen.cs
4087         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
4088         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
4089
4090 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4091
4092         A fix for bug #370577
4093         * statement.cs, lambda.cs: Added extra limitations when dealing with void
4094         return type.
4095         
4096 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4097
4098         * typemanager.cs (CSharpName): Made 250 times faster.
4099
4100 2008-03-13  Marek Safar  <marek.safar@gmail.com>
4101
4102         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
4103         
4104 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4105
4106         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
4107         crash when predefined field does not exist.
4108         
4109 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4110
4111         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
4112         
4113 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4114
4115         * class.cs (FixedField): Don't crash when contructors are missing.
4116
4117 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4118
4119         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
4120         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
4121         check internal types accessibility for internal and external types.
4122         Replaced EnumToUnderlying by GetEnumUnderlyingType.
4123
4124 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4125
4126         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
4127         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
4128         attribute.cs, statement: Use corect instance of predefined types (work
4129         related to #364674).
4130
4131 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4132
4133         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
4134         
4135 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4136
4137         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
4138         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
4139         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
4140         predefined types clean up, delayed predefined types members initialization
4141         (work related to #364674).
4142
4143 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4144
4145         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
4146         
4147 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4148
4149         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
4150         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
4151         predefined types clean up (work related to #364674).
4152
4153 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4154
4155         * ecore.cs: Print an error message instead of throwing exception.
4156         
4157 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4158
4159         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
4160         expression.cs, statement.cs: Unififed null literal representation.
4161
4162 2008-03-03  Marek Safar  <marek.safar@gmail.com>
4163
4164         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
4165         expression.cs: Refactored binary operators resolve phase and improved speed.
4166         The nullable code is still missing and won't work correctly, more fixes
4167         required.
4168
4169         It also fixes #323726, #324312, #324248, and many other unreported issues.
4170
4171 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
4172
4173         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
4174         instead of 'gmcs'.
4175
4176 2008-02-27  Marek Safar  <marek.safar@gmail.com>
4177
4178         * ecore.cs: Clean-up and split BetterConversion.
4179         
4180 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
4181
4182         Fix #363791
4183         * enum.cs (EnumMember.Value): Only access 'value' if
4184         ResolveValue says it's ok.
4185         (EnumMember.DoResolveValue): Don't set prev_member.value.
4186         (Enum.GetDefinition): Reverse arguments of Equals --
4187         EnumMember.Value can return 'null'.
4188
4189         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
4190
4191 2008-02-22  Marek Safar  <marek.safar@gmail.com>
4192
4193         * generic.cs, expression.cs: More ongoing work on expression trees.
4194         
4195 2008-02-21  Marek Safar  <marek.safar@gmail.com>
4196
4197         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
4198         handle missing matches when mutiple operators exist.
4199         
4200 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4201
4202         A fix for bug #363218
4203         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
4204         initializers.
4205         
4206 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4207
4208         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
4209         update. This time to deal correctly with SideEffectConstant expression used
4210         as an argument for another constant folding.
4211
4212 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
4213
4214         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
4215         MethodBuilder.
4216
4217 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4218
4219         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
4220
4221 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4222
4223         A fix for bug #328136
4224         * expression.cs: Do not fold immediately LogicalAnd operators when the left
4225         side is a false constant, because we still need to evaluate the right-hand
4226         side.
4227
4228         * statement.cs (If): Emit two types of boolean constants (simple constant,
4229         side-effect constant).
4230
4231 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4232
4233         * constant.cs (SideEffectConstant): Don't emit boolean constant.
4234
4235         * expression.cs: Fold immediately LogicalAnd operators when both sides are
4236         constants.
4237
4238 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4239
4240         A fix for bug #361457
4241         * ecore.cs (IsApplicable): Params methods have lower priority.
4242
4243         * support.cs: Return correct parameter modifier for params types.
4244
4245 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4246
4247         * generic.cs (TypeParameter): Cache attribute target name.
4248
4249         * support.cs: Removed unused variable.
4250
4251         * typemanager.cs: Removed debugging leftover.
4252
4253         * ecore.cs: Use local type instead of a property;
4254
4255         * class.cs (VerifyMembers): Consider also parent to test whether type member
4256         is local or public.
4257
4258         * expression.cs (FullMethodDesc): Removed.
4259
4260         * attribute.cs (IsValidArgumentType): Made static.
4261
4262 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
4263
4264         Cleanup to be more readable.
4265         * Makefile (GMCS_PROFILE): Remove.
4266         (COMPILER_NAME): New helper.
4267
4268 2008-02-15  Miguel de Icaza  <miguel@novell.com>
4269
4270         * cs-tokenizer.cs: if a conditional expression happens inside a
4271         (...) this also means that we do not need to de-ambiguate between
4272         an parenthesized expression and a cast.
4273
4274         Fixes 346484.
4275
4276         * constant.cs (SideEffectConstant): a constant value that happens
4277         to have a side effect.
4278
4279         Fixes the build regressions introduced by the fix for #359789
4280
4281 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
4282
4283         * expression.cs (Conditional.Emit): when emitting the ternary
4284         operator, use local variables to generate code verifiable code.
4285
4286         The verifier cannot infer that the type on stack before the
4287         stloc.0 is executed is of type ParentB. This happens because the
4288         stack merge algorithm uses only parent types when deciding which
4289         is the common type.  This is described in Part III 1.8.1.3 of ECMA
4290         335.
4291
4292         This code compiled with mcs is not verifiable under MS. The MS
4293         verifier picks the first common interface of Foo and Bar, which is
4294         wrong, but doesn't use a full join type of the 2 interfaces.
4295
4296         CSC uses a clever hack to compile such code in a verifiable
4297         way. It stores the intermediate values in a local variable with
4298         the expected type.
4299
4300         Fixes: #358102
4301
4302 2008-02-14  Miguel de Icaza  <miguel@novell.com>
4303
4304         * expression.cs: Do not fold BitwiseAnd operators when the left
4305         side is a false constant, because we still need to evaluate the
4306         right-hand side.
4307
4308         Fixes #359789
4309
4310         * support.cs: Instead of throwing an InternalErrorException when
4311         the position of the stream is outside the boundary of our buffer,
4312         reset the state of the reader, and restart the reading from the
4313         beginning of the file.
4314
4315 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4316
4317         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
4318
4319 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4320
4321         A fix for bug #361686
4322         * decl.cs: A protected types used inside a private class which parents
4323         derives from the protected class are accessible.
4324
4325 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4326
4327         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
4328         the parameterless constructor.
4329
4330 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4331
4332         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
4333         lookup methods to use standard member cache when doing member lookup.
4334
4335 2008-02-12  Marek Safar  <marek.safar@gmail.com>
4336
4337         * driver.cs: Don't report full path for referenced module as assembly error.
4338
4339 2008-02-12  Marek Safar  <marek.safar@gmail.com>
4340
4341         * Makefile: Fixed `qh' target to work on all machines.
4342
4343         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
4344         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
4345         and HasElementType with TypeManager implementation.
4346
4347 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4348
4349         A fix for bugs #325134, #359749
4350         * expression.cs, ecore.cs: Try to resolve an extension method even if the
4351         first binds point to non-method member expression.
4352
4353 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4354
4355         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
4356
4357 2008-02-08  Marek Safar  <marek.safar@gmail.com>
4358
4359         A fix for bugs #321394, #323028
4360         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
4361         Reworked naive IsAccessibleAs implementation to handle nested types.
4362
4363 2008-02-05  Jb Evain  <jbevain@novell.com>
4364
4365         * class.cs: use generic type comparison for parameters
4366         as well.
4367
4368 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4369
4370         A fix for bug #325372
4371         * class.cs: Use generic type comparison when testing method signatures.
4372
4373 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4374
4375         A fix for bug #357047
4376         * ecore.cs: Applied C# 3.0 changes to better conversion.
4377
4378 2008-02-05  Marek Safar  <marek.safar@gmail.com>
4379
4380         A fix for bug #358374
4381         * cs-parser.jay: Correctly set modifiers for all constructor types.
4382
4383 2008-02-04  Marek Safar  <marek.safar@gmail.com>
4384
4385         A fix for bug #355251
4386         * generic.cs: Added base class constraint based type inference.
4387
4388 2008-02-01  Marek Safar  <marek.safar@gmail.com>
4389
4390         A fix for bug #357255
4391         * decl.cs: One more missing visibility check.
4392
4393 2008-02-01  Marek Safar  <marek.safar@gmail.com>
4394
4395         * support.cs: Fixed broken return.
4396
4397 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4398
4399         * report.cs: Correctly reset warnings count after probing.
4400
4401 2008-01-25  Martin Baulig  <martin@ximian.com>
4402
4403         * namespace.cs
4404         (NamespaceEntry.SymbolFileID): Make this work again after
4405         MemberName.ToString() is gone.
4406
4407 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4408
4409         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
4410         expressions.
4411
4412 2008-01-25  Marek Safar  <marek.safar@gmail.com>
4413
4414         * generic.cs: Use full implicit conversion for type inference fixing.
4415
4416 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4417
4418         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
4419         Fixed user operator conversions.
4420
4421 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4422
4423         * generic.cs: Do nullable type to null comparison optimization during
4424         resolve phase.
4425
4426 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4427
4428         A fix for bug #355163
4429         * generic.cs: Enabled l-value resolve on nullable expressions.
4430
4431 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4432
4433         A fix for bug #353986
4434         * class.cs: Ingore static ctors with parameters for any further checks.
4435
4436 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4437
4438         A fix for bug #354310
4439         * namespace.cs: Removed redundant check.
4440
4441 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4442
4443         A fix for bug #354928
4444         * expression.cs: ElementInitializers can be resolved only once.
4445
4446 2008-01-24  Marek Safar  <marek.safar@gmail.com>
4447
4448         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
4449         Condition expressions.
4450
4451 2008-01-23  Marek Safar  <marek.safar@gmail.com>
4452
4453         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
4454
4455 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4456
4457         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
4458         not allowed.
4459
4460         * generic.cs: Implemented coalesce expression.
4461
4462 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4463
4464         A fix for bug #355145
4465         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
4466         expression tree type inference.
4467
4468 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
4469
4470         Fix #354663
4471         * expression.cs (Binary.IsUnsignedType): Fix typo.
4472
4473 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4474
4475         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
4476
4477 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4478
4479         A fix for bug #355161
4480         * ecore.cs, expression.cs: Wider range of extension method supported
4481         expressions.
4482
4483 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
4484
4485         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
4486         AssemblyBuilder to operate in compiler context. Fixes mcs part of
4487         bug #354970.
4488
4489 2008-01-22  Marek Safar  <marek.safar@gmail.com>
4490
4491         A fix for bug #355148
4492         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
4493
4494 2008-01-22  Miguel de Icaza  <miguel@novell.com>
4495
4496         * expression.cs (CreateExpressionTree): Add support for or and
4497         logical or, and indent following the coding conventions.
4498
4499         * typemanager.cs (LinqExpression): renamed from
4500         ExpressionTreeManager, for a shorter name.
4501
4502         Use TypeManager.CoreLookupType to lookup types from our core
4503         assemblies and turn those into "Type" variables.
4504
4505         Consumers that previously used "Namespace" and "Type" from this
4506         class should instead use the TypeExpression which is a type that
4507         is fully resolved (without involving the regular C# resolution
4508         rules). 
4509
4510         This typically looks like this:
4511
4512         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
4513         new MemberAccess (texpr, name, type_arguments, loc)
4514
4515         This avoids the problem in: #355178
4516
4517 2008-01-21  Marek Safar  <marek.safar@gmail.com>
4518
4519         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
4520         feature in parser only as we do in other cases.
4521         
4522 2008-01-21  Marek Safar  <marek.safar@gmail.com>
4523
4524         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
4525         typemanager.cs: A refactoring of params arguments to reuse existing
4526         expressions (params -> array initializer) to emit params argument instead
4527         of specialized handling.
4528         It was required by expression tree implementation and it has other benefits
4529         as well, we now apply same optimization for params arguments as we do for
4530         array initializers.
4531         
4532 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4533
4534         A fix for bug #353526
4535         * generic.cs: A type inference of params arguments may not required any
4536         temporary array creation.
4537         
4538 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4539
4540         A fix for bug #353534
4541         * generic.cs, ecore.cs, expression.cs: A method group type inference is
4542         supported for delegates only.
4543         
4544 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4545
4546         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
4547         type for more than 1 candidates.
4548         
4549 2008-01-18  Marek Safar  <marek.safar@gmail.com>
4550
4551         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
4552         expressions.
4553         
4554 2008-01-16  Marek Safar  <marek.safar@gmail.com>
4555
4556         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
4557         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
4558         operator) expressions. 
4559                 
4560 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
4561
4562         * statement.cs: Avoid declaring an IL variable for this_variable since it is
4563         not accessed from the generated IL.
4564
4565 2008-01-14  Marek Safar  <marek.safar@gmail.com>
4566
4567         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
4568         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
4569         statement.cs: The first expression tree implementation drop, mostly
4570         infrastructure work.
4571
4572 2008-01-14  Marek Safar  <marek.safar@gmail.com>
4573
4574         * ecore.cs (IsNestedChild): Refactored.
4575
4576 2008-01-11  Marek Safar  <marek.safar@gmail.com>
4577
4578         * lambda.cs: Don't use a cast on unknown expression statement.
4579
4580 2008-01-10  Geoff Norton  <gnorton@novell.com>
4581
4582         * cs-tokenizer.cs: One more token to distinguish between method and lambda
4583         arguments
4584
4585 2008-01-09  Marek Safar  <marek.safar@gmail.com>
4586
4587         * doc.cs: Report better /doc crash details.
4588         
4589 2008-01-09  Marek Safar  <marek.safar@gmail.com>
4590
4591         A fix for bug #352536
4592         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
4593
4594 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4595
4596         A fix for bug #352287
4597         * ecore.cs, expression.cs: Do `this' access checking in all member access
4598         expressions.
4599         
4600 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4601
4602         * rootcontext.cs, driver.cs: Switch to linq mode by default.
4603         
4604         * report.cs: Reset message stacks.
4605         
4606 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4607
4608         * generic.cs (InferInPhases): Correctly calculate params position.
4609         
4610 2008-01-08  Marek Safar  <marek.safar@gmail.com>
4611
4612         * cs-tokenizer.cs: No need to parse full string when parsing lambda
4613         arguments.
4614
4615 2008-01-07  Marek Safar  <marek.safar@gmail.com>
4616
4617         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
4618         
4619         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
4620         
4621         * driver.cs: Updated --help option.
4622         
4623 2008-01-07  Marek Safar  <marek.safar@gmail.com>
4624
4625         * generic.cs (InferParamsTypeArguments): Removed.
4626         (InferInPhases): Add params type inference.
4627         (LowerBoundInference): Fixed scoring mechanism.
4628         
4629         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
4630         
4631 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
4632
4633         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
4634         byte array for unsigned "baked" assemblies.
4635
4636 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
4637
4638         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
4639         array for assemblies that are not strongnamed.
4640
4641 2008-01-04  Marek Safar  <marek.safar@gmail.com>
4642
4643         A fix for bug #351481
4644         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
4645         declaring type for nested generic types.
4646         
4647 2008-01-04  Marek Safar  <marek.safar@gmail.com>
4648
4649         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
4650         instead of ToString.
4651         
4652 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4653
4654         A fix for bug #351047
4655         * expression.cs (Binary.ResolveOperator): Allow equality operators between
4656         null and structs only when equality and inequality operators are defined
4657         either as an user-operators or predefined operators.
4658         
4659 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4660
4661         A fix for bug #351047
4662         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
4663         
4664 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4665
4666         A fix for bug #351257
4667         * cs-tokenizer.cs: Advance line number for '\r' correctly.
4668         
4669 2008-01-03  Marek Safar  <marek.safar@gmail.com>
4670
4671         A fix for bug #351157
4672         * class.cs (Using): Fixed yet another broken cloning.
4673         
4674         (Block): Put back more sensible default value for statements.
4675         
4676 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
4677
4678         * codegen.cs: Allow AssemblyVersion with only major version component.
4679         Fixes bug #351055.
4680
4681 2007-12-29  Marek Safar  <marek.safar@gmail.com>
4682
4683         A fix for bug #324654
4684         * class.cs: Use FullName property as member name.
4685
4686 2007-12-28  Marek Safar  <marek.safar@gmail.com>
4687
4688         A fix for bug #342117
4689         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
4690         constructor constraint.
4691
4692 2007-12-28  Marek Safar  <marek.safar@gmail.com>
4693
4694         A fix for bug #338273
4695         * class.cs (ProbertyBase): Access modifier checks are required for overrides
4696         only.
4697
4698 2007-12-28  Marek Safar  <marek.safar@gmail.com>
4699
4700         A fix for bug #350839
4701         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
4702
4703 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
4704
4705         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
4706         GHOP:
4707         
4708         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
4709
4710         * statement.cs: Changed some Hashtables to use HybridDictionaries
4711         instead. It was observed that some HashTables only contained a few
4712         items in the vast majority of cases. Since HybridDictionary is
4713         more efficient on small sets (<10 elements), "known_variables"
4714         from class ExplicitBlock as well as "labels" and "constants " from
4715         class Block were changed to HybridDictionaries. 
4716
4717         Atsai results: (56216kb->54987kb)
4718
4719         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
4720
4721
4722 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
4723
4724         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
4725         GHOP:
4726         
4727         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
4728         
4729         * expression.cs: foreach loop to for loop, saved on allocation of
4730         enumerator (59333kb->59141kb)
4731
4732         * statement.cs. Changed foreach loops to for loops, saved on
4733         allocation of enumerator (59141kb->59006kb)
4734
4735         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
4736         when constructed with no specified capacity. This was causing a
4737         few ArrayLists to allocate more memory than they would potentially
4738         need in the Block class and MemberCache class. Setting the
4739         ArrayLists to construct with a capacity of 1 saves some
4740         memory. (56216kb->55585kb)
4741
4742 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4743
4744         A fix for bug #347189 (2nd issue)
4745         * expression.cs (MemberAccess): Nested type can be found in base non-generic
4746         type.
4747
4748 2007-12-27  Miguel de Icaza  <miguel@novell.com>
4749         
4750         * report.cs: Do not use colors if stdout and stderr are not a
4751         terminal.
4752
4753 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4754
4755         A fix for bug #346998
4756         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
4757         overloads.
4758
4759 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4760
4761         A fix for bug #343465
4762         * class.cs: Explicit method name for nested types uses dots only.
4763
4764 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4765
4766         A fix for bug #343707
4767         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
4768
4769 2007-12-27  Marek Safar  <marek.safar@gmail.com>
4770
4771         * ecore.cs: Report type inference errors only when arguments count matches
4772         parameter count.
4773         
4774         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
4775         
4776         * expression.cs, report.cs: New warning.
4777         
4778         * typemanager.cs: Catch anonymous method type too.
4779
4780 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4781
4782         A fix for bug #346379
4783         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
4784
4785 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4786
4787         A fix for bug #347359
4788         * expression.cs (Invocation): Don't resolve already resolved expression.
4789
4790 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4791
4792         A fix for bug #347189
4793         * class.cs (FixedField): Use non-dependent code only in the define phase.
4794
4795 2007-12-23  Marek Safar  <marek.safar@gmail.com>
4796
4797         A fix for bug #348076
4798         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
4799
4800 2007-12-22  Marek Safar  <marek.safar@gmail.com>
4801
4802         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
4803         discovered extension methods.
4804
4805 2007-12-22  Marek Safar  <marek.safar@gmail.com>
4806
4807         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
4808         method.
4809
4810 2007-12-21  Miguel de Icaza  <miguel@novell.com>
4811
4812         * report.cs (ErrorMessage): Add support for using colors on
4813         terminals that support it. 
4814
4815 2007-12-21  Marek Safar  <marek.safar@gmail.com>
4816
4817         * ecore.cs: Use information about expanded params for error reporting.
4818
4819 2007-12-21  Marek Safar  <marek.safar@gmail.com>
4820
4821         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
4822         and logic for params overloads.
4823         
4824 2007-12-15  Miguel de Icaza  <miguel@novell.com>
4825
4826         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
4827         as this is also created from the parser.  Fixes #349034
4828
4829 2007-12-12  Miguel de Icaza  <miguel@novell.com>
4830
4831         * statement.cs (Throw.CloneTo): it is valid to have empty
4832         expressions for throw. 
4833
4834 2007-12-03  Marek Safar  <marek.safar@gmail.com>
4835
4836         * cs-parser.jay: Set delegate constraint parsing region correctly.
4837
4838 2007-12-03  Marek Safar  <marek.safar@gmail.com>
4839
4840         A fix for bug #345467
4841         * typemanager.cs (IsEqual): Compare generic parameters position only.
4842         
4843 2007-11-28  Marek Safar  <marek.safar@gmail.com>
4844
4845         * expression.cs (BaseAccess): Type arguments can be null.
4846
4847 2007-11-27  Raja R Harinath  <harinath@gmail.com>
4848
4849         * statement.cs (Block.Resolve): Ensure flow-branching tree is
4850         consistent even when an error has occured.
4851         (Switch.Resolve): Likewise.
4852
4853 2007-11-22  Marek Safar  <marek.safar@gmail.com>
4854
4855         A fix for bug #334505
4856         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
4857         overrides.
4858         
4859 2007-11-22  Marek Safar  <marek.safar@gmail.com>
4860
4861         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
4862         refactorings required to resolve extension methods correctly when mixing
4863         generics and non-generics members.
4864         
4865 2007-11-20  Marek Safar  <marek.safar@gmail.com>
4866
4867         A fix for bug #342584
4868         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
4869         conversion.
4870         
4871 2007-11-19  Marek Safar  <marek.safar@gmail.com>
4872
4873         A fix for bug #342512
4874         * delegate.cs: Use delegate argument expression when is available. Don't
4875         emit virtual call when class is sealed.
4876         
4877 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4878
4879         A fix for bug #325423
4880         * assign.cs (FieldInitializer): Use resolved expression for emit.
4881         
4882         * class.cs: Print less confusing error message.
4883         
4884 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4885
4886         * cs-tokenizer.cs: Removed GMCS ifdefs.
4887         
4888         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
4889         mcs.
4890         
4891         * cs-parser.jay: Disabled nullable check.
4892         
4893         * generic-mcs: Copied more generic stuff.
4894                 
4895 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4896
4897         * gcs-parser.jay: Merged to cs-parser.jay.
4898         
4899         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
4900         * *.csproj, *.sources: Updated to use only jay parser file.
4901
4902 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4903
4904         * gcs-parser.jay: Added nullable and default expression feature checks.
4905         
4906 2007-11-16  Marek Safar  <marek.safar@gmail.com>
4907
4908         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
4909         it fixes many TODOs and hidden bugs.
4910         
4911         * expression: Removed duplicate error check.
4912
4913 2007-11-15  Marek Safar  <marek.safar@gmail.com>
4914
4915         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
4916         implicitly type local variable only when it is used in a declaration.
4917
4918 2007-11-15  Marek Safar  <marek.safar@gmail.com>
4919
4920         * attribute.cs: Use CS0612 for empty strings.
4921
4922 2007-11-14  Marek Safar  <marek.safar@gmail.com>
4923
4924         * lambda.cs, statement.cs: Contextual return may act as a statement.
4925
4926 2007-11-14  Marek Safar  <marek.safar@gmail.com>
4927
4928         A fix for a regression cause by #324222
4929         * class.cs: Don't report unused even when it implements an interface.
4930         
4931 2007-11-13  Marek Safar  <marek.safar@gmail.com>
4932
4933         A fix for bug #341205
4934         * ecore.cs, expression.cs: Method group expression cannot do static
4935         method access with an instance reference check before overloading takes
4936         a place.
4937         
4938 2007-11-13  Marek Safar  <marek.safar@gmail.com>
4939
4940         A fix for bug #325359
4941         * class.cs: Use predictable name for automatically generated property.
4942         
4943 2007-11-12  Marek Safar  <marek.safar@gmail.com>
4944
4945         A fix for bug #324996
4946         * expression.cs (Is): Handle case where D is nullable and T is not
4947         correctly.
4948         
4949         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
4950         
4951 2007-11-12  Marek Safar  <marek.safar@gmail.com>
4952
4953         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
4954         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
4955         Flush small error reporting changes.
4956         
4957 2007-11-09  Marek Safar  <marek.safar@gmail.com>
4958
4959         A fix for bug #324996
4960         * expression.cs: Rewrote Is expression implementation to work with
4961         generics, nullable types, anonymous method. A const result expression 
4962         uses existing infrastructure instead of custom not fully-featured one.
4963         
4964 2007-11-08  Marek Safar  <marek.safar@gmail.com>
4965
4966         A fix for bug #340202
4967         * class.cs: Consider generics for volatile field.
4968
4969 2007-11-08  Marek Safar  <marek.safar@gmail.com>
4970
4971         A fix for bug #335594
4972         * expression.cs: Use conversion rules when handling string addition.
4973         
4974 2007-11-07  Marek Safar  <marek.safar@gmail.com>
4975
4976         A fix for bug #336651
4977         * expression.cs: Fixed a crash when probing is on.
4978         
4979 2007-11-07  Marek Safar  <marek.safar@gmail.com>
4980
4981         A fix for bug #324242
4982         * covert.cs: Added a conversion from any nullable-type with an 
4983         underlying enum-type to the type System.Enum.
4984         
4985 2007-11-07  Marek Safar  <marek.safar@gmail.com>
4986
4987         A fix for bug #324222
4988         * class.cs: Report all non-used event fields.
4989         
4990 2007-11-07  Marek Safar  <marek.safar@gmail.com>
4991
4992         A fix for bug #325161
4993         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
4994         qualifier for generic types.
4995         
4996 2007-11-07  Marek Safar  <marek.safar@gmail.com>
4997
4998         A fix for bug #322971
4999         * expression.cs, ecore.cs: Added intermediate result value check for
5000         indexers. 
5001         
5002 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5003
5004         A fix for bug #324754
5005         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5006         when it was requested.
5007
5008 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5009
5010         A fix for bug #325101
5011         * expression.cs: Do type not value comparison for `is' expression.
5012
5013 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5014
5015         A fix for bug #320236
5016         * convert.cs: Don't apply user conversion on underlying target type.
5017
5018 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5019
5020         * expression.cs: Don't use unresolved expression for error reporting.
5021  
5022 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5023
5024         A fix for bugs #337712, #324490
5025         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5026         overloading resolution too.
5027         
5028         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5029         the process consistent and more robust.
5030         
5031         * expression.cs, linq.cs, report.cs: Update.
5032
5033 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5034
5035         A fix for bug #332909
5036         * attribute.cs: Resolve attributes in correct context using error
5037         handling procedure.
5038         
5039         * rootcontext.cs: Define Obsolete attribute members as core members.
5040         
5041 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5042
5043         * statement.cs: Removed unused methods.
5044         
5045 2007-10-31  Wade Berrier  <wberrier@novell.com>
5046
5047         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5048         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5049         during 'make dist')
5050
5051 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5052
5053         A fix for bug #338102
5054         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
5055         methods registered as non-generics.
5056         
5057 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5058
5059         A fix for bugs #337712, #324490
5060         * delegate.cs: Delegate covariance and contravariance is not allowed for
5061         value types.
5062         
5063 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5064
5065         A fix for bug #337719 
5066         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
5067         `from' keyword.
5068         
5069 2007-10-30  Marek Safar  <marek.safar@gmail.com>
5070  
5071         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
5072
5073 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5074  
5075         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
5076         query expressions.
5077
5078 2007-10-29  Raja R Harinath  <rharinath@novell.com>
5079
5080         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
5081
5082 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5083  
5084         A fix for bug #334652
5085         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
5086         extension methods when we have not found the best candidate in normal
5087         container.
5088
5089 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5090
5091         * AssemblyInfo.cs: Keep up-to-date.
5092
5093 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5094
5095         * Makefile: Fixed generics compiler name.
5096         
5097 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5098
5099         * lambda.test: removed, lambda parsing is done differently.
5100         
5101         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
5102
5103 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
5104
5105         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
5106
5107 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5108
5109         * Makefile, *.sources : All C# compilers are in mcs folder.
5110         
5111         * *.cs: Use existing 2_1 define for smcs.
5112
5113 2007-10-26  Marek Safar  <marek.safar@gmail.com>
5114
5115         A fix for bug #335847
5116         * assign.cs, expression.cs: Couple of changes to avoid creating a
5117         temporary variable for each object initializer assignment statement. It
5118         simplifies struct initialization too, otherwise two temporary variables
5119         would be required.
5120         Implemented optimization of redundant default element initializers.
5121         
5122 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5123
5124         A fix for bug #336766
5125         * expression.cs (Class.CheckBase): Use generic name when method is
5126         generic.
5127         
5128 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5129
5130         A fix for bug #334737
5131         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
5132         variable and not variable argument for prepared copies.
5133
5134 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5135
5136         A fix for bug #325110
5137         * class.cs, expression.cs, attribute.cs: Use open generic method when
5138         checking conditional attribute.
5139         
5140 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5141
5142         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
5143         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
5144         FeatureIsNotAvailable.
5145
5146 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5147
5148         ** C# 3.0 Partial methods
5149         
5150         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
5151         methods support. Because of member cache issue with generics only
5152         non-generics partial methods are fully supported.
5153         
5154 2007-10-23  Marek Safar  <marek.safar@gmail.com>
5155         
5156         * class.cs, decl.cs: Rewrote member overloads check to cope with 
5157         generics and to use member cache for member checking. It also improves
5158         performance and fixes remaining overloads issues.
5159         
5160 2007-10-20  Marek Safar  <marek.safar@gmail.com>
5161         
5162         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
5163         roottypes.cs, typemanager.cs:
5164                 
5165         A member cache creation logic changed to add members immediately and
5166         not rely on fallback. The member cache is now only prefered way
5167         how to access and find type declaration members. It saves 5 MB of memory
5168         during MWF compilation and makes code ready for more optimizations and
5169         clean-ups, it's also a pre-requirement for partial methods.
5170         
5171 2007-10-18  Raja R Harinath  <harinath@gmail.com>
5172
5173         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
5174         handling for generic parameters.
5175
5176 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5177         
5178         * class.cs (FixedField): Removed redundant volatile check.
5179         
5180 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5181         
5182         * class.cs, decl.cs: Fixed overload members verification to do only one
5183         check per possible collision.
5184         
5185 2007-10-13  Marek Safar  <marek.safar@gmail.com>
5186         
5187         A fix for bug #325478
5188         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
5189         and create only one disposable flags container.
5190         
5191 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5192         
5193         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
5194         * statement.cs (Fixed): Fixed variables cloning.
5195         
5196 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5197         
5198         A fix for bug #333342
5199         * class.cs (EventField): Don't mark value type event as synchronized. 
5200         
5201 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5202         
5203         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
5204         inference to identify best candidate method correctly.
5205         (ProperyExpr): A range variable is read only and cannot be modified.
5206         
5207 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5208         
5209         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
5210         logic to identify best candidate method correctly.
5211         
5212 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5213         
5214         * location.cs (Equals, GetHashCode): Removed.
5215         
5216 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5217         
5218         * report.cs: Implemented message recorder. It is used mainly for lambda
5219         expressions to capture otherwise swallowed error messages.
5220         
5221         * anonymous.cs, lambda.cs.cs: Do full parameters check.
5222
5223         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
5224         and not at the top.
5225         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
5226                 
5227         * expression.cs (MemberAccess): Always report lookup failure.
5228         
5229         * location.cs: Implemented Equals, GetHashCode.
5230         
5231         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
5232         
5233 2007-10-10  Jb Evain  <jbevain@novell.com>
5234
5235         * codegen.cs: re-enable assembly version check.
5236
5237 2007-10-09  Marek Safar  <marek.safar@gmail.com>
5238         
5239         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
5240         checks.
5241         
5242         * namespace.cs (UsingAlias): Do correct version check.
5243         
5244 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5245         
5246         * expresison.cs, ecore.cs: Issue extension method error message when
5247         appropriate.
5248         
5249         * rootcontext.cs: Added ISO_2 compiler mode option.
5250
5251 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5252         
5253         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
5254          message.
5255         
5256 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5257         
5258         * attribute.cs (GetString, GetBoolean): Work with both literal and
5259         constant.
5260         
5261         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
5262         Moved method overload specific methods to MethodGroupExpr.
5263         
5264         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
5265         it should be less memory consuming.
5266         
5267 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
5268
5269         * codegen.cs: remove the assembly version check until the buildbot is
5270         fixed.
5271
5272 2007-10-07  Jb Evain  <jbevain@novell.com>
5273
5274         * attribute.cs (Attribute.GetString): if the value
5275         expression is a StringConstant, return its string value.
5276
5277 2007-10-07  Jb Evain  <jbevain@novell.com>
5278
5279         * typemanager.cs: add `assembly_version_attribute_type`.
5280         * codegen.cs: on attribute emission, check that the
5281         AssemblyVersionAttribute doesn't overflow.
5282
5283 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5284         
5285         A fix for bug #324677
5286         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
5287         parent container of a scope container with currently resolved one. 
5288         
5289 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5290         
5291         A fix for bug #325534
5292         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
5293         only.
5294         
5295 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5296         
5297         A fix for bug #327504
5298         * class.cs (Operator.Define): Refactored implicit and explicit user
5299         operator conversion rules.
5300         
5301 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5302         
5303         A fix for bug #327520
5304         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
5305         
5306 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5307         
5308         A fix for bug #328022
5309         * class.cs (MethodData.Define): Use correct method to check whether
5310         a method implementents an accessor.
5311         
5312 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5313         
5314         A fix for bug #330069
5315         * statement.cs (Fixed.Resolve): Read the first array element only when
5316         an array is instantiated. 
5317         
5318 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5319         
5320         * expression.cs, assign.cs, generics.cs: Print correct operator when
5321         compound assignment is used.
5322         
5323 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5324         
5325         A fix for bug #325841
5326         * expression.cs (ArrayAccess): Use full argument cloning only for
5327         string compound concatenation.
5328         
5329 2007-10-03  Marek Safar  <marek.safar@gmail.com>
5330         
5331         A fix for bug #328774
5332         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
5333         assignment.
5334         (PropertyExpr.EmitAssign): Fixed string concatenation compound
5335         assignment.
5336
5337 2007-10-03  Raja R Harinath  <rharinath@novell.com>
5338
5339         Fix #328490
5340         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
5341         Event accessibility checks here.  Remove some bogus code that
5342         accidently made GenericMethods work.
5343         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
5344
5345 2007-09-25  Marek Safar  <marek.safar@gmail.com>
5346         
5347         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
5348         
5349         * statement.cs (Block): Refactored AddVariable to allow error handling
5350         customization.
5351         
5352         * generic.cs: New stub.
5353         
5354 2007-09-23  Marek Safar  <marek.safar@gmail.com>
5355         
5356         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
5357         flag.
5358         
5359 2007-09-17  Marek Safar  <marek.safar@gmail.com>
5360
5361         * class.cs: Use partial container to record whether any partial part
5362         contains static field initializer and therefore default contructor has
5363         to be defined.
5364         
5365 2007-09-14  Marek Safar  <marek.safar@gmail.com>
5366
5367         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
5368         mono-list when only one of two partial parts has defined accessibility
5369         modifier.
5370         
5371 2007-09-14  Marek Safar  <marek.safar@gmail.com>
5372
5373         A fix for bug #82845
5374         
5375         * class.cs (TypeContainer): Set correct resolve context for all field
5376         initializers.
5377         
5378 2007-09-13  Marek Safar  <marek.safar@gmail.com>
5379
5380         * assign.cs: Fixed a crash when field is resolved twice with an error.
5381         
5382         * codegen.cs: Changed InFieldInitializer to be flag.
5383         
5384         * anonymous.cs, ecore.cs, expression.cs: Update after
5385         IsInFieldInitializer rename.
5386         
5387         * const.cs: Removed unused parameter.
5388         
5389         * class.cs: Changed the way how we resolve and emit field initializers.
5390         The field initilizers have to have access to contructor block to emit
5391         compiler generated code.
5392
5393 2007-09-13  Marek Safar  <marek.safar@gmail.com>
5394
5395         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
5396         generics use TypeContainer instead.
5397         
5398 2007-09-12  Marek Safar  <marek.safar@gmail.com>
5399         
5400         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
5401
5402         * lambda.cs (ResolveParameters): Use more powerful
5403         InflateGenericArgument.
5404         
5405         * parameters.cs: Better exception message.
5406                 
5407 2007-09-10  Marek Safar  <marek.safar@gmail.com>
5408
5409         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
5410         correct expression block type. 
5411         
5412         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
5413         
5414         * expression.cs (Invocation): Extracted method group resolve to
5415         DoResolveOverload.
5416         
5417 2007-09-07  Marek Safar  <marek.safar@gmail.com>
5418
5419         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
5420         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
5421         
5422         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
5423         generic extension methods.
5424
5425 2007-09-06  Marek Safar  <marek.safar@gmail.com>
5426
5427         A fix for bug #82676 (Do I get it right now?)
5428         * convert.cs (Binary.ResolveOperator): An interface is converted to the
5429         object before a standard conversion is applied.
5430         
5431 2007-09-06  Marek Safar  <marek.safar@gmail.com>
5432
5433         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
5434         #82676.
5435         
5436 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5437
5438         A fix for bug #82676
5439         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
5440         non-generic interface types.
5441         
5442 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5443
5444         A fix for bug #82690
5445         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
5446         
5447 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5448
5449         A fix for bug #82571
5450         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
5451         modifier for container based methods.
5452         
5453 2007-09-05  Marek Safar  <marek.safar@gmail.com>
5454
5455         A fix for bug #82676
5456         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
5457         any interface-type T means to any of interface type T.
5458
5459 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5460
5461         * namespace.cs: We have 2 versions of System.Core assembly.
5462
5463 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5464
5465         A fix for bug #82652
5466         * class.cs (Class.GetClassBases): Compare types and not expressions.
5467
5468 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5469
5470         A fix for bug #82620
5471         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
5472         actually never worked before.
5473         (IndexerAccess): Emit prepared arguments before they are modified.
5474         
5475 2007-09-04  Marek Safar  <marek.safar@gmail.com>
5476
5477         A fix for bug #82563
5478         * assign.cs: Revert wrong fix.
5479         
5480         * expression.cs (VariableReference.EmitAssign): Handle ref reference
5481         correctly.
5482         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
5483         Instead of ldelema/stdind we have to use temporary variables to handle
5484         cases like String.Concat (params string[]).
5485         
5486 2007-08-31  Marek Safar  <marek.safar@gmail.com>
5487
5488         * class.cs: EmitAttributes to Emit rename.
5489         
5490         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
5491         null.
5492         (MemberCore.HasClsCompliantAttribute): Don't depend on 
5493         GetClsCompliantAttributeValue execution.
5494         
5495 2007-08-31  Marek Safar  <marek.safar@gmail.com>
5496
5497         * anonymous.cs: Use shorter type prefix.
5498         
5499         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
5500         when exist.
5501         
5502         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
5503         variables when probing is on.
5504         
5505         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
5506         unresolved variables.
5507         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
5508         handle transparent identifiers.
5509         
5510 2007-08-26  Marek Safar  <marek.safar@gmail.com>
5511
5512         * attribute.cs (IsClsCompliant): Add nullable types test.
5513         
5514 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
5515
5516         * doc.cs : catch other types of exception than XmlException to
5517           report CS1570. Fixed bug #82565.
5518
5519 2007-08-23  Marek Safar  <marek.safar@gmail.com>
5520
5521         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
5522         The number of delegate parameters has to match.
5523         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
5524         arrays.
5525
5526 2007-08-21  Marek Safar  <marek.safar@gmail.com>
5527
5528         * anonymous.cs (AnonymousMethod): Generate private anonymous method
5529         to fix problem with private arguments.
5530
5531 2007-08-20  Marek Safar  <marek.safar@gmail.com>
5532
5533         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
5534         
5535         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
5536         
5537         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
5538         empty. Add cloning suport.
5539         
5540         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
5541
5542 2007-08-20  Marek Safar  <marek.safar@gmail.com>
5543
5544         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
5545         to create EmptyCast. It handles EmptyConstantCast specialization for
5546         constants.
5547         
5548 2007-08-18  Marek Safar  <marek.safar@gmail.com>
5549
5550         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
5551         (EmitArrayArgument): One routine for array arguments.
5552         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
5553         
5554 2007-08-17  Marek Safar  <marek.safar@gmail.com>
5555
5556         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
5557
5558 2007-08-17  Marek Safar  <marek.safar@gmail.com>
5559
5560         * anonymous.cs: MemberLookupFinal update.
5561
5562         * class.cs (ConstructorInitializer): Is expression based.
5563         
5564         * delegate.cs: MethodGroupExpr update.
5565         
5566         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
5567         messages.
5568         (Error_MemberLookupFailed): Customizable error override.
5569         (MethodGroupExpr): Keep queried type for later usage.
5570         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
5571         resolve.
5572         
5573         * expression.cs: Error_MemberLookupFailed refactoring.
5574         (New.DoResolve): Resolve as much as possible.
5575         (ElementInitializer.Error_MemberLookupFailed): Object initializer
5576         customization for invalid member types.
5577
5578         * statement.cs: MethodGroupExpr update.
5579         
5580 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5581
5582         * modifier.cs (Check): Check all modifiers and not only accessibility
5583         ones.
5584
5585 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5586
5587         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
5588         type and not an expression.
5589
5590 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5591
5592         * statement.cs (Catch.Clone): Type and variable can be null.
5593
5594 2007-08-16  Marek Safar  <marek.safar@gmail.com>
5595
5596         A fix for bug #81979
5597         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
5598         I am really not sure whether this is the best fix.
5599         
5600         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
5601         only once.
5602         
5603 2007-08-14  Marek Safar  <marek.safar@gmail.com>
5604
5605         ** C# 3.0 Object and collection initializers (major re-write)
5606         
5607         * assign.cs (DoResolve): Initializers are not assign related.
5608         
5609         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
5610         used during collection or object initialization.
5611         
5612         * expression.cs (Error_InvalidArguments): Add initializers specific
5613         messages. More will come later because it requires some general
5614         refactoring.
5615         (New.DoResolve): Better error handling for unsafe types.
5616         (EmptyExpressionStatement): New class.
5617         (ElementInitializer): An object initializer expression.
5618         (CollectionElementInitializer): A collection initializer expression.
5619         (CollectionOrObjectInitializers): A block of object or collection
5620         initializers.
5621         (NewInitialize): New expression with element/object initializers.
5622         
5623         * statement.cs: Reverted object/collection initializer hacks.
5624         
5625         * typemanager.cs (CSharpName): Filter __arglist type.
5626         
5627 2007-08-09  Marek Safar  <marek.safar@gmail.com>
5628
5629         ** C# 3.0 Anonymous Types (update to the latest standard)
5630         
5631         * expression.cs (Binary.ResolveOperator): Threat all null based types
5632         same.
5633         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
5634         (AnonymousTypeParameter): Updated.
5635         
5636         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
5637         (AnonymousTypeClass): New anonymous type container.
5638         
5639         * class.cs (AddField): Return operation result.
5640         
5641         * generic.cs: Another empty TypeArguments overload.
5642         
5643         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
5644         are stored at top of normal hierarchy.
5645         
5646         * typemanager.cs (CSharpName): Filter anonymous types.
5647         
5648 2007-08-09  Marek Safar  <marek.safar@gmail.com>
5649
5650         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
5651         as single Concat call. How could we miss that :-(
5652         
5653 2007-08-08  Marek Safar  <marek.safar@gmail.com>
5654
5655         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
5656         
5657 2007-08-07  Miguel de Icaza  <miguel@novell.com>
5658
5659         * expression.cs: Fix the previous commit, the creation of the
5660         arguments array list needs also to be conditional on the arguments
5661         not being null.
5662
5663         * class.cs: Add a little bit of help to help narrow down problems.
5664
5665         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
5666         not try to copy in that case. 
5667
5668         * driver.cs: When building SMCS, include a new different set of
5669         default assemblies here.   Do this here so we can control whether
5670         to include the default assemblies with /noconfig.
5671
5672 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5673
5674         A fix for bug #81979
5675         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
5676         only.
5677
5678 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5679
5680         A fix for bug #82300
5681
5682         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
5683         we are in probing scope.
5684
5685 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5686
5687         A fix for bug #82301
5688
5689         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
5690         (Statement.CloneTo): Clone and not map children blocks.
5691
5692 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5693
5694         A fix for bug #82299
5695
5696         * expression.cs (LocalVariableReference.CloneTo): Remap local info
5697         variable too.
5698         
5699         * statement.cs (Statement.CloneTo): Clone variables before statements
5700         to allow remaping of local variables.
5701
5702 2007-08-03  Marek Safar  <marek.safar@gmail.com>
5703
5704         A fix for bug #82296
5705
5706         * anonymous.cs,
5707         * report.cs: Log crash details for future clone problems.
5708         
5709         * statement.cs (Return.Clone): Don't clone non-existent expression.
5710
5711 2007-08-03  Raja R Harinath  <harinath@gmail.com>
5712
5713         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
5714         (Class.AddBasesForPart): Move CS0537 check here from ...
5715         * cs-parser.jay (class_declaration): ... here.  Move calling of
5716         'AddBasesForPart' to ...
5717         (class_bases): ... here.
5718         (struct_declaration, interface_declaration): Update to changes.
5719
5720 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5721
5722         A fix for bug #81923
5723
5724         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
5725         conversion is allowed.
5726
5727 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5728
5729         A fix for bug #81564
5730
5731         * ecore.cs (EventExpr): Add IsBase handling.
5732
5733         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
5734         too.    
5735         
5736 2007-08-02  Raja R Harinath  <harinath@gmail.com>
5737
5738         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
5739         * cs-parser.jay: Some whitespace cleanups.
5740         (current_delegate): New.
5741         (type_name): New.
5742         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
5743         a dummy code block, and use 'type_name' instead of 'member_name'.
5744         (interface_declaration, class_declaration): Likewise.
5745         (delegate_declaration): Likewise.  Rearrange slightly and use
5746         'current_delegate'.
5747         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
5748         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
5749
5750 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5751
5752         A fix for bug #82039
5753
5754         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
5755         available.
5756
5757         * typemanager.cs (CSharpName): Split to string overload.
5758
5759 2007-08-02  Marek Safar  <marek.safar@gmail.com>
5760
5761         * expression.cs,
5762         * report.cs: Updated warning CS0472.
5763
5764 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5765
5766         A fix for bug #82181
5767         * cs-parser.jay,
5768         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
5769
5770 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5771
5772         A fix for bug #82277
5773         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
5774
5775 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5776
5777         ** C# 3.0 Type Inference (major bits are working)
5778         
5779         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
5780         (.ImplicitStandardConversionExists): Uses compatible.
5781         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
5782         (.InferReturnType): New method.
5783         (.Compatible): Refactored.
5784         (.ResolveParameters): Uses factory to create resolved parameters.
5785         (.CompatibleMethod): Add probing mode support.
5786         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
5787         clearly distinguish between 2 different operations.
5788         (LambdaMethod): Moved to lambda.cs.
5789         (AnonymousMethod): Removed unused fields and methods.
5790         (AnonymousDelegate): Simplified.
5791         
5792         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
5793         
5794         * convert. cs (ImplicitConversionStandard): Compatible works differently.
5795         
5796         * delegate.cs (Delegate): New mehods to reduce code duplication.
5797         (.GetConstructor): New method.
5798         (.GetInvokeMethod): New method.
5799         (DelegateCreation): Updated.
5800         
5801         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
5802         does not exist.
5803         (OverloadResolve): Made probing little bit faster.
5804         
5805         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
5806         when probing is on.
5807         
5808         * generic.cs (TypeInferenceContext): Dummy implementation.
5809         
5810         * iterators.cs: Updated after Resolve/Define rename.
5811         
5812         * lambda.cs (LambdaExpression)
5813         (.ResolveParameters): Handles both type of arguments and type inference too.
5814         
5815         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
5816         (InflateTypes): Updated.
5817         
5818         * support.cs (InflateTypes): Changed signature and updated.
5819         
5820         * typemanager.cs (LookupMemberCache): Better dynamic type check.
5821         (MemberLookup_FindMembers): More MS tricks.
5822         (GetParameterData): Ditto.
5823         (GetDelegateParameters): Uses quick path for dynamic types.
5824         
5825 2007-08-01  Marek Safar  <marek.safar@gmail.com>
5826
5827         * class.cs (MethodData.Define): EmitContext is required for generic stuff
5828         only.
5829
5830 2007-07-31  Marek Safar  <marek.safar@gmail.com>
5831
5832         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
5833         syntax.
5834         
5835 2007-07-26  Jb Evain  <jbevain@novell.com>
5836
5837         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
5838         which takes a boolean 'report_errors', similar to the GetMethod.
5839         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
5840         in .net 2.1, do not report errors here.
5841
5842         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
5843         System.Runtime.CompilerServices.RequiredAttributeAttribute and
5844         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
5845         in .net 2.1.
5846
5847         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
5848         of the type InternalsVisibleToAttribute before the first call
5849         to CoreLookupType which is allowed to fail (third boolean parameter
5850         to true). Because, during the resolution for a type that is not
5851         immediately found, we try to check if the type is not defined in
5852         a friend assembly, and to do so, we need the
5853         InternalVisibleToAttribute.
5854
5855 2007-07-23  Miguel de Icaza  <miguel@novell.com>
5856
5857         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
5858         feature that allows structs to be compared against null and inline
5859         the result as true or false.
5860
5861         Notice that the same code is not permitted inside a generic block
5862         of code that would do:
5863
5864         class Foo<T> where T : struct {
5865             bool Eval (T x)
5866             {
5867                  return x == null;
5868             }
5869         }
5870
5871         It is only allowed if the type of T is not bound (no where
5872         clause).   In my opinion, this CSC 2 behavior is broken but people
5873         seem to be using it (IronRuby does, a few bug reports on bugzilla
5874         have it and some people have complained about it).
5875
5876         All of the users that depend on this behavior have code that is
5877         very likely broken. 
5878         
5879         * report.cs (Warning, Error): make these take object arguments,
5880         not strings, as that allows us to take advantage of Format.
5881
5882 2007-07-20  William Holmes  <billholmes54@gmail.com>
5883
5884         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
5885           Left member variable for the Count.
5886         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
5887           MemberName.CountTypeArguments to avoid a NRE. 
5888
5889         This code is contributed under the MIT X11 license
5890
5891 2007-07-18  Marek Safar  <marek.safar@gmail.com>
5892
5893         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
5894
5895 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
5896
5897         * doc.cs : generic method arguments are written as ``x while generic
5898           type arguments are `x. Combined with the previous change, fixed bug
5899           #79706.
5900
5901 2007-07-18  Raja R Harinath  <rharinath@novell.com>
5902
5903         Fix #82120
5904         * expression.cs (Binary.ResolveOperator): When converting
5905         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
5906
5907 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
5908
5909         * doc.cs : when T: or whatever x: is specified, it does not really
5910           check the doc comment's syntax correctness. Fixed bug #82006.
5911
5912 2007-07-18  Marek Safar  <marek.safar@gmail.com>
5913
5914         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
5915         LambdaExpression better.
5916         
5917         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
5918         
5919         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
5920         
5921         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
5922         as it can be generated.
5923         
5924         * expression.cs (Invocation.Error_InvalidArguments): Show correct
5925         modifiers.
5926         
5927         * lambda.cs (LambdaExpression): Refactored to share same code with
5928         AnonymousMethodExpression.
5929         
5930 2007-07-17  Marek Safar  <marek.safar@gmail.com>
5931
5932         * anonymous.cs (MakeName): Include host name for easier debugging.
5933         (LambdaMethod): New class for lambda spcecific stuff.
5934         
5935         * attribute.cs: Set EmitContext return type.
5936
5937         * class.cs: Set EmitContext return type.
5938         
5939         * codegen.cs (EmitContext): Return type cannot be null to stop messing
5940         with null/void meaning.
5941         
5942         * iterators.cs (ContainerType): Implemented.
5943         
5944         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
5945         
5946         * statement.cs (Return): Updated to lambda expressions.
5947         (Block.CloneTo): Parent can be null.
5948                 
5949 2007-07-13  Marek Safar  <marek.safar@gmail.com>
5950
5951         A fix for bug #81917
5952         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
5953         
5954         * class.cs (FixedField): Check whether field is in unsafe scope.
5955
5956         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
5957         (FieldExpr.Emit): Fixed buffers cannot be volatile.
5958
5959         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
5960         FieldExpr.
5961         
5962         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
5963                 
5964 2007-07-13  Marek Safar  <marek.safar@gmail.com>
5965
5966         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
5967         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
5968         from Report class.
5969
5970 2007-07-13  Marek Safar  <marek.safar@gmail.com>
5971
5972         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
5973         
5974 2007-07-13  Marek Safar  <marek.safar@gmail.com>
5975
5976         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
5977         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
5978         
5979         * codegen.cs(EmitContext): Add ProbingMode flag.
5980         
5981         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
5982         
5983         * driver.cs: For now set both warning values.
5984         
5985         * ecore.cs (SimpleName): Name is readonly.
5986         (MethodGroup.OverloadResolve): One quick path for probing.
5987         
5988         * expression.cs (Unary): Set Oper r/o.
5989         (Binary): Set Oper r/o.
5990         (ParameterReference): Set few instance variables as r/o.
5991         (ParameterReference.DoResolveBase): Don't capture aruments when 
5992         the probing is on.
5993         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
5994         (Arglist): arguments are private.
5995         (SizeOf): type is private and r/o.
5996         (MemberAccess): arguments are private.
5997
5998         * report.cs: Enhanced reporting on/off capabilities.
5999         
6000         * lambda.cs: Uses ec.IsInProbingMode.
6001         (ContextualReturn): Derives from return.
6002         
6003         * rootcontext.cs: For now set both warning values.
6004         
6005         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6006         copy if one exists.
6007         (Return.Resolve): Don't die immediately.
6008         (Block.Resolve): Speed-up probing.
6009         (Block.CloneTo): Clone only child blocks.
6010
6011 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6012
6013         * iterators.cs: reverted Miguel's latest change (r81925) as it
6014         breaks the build in System.
6015
6016 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6017
6018         * iterators.cs (Yield.CheckContext): Check for the iterator type
6019         also here as we can call into Yield even in codepaths that are not
6020         directly checked by
6021         (MethodOrOperator is the only path that was checked).
6022
6023         In addition to the standard check, use a more specific check for
6024         constructors to report a more verbose error. 
6025
6026 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6027
6028         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6029         report the warning and continue 
6030
6031         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6032         values on the stack on the call to Emit.   Use EmitStatement if
6033         possible, or using Emit + Pop if not possible.   Fixes #82064
6034
6035 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6036
6037         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6038         avoid try...finally in some cases.
6039
6040 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6041
6042         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6043         
6044         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6045         instead of method. Re-use standard error handling.
6046         (ConstructorInitializer.Emit): Simplified.
6047         
6048         * delegate.cs: Updated after Invocation.EmitCall change.
6049         
6050         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6051         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6052         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6053         method and don't permanently changing input arguments.
6054         (MethodGroupExpr): Introduced resolved best_candidate, when method group
6055         is resolved it has one of the candidates is the best one which is later
6056         used to emit. Removed a few unused method.
6057         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
6058
6059         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
6060         (Binary.ResolveOperator): Ditto.
6061         (ConditionalLogicalOperator.DoResolve): Ditto.
6062         (Invocation): Uses method group.
6063         (Invocation.DoResolve): Simplified.
6064         (Invocation.EmitCall): Removed useless is_static.
6065         (Invocation.Emit): Delegate to method group.
6066         (Invocation.EmitStatement): Simplified.
6067         (New): Uses method group.
6068         (MemberAccess.DoResolve): Don't destroy original expression.
6069         
6070         * statement.cs (ForEach.Resolve): Use null for no method arguments.
6071         
6072 2007-07-04  Marek Safar  <marek.safar@gmail.com>
6073
6074         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
6075         
6076         * anonymous.cs,
6077         * lambda.cs: Add custom error message type.
6078
6079 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6080
6081         * lambda.cs: Simplified little bit.
6082         
6083         * parameter.cs: Introduced ImplicitLambdaParameter.
6084         (Parameters.CreateFullyResolved): New factory instead of ctor.
6085         
6086         * anonymous.cs,
6087         * class.cs,
6088         * delegate.cs: Updated parameter creation.
6089         
6090 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6091
6092         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
6093         arguments.
6094         
6095         * generic.cs: Synchronized with gmcs.
6096         
6097 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6098
6099         * class.cs (Indexer): Check return type as soon as possible.
6100         
6101         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
6102         members too.
6103         
6104         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
6105         
6106         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
6107         
6108         * parameter.cs (Parameter): Use expression type when it is available.
6109         
6110         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
6111         method modifier for the first parameter only.
6112
6113 2007-06-24  Marek Safar  <marek.safar@gmail.com>
6114
6115         A fix for bug #81938
6116         * typemanager.cs (ChangeType): Fixed couple of char conversions.
6117         
6118         * constant.cs: Tide up an exception message.
6119
6120 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6121
6122         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
6123         an uninitialized variable is used.
6124         
6125         * expression.cs (LocalVariableReference.DoResolve): Ditto.
6126
6127 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6128
6129         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
6130         not found error handling.
6131
6132         * expression.cs (ArrayCreation): Removed redundant fields and little bit
6133         simplified.
6134         (ArrayCreation.ResolveArrayElement): To be ready to customization.
6135         (ArrayCreation.DoResolve): Simplified.
6136         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
6137         its own resolve process.
6138         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
6139
6140 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6141
6142         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
6143         more error details.
6144         
6145 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6146
6147         * cs-tokenizer.cs: Removed var related stuff.
6148         
6149         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
6150         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
6151         a type and a keyword at same time.
6152         
6153         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
6154         matches to "var".
6155         
6156         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
6157         implicitly typed arrays, more changes will follow.
6158         
6159         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
6160         
6161 2007-06-19  Marek Safar  <marek.safar@gmail.com>
6162
6163         * ecore.cs (VarExpr): Removed Handled field.
6164         
6165         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
6166         build-in assign functionality.
6167         (ForEach.Resolve): Removed all implicitly typed local variable code and
6168         simplified.
6169         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
6170         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
6171
6172 2007-06-18  Marek Safar  <marek.safar@gmail.com>
6173
6174         * assign.cs: Removed implicitly typed local variable check.
6175         
6176         * expression.cs (LocalVariableReference.DoResolve): Add check for self
6177         referencing implicitly typed local variable.
6178         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
6179         variable here.
6180         
6181         * statement.cs (Fixed): Removed unsupported implicitly typed local
6182         variable code.
6183
6184 2007-06-15  Marek Safar  <marek.safar@gmail.com>
6185
6186         * decl.cs (MemberName): Moved all Unbound stuff to parser.
6187
6188 2007-06-14  Marek Safar  <marek.safar@gmail.com>
6189
6190         A fix for bugs #81855 and #76274
6191         * attribute.cs (AttachTo): Always set owner for global attributes to
6192         prefined owner.
6193         
6194         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
6195         usefull too.
6196         
6197         * cs-parser.jay: Assembly and module attributes must precede all other
6198         elements except using clauses and extern alias declarations.
6199
6200 2007-06-13  Marek Safar  <marek.safar@gmail.com>
6201
6202         A fix for bug #81748
6203         * cs-tokenizer.cs,
6204         * expression.cs: More checks for non ISO-1 features.
6205
6206 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6207
6208         A fix for bug #81807
6209         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
6210         present inside switch statement and it is required by nullable check.
6211
6212 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6213
6214         A fix for bug #81840
6215         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
6216         when type matching fails.
6217         
6218         * namespace.cs: Tiny error message change.
6219
6220 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6221
6222         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
6223         reporting. Added automatic property check.
6224         
6225         * class.cs: Updated after CheckAbstractAndExtern relocation.
6226         (AEventPropertyAccessor.GetSignatureForError): Customized.
6227         
6228 2007-06-11  Marek Safar  <marek.safar@gmail.com>
6229
6230         * class.cs (DefineBaseTypes): Base type can be undefined.
6231         
6232         * ecore.cs (TypeLookup): Minor refactoring.
6233         (DoResolveAsTypeStep): Removed redundant check.
6234
6235         * namespace.cs (Lookup): Removed redundant check.
6236                 
6237         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
6238         ResolveAsTypeTerminal step.
6239         (BootstrapCorlib_*): Simplified.
6240         (PopulateCoreType): Core types can be now external.
6241
6242 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6243
6244         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
6245          verification only.
6246          (InferTypeArguments): Infers anonymous expression type arguments.
6247          (Compatible): Split to Compatible and InferTypeArguments. 
6248         
6249         * lambda.cs: Updated.
6250
6251 2007-06-08  Marek Safar  <marek.safar@gmail.com>
6252
6253         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
6254
6255 2007-06-07  Raja R Harinath  <harinath@gmail.com>
6256
6257         Fix #80477, cs0135-2.cs, cs0135-3.cs
6258         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
6259         names to the "known" variables list.
6260         (Block.CheckInvariantMeaningInBlock): Handle the fact the
6261         parameter names are also "known".
6262         (Block.CheckError136): Remove.
6263         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
6264         null.
6265
6266 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6267
6268         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
6269
6270 2007-06-06  Marek Safar  <marek.safar@gmail.com>
6271
6272         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
6273         internal error not an user error.
6274          
6275         * expression.cs (IsApplicable): Refactored to make debugging easier.
6276
6277         * support.cs: More tricks for non-mono runtimes.
6278         
6279         * typemanager.cs (CoreLookupType): Made public.
6280         (InitSystemCore): All linq specific stuff moved to linq.cs
6281
6282 2007-06-05  Marek Safar  <marek.safar@gmail.com>
6283
6284         * typemanager.cs (CSharpSignature): One more missing build-in types
6285         replacement.
6286         More tricks for non-mono runtime.
6287
6288 2007-06-05  Raja R Harinath  <harinath@gmail.com>
6289
6290         * statement.cs (Block.CheckError136_InParents): Remove.
6291         (Block.AddVariable): Use GetParameterInfo instead.
6292         (ToplevelBlock.ProcessArguments): Likewise.
6293
6294 2007-06-04  Raja R Harinath  <rharinath@novell.com>
6295
6296         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
6297         information too.
6298         (ToplevelBlock.GetParameterInfo): Split out of ...
6299         (ToplevelBlock.GetParameterRefernce): ... this.
6300         (ToplevelBlock.ParameterMap): Remove.
6301         * expression.cs (ParameterReference): Update to use
6302         ToplevelParameterInfo.
6303
6304         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
6305         regression.
6306
6307         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
6308         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
6309
6310         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
6311         (ToplevelBlock.ProcessParameters) ... here.
6312         (ToplevelBlock..ctor): Invoke it.
6313
6314         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
6315         new parameters.
6316
6317         * statement.cs (IKnownVariable): New interface.
6318         (LocalInfo): Implement it.
6319         (ToplevelParameterInfo): New class.
6320         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
6321         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
6322         GetKnownVariableInfo.
6323
6324 2007-06-03  Raja R Harinath  <harinath@gmail.com>
6325
6326         Partly speed up CS0136 error checks.
6327         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
6328         'recurse' parameter.
6329         (Block.DoCheckError136): Only check errors in parameters.  Move
6330         local variable checks ...
6331         (Block.AddVariable): ... here, and ...
6332         (ToplevelBlock.ResolveMeta): ... here.
6333
6334 2007-06-02  Raja R Harinath  <harinath@gmail.com>
6335
6336         * statement.cs (Block.IsChildOf): Remove.
6337
6338         * statement.cs (Statement.Clone): Move special case code ...
6339         (Block.CloneTo): ... here.
6340
6341 2007-05-29  Raja R Harinath  <rharinath@novell.com>
6342
6343         * statement.cs (ToplevelBlock.container): Remove field.  It's
6344         redundant with 'Parent'.
6345         (ToplevelBlock.ContainerBlock): Remove accessor.
6346         (ToplevelBlock..ctor): Update to changes.  Register anonymous
6347         child with parent here, ...
6348         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
6349         current_block.
6350         (start_anonymous): Don't save current_block.
6351         (top_current_block): Remove.
6352
6353         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
6354         (Block.Resolve): Update to changes.
6355         (Block..ctor): Move setting of "correct" 'Toplevel'
6356         and 'Explicit' fields to ...
6357         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
6358
6359 2007-05-27  Raja R Harinath  <harinath@gmail.com>
6360
6361         Kill Block.Implicit
6362         * statement.cs (Block.Implicit): Remove.
6363         (Block): Update to changes.
6364         * flowanalysis.cs: Likewise.
6365
6366         Mildly speed up CheckInvariantMeaningInBlock
6367         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
6368         Recursively call AddKnownVariable to all enclosing blocks.
6369         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
6370         Remove recursive calls.
6371         (Block): Update to changes.
6372
6373         New ExplicitBlock invariants
6374         * statement.cs (Block.Explicit): New field.  It points to the
6375         immediately enclosing non-implicit block.
6376         (Block..ctor): Maintain the invariant.
6377         * cs-parser.jay: Take advantage of invariant.
6378
6379         Introduce ExplicitBlock
6380         * statement.cs (ExplicitBlock): New.
6381         (ToplevelBlock): Derive from it.
6382         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
6383         sense of flag.
6384         (Block.Implicit): Update to changes.
6385         * cs-parser.jay: Update to changes.
6386
6387         Remove unused field
6388         * codegen.cs (EmitContext.IsLastStatement): Remove.
6389         * statement.cs (Block.DoEmit): Update to changes.
6390
6391 2007-05-25  Raja R Harinath  <rharinath@novell.com>
6392
6393         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
6394         modifying current_block directly.
6395
6396 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
6397         
6398         * class.cs: Implemented automatic properties (C# 3.0)
6399           Thanks to Marek for the help.
6400
6401 2007-05-23  Raja R Harinath  <rharinath@novell.com>
6402
6403         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
6404         variable as assigned, note also that all its components are
6405         assigned too.
6406         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
6407
6408 2007-05-19  Marek Safar  <marek.safar@gmail.com>
6409
6410         * anonymous.cs, class.cs: Emit Compiler generated attribute when
6411         member is marked as compiler generated.
6412         
6413         * decl.cs (MemberCore): Refactored ModFlags into property.
6414
6415         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
6416         (Check): Check only accessibility modifiers.
6417
6418 2007-05-18  Raja R Harinath  <rharinath@novell.com>
6419
6420         Track all assignable slots in one bit array
6421         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
6422         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
6423         logic from VariableMap constructor here.  Use the same 'offset'
6424         variable that's later used for computing offsets of local
6425         variables.
6426         * flowanalysis.cs (UsageVector.parameters): Remove.
6427         (UsageVector): Update to changes.
6428         (VariableMap): Remove.
6429
6430         Avoid creating ParameterMap in every block
6431         * statement.cs (Block.ParameterMap): Move ...
6432         (ToplevelBlock.ParameterMap): ... here.
6433         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
6434         only once.
6435         * flowanalysis.cs (FlowBranching.param_map): Remove.
6436         (FlowBranching.UsageVector): Update to changes.
6437         (FlowBranchingToplevel.CheckOutParameters): Likewise.
6438
6439         * statement.cs (Block.CloneTo): Clone Toplevel field too.
6440
6441         * expression.cs (ParameterReference): Distinguish between block
6442         where parameter was referenced and declared.
6443
6444 2007-05-18  Marek Safar  <marek.safar@gmail.com>
6445
6446         * flowanalysis.cs, statement.cs: Put back improved error handling.
6447
6448 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
6449         
6450         * assign.cs:
6451         * expression.cs:
6452           Imporved object and collection initialization (C# 3.0).
6453
6454 2007-05-15  Marek Safar  <marek.safar@gmail.com>
6455
6456         A fix for bug #81380
6457         * expression.cs (Is.DoResolve): Only value types have constant `is'
6458         behaviour.
6459
6460 2007-05-15  Raja R Harinath  <rharinath@novell.com>
6461
6462         * statement.cs (ToplevelBlock.child): Remove.
6463
6464 2007-05-15  Raja R Harinath  <harinath@gmail.com>
6465
6466         Rationalize ResolveMeta: refactoring
6467         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
6468         out constant handling code into ...
6469         (Block.DoResolveConstants): ... this.
6470
6471         Rationalize ResolveMeta: kill local_map
6472         * statement.cs (Block.local_map, Block.LocalMap): Remove.
6473         (Block.AssignableSlots): New.
6474         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
6475         for locals -- move code from VariableMap here.  Avoid unnecessary
6476         allocations.
6477         * flowanalysis.cs (FlowBranching.local_map): Remove.
6478         (FlowBranching..ctor): Use Block.AssignableSlots.
6479         (VariableMap): Remove unused constructors.
6480
6481 2007-05-11  Raja R Harinath  <rharinath@novell.com>
6482
6483         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
6484
6485 2007-05-11  Marek Safar  <marek.safar@gmail.com>
6486
6487         * typemanager.cs (IsFriendAssembly): Should not be called for building
6488         assembly.
6489
6490 2007-05-09  Marek Safar  <marek.safar@gmail.com>
6491
6492         * literal.cs (NullConstant): Print null in all cases.
6493         
6494         * expression.cs (Binary.ResolveOperator): Implemented delegate
6495          comparison based on C# 2.0 changes.
6496
6497 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
6498
6499         This code is contributed under the MIT X11 license
6500         
6501         The following enables support for several C# 3.0 language features:
6502         
6503         * cs-tokenizer.cs: Added support for the "var" keyword.
6504         
6505         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
6506           Added VarExpr class to facilitate type inferencing.
6507         
6508         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
6509           to support anonymous types.
6510         
6511         * assign.cs: Added support for type inferencing and initialization.
6512         
6513         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
6514         
6515         * expression.cs: Added implicit array support to ArrayCreation.
6516           Added 5 types and 1 interface:
6517           
6518           IInitializable                Implementing classes can inject initializing
6519                                         statements after object instantiation.
6520           
6521           Initializer                   Stores data for object initialization.
6522           
6523           AnonymousType                 An expression for anonymous types.
6524           
6525           AnonymousTypeParameter        Stores data about an anonymous type's field.
6526           
6527           NewInitialize                 An expression for object initialization.
6528           
6529           CollectionInitialize          An expression for collection initialization.
6530         
6531         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
6532           statements.
6533
6534 2007-05-06  Marek Safar  <marek.safar@gmail.com>
6535
6536         A fix for bug #81500
6537         * cs-tokenizer.cs: Add special handling for coalescing operator.
6538
6539 2007-05-06  Marek Safar  <marek.safar@gmail.com>
6540
6541         A fix for bug #81529
6542         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
6543         its value from base class until it is redefined.
6544
6545 2007-05-02  Raja R Harinath  <rharinath@novell.com>
6546
6547         Fix regression in cs0631-3.cs
6548         * cs-parser.jay (operator_declarator): Add opt_attributes to error
6549         fallback.  Make error fallback catch more cases.
6550
6551 2007-05-01  Miguel de Icaza  <miguel@novell.com>
6552
6553         * cs-parser.jay: Allow parameters in operator declarations to have
6554         attributes. 
6555
6556 2007-04-27  Miguel de Icaza  <miguel@novell.com>
6557
6558         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
6559         exists. 
6560
6561         * lambda.cs (ContextualReturn.Resolve): An expression is valid
6562         inside the ContextualReturn, it does not have to be an
6563         ExpressionStatement. 
6564
6565 2007-04-24  Miguel de Icaza  <miguel@novell.com>
6566
6567         * lambda.cs (ContextualReturn.Resolve): if the return type is not
6568         set, set it.
6569
6570 2007-04-23  Miguel de Icaza  <miguel@novell.com>
6571
6572         * anonymous.cs (AnonymousContainer): split the virtual Resolve
6573         method in two methods: ResolveNoDefine and Resolve.
6574
6575         ResolveNoDefine will stop just after ResolveTopBlock has been
6576         called.   
6577
6578         Resolve will then continue by creating a method and issuing the
6579         call to method.Define ().
6580
6581         (AnonymousMethod): Split and implement the new Resolve and
6582         ResolveNoDefine as well.
6583
6584         * lambda.cs (LambdaExpression): Split the anonymous method
6585         resolution code into a separate routine (CoreCompatibilityTest)
6586         from DoCompatibleTest.
6587
6588         (LambdaExpression.TryBuild): New method, this method tries to
6589         build the LambdaExpression with the given set of types to be used
6590         as the types for the various parameters of the lambda expression. 
6591
6592         If the compilation succeed with the given types, the infered type
6593         of the Anonymous method is returned, otherwise null is returned.
6594
6595 2007-04-23  Marek Safar  <marek.safar@gmail.com>
6596
6597         A fix for bug #81414
6598         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
6599
6600 2007-04-22  Miguel de Icaza  <miguel@novell.com>
6601
6602         * cs-tokenizer.cs: Change various identifiers here from the
6603         camelCasing to the recommended Linux-like style for instance
6604         variables from the Coding Guidelines. 
6605
6606 2007-04-19  Martin Baulig  <martin@ximian.com>
6607
6608         * convert.cs
6609         (Convert.ImplicitReferenceConversionCore): Allow conversions from
6610         System.Enum to System.ValueType.
6611
6612 2007-04-13  Martin Baulig  <martin@ximian.com>
6613
6614         Rewrote implicit reference conversions.  We need to distinguish
6615         between implicit reference conversions (13.1.4) and implicit
6616         boxing conversions (13.1.5).
6617
6618         According to the spec, there's an an implicit conversion
6619         "From a one-dimensional array-type S[] to IList<T> and base
6620         interfaces of this interface, provided there is an implicit
6621         reference conversion from S to T."  Note that this does not
6622         include boxing conversions.
6623
6624         * convert.cs
6625         (Convert.ImplicitTypeParameterBoxingConversion): New method.
6626         (Convert.ImplicitReferenceConversion): Split into
6627         ImplicitReferenceConversionCore() and
6628         ImplicitBoxingConversionExist().
6629         (Convert.ImplicitReferenceConversionExists): Use the new
6630         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
6631
6632 2007-04-12  Martin Baulig  <martin@ximian.com>
6633
6634         * convert.cs (Convert.ImplicitReferenceConversion): Move the
6635         `TypeManager.null_type' checks up to the top of the method.
6636
6637 2007-04-11  Marek Safar  <marek.safar@gmail.com>
6638
6639         A fix for bug #81350
6640         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
6641         extension methods.
6642
6643 2007-04-11  Martin Baulig  <martin@ximian.com>
6644
6645         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
6646         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
6647         to make this work for generic classes; fixes #79561.
6648
6649 2007-04-11  Martin Baulig  <martin@ximian.com>
6650
6651         * expression.cs (As): Add support for nullable types; fixes #79371.
6652
6653 2007-04-11  Martin Baulig  <martin@ximian.com>
6654
6655         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
6656         `type.FullName' is null; fixes #80243.
6657
6658 2007-04-11  Martin Baulig  <martin@ximian.com>
6659
6660         * expression.cs (Invocation.IsApplicable): Don't modify the method
6661         if type inference succeeded, but the method was not applicable.
6662         Fixes #81250.
6663
6664 2007-04-10  Marek Safar  <marek.safar@gmail.com>
6665
6666         A fix for bug #81324
6667         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
6668         internal and external namespaces containers.
6669
6670 2007-04-10  Martin Baulig  <martin@ximian.com>
6671
6672         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
6673         TypeManager.DropGenericMethodArguments() so we also call
6674         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
6675
6676 2007-04-10  Martin Baulig  <martin@ximian.com>
6677
6678         * iterators.cs (Iterator.CreateIterator): Don't crash if
6679         `method.ReturnType' is null.  This happens if something went wrong
6680         while resolving that typ (we already reported an error in this case).
6681
6682 2007-04-10  Martin Baulig  <martin@ximian.com>
6683
6684         * expression.cs (New.DoResolve): Don't call CheckComImport() on
6685         generic interfaces; report the CS0144 directly.
6686
6687 2007-04-10  Martin Baulig  <martin@ximian.com>
6688
6689         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
6690         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
6691
6692 2007-04-10  Martin Baulig  <martin@ximian.com>
6693
6694         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
6695
6696 2007-04-09  Raja R Harinath  <rharinath@novell.com>
6697
6698         A better fix
6699         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
6700         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
6701
6702         Fix #81338
6703         * statement.cs (For.Resolve): If resolution fails, use
6704         KillFlowBranching.
6705
6706 2007-04-08  Marek Safar  <marek.safar@gmail.com>
6707
6708         * anonymous.cs (MakeName): Make faster and zero-based.
6709         (VerifyExplicitParameterCompatibility): Back to mode where generic
6710         parameter is ignored.
6711         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
6712
6713         * class.cs (EmitType): Method can emit another new method.
6714
6715         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
6716
6717         * driver.cs: Updated.
6718
6719         * lambda.cs: Reuse predefined empty parameters.
6720
6721         * parameter.cs: Updated
6722
6723         * support.cs: Implemented InflateTypes.
6724
6725         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
6726         (InitSystemCore): Introduced to isolate 3.0 dependencies.
6727
6728 2007-04-03  Martin Baulig  <martin@ximian.com>
6729
6730         Fix #80632.
6731
6732         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
6733         version of TypeManager.IsOverride() which also works with generic
6734         types.  
6735
6736 2007-04-03  Martin Baulig  <martin@ximian.com>
6737
6738         Fix #81044.
6739
6740         * convert.cs
6741         (Convert.ExplicitReferenceConversion): We need to cast when
6742         converting from IList<T> to S[].
6743
6744 2007-04-01  Marek Safar  <marek.safar@gmail.com>
6745
6746         * decl.cs (FindExtensionMethods): Consider all candidates with same name
6747         at this level.
6748         
6749         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
6750
6751 2007-03-31  Marek Safar  <marek.safar@gmail.com>
6752
6753         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
6754         argument and return type inferring.
6755
6756         * codegen.cs (InferReturnType): Flag whether return can be inferred.
6757         (ReturnType): Turned to property.
6758
6759         * statement.cs (Return): Implemented return type inferring.
6760
6761         * support.cs (ReflectionParameters): Use local types if possible.
6762
6763 2007-03-30  Raja R Harinath  <rharinath@novell.com>
6764
6765         * flowanalysis.cs (FlowBranching.Reachability): Remove.
6766         (FlowBranching.UsageVector): Update to changes.
6767
6768         Prepare to kill 'Reachability'
6769         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
6770         argument of constructor.
6771
6772 2007-03-29  Raja R Harinath  <rharinath@novell.com>
6773
6774         Prepare to kill 'Reachability'
6775         * flowanalysis.cs (UsageVector.is_unreachable): New.
6776         (UsageVector): Update to maintain 'is_unreachable' in parallel to
6777         'reachability', and verify they're consistent.
6778
6779         Fix #81121
6780         * expression.cs (New.EmitStatement): Handle type parameters here too.
6781
6782 2007-03-29  Martin Baulig  <martin@ximian.com>
6783
6784         Fix #79148.
6785
6786         * anonymous.cs
6787         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
6788         CompilerGeneratedClass.
6789         (ScopeInfo.EmitScopeInstance): Make this protected.
6790         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
6791         `ec.CurrentAnonymousMethod.Scope == Scope'.
6792
6793         * statement.cs (Block.ScopeInfo): Make this a property.
6794
6795 2007-03-27  Raja R Harinath  <harinath@gmail.com>
6796
6797         Prepare to kill 'Reachability'
6798         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
6799         (FlowBranching.UsageVector.Reachability): Remove property.
6800         (FlowBranching.UsageVector.IsUnreachable): New property.
6801         (FlowBranching.UsageVector.ResetBarrier): New.
6802         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
6803         * codegen.cs, statement.cs: Update to changes.
6804
6805 2007-03-27  Martin Baulig  <martin@ximian.com>
6806
6807         Fix #81209.
6808
6809         * decl.cs
6810         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
6811         generic types.
6812
6813 2007-03-26  Raja R Harinath  <rharinath@novell.com>
6814
6815         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
6816         instead of TriState.  Remove all mention of TriState.
6817
6818         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
6819         replaced by a boolean.  Add boolean 'is_unreachable' field, check
6820         and maintain invariants.
6821
6822 2007-03-25  Marek Safar  <marek.safar@gmail.com>
6823
6824         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
6825
6826 2007-03-25  Marek Safar  <marek.safar@gmail.com>
6827
6828         * expression.cs: Stop using obsolete 2.0 opcodes.
6829
6830 2007-03-25  Marek Safar  <marek.safar@gmail.com>
6831
6832         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
6833         one of the latests Martin's fixes.
6834
6835 2007-03-23  Miguel de Icaza  <miguel@novell.com>
6836
6837         * expression.cs: On BigEndian systems, swap the bytes, temporary
6838         solution until we get a new bitconverter class.
6839
6840 2007-03-23  Martin Baulig  <martin@ximian.com>
6841
6842         Fix #81158.
6843
6844         * decl.cs (MemberCache.AddMembers): Add generic methods both as
6845         "Method" and "Method`1".  Normally, a cache lookup is done on the
6846         "Method" form (ie. without the generic arity), but this one makes
6847         lookups on the full form work as well.
6848
6849 2007-03-22  Raja R Harinath  <rharinath@novell.com>
6850
6851         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
6852         unused properties.
6853
6854 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
6855         * class.cs: 
6856         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
6857         ordered_member_list, to TypeBuilder to store members to be defined
6858         in the order they were parsed in.
6859         - ordered_explicit_member_list contains all properties indexers
6860           and methods that are defined as explicit implementation of an
6861           interface or base class.
6862         - ordered_member_list contains all properties indexers and methods
6863           that are not defined as explicit implementation of an interface
6864           or base class.
6865
6866         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
6867         functionality in these removed classes has been replaced with 
6868         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
6869         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
6870
6871         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
6872         to CheckForDuplications inside GetMethod and SetMethod Define Method
6873         to handle method property and indexer name conflicts.
6874
6875         Fixes #79434
6876
6877         All code is contributed under the MIT/X11 license.
6878
6879 2007-03-20  Martin Baulig  <martin@ximian.com>
6880
6881         * class.cs (TypeContainer.Interfaces): Removed; they're now
6882         included in `TypeContainer.Types'.
6883
6884 2007-03-20  Martin Baulig  <martin@ximian.com>
6885
6886         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
6887
6888         * class.cs (TypeContainer.CreateType): New public method.  This is
6889         now called before DefineType() to create the TypeBuilders.
6890         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
6891         has already been created by CreateType().
6892         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
6893         don't resolve our base classes here; this has been moved into
6894         DefineBaseTypes().  We're now called from CreateType().
6895         (TypeContainer.DefineBaseTypes): New private method; resolve our
6896         base classes here.  We're now called from DefineType().
6897
6898         * rootcontext.cs
6899         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
6900         our types first to create all the TypeBuilders.  After that, call
6901         TypeContainer.DefineType() on all the types which'll resolve their
6902         base classes and setup the resolve order.
6903
6904 2007-03-20  Martin Baulig  <martin@ximian.com>
6905
6906         * class.cs (TypeContainer.Enums): Removed; they're now included in
6907         `TypeContainer.Types'.  
6908
6909 2007-03-20  Martin Baulig  <martin@ximian.com>
6910
6911         * class.cs
6912         (TypeContainer.DefineType): Don't call ResolveMembers() here.
6913         (TypeContainer.DoResolveMembers): Call DefineType() on our
6914         `compiler_generated' classes; moved here from DefineNestedTypes().
6915
6916         * rootcontext.cs
6917         (RootContext.ResolveTree): Call ResolveMembers() on all
6918         TypeContainer's in the `type_container_resolve_order'.
6919
6920 2007-03-19  Marek Safar  <marek.safar@gmail.com>
6921
6922         * class.cs: Use corlib to handle InternalMethodImplAttribute.
6923
6924 2007-03-17  Marek Safar  <marek.safar@gmail.com>
6925
6926         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
6927         implementation flags.
6928
6929 2007-03-17  Marek Safar  <marek.safar@gmail.com>
6930
6931         * class.cs: More optimizations for type parameters.
6932
6933 2007-03-15  Marek Safar  <marek.safar@gmail.com>
6934
6935         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
6936
6937         * ecore.cs, parameter.cs: More common code for both corlibs.
6938
6939         * typemanager.cs (IsGenericMethod): Simplified.
6940
6941 2007-03-15  Raja R Harinath  <rharinath@novell.com>
6942
6943         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
6944         'returns'.
6945         * statement.cs, iterators.cs, lambda.cs: Update to changes.
6946
6947         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
6948         unconditionally.  Simplify explanation.
6949         (Try.Resolve, Using.Resolve): Likewise.
6950
6951 2007-03-15  Martin Baulig  <martin@ximian.com>
6952
6953         Fix #80731.
6954
6955         * decl.cs (DeclSpace): If we're a partial class, use our
6956         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
6957
6958 2007-03-15  Raja R Harinath  <rharinath@novell.com>
6959
6960         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
6961         'throws'.
6962         (FlowBranching.UsageVector): Update to changes.
6963         (FlowBranching.MergeSiblings): Likewise.
6964         * statement.cs: Likewise.
6965
6966 2007-03-15  Martin Baulig  <martin@ximian.com>
6967
6968         Fix #79302.
6969
6970         * decl.cs
6971         (MemberCache): Added a special .ctor for type parameters.
6972
6973         * typemanager.cs
6974         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
6975         `MemberCache'.  
6976
6977 2007-03-09  Martin Baulig  <martin@ximian.com>
6978
6979         * enum.cs (Enum): Make this a TypeContainer.
6980         (EnumMember): Derive from `Const'.
6981
6982         * const.cs
6983         (Const.DoResolveValue): New protected virtual method; move most of
6984         the functionality of ResolveValue() here so we can override it in
6985         `EnumMember'.
6986         (Const.CreateConstantReference): Make this virtual.
6987
6988         * class.cs (Kind): Add `Kind.Enum'.
6989         (TypeContainer.Emit): Don't emit the enums here; they're already
6990         in the `RootContext.typecontainer_resolve_order'.
6991
6992         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
6993         here; they're already in the `typecontainer_resolve_order'.
6994
6995         * ecore.cs (EnumConstant.ConvertImplicitly): Add
6996         TypeManager.DropGenericTypeArguments().
6997
6998         * typemanager.cs
6999         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7000         (TypeManager.IsEnumType): Likewise.
7001         (TypeManager.EnumToUnderlying): Likewise.
7002         (TypeManager.IsEqual): Add support for enums.
7003
7004 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7005
7006         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7007         DefaultParameterValueAttribute to be undefined, say if System.dll
7008         is not referenced.
7009
7010 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7011
7012         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7013         any mscorlib.
7014
7015 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7016
7017         * class.cs, parameter.cs: Unified parameters verification.
7018
7019 2007-03-08  Martin Baulig  <martin@ximian.com>
7020
7021         * cs-parser.jay (constructor_header): Pass the location to the
7022         newly created TopLevelBlock.
7023
7024 2007-03-07  Martin Baulig  <martin@ximian.com>
7025
7026         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7027
7028 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7029
7030         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7031         with the changes from David, fixes the build.
7032
7033 2007-03-05  David Mitchell  <dmitchell@logos.com>
7034
7035         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7036         and its base interfaces to a one-dimensional array type S[],
7037         provided there is an implicit or explicit reference conversion
7038         from S to T.
7039
7040 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7041
7042         * cs-tokenizer.cs: Implemented basic linq grammar.
7043
7044         * driver.cs: Set linq lang version on demand.
7045
7046 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7047
7048         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7049
7050 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7051
7052         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7053         (Fixes #80455)
7054
7055         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
7056         here.
7057         Check property and event extern attributes.
7058
7059         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
7060         charset.
7061
7062 2007-02-24  Marek Safar  <marek.safar@gmail.com>
7063
7064         A fix for bug #80407
7065         * ecore.cs: Don't report ambiguity error when methods have same parent.
7066
7067 2007-02-23  Marek Safar  <marek.safar@gmail.com>
7068
7069         A fix for bug #80878
7070         * class.cs, cs-parser.jay: Event property can host anonymous methods.
7071
7072 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7073
7074         * attribute.cs: Enable ExtensionAttribute presence test.
7075
7076 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7077
7078         * class.cs: Warn about missing GetHashCode only when Equals is override.
7079
7080         * decl.cs: Check accessibility of type arguments.
7081
7082         * typemanager.cs: Correctly report nullable array.
7083
7084 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7085
7086         * class.cs, report.cs: Capture more details when things go wrong.
7087
7088 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7089
7090         A fix for bug #80650
7091         * cs-parser.jay: Anonymous container starts at constructor declaration
7092         and not at block beginning because it has to be usable in constructor
7093         initializer.
7094
7095         * statement.cs: Use context location and not block one for error reporting.
7096
7097 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7098
7099         A fix for bug #78712
7100         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
7101         too.
7102
7103 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7104
7105         A fix for bug #80493 by Atsushi Enomoto
7106         * cs-parser.jay: Ignore invalid attribute target.
7107
7108 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7109  
7110         * cs-tokenizer.cs: Ignore '\0' as white space character.
7111
7112 2007-02-17  Miguel de Icaza  <miguel@novell.com>
7113
7114         * cs-parser.jay: Add support for lambda expressions to the mcs
7115         compiler as well.
7116
7117         * lambda.cs: Only clone when we are probing, not on the final call
7118         (Compatible is the final call). 
7119
7120         * statement.cs (CloneContext): Introduce class to provide block
7121         remapping during clone.
7122
7123         All statements Clone themselves now.
7124
7125         (Clone): special handling for blocks, when we clone a block, we
7126         register the block inside this routine, as children of the block
7127         might trigger a lookup. 
7128         
7129         * expression.cs: Add support for CloneContext in all expressions. 
7130         
7131 2007-02-17  Marek Safar  <marek.safar@gmail.com>
7132  
7133         A fix for bug #80493
7134         * statement.cs: Report ambiguous warning when interfaces are not related.
7135
7136 2007-02-15  Marek Safar  <marek.safar@gmail.com>
7137
7138         C# 3.0 extension methods.
7139
7140         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
7141         cannot be used directly.
7142
7143         * class.cs (Class.Emit): Emit extension attribute if any class method
7144         is extension method.
7145         (Method.Define): Add basic extension method validation conditions.
7146         (Method.Emit): Emit extension attribute for method.
7147
7148         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
7149         extension method exists. Currently we follow same approach as Microsoft
7150         does, emit even if a method or a class are private but this can change
7151         later.
7152
7153         * cs-parser.jay: Add handling of `this' keyword in method parameters
7154         context.
7155
7156         * decl.cs (DeclSpace.IsStaticClass): New property.
7157         (MemberCache.FindExtensionMethods): Looks for extension methods with
7158         defined name and extension type.
7159
7160         * doc.cs: Updated after OverloadResolve changes.
7161
7162         * driver.cs: Add new soft reference to System.Core.dll.
7163
7164         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
7165         (ExtensionMethodGroupExpr): Represents group of extension methods.
7166
7167         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
7168         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
7169         to MethodGroupExpr and made non-static for easier customization.
7170         (Invocation.DoResolve): Add extension method lookup when no standard
7171         method was found.
7172         (MemberAccess.DoResolve): Try extension methods if no member exists.
7173
7174         * modifiers.cs: Add METHOD_EXTENSION modifier.
7175
7176         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
7177         as well as candidate extension type.
7178         (ComputeNamespaces): When assembly constains extension methods registers
7179         them.
7180         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
7181         extension method lookup.
7182         (Namespace.LookupExtensionMethod): Looks for extension method in this
7183         namespace.
7184         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
7185         find a method which matches name and extensionType.
7186
7187         * parameter.cs (Parameter): Add This modifer.
7188         (HasExtensionMethodModifier): New property.
7189         (Resolve): Add extension parameter check.
7190         (ModFlags): turned to property to exclude this modifier as it is not real
7191         parameter modifier.
7192         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
7193
7194         * support.cs (ParameterData): Add ExtensionMethodType.
7195         (ReflectionParameters): Implemented ExtensionMethodType interface property.
7196
7197         * typemanager.cs: Add type and ctor extension attribute type.
7198
7199 2007-02-15  Miguel de Icaza  <miguel@novell.com>
7200
7201         * report.cs (DisableErrors, EnableErrors): used to prevent error
7202         output when we are "trying" to compile various methods with
7203         different types. 
7204
7205         * ecore.cs (Expression): Add Clone method that calls the virtual
7206         CloneTo method.  The current CloneTo method in Expression throws
7207         an exception so we can track down all the places where this must
7208         be implemented (not using abstract, because that would be a lot of
7209         up-front-work before we can start testing the implementation
7210         idea). 
7211
7212         Important: we only need Clone capabilities for expressions created
7213         by the parser, as the expressions we will be cloning are
7214         expressions in the pre-resolved state.   This vastly simplifies
7215         the work required. 
7216         
7217         (SimpleName): Add CloneTo that does nothing.
7218         (EmptyCast): Add CloneTo.
7219         
7220         * expression.cs (Binary): Implement CloneTo.
7221         (Invocation.IsApplicable): Store the current ec in
7222         EmitContext.TempEc and restore it on return.  This is used so we
7223         do not have to sprinkle hundres of methods with an extra
7224         EmitContext, we know that the only user is the lambda expression
7225         ImplicitConversionExists code. 
7226         
7227         (Argument): Add Cloning capabilities.
7228         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
7229         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
7230         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
7231         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
7232         IndexerAccess): Add Clone capability.
7233
7234         (LocalVariableReference, This): TODO: needs cloned Block mapping.
7235
7236         (Argument): Add cloning capability.
7237
7238         * assign.cs (Assign): Implement CloneTo.
7239
7240         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
7241         
7242         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
7243         version by calling Convert with the EmitContext (that we are
7244         currently storing in ec, this is not great, but will do for now,
7245         to avoid passing EmitContext parameters to hundreds of functions
7246         that do not need them now).
7247
7248         (SetExpression): Remove, it is not needed.
7249         
7250         (ContextualReturn): Implement CloneTo.
7251
7252         * statement.cs (Statement): Implement cloning infrastructure,
7253         similar to expressions.
7254
7255         (Block): Partial implementation of Clone for statements.
7256
7257         (Return): Implement clone.
7258         
7259         * constant.cs (Constant.CloneTo): New method, does nothing.
7260
7261         * codegen.cs (TempEc): Add a static EmitContext as a temporary
7262         solution, until we decide how to exactly do this.  
7263         
7264 2007-02-14  Marek Safar  <marek.safar@gmail.com>
7265  
7266         A fix for bug #80493
7267         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
7268         a property is override we need to use second accessor.
7269
7270 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7271  
7272         A fix for bug #80418
7273         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
7274         methods.
7275
7276 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7277
7278         Another fix for bug #80749
7279         * pending.cs: Abstract class has priority over interfaces.
7280
7281 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7282
7283         Another fix for bug #80749
7284         * pending.cs: Abstract class has priority over interfaces.
7285
7286 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7287
7288         Another fix for bug #80749
7289         * pending.cs: Abstract class has priority over interfaces.
7290
7291 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7292
7293         Another fix for bug #80749
7294         * pending.cs: Abstract class has priority over interfaces.
7295
7296 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7297
7298         * class.cs Better error message.
7299
7300         * driver.cs: Add shorter versions of -optimize option.
7301
7302 2007-02-13  Martin Baulig  <martin@ximian.com>
7303
7304         * class.cs (Constructor.Emit): Check the return value of
7305         ec.ResolveTopBlock() and return on error.
7306
7307 2007-02-13  Raja R Harinath  <rharinath@novell.com>
7308
7309         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
7310         message to fix error message regression.
7311
7312 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7313
7314         * delegate.cs: Delegate creation expression cannot be of Nullable type.
7315
7316 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7317
7318         A fix for bug #80749
7319         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
7320         its parent container.
7321
7322         * class.cs (DefineFieldInitializers): Each initializer can has different
7323         resolve context.
7324
7325         * const.cs: Updated.
7326
7327 2007-02-11  Miguel de Icaza  <miguel@novell.com>
7328
7329         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
7330         now all the heavy lifting to check that embedded statements or
7331         expressions have the right form is done in the ContextualReturn.
7332
7333         (ContextualReturn): New class.  
7334
7335         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
7336         method that can be invoked to report 201, so we do not replicate
7337         this everywhere.
7338
7339         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
7340         
7341         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
7342         treating tabs as spaces. 
7343
7344 2007-02-09  Marek Safar  <marek.safar@gmail.com>
7345
7346         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
7347         * assign.cs: Use full implicit conversion for right side check.
7348
7349 2007-02-09  Marek Safar  <marek.safar@gmail.com>
7350
7351         * statement.cs (Switch): Switch over boolean type is not standardized.
7352
7353 2007-02-08  Marek Safar  <marek.safar@gmail.com>
7354
7355         A fix for bug #80755
7356         * decl.cs (FindBaseEvent): Don't use method cache for events.
7357
7358 2007-02-07  Marek Safar  <marek.safar@gmail.com>
7359
7360         * cs-parser.jay: Better syntax error handling.
7361
7362         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
7363         instead of underlying type value.
7364
7365 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7366
7367         * driver.cs: Check define identifier before is registered.
7368
7369         * namespace.cs: Use existing error message.
7370
7371         * report.cs: New warning.
7372
7373 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7374
7375         A fix for bug #80742
7376         * expression.cs: Delegate Invoke method can be called directly.
7377
7378 2007-02-06  Marek Safar  <marek.safar@gmail.com>
7379
7380         A fix for bug #80676
7381         * class.cs (IsEntryPoint): The Main method can have params modifier.
7382
7383 2007-02-04  Miguel de Icaza  <miguel@novell.com>
7384
7385         * parameter.cs (Parameter, Parameters): Add Clone method.
7386
7387         * anonymous.cs (Compatible): Turn method into virtual method, so
7388         LambdaExpression can implement a different behavior.
7389
7390         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
7391         out the basic checking here, so it can be used by
7392         LambdaExpressions.
7393         
7394         * lambda.cs: Introduce "Compatible" function that will do the
7395         heavy lifting.
7396
7397 2007-02-02  Marek Safar  <marek.safar@gmail.com>
7398
7399         * attribute.cs: Unified one error message.
7400
7401         * class.cs (Class): Use type attributes and not properties to test static
7402         class.
7403         (IsEntryPoint): Don's pass local variable.
7404
7405         * convert.cs: Removed duplicate check.
7406
7407         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
7408
7409         * driver.cs: Don't crash when soft reference does not exist.
7410
7411         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
7412         (UsingEntry): Removed redundant allocation.
7413
7414         * parameter.cs: Add fast path for type parameters.
7415
7416         * support.cs: Don't allocate attribute when it's not used.
7417
7418 2007-01-30  Miguel de Icaza  <miguel@novell.com>
7419
7420         * anonymous.cs
7421         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
7422         this into a virtual method, so we can override it in LambdaExpression.
7423
7424         * driver.cs: Improve diagnostics in case of failure. 
7425
7426         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
7427         write a function that is slightly more complex and that parses:
7428
7429         type identifier [, type identifier]* )
7430
7431         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
7432         this expression:
7433
7434                 (canEmpty ? i >= 0 : i > 0)
7435
7436 2007-01-30  Raja R Harinath  <rharinath@novell.com>
7437
7438         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
7439         exception on possibly valid code.
7440
7441 2007-01-29  Raja R Harinath  <rharinath@novell.com>
7442
7443         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
7444         Push/PopPosition.
7445         (parse_opt_type_arguments): Remove.  It's almost the same as
7446         parse_less_than.
7447         (parse_namespace_or_typename): Use parse_less_than.
7448
7449 2007-01-28  Miguel de Icaza  <miguel@novell.com>
7450
7451         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
7452         this bug took a few hours to find, because the state saved and
7453         restored by PushPosition and PopPosition was ignoring the state of
7454         parse_generic_less_than.
7455
7456         I can also now remove the handling of OP_LT and OP_GT, this solves
7457         the big mistery.
7458         
7459         * cs-tokenizer.cs: store the location for the ARROW token, we use
7460         that in the parser.
7461
7462         (PushPosition, PopPosition): save/restore also `current_token',
7463         restore `parse_generic_less_than' (was missing).
7464
7465         (parse_opt_type_arguments): use parse_type, not
7466         parse_namespace_or_typename to parse types.
7467
7468         * lambda.cs: Empty new file, will eventually have the lambda
7469         expression implementation.
7470
7471         * lambda.test: used to test the internal tokenizer. 
7472
7473         * report.cs (FeatureIsNotISO1): Rename from
7474         FeatureIsNotStandardized, because it was about the language level
7475         (1 vs 2) it was not about standarization.
7476
7477         (FeatureRequiresLINQ): New.
7478
7479         * support.cs (SeekableStreamReader): Only require that the reader
7480         is a TextReader, not a StreamReader, so we can plug StringReader. 
7481
7482         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
7483         given position in the input stream the following tokens can be
7484         parsed as a type followed by an identifier.
7485
7486         (is_punct): after a '(' if parse_type_and_parameter returns true,
7487         then return a special token OPEN_PARENS_LAMBDA which is used to
7488         avoid reduce/reduce errors in the grammar for the
7489         lambda_expression rules.
7490
7491         (parse_type): implement a type parser inside the
7492         tokenizer, the parser only returns true or false depending on
7493         whether the input at a given position can be parsed as a type.
7494
7495         (peek_token): new method used during type parsing.
7496
7497 2007-01-28  Raja R Harinath  <rharinath@novell.com>
7498
7499         Fix #80531
7500         * anonymous.cs (ScopeInfo.InflateParameters): New.
7501         (AnonymousContainer.Resolve): Use it to redirect types of
7502         delegate parameters.
7503
7504 2007-01-27  Raja R Harinath  <rharinath@novell.com>
7505
7506         Fix #80530
7507         * expression.cs (Error_InvalidArguments): Don't use two different
7508         messages for CS1503.  Use ExtraInformation and
7509         SymbolRelatedToPreviousError instead.
7510
7511         Fix #80358
7512         * decl.cs (DeclSpace.initialize_type_params): Don't access
7513         'type_params' of a partial class directly.
7514
7515 2007-01-26  Miguel de Icaza  <miguel@novell.com>
7516
7517         * constant.cs: Removed a handful of out-of-range checks that were
7518         not necessary. 
7519
7520 2007-01-25  Marek Safar  <marek.safar@gmail.com>
7521
7522         * expression.cs (CheckUselessComparison): Add additional check for char
7523         constants.
7524
7525         * namespace.cs: Fixed typo.
7526
7527 2007-01-23  Miguel de Icaza  <miguel@novell.com>
7528
7529         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
7530         gone, instead we inline the test, preventing the needless casts to
7531         longs, ulongs and doubles for the parameters, avoiding calls to
7532         methods that overchecked stuff, and instead inlined things
7533         nicely. 
7534
7535 2007-01-20  Marek Safar  <marek.safar@gmail.com>
7536
7537         * cs-parser.jay: Better parameter error handling.
7538
7539 2007-01-17  Marek Safar  <marek.safar@gmail.com>
7540
7541         A fix for bug #80368, #80522
7542         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
7543         whether array initializer contains constants only.
7544         (ArrayCreation.Emit): Use better formula to decide when
7545         are array initializers for static initialization.
7546         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
7547         have to emit even constants otherwise they are pre-initialized.
7548
7549 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
7550             Raja R Harinath  <rharinath@novell.com>
7551
7552         Fix emit order of 'get' vs. 'set'.
7553         * support.cs (Accessors): New.
7554         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
7555         Note the order in which accessors are declared in the source.
7556         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
7557         Refactored from Property.Define and Indexer.Define.
7558         (PropertyBase.DefineAccessors): New helper that calls the above in
7559         appropriate order as noted by the parser.
7560         (Property.Define, Indexer.Define): Update to changes.
7561         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
7562
7563 2007-01-17  Raja R Harinath  <rharinath@novell.com>
7564
7565         Fix cs0029-6.cs and gcs0029-2.cs (regression)
7566         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
7567         there's an implicit conversion from the current type to the target
7568         type before converting the underlying constant.
7569
7570 2007-01-16  Marek Safar  <marek.safar@gmail.com>
7571
7572         * const.cs (ResolveValue): Updated after constant conversion was made more
7573         generic.
7574
7575         * constant.cs (GetAttributableValue): constant to object conversion is
7576         used for attributes only.
7577         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
7578         constant conversions.
7579         (LongConstant.ConvertImplicitly): Ditto.
7580
7581         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
7582         (ImplicitConversionStandard): Handle constant conversion as extra step.
7583         It solves the issue when constant conversion was called indirectly like
7584         inside array initializer and constant folding was skipped.
7585
7586         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
7587         this change.
7588
7589         * statement.cs(ImplicitConversionStandard): Updated after constant
7590         conversion was made more generic.
7591
7592 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
7593
7594         * expression.cs (As.DoResolve): Use GenericConstraints instead of
7595         Constraints, solves the problem where the compiler incorrectly
7596         reported that a type parameter was not constrained to a class (Bug
7597         80518)
7598
7599 2007-01-14  Marek Habersack  <grendello@gmail.com>
7600
7601         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
7602
7603 2007-01-14  Marek Safar  <marek.safar@gmail.com>
7604
7605         A fix for bug #80368
7606         * assign.cs (FieldInitializer): New class implements field
7607         initializer statement.
7608
7609         * attribute.cs: Update after FieldMember rename.
7610
7611         * class.cs (PropertyBasedMember): New common class for property based
7612         types.
7613         (InterfaceMemberBase): New base class for all members which can be used as
7614         an interface members.
7615         (MethodCore): Moved really common code to InterfaceMemberBase.
7616         (Method.Define): Equal and GetHasCode detection is relevant for methods
7617         only.
7618         (MethodData.Define): Don't assume that public event implements an
7619         interface automatically.
7620         (MethodData.DefineMethodBuilder): Issue an error even if only extern
7621         modifier is used.
7622         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
7623         (FieldMember): Merged with FieldBase.
7624         (EventProperty.AEventPropertyAccessor): New specialization to check whether
7625         event extern modifier can be used.
7626         (EventField.EventFieldAccessor): Moved event field specific code here.
7627         (Event.AllowedModifiers): Even event can be extern.
7628         (Event.FindOutBaseMethod): New override specific to events.
7629         (Indexer.parameters): Reintroduce parameters because base class holds
7630         only properties common data.
7631         (Indexer.CheckForDuplications): Indexers are threated as methods so we
7632         need do extra parameters check.
7633
7634         * const.cs: Update after FieldMember rename.
7635
7636         * decl.cs (MemberCache.FindBaseEvent): New method.
7637
7638         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
7639         to reflect that indexer is now derived from PropertyBased.
7640
7641         * ecore.cs (GetMemberType): Made public.
7642         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
7643         obsolete event.
7644
7645         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
7646         
7647         * typemanager.cs (CSharpSignature): Correctly print event accessors.
7648         (RegisterEvent): Removed.
7649         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
7650         (GetPrivateFieldOfEvent): Renamed to GetEventField.
7651
7652 2007-01-11  Raja R Harinath  <rharinath@novell.com>
7653
7654         Fix #80249
7655         * statement.cs (CollectionForeach.TryType): Prefer generic
7656         GetEnumerator over non-generic variant.  Fix code to follow comments.
7657
7658 2007-01-09  Raja R Harinath  <rharinath@novell.com>
7659
7660         Fix #80446
7661         * support.cs (ReflectionParameter): Don't use an invalid index on
7662         the generic parameter data.
7663
7664 2007-01-08  Miguel de Icaza  <miguel@novell.com>
7665
7666         * driver.cs: Just add a tiny bit of infrastructure.
7667
7668 2007-01-02  Marek Safar  <marek.safar@gmail.com>
7669
7670         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
7671         where field type is struct from current assembly.
7672         
7673         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
7674         it is possible.
7675
7676 2007-01-02  Marek Safar  <marek.safar@gmail.com>
7677
7678         A fix for bug #80381
7679         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
7680         the core types.
7681
7682         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
7683         messages.
7684         (Namespace.LookupType): Always use core types from corlib when speficied.
7685
7686         * report.cs: A new warning.
7687
7688         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
7689         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
7690         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
7691
7692         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
7693         (InitCoreTypes): Set expression type of object_type and value_type
7694         immediately after lookup.
7695
7696 2007-01-01  Miguel de Icaza  <miguel@novell.com>
7697
7698         * cs-tokenizer.cs: Accept Pc class characters (Connector
7699         Punctuation) as valid identifiers.  Fixes #78259
7700
7701         * expression.cs (Invocation.DoResolve): Moved the check for the
7702         use of `this' for doing method calls to the Invocation resolution
7703         step, after overload resolution has taken place instead of doing
7704         the check at the low-level `This.DoResolve' level.
7705
7706         The `This.DoResolve'(appens before overload resolution, so it has
7707         no way of knowing if the method that will be called will be
7708         instace or static, triggering an erroneous report for cs0188 (Bug
7709         78113).
7710
7711         We now do the check for instance method invocations after we know
7712         what method will be called.
7713
7714         (This.CheckThisUsage): Move the actual use of this structure
7715         checking into its own method and expose it. 
7716
7717         * Everywhere that called Error_ValueCannotBeConverted: pass a new
7718         EmitContext.
7719
7720         Exceptions: Null.ConvertImplicitly,
7721         Constant.ImplicitConversionRequired as there are too many call
7722         sites for passing the ec. 
7723
7724         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
7725         EmitContext, if the value is null, then we do not try to provide
7726         the extra information from the error (If a userdefined conversion
7727         exists, as UserDefinedConversion requires a non null-EmitContext).
7728
7729         Fixes: #80347
7730
7731 2006-12-30  Raja R Harinath  <rharinath@novell.com>
7732
7733         * flowanalysis.cs (MyBitVector): Document some invariants.
7734         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
7735         introduced below, and add a couple of others, 
7736
7737 2006-12-30  Marek Safar  <marek.safar@gmail.com>
7738
7739         * attribute.cs (GetMethodObsoleteAttribute): Uses new
7740         GetPropertyFromAccessor and GetEventFromAccessor.
7741         
7742         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
7743         overrides non-obsolete one.
7744         (Indexer.Define): Error message has been moved to the parser.
7745
7746         * cs-parser.jay: Better syntax errors handling.
7747
7748         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
7749         when an invocation has no arguments.
7750
7751         * ecore.cs: Removed not used caching.
7752
7753         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
7754         implementation.
7755
7756         * report.cs: Add a new warning.
7757
7758         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
7759
7760         * typemanager.cs (enumeration_type): Removed.
7761         (CSharpSignature): Reuses IsSpecialMethod.
7762         (IsEqual): Hack for MS BCL.
7763         (GetPropertyFromAccessor): New method.
7764         (GetEventFromAccessor): New method.
7765         (IsSpecialMethod): Fixed to handle more cases.
7766
7767 2006-12-30  Marek Safar  <marek.safar@gmail.com>
7768
7769         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
7770         Made white spaces array static.
7771
7772         * ecore.cs (RemoveGenericArity): Optimized.
7773
7774         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
7775         10 times faster).
7776         (MyBitVector.initialize_vector): Simplified.
7777
7778 2006-12-22  Miguel de Icaza  <miguel@novell.com>
7779
7780         * ecore.cs: Am not entirely happy with this hack, but it seems to
7781         address the issue in 80257 (a small test case for
7782         CreativeDocs.NET). 
7783
7784         I set the MethodGroupExpr.Type to an internal compiler type
7785         (itself in this case) to force the resolution to take place.   Why
7786         it does not take place with a null is beyond me.
7787
7788 2006-12-20  Marek Safar  <marek.safar@gmail.com>
7789
7790         A fix for bug #80288
7791         * expression.cs (ResolveOperator): Consider user defined conversion for
7792         logical and operator too.
7793         (EmitBranchable): Optimization for logical and when full constant folding
7794         could not be applied but one operand is constant.
7795
7796 2006-12-19  Marek Safar  <marek.safar@gmail.com>
7797
7798         * class.cs (GetClassBases): Write 5 times every day, will never use
7799         FullName for error reporting.
7800
7801         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
7802
7803 2006-12-19  Martin Baulig  <martin@ximian.com>
7804
7805         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
7806         the symbol file info here.
7807
7808 2006-12-18  Marek Safar  <marek.safar@gmail.com>
7809
7810         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
7811         of `elseif' is taking then following sections are not taking.
7812         Fixes an issue reported on mono mailing list.
7813
7814 2006-12-18  Marek Safar  <marek.safar@gmail.com>
7815
7816         A fix for bug #80300
7817         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
7818         a caller is not taking.
7819
7820 2006-12-18  Raja R Harinath  <rharinath@novell.com>
7821
7822         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
7823         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
7824         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
7825         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
7826         * class.cs: Update to changes.
7827
7828 2006-12-17  Marek Safar  <marek.safar@gmail.com>
7829
7830         A fix for bug #79934
7831         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
7832         partial container.
7833
7834         * class.cs (ResolveMembers): Register an iterator in current container and
7835         not in shared one.
7836
7837 2006-12-16  Raja R Harinath  <rharinath@novell.com>
7838
7839         Fix test-543.cs
7840         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
7841         satisfy a params annotated parameter.
7842
7843 2006-12-16  Marek Safar  <marek.safar@gmail.com>
7844
7845         A fix for bug #77014
7846         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
7847         paramters correctly and not rely on hacks in Parameters class.
7848         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
7849         at any possition.
7850         (Invocation.VerifyArgumentsCompat): Ditto.
7851         (Invocation.EmitArguments): Changed to correctly emit params arguments at
7852         any possition.
7853
7854         * parameter.cs (HasParams): Don't assume that params is the last one.
7855
7856         * support.cs (ReflectionParameters.ctor): Look for params attribute
7857         correctly.
7858         (ReflectionParameters.ParameterType): Removed hack when we returned last
7859         parameter for out of range parameters.
7860         (ParameterName, ParameterModifier): Ditto.
7861
7862 2006-12-14  Marek Safar  <marek.safar@gmail.com>
7863
7864         A fix for bug #79987
7865         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
7866         when assembly is not CLS compliant but type is. I have no idea why is this
7867         allowed.
7868
7869         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
7870
7871 2006-12-13  Miguel de Icaza  <miguel@novell.com>
7872
7873         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
7874         in struct constructors, they are basically no-ops.
7875
7876 2006-12-12  Marek Safar  <marek.safar@gmail.com>
7877
7878         * cs-tokenizer.cs (Position): Save preprocessor status too.
7879
7880 2006-12-12  Marek Safar  <marek.safar@gmail.com>
7881
7882         A fix for bug #77794
7883         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
7884
7885 2006-12-12  Marek Safar  <marek.safar@gmail.com>
7886
7887         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
7888         Fixes #69299.
7889         (pp_expr): Report error for an invalid expression.
7890         (handle_preprocessing_directive): Simplified; add more error checking.
7891
7892 2006-12-11  Marek Safar  <marek.safar@gmail.com>
7893
7894         A fix for bug #74939
7895         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
7896         directives handling.
7897
7898 2006-12-10  Marek Safar  <marek.safar@gmail.com>
7899
7900         A fix for bugs #80093, and #75984
7901         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
7902         logic, it seems to me as it worked before "by coincidence".
7903         (xtoken): Simplified to use reworked handle_preprocessing_directive.
7904         (cleanup): Enabled endif check.
7905
7906 2006-12-09  Marek Safar  <marek.safar@gmail.com>
7907
7908         A fix for bug #80162
7909         * statement.cs (CollectionForeach.TryType): Generics and non-generics
7910         enumerators are never ambiguous.
7911
7912 2006-12-08  Raja R Harinath  <rharinath@novell.com>
7913
7914         Fix #80060
7915         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
7916
7917 2006-12-06  Marek Safar  <marek.safar@gmail.com>
7918
7919         A fix for bug #80144
7920         * class.cs (EventProperty.Define): Explicit implementation means
7921         that an even is used.
7922
7923 2006-12-06  Marek Safar  <marek.safar@gmail.com>
7924
7925         Fixes the operators implementation (part II)
7926
7927         * cfold.cs (DoConstantNumericPromotions): Renamed to
7928         DoBinaryNumericPromotions and simplified.
7929         (BinaryFold): Couple of conversion fixes; simplified.
7930
7931         * constant.cs, ecore.cs, literal.cs
7932         (ToType): Renamed to ConvertImplicitly.
7933         (Reduce): Renamed to ConvertExplicitly.
7934
7935         * class.cs, convert.cs: Updated.
7936
7937         * expression.cs: TryReduce doesn't throw an exception.
7938
7939 2006-12-01  Marek Safar  <marek.safar@gmail.com>
7940
7941         A fix for bug #80108
7942         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
7943         compatible.
7944
7945 2006-11-30  Marek Safar  <marek.safar@gmail.com>
7946
7947         Fixes unary operators implementation (part I)
7948         Also fixes #80026
7949
7950         * cfold.cs (Error_CompileTimeOverflow): Made internal
7951
7952         * const.cs (IConstant): Changed to use reference to constant and
7953         not constant itself.
7954         Updated IConstant implementations.
7955
7956         * constant.cs (CreateConstant): New factory method.
7957         Updated IConstant implementation.
7958
7959         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
7960
7961         * ecore.cs: Updated to use CreateConstantReference.
7962
7963         * enum.cs: Reflects IConstant changes.
7964
7965         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
7966
7967         * literal.cs (NullConstant): Change to be independently usable.
7968
7969 2006-11-29  Martin Baulig  <martin@ximian.com>
7970
7971         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
7972         we need to emit the scope initializer before calling the base .ctor.
7973
7974         * anonymous.cs: Merged back from the new anonymous methods branch.
7975         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
7976
7977         * expression.cs (ParameterReference.DoResolveBase): Create a
7978         "normal" ScopeInfo when capturing parameters rather than using the
7979         root scope; this makes things work with anonymous methods having
7980         parameters.
7981
7982         * statement.cs
7983         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
7984
7985 2006-11-22  Marek Safar  <marek.safar@gmail.com>
7986
7987         A fix for bug #79987
7988         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
7989         check to a base class.
7990         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
7991         only when assembly has missing attribute.
7992         * report.cs: Update.
7993
7994 2006-11-21  Marek Safar  <marek.safar@gmail.com>
7995
7996         * cs-tokenizer.cs: Merged with gmcs version.
7997
7998 2006-11-20  Marek Safar  <marek.safar@gmail.com>
7999
8000         * cs-tokenizer.cs,
8001         * cs-parser.jay: Better error message when partial keyword is misplaced.
8002
8003 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8004
8005         A fix for bug #79810
8006         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8007         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8008         a RuntimeWrappedException by default.
8009
8010 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8011
8012         A fix for bug #79843
8013         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8014         implementation.
8015         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8016
8017 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8018
8019         * driver.cs, namespace.cs: Uses faster IndexOf version.
8020
8021 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8022
8023         A fix for bug #79941
8024         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8025         operators.
8026         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8027         even if internal name is different.
8028         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8029         (UserDefinedConversion): Simplified as the operators cannot be internal.
8030         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8031         conversions.
8032         (MethodLookup): Replaced EmitContext with parentType.
8033         * expression.cs: Updated.
8034
8035 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8036
8037         * driver.cs (BadAssembly): Handle all the ugliness of
8038         DefineDynamicAssembly.
8039
8040 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8041
8042         Address parts of #58244 -- most of what's left is in the runtime
8043         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8044         CS1509 error checks, and handle them for all assembly loads, not
8045         just the first invocation.
8046         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8047         * codegen.cs (AssemblyClass.AddModule): ... here.
8048
8049 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8050
8051         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8052         IEnumerable<T> is ambiguous.
8053
8054 2006-10-31  Marek Safar  <marek.safar@gmail.com>
8055
8056         A fix for bug #67689
8057         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
8058         GetEnumerator is ambiguous.
8059
8060         * report.cs: Add new warning.
8061
8062 2006-10-29  Marek Safar  <marek.safar@gmail.com>
8063
8064         A fix for bug #78602
8065         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8066         to protected member can be nested type.
8067
8068 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8069
8070         A fix for bug #78965
8071         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8072         to protected member must derive from current type.
8073
8074 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8075
8076         assign.cs: Reuses error method.
8077
8078         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
8079         instead of type for constants.
8080         (Expression.Error_ValueAssignment): Common error method.
8081
8082         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
8083         for any assignment.
8084
8085 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8086
8087         A fix for bug #79081
8088         * expression.cs (MemberAccess.DoResolve): Check nested type
8089         accessibility.
8090
8091 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
8092
8093         * doc.cs : nested delegates were not handled. Fixed bug #79754.
8094
8095 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8096
8097         A fix for bug #76591
8098         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
8099
8100 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8101
8102         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
8103         type forwarder of the same type multiple times.
8104
8105 2006-10-26  Raja R Harinath  <rharinath@novell.com>
8106
8107         Fix #78820
8108         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
8109         instance as an rvalue, even when we later resolve as an lvalue.
8110
8111 2006-10-25  Martin Baulig  <martin@ximian.com>
8112
8113         * anonymous.cs: Fix #79673.
8114
8115 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
8116
8117         A fix for bug #79666
8118         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
8119         ignored when is optimized (= default value) as its value is already set.
8120
8121 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8122
8123         A fix for bug #79724
8124         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
8125         TypeContainer for type lookup.
8126
8127 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8128
8129         A fix for bug #79231
8130         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
8131         * expression.cs (OverloadResolve): Always convert type name for
8132         an error message.
8133         (ResolveNamespaceOrType): Don't confuse a nested type with any 
8134         other member.
8135
8136 2006-10-18  Martin Baulig <martin@ximian.com>
8137
8138         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
8139
8140 2006-10-17  Miguel de Icaza  <miguel@novell.com>
8141
8142         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
8143         an int32, but requesting an int64 from the conversion
8144
8145 2006-10-12  Martin Baulig  <martin@ximian.com>
8146
8147         * anonymous.cs
8148         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
8149         
8150 2006-10-12  Martin Baulig  <martin@ximian.com>
8151
8152         * statement.cs
8153         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
8154
8155 2006-10-11  Miguel de Icaza  <miguel@novell.com>
8156
8157         * convert.cs: Remove broken code: I was doing the "Existance"
8158         tests for Implicit conversions.
8159
8160 2006-10-10  Miguel de Icaza  <miguel@novell.com>
8161
8162         * convert.cs: Added one missing case in
8163         ImplicitStandardConversionExists uint64 to intptr.
8164
8165         Fixes #59800
8166         
8167         * typemanager.cs (uintptr_type): another core known type.   
8168
8169         * ecore.cs (OperatorCast): routine used to do cast operations that
8170         depend on op_Explicit.  We could change some of the Decimal
8171         conversions to use this.
8172
8173         This one has a probe mechanism that checks both types for an op_
8174         which it coudl be used to eliminate two classes: CastToDecimal
8175         and CastFromDecimal.
8176
8177         * convert.cs: Implement the conversions documented in #59800
8178         
8179 2006-10-10  Martin Baulig  <martin@ximian.com>
8180
8181         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
8182         before RootScope.ResolveMembers().
8183
8184         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
8185         `CurrentType' if appropriate.
8186
8187 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
8188
8189         A fix for bug #78568
8190         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
8191         when contains binary operators.
8192         * cs-parser.jay: Updated.
8193
8194 2006-10-09  Martin Baulig  <martin@ximian.com>
8195
8196         * delegate.cs
8197         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
8198         moved that into Define() and also do the other type parameter
8199         checks there.  Fixes #79094.  Added gtest-292.cs.
8200
8201         * expression.cs
8202         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
8203         since that doesn't include type parameters; don't use `Ldelema'
8204         for type parameters.  Fixes #78980.  Added gtest-293.cs.
8205
8206 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
8207
8208         A fix for #77796
8209         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
8210         conversion is allowed.
8211
8212 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8213
8214         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
8215         error reporting when no error occurs.
8216
8217 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8218
8219         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
8220         does not exist.
8221
8222 2006-10-06  Raja R Harinath  <rharinath@novell.com>
8223
8224         Fix #79584
8225         * class.cs (DefineTypeBuilder): Check circular dependencies before
8226         setting the parent of the TypeBuilder.
8227         (CheckRecursiveDefinition): Don't use 'BaseType', since
8228         it may not be valid until after DefineTypeBuilder.  Use
8229         'base_type' instead.
8230
8231 2006-10-04  Martin Baulig  <martin@ximian.com>
8232
8233         Merged the Anonymous Methods patch.
8234
8235         * anonymous.cs, iterators.cs: The new anonymous methods code.
8236
8237         * statement.cs (Variable): New public abstract class.
8238         (LocalInfo.Variable): New public property.
8239         (LocalInfo.ResolveVariable): New public method.
8240         (Block.Flags): Add `IsIterator'.
8241         (Block.AddVariable): Improved the CS0136 check.
8242         (Block.AnonymousChildren): New public property.
8243         (Block.AddAnonymousChild): New public method.
8244         (ToplevelBlock): Update to use the new anonymous method framework.
8245         (ToplevelBlock.ctor): `container' is now a `Block' and not a
8246         `ToplevelBlock'; this is required to correctly implement the
8247         CS0136 check.
8248         (Fixed, Using): Use `TemporaryVariable' instead of directly
8249         creating the `LocalBuilder'.
8250
8251         * parameter.cs (Parameter.ResolveVariable): New public method.
8252         (Parameters.ResolveVariable): Likewise.
8253
8254         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
8255
8256         * class.cs (TypeContainer): Replaced the `iterators' list and
8257         corresponding methods with a list of `CompilerGeneratedClass'es.
8258         (TypeContainer.ResolveMembers): New public method.
8259         (Method): `IIteratorContainer' has been replaced by
8260         `IAnonymousHost'.
8261
8262         * expression.cs (VariableReference): New public abstract base
8263         class for `LocalVariableReference', `ParameterReference' and
8264         `This'.
8265
8266         * codegen.cs (EmitContext): Removed `capture_context',
8267         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
8268         (EmitContext.EmitThis): Removed.
8269
8270         * cs-parser.jay: Replace `iterator_container' with
8271         `anonymous_host'.       
8272
8273 2006-10-04  Martin Baulig  <martin@ximian.com>
8274
8275         * generic.cs (GenericMethod): Don't make this abstract.
8276         (Constraints.Clone): Added dummy implementation.
8277
8278 2006-10-04  Raja R Harinath  <harinath@gmail.com>
8279
8280         Fix #79577
8281         * namespace.cs (LookForAnyGenericType): Avoid nullref on
8282         'declspaces'.  Avoid allocating arrays willy-nilly.
8283
8284         Fix #79553
8285         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
8286         cases out of the switch.
8287
8288 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8289
8290         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
8291         message when non-generic type is used with the type arguments.
8292         * expression.cs: Updated.
8293
8294 2006-09-28  Raja R Harinath  <rharinath@novell.com>
8295
8296         Fix #79013
8297         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
8298         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8299         Change semantics slightly.  Don't insist on having only one
8300         temporary EmptyExpression -- just throttle the creation of new ones.
8301
8302         Fix #79451
8303         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
8304         non-interfaces too.  If no methods are found, don't try to create
8305         a MethodGroupExpr.
8306
8307 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8308
8309         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
8310         generic type.
8311
8312         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
8313         us produce better error message.
8314
8315 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
8316
8317         * expression.cs (Binary.ResolveOperator): Warn about a side effect
8318         of the `|' operator.
8319
8320         * report.cs: A new warning added.
8321
8322 2006-09-27  Martin Baulig  <martin@ximian.com>
8323
8324         * generic.cs (GenericMethod): Don't make this abstract.
8325
8326 2006-09-27  Martin Baulig  <martin@ximian.com>
8327
8328         * report.cs
8329         (InternalErrorException): Added overloaded ctor taking a params array.
8330
8331 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
8332
8333         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
8334         Fixed the cases when same error was reported twice.
8335
8336         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
8337         now report symbol information.
8338
8339 2006-09-25  Martin Baulig  <martin@ximian.com>
8340
8341         * class.cs: Completely unified with the gmcs version.
8342
8343 2006-09-25  Martin Baulig  <martin@ximian.com>
8344
8345         * typemanager.cs (TypeManager.IsNullableType): New public function.
8346         (TypeManager.IsNullableTypeOf): Likewise.
8347         (TypeManager.IsNullableValueType): Likewise.
8348
8349         * class.cs (MethodCore): Added the `GenericMethod' argument from
8350         gmcs and also unified all classes derived from `MethodCore' with gmcs.
8351
8352 2006-09-24  Raja R Harinath  <harinath@gmail.com>
8353
8354         * convert.cs: Unify with gmcs version.
8355
8356 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8357
8358         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
8359         verify them as well.
8360
8361         * report.cs: New warning.
8362
8363 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8364
8365         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
8366         for anonymous block with out argument.
8367
8368 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
8369
8370         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
8371         not used private events only.
8372
8373 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
8374
8375         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
8376
8377         * const.cs (Const.Define): Check for constant type.
8378         (Const.IsConstantTypeValid): Looks for valid constant types.
8379
8380         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
8381
8382         * ecore.cs (EmptyConstantCast): New common class for all constant based
8383         EmptyCast(s).
8384
8385         * expression.cs (Is.DoResolve): Handle null constant especially.
8386         (New.DoResolve): Check for new void().
8387         (MemberAccess.DoResolve): Cope with all kind of nulls.
8388
8389         * literal.cs (NullConstant): Uses EmptyConstantCast.
8390         (NullDefault): Based on EmptyConstantCast.
8391         (NullLiteral): Uses EmptyConstantCast.
8392
8393         * statement.cs (Block.ResolveMeta): Check for constant type.
8394
8395 2006-09-22  Martin Baulig  <martin@ximian.com>
8396
8397         * delegate.cs, attribute.cs: Merged with the gmcs versions.
8398
8399 2006-09-22  Raja R Harinath  <rharinath@novell.com>
8400
8401         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
8402         not the null type.
8403
8404         Fix part of #79451
8405         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
8406         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
8407         code slightly.
8408
8409 2006-09-22  Martin Baulig  <martin@ximian.com>
8410
8411         * ecore.cs: Merged with the gmcs version.
8412
8413         * generic.cs (ConstructedType): New dummy class.
8414         (TypeArguments): Don't make this abstract.
8415
8416         * typemanager.cs
8417         (TypeManager.IsGenericTypeDefinition): New method.
8418         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
8419
8420 2006-09-22  Raja R Harinath  <rharinath@novell.com>
8421
8422         * expression.cs (ComposedCast): Check for arrays of TypedReference
8423         before creating the type, not after.
8424
8425 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
8426
8427         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
8428         after ToType change.
8429
8430         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
8431         when constant must be implicitly convertible.
8432
8433         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
8434
8435         * ecore.cs (NullCast): Derives from NullConstant.
8436
8437         * expression.cs (Is.DoResolve): Removed useless variables.
8438         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
8439         (New.Constantify): Add enum support.
8440         (MemberAccess.DoResolve): Add warning when accessing null constant or
8441         variable.
8442
8443         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
8444         property.
8445
8446         * literal.cs (NullConstant): New abstract class with common
8447         functionality for all null specializations.
8448         (NullDefault): Represents default(X) when result can be
8449         reduced to null.
8450         (NullLiteral): Updated.
8451
8452         * report.cs: Add new warning.
8453
8454 2006-09-21  Martin Baulig  <martin@ximian.com>
8455
8456         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
8457
8458 2006-09-21  Martin Baulig  <martin@ximian.com>
8459
8460         * generic.cs (GenericConstraints): New dummy class.
8461         (Constraints): Likewise.
8462         (TypeParameter): Likewise.
8463         (TypeParameterName): Likewise.
8464         (GenericMethod): Likewise.
8465
8466         * typemanager.cs (TypeManager.GetGenericArguments): New method.
8467
8468         * decl.cs: Merged with the gmcs version.
8469
8470 2006-09-21  Raja R Harinath  <rharinath@novell.com>
8471
8472         * generic.cs (TypeParameter): Implement IMemberContainer.
8473         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
8474
8475         * rootcontext.cs: Unify with gmcs version.
8476
8477         * report.cs: Unify with gmcs version.
8478         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
8479         from gmcs/generics.cs.
8480         * generics.cs (TypeParameter): New dummy class.
8481
8482         * support.cs: Unify with gmcs version.
8483
8484 2006-09-20  Raja R Harinath  <rharinath@novell.com>
8485
8486         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
8487         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
8488
8489         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
8490         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
8491         * mcs.exe.sources: Add generic.cs.
8492
8493         * codegen.cs: Unify with gmcs version.
8494
8495         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
8496         (EmitContext): Add GenericDeclContainer implementation.
8497         * decl.cs (MemberCore, DeclSpace): Likewise.
8498         * namespace.cs: Remove #ifdef GMCS_SOURCE.
8499
8500         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
8501         MCS TypeManager has a corresponding dummy method.
8502
8503 2006-09-19  Martin Baulig  <martin@ximian.com>
8504
8505         * expression.cs: Completely merged with the gmcs version.
8506
8507 2006-09-19  Martin Baulig  <martin@ximian.com>
8508
8509         * expression.cs (Invocation): Merged with the gmcs version.
8510         (ArrayAccess.GetStoreOpcode): Likewise.
8511
8512 2006-09-19  Martin Baulig  <martin@ximian.com>
8513
8514         * typemanager.cs
8515         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
8516         (TypeManager.IsGenericMethodDefinition): Likewise.
8517
8518 2006-09-19  Martin Baulig  <martin@ximian.com>
8519
8520         * typemanager.cs
8521         (TypeManager.IsEqual): Moved the gmcs implementation here.
8522         (TypeManager.DropGenericTypeArguments): Likewise.
8523         (TypeManager.DropGenericMethodArguments): Likewise.
8524         (TypeManager.GetTypeArguments): Moved here from gmcs.
8525         (TypeManager.HasGenericArguments): Likewise.
8526
8527 2006-09-19  Martin Baulig  <martin@ximian.com>
8528
8529         * expression.cs (Binary): Merged with the gmcs version.
8530
8531 2006-09-19  Martin Baulig  <martin@ximian.com>
8532
8533         * expression.cs (Probe, As, Is): Merged with the gmcs version.
8534
8535 2006-09-19  Martin Baulig  <martin@ximian.com>
8536
8537         * typemanager.cs: Merged with the gmcs version.
8538
8539 2006-09-16  Raja R Harinath  <rharinath@novell.com>
8540
8541         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
8542         * driver.cs: Likewise.
8543
8544 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
8545
8546         A fix for #79401
8547         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
8548         only if parent type is class.
8549         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
8550         update.
8551
8552 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
8553
8554         * cs-parser.jay,
8555         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
8556         keywords are used.
8557         * typemanager.cs(CSharpName): Converts NullType to null.
8558
8559 2006-09-15  Martin Baulig  <martin@ximian.com>
8560
8561         * typemanager.cs
8562         (TypeManager.GetMethodName): Added mcs implementation.
8563         (TypeManager.IsEqual): Likewise.
8564
8565         * ecore.cs
8566         (SimpleName.RemoveGenericArity): Added dummy implementation.
8567
8568         * pending.cs: Merged with the gmcs version.     
8569
8570 2006-09-15  Martin Baulig  <martin@ximian.com>
8571
8572         * statement.cs: Merge with the gmcs version.
8573
8574 2006-09-15  Martin Baulig  <martin@ximian.com>
8575
8576         * statement.cs (Switch): Merge with the gmcs implementation
8577         (without nullables), which is newer.
8578
8579 2006-09-15  Martin Baulig  <martin@ximian.com>
8580
8581         * statement.cs (Block.Variables): Make this public.
8582         (ToplevelBlock.Parameters): Make this a property.
8583         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
8584
8585 2006-09-15  Martin Baulig  <martin@ximian.com>
8586
8587         * namespace.cs: Merge with the gmcs version.
8588
8589 2006-09-15  Martin Baulig  <martin@ximian.com>
8590
8591         * decl.cs (MemberName): Minor code cleanups.
8592
8593 2006-09-15  Martin Baulig  <martin@ximian.com>
8594
8595         * parameter.cs: Merge with the gmcs version.
8596
8597 2006-09-15  Martin Baulig  <martin@ximian.com>
8598
8599         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
8600         and an error in mcs.
8601
8602 2006-09-15  Martin Baulig  <martin@ximian.com>
8603
8604         * flowanalysis.cs: Merged from GMCS; added the generics code into
8605         a `GMCS_SOURCE' conditional so we can share this file.
8606
8607 2006-09-08  Martin Baulig  <martin@ximian.com>
8608
8609         * typemanager.cs (TypeManager.interlocked_type): New public field.
8610         (TypeManager.int_interlocked_compare-exchange): New public field.
8611         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
8612         enumerator types here and call InitGenericCoreTypes().
8613         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
8614         after calling InitEnumUnderlyingTypes().
8615
8616         * rootcontext.cs
8617         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
8618         `classes_second_stage'. 
8619
8620 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
8621
8622         * assign.cs, ecore.cs, expression.cs: Share error message text.
8623         * class.cs (FieldMember.Define): Check for varible of static type.
8624         * driver.cs (LoadAssembly): Uses error output for errors.
8625         * statement.cs: Updated.
8626
8627 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
8628
8629         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
8630         type instance.
8631
8632 2006-09-07  Martin Baulig  <martin@ximian.com>
8633
8634         * driver.cs
8635         (MainDriver): Revert r62663 from Marek; see #70506 for details.
8636
8637 2006-08-29  Miguel de Icaza  <miguel@novell.com>
8638
8639         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
8640         
8641 2006-08-17  Miguel de Icaza  <miguel@novell.com>
8642
8643         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
8644         #52019 and #79064, the use of the \uXXXX sequence in source code
8645         to represent unicode characters.
8646
8647 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
8648
8649         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
8650         support.
8651         * class.cs, ecore.cs, statement.cs: Merged to one error message.
8652
8653 2006-08-13  Miguel de Icaza  <miguel@novell.com>
8654
8655         * assign.cs: Catch attempts to assign to a method groups in += and
8656         report as 1656
8657
8658 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
8659
8660         A fix for #79056
8661         * cs-parser.jay: Don't destroy current array type by typeof of array's.
8662
8663 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
8664
8665         * class.cs (Method.Define): Issue a warning when generic method looks like
8666         an entry point.
8667         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
8668         as well.
8669
8670 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
8671  
8672         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
8673         looking for ctor.
8674         * decl.cs (MemberCache.FindMembers): When container is interface we need to
8675         search all base interfaces as a member can be ambiguous.
8676         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
8677         Constructor member type filter. 
8678         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
8679         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
8680         reporting for returned memberinfos.
8681         * report.cs: Updated.
8682         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
8683         version to work on all runtimes.
8684         (TypeManager.RealMemberLookup): Removed members filtering.
8685
8686 2006-08-08  Raja R Harinath  <rharinath@novell.com>
8687
8688         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
8689         (PropertyExpr.EmitAssign): Likewise.
8690         * expression.cs (Indirection.EmitAssign): Likewise.
8691         (LocalVariableReference.EmitAssign): Likewise.
8692         (ParameterReference.EmitAssign): Likewise.
8693         (Invocation.EmitArguments): Likewise.
8694         (ArrayAccess.EmitAssign): Likewise.
8695         (IndexerAccess.EmitAssign): Likewise.
8696         (This.EmitAssign): Likewise.
8697         (ConditionalLogicalOperator.Emit): Likewise.
8698
8699         Fix #79026
8700         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
8701         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
8702         leave it in after returning it.
8703         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
8704
8705 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
8706
8707         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
8708         message.
8709
8710 2006-08-03  Raja R Harinath  <rharinath@novell.com>
8711
8712         Fix cs0146-3.cs and cs0146-4.cs.
8713         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
8714         enclosing types don't depend on the current type.
8715
8716 2006-08-02  Raja R Harinath  <rharinath@novell.com>
8717
8718         Fix #77963
8719         * class.cs (TypeContainer.DoDefineMembers): Use
8720         FindBaseMemberWithSameName on Parent, since we're interested in
8721         whether we hide inherited members or not.
8722         (FindBaseMemberWithSameName): Make slightly more robust.
8723
8724         Fix the non-generic testcase from #77396
8725         * decl.cs (DeclSpace.DeclContainer): Remove override.
8726
8727         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
8728         declspaces for doppelgangers too.
8729         (UsingEntry): Implement IResolveContext.
8730         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
8731         'this' as the resolve context.
8732         (LocalAliasEntry): Likewise.
8733
8734         Implement parts of #77403
8735         * roottypes.cs (RootDeclSpace): New.  Used to represent the
8736         toplevel declaration space.  Each namespace declaration introduces
8737         a "partial" root declaretion space.
8738         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
8739         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
8740         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
8741         from 'current_namespace.SlaveDeclSpace'.
8742         (namespace_declaration): Likewise.
8743         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
8744         check.  It can't happen now.
8745         * decl.cs (DeclSpace.LookupType): Likewise.
8746         * driver.cs (MainDriver): Sanity check.
8747
8748 2006-08-01  Raja R Harinath  <rharinath@novell.com>
8749
8750         * decl.cs (DeclSpace.FindNestedType): Remove.
8751         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
8752         LookupTypeContainer to get the container of the nested type.
8753         * class.cs (TypeContainer.FindNestedType): Make non-override.
8754
8755 2006-07-31  Raja R Harinath  <rharinath@novell.com>
8756
8757         * decl.cs (DeclSpace.PartialContainer): Move field from ...
8758         * class.cs (TypeContainer.PartialContainer): ... here.
8759         (TypeContainer.AddBasesForPart): New helper.
8760         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
8761         instead.
8762         * cs-parser.jay (current_class): Convert to DeclSpace.
8763         (struct_declaration, interface_declaration, class_declaration):
8764         Use AddBasesForPart instead of .Bases directly.
8765         * const.cs, iterators.cs: Update to changes.
8766
8767 2006-07-28  Raja R Harinath  <rharinath@novell.com>
8768
8769         * class.cs (TypeContainer.AddMemberType): Rename from
8770         AddToTypeContainer.
8771         (TypeContainer.AddMember): Rename from AddToMemberContainer.
8772         (AddTypeContainer): New.  Combine AddClassOrStruct and
8773         AddInterface.
8774         (AddPartial): Update.  Add 'is_partial' argument.
8775         * roottypes.cs: Update to changes.
8776         * cs-parser.jay (push_current_class): New helper for handling
8777         current_container and current_class.
8778         (struct_declaration, interface_declaration, class_declaration):
8779         Use it.
8780
8781 2006-07-26  Raja R Harinath  <rharinath@novell.com>
8782
8783         * roottypes.cs: Rename from tree.cs.
8784
8785         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
8786         * tree.cs (Tree, ITreeDump): Remove types.
8787         * rootcontext.cs (tree, Tree): Remove fields.
8788         (root, ToplevelTypes): New.
8789         * *.cs: Update to rename.
8790
8791         * tree.cs (Tree.RecordDecl): Remove.
8792         (RootTypes.AddToTypeContainer): Record the toplevel type in its
8793         namespace here.
8794         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
8795
8796 2006-07-23  Raja R Harinath  <harinath@gmail.com>
8797
8798         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
8799         DoFlowAnalysis and OmitStructFlowAnalysis here.
8800         (ec.With): Rename from WithUnsafe and generalize.
8801         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
8802         (ec.WithFlowAnalyis): New.
8803         * ecore.cs, expression.cs, statement.cs: Update.
8804
8805 2006-07-22  Raja R Harinath  <harinath@gmail.com>
8806
8807         * statement.cs (Block.ResolveMeta): Simplify slightly.
8808
8809         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
8810         multiple boolean fields.  Convert InUnsafe, constant_check_state,
8811         check_state to flags.
8812         (CheckState, ConstantCheckState): Update.
8813         (InUnsafe): New read-only property.
8814         (FlagsHandle): Rename from CheckStateHandle and convert to handle
8815         arbitrary flags.
8816         (WithUnsafe): New helper similar to WithCheckState.
8817         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
8818         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
8819
8820 2006-07-21  Raja R Harinath  <rharinath@novell.com>
8821
8822         Make comparisons use the same IL irrespective of whether they're
8823         in a 'checked' or 'unchecked' context: one of the issues in #78899
8824         * codegen.cs (EmitContext.CheckState): Make read-only property.
8825         (EmitContext.ConstantCheckState): Likewise.
8826         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
8827         helper that implement a save/restore stack for CheckState
8828         values.  This is the only way to change check-state.
8829         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
8830         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
8831         (CheckedExpr.EmitBranchable): New forwarding method.
8832         (UnCheckedExpr): Likewise.
8833         * statement.cs (Block.ResolveMeta): Use WithCheckState.
8834         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
8835         (Checked.Resolve, checked.DoEmit): Likewise.
8836
8837 2006-07-20  Miguel de Icaza  <miguel@novell.com>
8838
8839         * anonymous.cs: Cache the resolved anonymous delegate, and return
8840         this so that the ResolveTopBlock is only triggered once, not
8841         twice.
8842
8843         Currently we trigger ResolvetopBlock twice due to a first pass of
8844         argument check compatibility, and a second pass that does the
8845         actual resolution.   
8846         
8847 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
8848
8849         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
8850         modifiers.
8851         * rootcontext.cs (Reset): Add helper_classes.
8852
8853 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
8854
8855         A fix for #78860
8856         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
8857         correctly.
8858
8859 2006-07-13  Miguel de Icaza  <miguel@novell.com>
8860
8861         * statement.cs (Lock): Handle expressions of type
8862         TypeManager.null_type specially.  Fixes #78770
8863
8864 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
8865
8866         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
8867         to an event.
8868
8869 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
8870
8871         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
8872         for accessors as well.
8873         * ecore.cs (EventExpr): Add AccessorTable.
8874
8875 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
8876
8877         A fix for #78738
8878         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
8879         for CS0122 where appropriate.
8880         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
8881         level attributes.
8882         (Filter): Assembly can be null in the case of top level attributes.
8883
8884 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
8885
8886         A fix for #78690
8887
8888         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
8889         is done at global level.
8890
8891 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
8892
8893         A fix for #77002, Implemented TypeForwarder support.
8894
8895         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
8896         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
8897         * typemanager.cs (): Add type_forwarder_attr_type.
8898
8899 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
8900
8901         * report.cs: Add CS0469 warning.
8902
8903 2006-06-21  Martin Baulig  <martin@ximian.com>
8904
8905         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
8906         the `try'-block, so we also report CS0016 etc. there.
8907
8908 2006-06-21  Martin Baulig  <martin@ximian.com>
8909
8910         * delegate.cs
8911         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
8912
8913 2006-06-21  Martin Baulig  <martin@ximian.com>
8914
8915         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
8916         also report CS1686 for parameters.
8917
8918 2006-06-21  Martin Baulig  <martin@ximian.com>
8919
8920         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
8921         instead of an error if the value is not implicitly convertible to
8922         the switch types; fixes #77964.
8923
8924 2006-06-21  Raja R Harinath  <rharinath@novell.com>
8925
8926         Fix #78673
8927         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
8928         FieldBuilder is null.
8929
8930         Fix #78662
8931         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
8932         'left' and 'right' before error-checking.
8933
8934 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
8935
8936         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
8937         Fixed bug #78601.
8938         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
8939         (FieldExpr.DoResolve): likewise.
8940         (PropertyExpr.InstanceResolve): likewise.
8941         (EventExpr.InstanceResolve): likewise. 
8942
8943 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
8944
8945         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
8946         attribute applicable tests for attribute argument.
8947
8948 2006-06-02  Raja R Harinath  <rharinath@novell.com>
8949
8950         Fix #78079
8951         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
8952         (Binary.OverloadResolve_PredefinedIntegral): New.
8953         (Binary.OverloadResolve_PredefinedFloating): New.
8954         (Binary.OverloadResolve_PredefinedString): New.
8955         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
8956         Follow the standard more closely, and treat numeric promotions in
8957         terms of overload resolution.
8958         (Binary.CheckShiftArguments): Simplify.
8959
8960 2006-06-01  Raja R Harinath  <rharinath@novell.com>
8961
8962         * flowanalysis.cs (MyBitVector): Simplify representation.
8963         (MyBitVector.Clone): Avoid allocating BitArray.
8964         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
8965         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
8966         (*): Update.  Change all references to MyBitVector.And and
8967         MyBitVector.Or to &= and |=.
8968
8969 2006-05-29  Raja R Harinath  <rharinath@novell.com>
8970
8971         Fix cs0231-[34].cs.
8972         * cs-parser.jay (formal_parameter_list): Extend the pattern below
8973         to param arguments too.
8974
8975 2006-05-26  Miguel de Icaza  <miguel@novell.com>
8976
8977         * cs-parser.jay: Catch another parsing form for arglist being
8978         followed by other arguments.  Fixes #78313.
8979
8980 2006-05-24  Raja R Harinath  <rharinath@novell.com>
8981
8982         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
8983         checking of out parameters to ...
8984         (FlowBranchingToplevel.Merge): ... here.
8985         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
8986         set, propagate the origin upward, and only complain if there was
8987         no other error.
8988         (FlowBranchingException.AddContinueOrigin): Likewise.
8989         (FlowBranchingException.AddReturnOrigin): Likewise.
8990         (FlowBranchingException.AddGotoOrigin): Likewise.       
8991
8992 2006-05-23  Raja R Harinath  <rharinath@novell.com>
8993
8994         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
8995         unreachable, skip it.
8996         (FlowBranchingException.Merge): Always propagate jumps, even if
8997         the finally block renders subsequent code unreachable.
8998
8999 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9000
9001         Fix #77601
9002         * statement.cs (Goto.Resolve): Move responsibility for resolving
9003         'goto' to FlowBranching.AddGotoOrigin.
9004         (Goto.SetResolvedTarget): New.  Callback to set the
9005         LabeledStatement that's the target of the goto.
9006         (Goto.DoEmit): Use Leave instead of Br when crossing an
9007         unwind-protect boundary.
9008         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9009         LookupLabel and adjust to new semantics.
9010         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9011         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9012         Goto.SetResolvedTarget to update target.
9013         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9014         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9015         AddBreakOrigin & co.  Delay propagation until ...
9016         (FlowBranchingException.Merge): ... this.
9017
9018         * statement.cs (Block.Resolve): Always depend on flow-branching to
9019         determine unreachability.  Kill workaround that originally emitted
9020         only one statement after an "unreachable" label (see infloop in
9021         test-515.cs).
9022
9023         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9024         This is still "wrong", but anything better would probably need a
9025         multi-pass algorithm.
9026         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9027         usage vector.  Force current usage vector to be reachable, to
9028         optimistically signify backward jumps.
9029         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9030         detected.
9031         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9032         detected, return the original salted-away usage vector instead,
9033         updated with appropriate changes.  Print unreachable warning if
9034         necessary.
9035         * statement.cs (Block.Resolve): Don't print unreachable warning on
9036         a labeled statement.
9037
9038 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9039
9040         * driver.cs: Pass filename without path to AssemblyBuilder's 
9041         AddResourceFile. Fixes bug #78407.
9042
9043 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9044
9045         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9046         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9047         (FlowBranching.MergeChild): Overwrite
9048         reachability information from Labeled branchings too.
9049
9050 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9051
9052         * statement.cs (Goto.Resolve): Merge jump origins here ...
9053         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9054
9055         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
9056         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
9057         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
9058         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
9059         here, ...
9060         * statement.cs (Goto.Resolve): ... not here.
9061         (Goto.Emit): Remove CS1632 check.
9062
9063 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
9064
9065         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
9066         error message.
9067
9068 2006-05-11  Raja R Harinath  <rharinath@novell.com>
9069
9070         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
9071         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
9072         (FlowBranchingException.Label): Likewise.
9073
9074         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
9075         given value.
9076         (MyBitVector.Or): Use it to avoid losing information (Count).
9077         (FlowBranching.MergeOrigins): Likewise.
9078
9079         * flowanalysis.cs (UsageVector.IsDirty): Remove.
9080         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
9081         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
9082         (UsageVector.ToString): Simplify.
9083         (UsageVector.MergeSiblings): Move here from ...
9084         (FlowBranching.Merge): ... here.
9085         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
9086         not a MyBitVector.
9087
9088 2006-05-10  Raja R Harinath  <rharinath@novell.com>
9089
9090         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
9091         null bitvector is treated as all-true.
9092
9093         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
9094         (MyBitVector): Rationalize invariants.  'vector != null' implies
9095         that we have our own copy of the bitvector.  Otherwise,
9096         'InheritsFrom == null' implies all inherited bits are true.
9097
9098 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
9099
9100         * statement.cs (LocalInfo): Add IsConstant.
9101         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
9102         local variable for constants.
9103
9104 2006-05-09  Raja R Harinath  <rharinath@novell.com>
9105
9106         * flowanalysis.cs (MyBitVector.Empty): New.
9107         (MyBitVector): Don't allow InheritedFrom to be null.
9108         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
9109         (UsageVector, FlowBranching): Update to changes.
9110
9111         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
9112         recursion.  The 'Parent == null' condition isn't sufficient for
9113         anonymous methods.
9114         (FlowBranching.AddBreakOrigin): Likewise.
9115         (FlowBranching.AddContinueOrigin): Likewise.
9116         (FlowBranching.AddReturnOrigin): Likewise.
9117         (FlowBranching.StealFinallyClauses): Likewise.
9118         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
9119         (FlowBranching.CheckOutParameters): Likewise.
9120         (FlowBranchingToplevel): Terminate all the above recursions here.
9121         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
9122         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
9123
9124         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
9125         toplevel block.
9126         (FlowBranchingToplevel): New.  Empty for now.
9127         (FlowBranching.MergeTopBlock): Update.
9128         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
9129         branching for the anonymous delegate.
9130         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
9131
9132         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
9133         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
9134         information at the start of the merge.  Reorganize.
9135
9136 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9137
9138         * class.cs (MethodData.Define): Method cannot implement interface accessor.
9139
9140 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9141
9142         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
9143         to newly introduced ctor.
9144
9145         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
9146         message to one place.
9147         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
9148         global namespace.
9149
9150 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9151
9152         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
9153
9154         * ecore.cs (Expression.ResolveAsConstant): Updated.
9155
9156         * statement.cs (ResolveMeta): Updated.
9157
9158 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9159
9160         * cs-parser.jay: __arglist cannot be used in initializer.
9161
9162 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9163
9164         A fix for #77879
9165         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
9166         private types.
9167
9168 2006-05-05  Raja R Harinath  <rharinath@novell.com>
9169
9170         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
9171         (LabeledStatement): Add 'name' parameter.
9172         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
9173         (Block.AddLabel): Update to changes.
9174         * cs-parser.jay (labeled_statement): Likewise.
9175
9176         * flowanalysis.cs (BranchingType.Labeled): New.
9177         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
9178         (FlowBranchingLabeled): New.  Does nothing for now, but will
9179         eventually handle 'goto' flows.
9180         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
9181         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
9182         that's terminated ...
9183         (Block.Resolve): ... here.
9184
9185         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
9186         (UsageVector.MergeFinallyOrigins): Likewise.
9187         (FlowBranching.InTryOrCatch): Likewise.
9188         (FlowBranching.AddFinallyVector): Likewise.
9189         (FlowBranchingException): Update to changes.
9190
9191         Fix #78290
9192         * statement.cs (Return.Resolve): Move error checking to ...
9193         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
9194         (FlowBranchingException): Handle return origins like break and
9195         continue origins.
9196         (FlowBranching.UsageVector.CheckOutParameters): Remove.
9197
9198 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9199
9200         A fix for #76122
9201         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
9202         filter.
9203
9204 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9205
9206         A fix for #77543
9207         * class.cs (MethodData.Define): Do public accessor check only when method
9208         implements an interface.
9209
9210 2006-05-04  Raja R Harinath  <rharinath@novell.com>
9211
9212         Remove special handling of 'break'
9213         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
9214         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
9215         (UsageVector.Break): Remove.
9216         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
9217         reachability.
9218         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
9219
9220         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
9221         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
9222
9223 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9224
9225         A fix for #75726
9226         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
9227         be the interface member.
9228
9229 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9230
9231         A fix for #60069
9232         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
9233         for emitting small (int) values.
9234
9235 2006-05-03  Raja R Harinath  <rharinath@novell.com>
9236
9237         Fix #59427
9238         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
9239         control-flow passes through the 'finally' after merging-in all the
9240         control-flows from 'try' and the 'catch' clauses.
9241
9242         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
9243         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
9244         always true at the only non-recursive entry point.
9245         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
9246         FlowBranchingBreakable.
9247         (FlowBranchingLoop): Remove.
9248         * statement.cs (Return.DoResolve): Update to changes.
9249
9250         Fix #76471, #76665
9251         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
9252         (FlowBranching.CreateBranching): Handle it: create a
9253         FlowBranchingContinuable.
9254         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
9255         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
9256         except that it handles the 'continue' command.
9257         (FlowBranching.UsageVector.MergeOrigins): Rename from
9258         MergeBreakOrigins.
9259         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
9260         except that it overrides AddContinueOrigin.
9261         (FlowBranchingException): Override AddContinueOrigin, similar to
9262         AddBreakOrigin.
9263         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
9264         Create a new branching around the embedded statement.
9265         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
9266         control flow after the embedded statement.
9267         (Continue.Resolve): Move all error checking to AddContinueOrigin.
9268
9269         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
9270         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
9271         FlowBranchingBreakable.
9272         (FlowBranchingSwitch): Remove.
9273
9274         Fix test-503.cs
9275         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
9276         error reporting to ...
9277         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
9278         Rename from 'AddBreakVector'.  Add new location argument.  Return
9279         a bool indicating whether the 'break' crosses an unwind-protect.
9280         (FlowBranchingException.AddBreakOrigin): Add.
9281         (FlowBranchingException.Merge): Propagate 'break's to surrounding
9282         flowbranching after updating with the effects of the 'finally'
9283         clause.
9284         (FlowBranchingBreakable): New common base class for
9285         FlowBranchingLoop and FlowBranchingSwitch.
9286
9287         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
9288         embedded statement.
9289         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
9290
9291 2006-05-02  Raja R Harinath  <rharinath@novell.com>
9292
9293         * statement.cs (Do.Resolve): If the loop is infinite, set the
9294         barrier.
9295         (While.Resolve, For.Resolve): Set a barrier after the embedded
9296         statement.  There's no direct control flow that goes from the end
9297         of the embedded statement to the end of the loop.
9298         * flowanalysis.cs (FlowBranching.Infinite): Remove.
9299         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
9300         above ensure that the reachability is correctly computed.
9301
9302         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
9303         (UsageVector.MergeBreakOrigins): If the current path is
9304         unreachable, treat it as if all parameters/locals are initialized.
9305         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
9306         infinite loops before merging-in break origins.
9307
9308         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
9309         (Reachability.Reachable): Split part into ...
9310         (Reachability.Unreachable): ... this.  Simplify.
9311         (Reachability.IsUnreachable): Use 'Unreachable' instead.
9312
9313         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
9314         (Reachability.SetThrowsSometimes): Likewise.
9315         (FlowBranchingBlock.MergeTopBlock): Don't compare against
9316         TriState.Always, use corresponding property.
9317         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
9318         (Block.Resolve): Likewise.  Remove some redundant checks.
9319
9320 2006-05-02  Raja R Harinath  <harinath@gmail.com>
9321
9322         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
9323         (Reachability.Meet): Don't bother checking AlwaysThrows --
9324         barrier is always set.
9325         (FlowBranchingBlock.Merge): Likewise.
9326
9327 2006-05-01  Raja R Harinath  <harinath@gmail.com>
9328
9329         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
9330         checks for unreachable.
9331
9332 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
9333
9334         A fix for #77980
9335         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
9336
9337         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
9338         whether field is really assigned.
9339
9340 2006-04-30  Raja R Harinath  <harinath@gmail.com>
9341
9342         * flowanalysis.cs (Reachability): Make 4-argument constructor
9343         private.
9344         (Reachability.Meet): Rename from 'And'.  Remove static variant.
9345         (Reachability.Always): Rename from the highly misleading
9346         'Reachability.Never'.
9347         (FlowBranching.Merge): Update to changes.  Mark an impossible
9348         situation with a 'throw'.
9349         (*): Update to changes.
9350
9351 2006-04-29  Raja R Harinath  <harinath@gmail.com>
9352
9353         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
9354         Remove 'Undefined'.
9355         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
9356         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
9357         (*): Update to changes.
9358         * statement.cs: Update to changes.
9359
9360 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
9361
9362         A fix for #78049
9363         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
9364
9365 2006-04-28  Raja R Harinath  <harinath@gmail.com>
9366
9367         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
9368         dummy UsageVector.
9369
9370         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
9371         argument to two arguments: an usage-vector and a bool.  Move call
9372         to FlowBranching.Merge () ...
9373         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
9374
9375         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
9376         handling of loop and switch reachability to ...
9377         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
9378
9379 2006-04-27  Raja R Harinath  <harinath@gmail.com>
9380
9381         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
9382         handling to FlowBranchingLoop.InLoop.
9383         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
9384
9385 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
9386
9387         A fix for #78115
9388         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
9389         anonymous method is allowed from AnonymousContainer here.
9390
9391         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
9392
9393 2006-04-24  Raja R Harinath  <rharinath@novell.com>
9394
9395         Fix #78156
9396         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
9397
9398 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
9399
9400         A fix for #49011.
9401         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
9402         (DoubleConstant.Reduce): Ditto.
9403
9404 2006-04-23  Raja R Harinath  <rharinath@novell.com>
9405
9406         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
9407         Remove 'lvalue_right_side' argument.  Move parts to ...
9408         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
9409         (LocalVariable.DoResolveLValue): ... these.
9410
9411 2006-04-21  Raja R Harinath  <rharinath@novell.com>
9412
9413         Fix cs1655.cs
9414         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
9415         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
9416         (LocalVariableReference.DoResolveBase): Use it to implement new
9417         CS1655 check.
9418         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
9419         (Argument.Resolve): Simplify.  Move CS1510 check ...
9420         * ecore.cs (Expression.ResolveLValue): ... here.
9421         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
9422         (PropertyExpr.DoResolveLValue): Likewise.
9423         (FieldExpr.Report_AssignToReadonly): Likewise.
9424         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
9425         LValueMemberAccess or LValueMemberOutAccess on instance depending
9426         on it.
9427         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
9428         DoResolve as appropriate.
9429
9430 2006-04-20  Raja R Harinath  <rharinath@novell.com>
9431
9432         Fix #75800
9433         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
9434         implicit conversions on 'out' and 'ref' arguments.
9435
9436         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
9437         improve clarity.  Remove dead code.
9438
9439         Fix #66031
9440         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
9441         (Catch.Resolve): Resolve VarBlock if it exists.
9442
9443 2006-04-19  Miguel de Icaza  <miguel@novell.com>
9444
9445         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
9446         twice, this was some residual code, the enumerator was emitted
9447         properly in the two branche of if later.
9448
9449 2006-04-19  Raja R Harinath  <rharinath@novell.com>
9450
9451         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
9452         cast is never an lvalue.
9453         (Cast.DoResolve, Cast.ResolveRest): Combine.
9454         (Argument.Emit): Simplify slightly.  Move 'Expr is
9455         IMemoryLocation' check ...
9456         (Argument.Resolve): ... here.
9457         (Argument.Error_LValueRequired): Remove.  Inline into only user.
9458
9459         Simplifications.  Fix cs0191-2.cs
9460         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
9461         CS1649 and CS1651 to ...
9462         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
9463         the actual selection of the error code and message to a lookup
9464         table.  Add a dummy return value to simplify callsites.
9465         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
9466         readonly fields of other instances of the same type.  Move CS0197
9467         warning from ...
9468         * expression.cs (Argument.Resolve): ... here.  Simplify code.
9469         Ensure that ec.InRefOutArgumentResolving is only set during LValue
9470         resolution of an out or ref argument.  The code simplification
9471         above uses this invariant.
9472
9473 2006-04-18  Raja R Harinath  <rharinath@novell.com>
9474
9475         Possibly fix #77752.  Fix cs1690-[4-7].cs.
9476         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
9477         CheckMarshallByRefAccess.  Drop parameter.
9478         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
9479         warning.
9480         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
9481         InstanceExpression.
9482         * report.cs (AllWarnings): Add CS1690.
9483         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
9484         for ref access too.
9485         (LocalVariableReference.DoResolveBase): Update.
9486
9487 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9488
9489         * class.cs (MethodOrOperator): Moved common parts from method class.
9490         detect obsolete attributes.
9491         (Method.Define): Simplified as it reuses code from base.
9492         (Constructor.ValidAttributeTargets): Fixed issue found during
9493         refactoring.
9494         (Destructor.ValidAttributeTargets): Fixed issue found during
9495         refactoring.
9496         (Operator): Finished refactoring set off by #78020. Operator class is now
9497         ordinary method class.
9498
9499         * anonymous.cs: Updated.
9500
9501         * decl.cs (DeclSpace): Add IsGeneric
9502
9503 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9504
9505         * class.cs (Constructor.Emit): Don't emit the attributes twice.
9506
9507 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9508
9509         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
9510         detect obsolete attributes.
9511         (Method.CreateEmitContext): Moved to MethodOrOperator.
9512
9513 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
9514
9515         A fix for #78048.
9516         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
9517         customized exception to make crash detection easier.
9518         (MethodOrOperator): Started to work on new base class for methods and
9519         operators.
9520         (Method): Derives from MethodOrOperator.
9521         (Constructor.Emit): Emits its own attributes.
9522         (AbstractPropertyEventMethod.Emit): Ditto.
9523         (Operator): Derives from MethodOrOperator, will refactor fully in extra
9524         patch.
9525         (Operator.Emit): It's temporary more tricky than should be.
9526         
9527         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
9528
9529         * report.cs (InternalErrorException): Add ctor with inner exception.
9530
9531 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
9532
9533         A fix for #76744.
9534         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
9535         only not visible.
9536
9537 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
9538
9539         A fix for #77916.
9540         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
9541         array.
9542
9543 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
9544
9545         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
9546         attribute is present and Guid not.
9547         (Interface.ApplyAttributeBuilder): Ditto.
9548
9549         * attribute.cs: Add error message.
9550
9551 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
9552
9553         A fix for #78020.
9554
9555         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
9556         sources (it's composite) so hold them in extra array as they are used in
9557         Emit phase only. It worked in the previous versions by mistake.
9558         (Attribute.Emit): Emit attribute for more owners when exist.
9559
9560         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
9561         it has now different behaviour.
9562
9563 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
9564
9565         * constant.cs (Constant.IsDefaultInitializer): New method.
9566
9567         * class.cs: Updated.
9568
9569         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
9570         re-initialize default values. It saves KBs almost for every assembly.
9571         Thanks Zoltan for the idea.
9572         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
9573         (ArrayCreation.DoResolve): Resolve only once.
9574         (ArrayCreation.Emit): Emit static initializer only when it is faster.
9575         (ArrayCreation.GetAttributableValue): Cope with optimized values.
9576
9577 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
9578
9579         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
9580         From #77961.
9581
9582 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
9583
9584         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
9585         in an embedded statement too.
9586
9587 2006-04-01  Raja R Harinath  <rharinath@novell.com>
9588
9589         Fix #77958
9590         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
9591
9592 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
9593
9594         A fix for #77966.
9595
9596         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
9597         was not specified.
9598
9599         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
9600
9601 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
9602
9603         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
9604         phase.
9605
9606         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
9607         LocalTemporary change.
9608
9609         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
9610         TypeContainer.
9611         (ClassOrStruct.DefineFieldInitializers): Implemented static field
9612         initializers optimization.
9613         (ClassOrStruct.TypeAttr): Moved from modifiers.
9614         (Constructor.CheckBase): Don't crash when static ctor has parameters.
9615         (FieldBase.ResolveInitializer): Resolves initializer.
9616         (FieldBase.HasDefaultInitializer): New property.
9617
9618         * cs-parser.jay: Removed message.
9619
9620         * expression.cs (CompilerGeneratedThis): New specialization.
9621
9622         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
9623
9624 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
9625
9626         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
9627
9628 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
9629
9630         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
9631         be now EnumConstants only.
9632
9633 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
9634
9635         * attribute.cs, driver.cs: Reset more caches.
9636
9637 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9638
9639         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
9640
9641 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9642
9643         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
9644         for easier reuse. Updated all overrides.
9645         (IntegralConstant): New base class for all integral constants.
9646         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
9647         of the constant range, report custom error.
9648         (UIntConstant.Reduce): Fixed uint conversion.
9649
9650         * ecore.cs, literal.cs: Reduce updates.
9651
9652 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9653
9654         A fix for #75813.
9655
9656         * class.cs (Constructor.Define): Removed extra if for default ctors.
9657         A patch from Atsushi Enomoto.
9658
9659 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
9660
9661         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
9662         GetAttributableValue.
9663
9664         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
9665         when required.
9666
9667         * convert.cs (ImplicitConversionRequired): Error message moved to
9668         DoubleLiteral.
9669
9670         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
9671         automatic implicit conversion of an output value.
9672         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
9673
9674         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
9675         conversion.
9676         (TypeOf.GetAttributableValue): Add extra handling for object type.
9677
9678         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
9679         special error message.
9680
9681 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
9682
9683         * class.cs (Constructor.Emit): Don't crash when struct ctor is
9684         InternalCall.
9685         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
9686         compatible with MS runtime.
9687
9688 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
9689
9690         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
9691         attribute arguments here.
9692
9693         * class.cs (Indexer.Define): The check was moved to attribute class.
9694
9695 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
9696
9697         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
9698         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
9699         easier.
9700
9701 2006-03-22  Raja R Harinath  <rharinath@novell.com>
9702
9703         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
9704         mcs to keep code differences small.
9705         * attribute.cs (Attribute.GetParameterDefaultValue): New.
9706         * typemanager.cs (parameter_default_value_attribute_type): New.
9707         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
9708         CS1908 check.
9709
9710 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
9711
9712         * expression.cs (StringConcat.Append): Reverted back to no warning state.
9713
9714 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
9715
9716         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
9717
9718         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
9719         the blocks too.
9720
9721 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
9722
9723         * doc-bootstrap.cs : fix build.
9724
9725 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
9726
9727         * expression.cs (StringConcat.Append): Issue a warning when empty string
9728         is going to append.
9729
9730 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
9731
9732         * assign.cs (CompoundAssign.ResolveSource): Removed.
9733
9734         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
9735         clean up.
9736
9737         * class.cs (TypeContainer.FindMethods): Removed.
9738         (TypeContainer.CheckMemberUsage): Made static.
9739
9740         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
9741
9742         * constant.cs (CheckRange): Removed unused type argument.
9743         (CheckUnsigned): Removed unused type argument.
9744
9745         * cs-parser.jay: Updated after MemberAccess clean up.
9746         Uses Length for empty string test.
9747
9748         * cs-tokenizer.cs: Uses Length for empty string test.
9749         (IsCastToken): Made static.
9750         (is_hex): Made static.
9751         (real_type_suffix): Made static.
9752
9753         * decl.cs (SetupCache): Made static.
9754         (OnGenerateDocComment): Removed unused ds argument.
9755
9756         * delegate.cs (VerifyDelegate): Removed unused argument.
9757
9758         * doc.cs: Uses Length for empty string test.
9759
9760         * driver.cs: Uses Length for empty string test.
9761
9762         * enum.cs (IsValidEnumType): Made static
9763
9764         * expression.cs (EnumLiftUp): Removed unused argument.
9765         (ResolveMethodGroup): Ditto.
9766         (BetterConversion): Ditto.
9767         (GetVarargsTypes): Ditto.
9768         (UpdateIndices): Ditto.
9769         (ValidateInitializers): Ditto.
9770         (MemberAccess.ctor): Ditto.
9771         (GetIndexersForType): Ditto.
9772
9773         * flowanalysis.cs: (MergeFinally): Removed unused argument.
9774
9775         * iterators.cs: Updated after MemberAccess clean up.
9776
9777         * location.cs: Uses Length for empty string test.
9778
9779         * namespace.cs: Uses Length for empty string test.
9780
9781          * report.cs (CheckWarningCode): Made static.
9782
9783         * statement.cs (LabeledStatement): Removed unused argument.
9784
9785         * typemanager.cs (FilterNone): Removed.
9786
9787 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9788
9789         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
9790         obsolete.
9791
9792         * class.cs: Updated.
9793
9794 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9795
9796         * cs-parser.jay.cs: __arglist is not allowed for delegates.
9797
9798 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9799
9800         A fix for #77822.
9801
9802         * expression.cs (VerifyArgumentsCompat): Reverted to double error
9803         reporting, it's more tricky than I thought.
9804
9805 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
9806
9807         A fix for #77816.
9808
9809         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
9810         host container.
9811         (AnonymousMethod.ImplicitStandardConversionExists): New method.
9812         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
9813         Add more error reporting; Fixed issue with params.
9814
9815         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
9816
9817         * cs-parser.jay: AnonymousMethod requires host container.
9818
9819         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
9820
9821 2006-03-18  Raja R Harinath  <harinath@gmail.com>
9822
9823         * class.cs: Change 'TypeContainer ds' constructor argument to
9824         'DeclSpace parent'.  Some classes were missed below due to
9825         different naming convention.
9826
9827         * class.cs (MemberCore.Parent): Delete.  This makes the
9828         ParentContainer changes below enforceable by the compiler.
9829
9830         Treat pointers to enclosing declaration space as 'DeclSpace', not
9831         'TypeContainer'.
9832         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
9833         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
9834
9835         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
9836         of TypeContainer.
9837         (Block.AddThisVariable): Likewise.
9838         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
9839         (AbstractPropertyEventMethod.Emit): Likewise.
9840         (AbstractPropertyEventMethod.EmitMethod): Likewise.
9841         (GetMethod.Define, SetMethod.Define): Likewise.
9842         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
9843         (DelegateMethod.EmitMethod): Likewise.
9844
9845         Fix regression test-partial-13.cs.
9846         Rationalize use of PartialContainer.  Ensure that the partial
9847         class semantics can be tied to type-correctness, i.e., any
9848         violation will cause a compile error.
9849         * class.cs, const.cs: Access all fields that belong to class
9850         TypeContainer via ParentContainer.  Arguments of EmitContexts and
9851         Resolve()-like functions still use 'Parent'.
9852
9853         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
9854         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
9855         (PropertyMethod.CheckModifiers): Remove unused argument.
9856         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
9857         DeclSpace.
9858
9859 2006-03-17  Raja R Harinath  <harinath@gmail.com>
9860
9861         Make semantics of PartialContainer simpler.
9862         * decl.cs (DeclSpace.IsPartial): Remove.
9863         * class.cs (TypeContainer.IsPartial): Likewise.
9864         (TypeContainer..ctor): Set PartialContainer to point to self.
9865         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
9866         (TypeContainer.FindNestedType): Likewise.
9867         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
9868
9869 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
9870
9871         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
9872
9873 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
9874
9875         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
9876         classes.
9877
9878 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
9879
9880         * class.cs (Operator.Define): An error for base conversion was not
9881         reported correctly.
9882
9883 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
9884
9885         * iterator.cs : yield break is allowed in try statement which has
9886           catch clauses. Fixed bug #77767.
9887
9888 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
9889
9890         A fix for #77593, #77574.
9891
9892         * class.cs (MethodCore.CheckBase): Another if for operator.
9893
9894 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
9895
9896         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
9897         were not resolved
9898
9899         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
9900         (DelegateCreation.ImplicitStandardConversionExists): New method for just
9901         conversion test.
9902         
9903         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
9904         not needed.
9905
9906         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
9907         Updated after another emitcontext usage was clean up. It should help us to
9908         synchronize with gmcs easier.
9909
9910 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
9911
9912         A fix for #77353.
9913
9914         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
9915         (Event.Define): ditto
9916         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
9917
9918         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
9919         Removed redundant code and set NewSlot for Invoke method too.
9920
9921         * parameter.cs (Parameters.ctor): Add custom, type ctor.
9922         (Parameters.MergeGenerated): New method. Use this method when you merge
9923         compiler generated argument with user arguments.
9924
9925 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
9926
9927         * attribute.cs (ResolveAsTypeTerminal): Removed.
9928
9929         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
9930         specialization for predefined types; 30% speed up.
9931         Finally placed obsolete check to right place.
9932         (Expression.ResolveType): Removed.
9933
9934         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
9935         Updated after ResolveType was removed.
9936
9937         * expression.cs (Cast.ctor): Check void cast.
9938         (Binary.ResolveAsTypeTerminal): Is never type.
9939         (Conditional.ResolveAsTypeTerminal): Is never type.
9940
9941         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
9942
9943 2006-03-01  Raja R Harinath  <rharinath@novell.com>
9944
9945         Fix #77679.
9946         * expression.cs (ParameterReference.DoResolveBase): Change return
9947         type to bool.
9948         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
9949         Update.
9950
9951         Fix #77628.
9952         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
9953
9954         Fix #77642.
9955         * typemanager.cs (GetFullNameSignature): Don't nullref on
9956         protected accessors.
9957
9958 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
9959
9960         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
9961         these two separated members to simplify the code.
9962         (Attribute.Resolve): Refactored to use new fields and methods.
9963         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
9964         implemented obsolete attribute checking.
9965         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
9966         implemented obsolete checking again. It look line never ending quest ;-)
9967         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
9968
9969         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
9970
9971         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
9972
9973         *class.cs (Property.Define): Add RegisterProperty call.
9974
9975         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
9976         argument groups (only 2).
9977
9978         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
9979         encoding expression to arguments.
9980         (Expression.ExprClassToResolveFlags): Just turned to property.
9981
9982         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
9983         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
9984         optimized as well as implemented support for zero-length attributes.
9985
9986         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
9987         Add caching of PropertyInfo's.
9988
9989 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
9990
9991         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
9992         error multiple times.
9993
9994 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
9995
9996         New partial class implementation.
9997         A fix for #77027, #77029, #77403
9998
9999         * attribute.cs (Attributable): Made attributes protected.
10000
10001         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10002         the replacements of ClassPart and PartialContainer.
10003         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10004         (TypeContainer.AddInterface): Ditto.
10005         (TypeContainer.AddPartial): The main method for partial classes. It checks
10006         for errors and merges ModFlags and attributes. At the end class is added to
10007         partial_parts list.
10008         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10009         required here.
10010         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10011         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10012         from the rest of partial classes.
10013         (TypeContainer.GetClassBases): Simplified.
10014         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10015         DefineType.
10016         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10017         (TypeContainer.HasExplicitLayout): Uses Flags now.
10018         (PartialContainer): Removed.
10019         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10020         (StaticClass): Was merged with Class.
10021         (Class.GetClassBases): class and static class bases are verified here.
10022         (Class.TypeAttr): Added static attributes when class is static.
10023         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10024         (MemberBase): In some cases we need to call parent container for partial
10025         class. It should be eliminated but it's not easy now.
10026
10027         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10028
10029         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10030         partial classed to accumulate class comments.
10031         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10032
10033         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10034
10035         * driver.cs (MainDriver): Tree.GetDecl was removed.
10036
10037         * modifiers.cs (Modifiers): Add partial modifier.
10038
10039         * tree.cs (Tree.decl): Removed.
10040         (RootTypes): Started to use this class more often for root types
10041         specializations.
10042
10043 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10044
10045         A fix for #77615
10046
10047         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10048         external interface does not have an attribute.
10049
10050 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10051
10052         Another prerequisites for new partial classs implementation.
10053         
10054         * attribute.cs (Attribute.Equal): Implemented.
10055         (Attribute.Emit): Changed as attributes can be applied more than twice.
10056         (Attributes.Emit): Check for duplicate attributes here.
10057
10058         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
10059         as a parameter, clean-up.
10060
10061 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10062
10063         A fix for #77485
10064
10065         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
10066         contains obsolete attribute check which can in some cases look for base
10067         type of current class which is not initialized yet.
10068         (TypeContainer.BaseType): Replacement of ptype.
10069
10070         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
10071
10072 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10073
10074         First of prerequisites for new partial classs implemention.
10075         
10076         * attribute.cs (Attributable): Extended by ResolveContext;
10077         Attributes finally have correct context for resolving in all cases.
10078         (AttachTo): Attribute owner is assigned here.
10079
10080         * codegen.cs (IResolveContext): Introduce new interface to hold
10081         all information needed in resolving phase.
10082         (EmitContext): Implements IResolveContext; more clean-up needed here.
10083         
10084         * decl.cs (MemberCore): Implemented IResolveContext.
10085
10086         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
10087         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
10088         parameter.cs, statement.cs, tree.cs, typemanager.cs:
10089         Refactored to use new IResolveContext instead of EmitContext; cleanup
10090
10091 2006-02-06  Miguel de Icaza  <miguel@novell.com>
10092
10093         * codegen.cs (EmitScopeInitFromBlock): check here the
10094         capture_context, there is no need to make two calls to the
10095         EmitContext. 
10096
10097         * anonymous.cs: Add some debugging messages that might help me
10098         track other instances of this problem in the future (the
10099         regression of test 467).
10100
10101         * cs-parser.jay: track the variable block, as we need to initalize
10102         any captured variables declared in this block for the "catch"
10103         portion of the "Try" statement.
10104
10105         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
10106         scope initialization for captured variables. 
10107
10108         Also, move the emit for the variables after the block location has
10109         been marked.
10110
10111 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
10112
10113         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
10114
10115 2006-02-02  Miguel de Icaza  <miguel@novell.com>
10116
10117         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
10118         commit yesterday, the initialization for the roots is necessary.
10119         What is not necessary is the scope activation.
10120
10121 2006-02-02  Raja R Harinath  <rharinath@novell.com>
10122
10123         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
10124         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
10125         CS0206 checks.
10126         (Argument.Resolve): Remove CS0206 checks.
10127
10128 2006-02-01  Miguel de Icaza  <miguel@novell.com>
10129
10130         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
10131         scopes for all the roots, the scopes will now be emitted when the
10132         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
10133
10134         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
10135         code.  This reduces a lot of existing cruft.
10136         
10137         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
10138         that the ScopeInfo is generated as we enter the scope, not at the
10139         time of use, which is what we used to do before.
10140
10141         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
10142         every time a Block is about to be emitted if we have a
10143         CaptureContext. 
10144
10145 2006-02-01  Raja R Harinath  <rharinath@novell.com>
10146
10147         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
10148         (Reset): Update.
10149         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
10150
10151         * typemanager.cs (cons_param_array_attribute): Make private.
10152         (Reset): Set it to null.
10153         (InitCoreHelpers): Don't initialize it.
10154         (ConsParamArrayAttribute): New.  Initialize it as needed.
10155         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
10156
10157 2006-01-31  Miguel de Icaza  <miguel@novell.com>
10158
10159         * expression.cs: There might be errors reported during the
10160         selection of applicable methods.  If there are errors, do not
10161         continue execution as it will lead the compiler to crash.
10162
10163 2006-01-30  Miguel de Icaza  <miguel@novell.com>
10164
10165         * expression.cs: Member access is not allowed on anonymous
10166         methods.  Fixes #77402.
10167
10168 2006-01-30  Raja R Harinath  <rharinath@novell.com>
10169
10170         Fix #77401
10171         * cs-parser.jay (VariableDeclaration): Don't set
10172         current_array_type to null.
10173         (field_declaration, event_declaration, declaration_statement):
10174         Set it to null here.
10175
10176 2006-01-28  Raja R Harinath  <harinath@gmail.com>
10177
10178         * typemanager.cs (GenericParameterPosition): New.
10179         * doc.cs: Use it.
10180
10181 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
10182
10183         * doc.cs : To process "include" elements, first we should create
10184           another list than XmlNodeList, because it could result in node
10185           removal, which could result in that the XmlNodeList gives up
10186           yielding next node.
10187
10188           (Also made code identical to gmcs again.)
10189
10190 2006-01-25  Miguel de Icaza  <miguel@novell.com>
10191
10192         * ecore.cs: Introduce an error report that we were not catching
10193         before, if not silent, we must report the error.  Gonzalo ran into
10194         it.
10195
10196 2006-01-23  Miguel de Icaza  <miguel@novell.com>
10197
10198         A fix for bug: #76957
10199         
10200         * iterators.cs (MoveNextMethod.CreateMethodHost): call
10201         ComputeMethodHost before creating the method, this is a new
10202         requirement. 
10203
10204         * anonymous.cs (AnonymousContainer): Now we track all the scopes
10205         that this method references (RegisterScope).  The actual scope
10206         where the method is hosted is computed with the ComputeMethodHost
10207         before we create the method.
10208
10209         Moved the Deepest routine here.
10210
10211         (AnonymousContainer.ComputeMethodHost): New routine used to
10212         compute the proper ScopeInfo that will host the anonymous method.
10213
10214         (ScopeInfo): Deal with multiple roots.  The problem was that we
10215         did not have a unique root where all ScopeInfos could be hanged
10216         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
10217         of roots.  
10218
10219         Remove AdjustMethodScope which is now computed at the end.  Remove
10220         LinkScope which did a partial link, instead link all ScopeInfos
10221         before code generation from the new "LinkScopes" routine. 
10222
10223         Simplify all the Add* routines as they no longer need to maintain
10224         the tree, they just need to record that they are using variables
10225         from a ScopeInfo.
10226
10227         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
10228         routines to produce the forest of ScopeInfo trees.
10229
10230         * class.cs (TypeContainer.AppendMethod): This is just like
10231         AddMethod, but ensures that an interface implementation method
10232         (IEnumerable.XXX) is not inserted at the beginning of the queue of
10233         methods, but at the end.
10234
10235         We use this functionality to ensure that the generated MoveNext
10236         method in the iterator class is resolved/emitted before the
10237         enumerator methods created.   
10238
10239         This is required because the MoveNext method computes the right
10240         ScopeInfo for the method.  And the other methods will eventually
10241         need to resolve and fetch information computed from the anonymous
10242         method. 
10243
10244 2006-01-21  Raja R Harinath  <harinath@gmail.com>
10245             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
10246
10247         Fix rest of #76995.
10248         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
10249         the 'aliases' hash.
10250         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
10251         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
10252
10253 2006-01-18  Raja R Harinath  <rharinath@novell.com>
10254
10255         Fix #76656, cs0231-2.cs.
10256         * cs-parser.jay (formal_parameter_list): Make error case catch
10257         more issues.
10258         (parenthesized_expression_0): Add CS1026 check.
10259         (invocation_expression): Remove unused { $$ = lexer.Location }.
10260
10261 2006-01-17  Raja R Harinath  <rharinath@novell.com>
10262
10263         Fix #76824.
10264         * cs-parser.jay (statement_expression): Don't list out the
10265         individual statement-expressions.  Convert syntax error into
10266         CS0201 check.
10267
10268 2006-01-16  Raja R Harinath  <rharinath@novell.com>
10269
10270         Fix #76874.
10271         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
10272         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
10273         CheckIntermediateModification.
10274         (FieldExpr.DoResolve): Add new two-argument version that
10275         allows us to resolve the InstanceExpression as an lvalue.
10276         The one-argument variant is now just a wrapper.
10277         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
10278         Resolve the lhs as an lvalue if the it has a value type.
10279         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
10280         from Assign.DoResolve.
10281         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
10282         resolved as an lvalue.
10283         (PropertyExpr.DoResolve): Update.
10284         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
10285         has a value type.  Move CS1612 check here from
10286         CheckIntermediateModification.
10287         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
10288         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
10289         'right_side' of a ResolveLValue on an 'out' argument.
10290         (EmptyExpression.LValueMemberAccess): New.  Used as the
10291         'right_side' of a propagated ResolveLValue on a value type.
10292         (LocalVariableReference.DoResolveBase): Recognize
10293         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
10294         Add CS1654 check.
10295         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
10296         EmptyExpression.Null.
10297
10298 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
10299
10300         * typemanager.cs : added IsGenericParameter(). In mcs it always
10301           return false.
10302         * doc.cs : for generic parameters, use GenericParameterPosition,
10303           not FullName.
10304
10305 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
10306
10307         * expression.cs: Fix Console.WriteLine ((this = x).foo);
10308
10309 2006-01-12  Miguel de Icaza  <miguel@novell.com>
10310
10311         This fixes the problem where we used ldfld instead of ldflda to
10312         load the "THIS" pointer on captured parameters, when THIS is a
10313         value type.  See bug #77205.
10314         
10315         * iterators.cs (CapturedThisReference.Emit): Pass false to
10316         EmitThis (we do not need the address).
10317
10318         * codegen.cs (EmitThis): it needs to know whether we need the
10319         address of `this' or not.  This is used by value types.  
10320
10321         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
10322         every other call passes false.
10323
10324 2006-01-12  Raja R Harinath  <rharinath@novell.com>
10325
10326         Fix #77221.
10327         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
10328         GetOverride.
10329         * expression.cs (Invocation.OverloadResolve): Update.
10330         (Invocation.DoResolve): Avoid double resolution of invocation.
10331
10332 2006-01-11  Raja R Harinath  <rharinath@novell.com>
10333
10334         Fix #77180.
10335         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
10336         unary negation of floating point types as 0-expr; negation cannot
10337         overflow in floating point types.
10338
10339         Fix #77204.
10340         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
10341         on operands of 'void' type.
10342
10343         Fix #77200.
10344         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
10345         and ExclusiveOr for boolean constants too.
10346
10347 2006-01-09  Raja R Harinath  <rharinath@novell.com>
10348
10349         Fix #75636.
10350         * expression.cs (Invocation.OverloadResolve): Replace reflected
10351         override methods with their base virtual methods, rather than
10352         skipping over them.
10353         * typemanager.cs (TypeManager.GetOverride): New.
10354
10355 2006-01-05  Jb Evain  <jbevain@gmail.com>
10356
10357         * class.cs (Property.Define, Indexer.Define): do not tag the
10358         properties as SpecialName | RTSpecialName.
10359
10360 2006-01-04  Miguel de Icaza  <miguel@novell.com>
10361
10362         * class.cs (MethodCore.IsDuplicateImplementation): This method was
10363         doing a low-level comparission of parameter types.  It was lacking
10364         a check for __argslist. 
10365
10366 2005-12-30  Miguel de Icaza  <miguel@novell.com>
10367
10368         * expression.cs (ParameterReference.DoResolveBase): Allow
10369         reference parameters if they are local to this block. 
10370
10371         This allows the ref and out parameters of a delegate to be used in
10372         an anonymous method, for example:
10373
10374         delegate void set (out int x);
10375
10376         set s = delegate (out int x){
10377                 x = 0;
10378         };
10379
10380         This is used by functionality introduced late in the C# language.
10381         
10382         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
10383         method that take ref and out parameters. 
10384
10385         Fixes #77119 which was a late change in the spec.
10386
10387 2005-12-23  Miguel de Icaza  <miguel@novell.com>
10388
10389         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
10390         parent if its the same scope.  Fixes #77060.
10391
10392 2005-12-21  Miguel de Icaza  <miguel@novell.com>
10393
10394         * driver.cs: Report the case of no source files and no -out:
10395         argument provided.
10396
10397 2005-12-20  Raja R Harinath  <rharinath@novell.com>
10398
10399         Fix #77035.
10400         * expression.cs (ComposedCast.GetSignatureForError): Define.
10401
10402 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
10403
10404         Fix #76995
10405
10406         * namespace.cs (NamespaceEntry): Add extern_aliases as a
10407         ListDictionary, to contain the ExternAliasEntry entries (in
10408         addition to the NamespaceEntry.aliases hashtable). This field is
10409         shared between the original entry and its doppelganger (bodyless 
10410         copy of it).
10411         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
10412         extern_aliases field.
10413         (NamespaceEntry.Lookup): Move the IsImplicit check after the
10414         lookup in extern_aliases.
10415
10416 2005-12-16  Raja R Harinath  <rharinath@novell.com>
10417
10418         Fix #77006.
10419         * class.cs (TypeContainer.Mark_HasEquals): New.
10420         (TypeContainer.Mark_HasGetHashCode): New.
10421         (ClassPart): Override them.
10422         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
10423
10424         Fix #77008.
10425         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
10426         'parent' argument to the base constructor.
10427
10428         Remove all mention of TypeContainer from decl.cs.
10429         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
10430         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
10431         (DeclSpace.DeclSpace): Likewise.
10432         (DeclSpace.DefineMembers): Remove unused argument.
10433         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
10434         debugging check -- we don't care if the debug code throws an
10435         InvalidCastException instead of an InternalErrorException.
10436         * class.cs (TypeContainer.DefineMembers): Update to changes.
10437         (TypeContainer.DoDefineMembers): Likewise.
10438         (TypeContainer.GetMethods): Likewise.
10439         (PropertyMember.Define): Likewise.
10440         (MemberBase.Parent): New property that forwards to
10441         MemberCore.Parent, but ensures that we get a TypeContainer.
10442         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
10443         (RootContext.PopulateTypes): Likewise.  Remove special case code
10444         for !RootContext.StdLib: DefineMembers is idempotent.
10445
10446 2005-12-14  Miguel de Icaza  <miguel@novell.com>
10447
10448         * convert.cs (ExplicitConversionCore): Check the return value from
10449         ExplicitConversionCore which can return null on failure.  Fixes #76914
10450
10451 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
10452
10453         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
10454
10455 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
10456
10457         * doc.cs : The search for referenced namespace was insufficient to
10458           get global one as it used to do. Fixed bug #76965.
10459
10460 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
10461
10462         * doc.cs : check name in cref in the last phase that whether it is
10463           namespace or not.
10464
10465 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10466
10467         * cs-tokenizer.cs : reverted the latest change: it somehow broke
10468           Mono.C5.
10469
10470 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10471
10472         * doc.cs : so it turned out that we cannot skip override check for 
10473           interface members. Fixed bug #76954.
10474
10475 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
10476
10477         * cs-tokenizer.cs : fixed bug #75984:
10478           - #warning and #error should not be handled when the source line
10479             is disabled.
10480           - #line is not checked strictly when the source line is disabled.
10481           - #define and #undef is on the other hand checked strictly at any
10482             state.
10483
10484 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
10485
10486         * cs-tokenizer.cs : missing Location (actually, filename) in one of
10487           CS1027 report.
10488
10489 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10490
10491         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
10492
10493         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
10494         event initializers.
10495         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
10496         (FieldBase.Initializer): Initializer is now optional.
10497         (EventField.Define): Only event field can have initializer.
10498
10499         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
10500
10501         * const.cs (Const): Reuse initializer.
10502
10503         * cs-parser.jay: Updated after FieldBase changes.
10504         Added current_array_type to simplify array initializers.
10505
10506         * ecore.cs (NullCast.IsDefaultValue): Implemented.
10507
10508         * expression.cs, iterators.cs: Updated.
10509
10510         * namespace.cs (NamespaceEntry): Made UsingFound private.
10511
10512 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10513
10514         * parameterCollection.cs: Obsolete, removed.
10515         * parser.cs: Obsolete, removed.
10516
10517 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
10518
10519         Fix #76849.
10520         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
10521
10522         * enum.cs (Enum.Define): Set obsolete context here.
10523
10524 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
10525
10526         * doc.cs :
10527           - FindDocumentedMember() now expects 1) paramList as null
10528             when "we don't have to check the number of parameters" and
10529             2) Type.EmptyTypes when "there is no arguments".
10530           - Introduced FoundMember struct to hold the exact type which was
10531             used to find the documented member (the above change broke
10532             test-xml-044; it might be better just to use DeclaringType than
10533             what MS does, like this change does, but it depends on usage.)
10534
10535 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
10536
10537         * doc.cs : documented member might be from DeclaringType for nested
10538           types. Fixed bug #76782.
10539
10540 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
10541
10542         * anonymous.cs: Have the param code handle leaving copies on the
10543         stack etc. Allows anonymous params to take part in the assignment
10544         code (++, +=, etc). Fixes bug #76550
10545
10546         * expression.cs: Handle the prepare_for_load/leave_copy by passing
10547         it down to the anon code.
10548
10549         * iterators.cs: Use dummy var here
10550
10551         * codegen.cs: Handle new vars
10552
10553 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
10554
10555         Fix #76849.
10556         * class.cs (MethodData.Define): Set proper Obsolete context.
10557
10558         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
10559         obsolete context.
10560         (FieldExpr.DoResolve): Ditto.
10561
10562 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
10563
10564         Fix #76849.
10565         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
10566         parent is not obsolete.
10567
10568 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
10569
10570         * doc.cs : (FindDocumentedMember) find parameterless members first
10571           and get CS0419 in the early stage. Fixed first case of bug #76727.
10572
10573 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
10574
10575         Fix #76859.
10576         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
10577         no error was reported.
10578
10579         *expression.cs (Binary.DoResolve): left can be null.
10580
10581 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
10582
10583         Fix #76783.
10584         * class.cs (MethodData.Emit): Parameters should be labeled first.
10585
10586 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
10587
10588         Fix #76761.
10589         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
10590
10591 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
10592
10593         * attribute.cs (AreParametersCompliant): Moved to Parameter.
10594
10595         * class.cs (MethodCore): Parameter clean up.
10596         (IMethodData): Added ParameterInfo.
10597         (MethodData): Parameter clean up.
10598         (Indexer.Define): Parameter clean up.
10599
10600         * anonymous.cs,
10601         * codegen.cs,
10602         * cs-parser.jay,
10603         * decl.cs,
10604         * doc.cs,
10605         * ecore.cs,
10606         * flowanalysis.cs,
10607         * iterators.cs,
10608         * pending.cs,
10609         * statement.cs,
10610         * typemanager.cs: Parameter clean up.
10611
10612         * delegate.cs (Define): Get rid of duplicated code.
10613
10614         * expression.cs (ParameterReference): Removed useless parameters
10615         and simplified.
10616         (Invocation): Ditto.
10617
10618         * parameter.cs (ParamsParameter): New class, params specialization.
10619         (ArglistParameter): Attemp to separate arglist.
10620         (Parameter): Refactored to be reusable and faster.
10621         (Parameter.Modifier): Made understandable.
10622         (Parameters): Changed to be used as a class for `this' assembly
10623         parameters. Refactored to use new specialized classes.
10624
10625         * support.cs (ParameterData): Added Types property.
10626         (InternalParameters): Deleted.
10627
10628 2005-08-20  Martin Baulig  <martin@ximian.com>
10629
10630         Merging this patch from GMCS to fix #75867.
10631
10632         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
10633         scope if we don't already have it.
10634
10635 2005-11-17  Martin Baulig  <martin@ximian.com>
10636
10637         * anonymous.cs
10638         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
10639         inherit the scope from our parent.  Fixes #76653.
10640
10641 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
10642
10643         * doc.cs : the previous patch does not actually fix the bug.
10644           PropertyInfo override check is now implemented and really fixed it.
10645         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
10646
10647 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
10648
10649         * doc.cs : apply "override filter" also to properties.
10650           Fixed bug #76730.
10651
10652 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
10653
10654         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
10655           no need to check overrides. For classes, omit those results from 
10656           interfaces since they must exist in the class. Fixed bug #76726.
10657
10658 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
10659
10660         * typemanager.cs : (GetFullNameSignature) differentiate indexers
10661           with different parameters. Fixed the second problem in #76685.
10662
10663 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
10664
10665         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
10666           get expected 'protected' access in CheckValidFamilyAccess()).
10667           Fixed bug #76692.
10668
10669 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
10670
10671         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
10672           Fixed bug #76705.  CS1569 was incorrectly commented out.
10673
10674 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
10675
10676         * doc.cs : use Invocation.IsOverride() to do real override check.
10677         * expression.cs : made Invocation.IsOverride() internal.
10678
10679 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
10680
10681         * doc.cs : use TypeManager.FindMembers() instead of (possible)
10682           TypeBuilder.FindMembers() and filter overriden base members out.
10683           Fixed bug #76990.
10684
10685 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10686
10687         * doc.cs : ref/out parameters are represented as '@' (instead of
10688           '&' in type FullName). Fixed bug #76630 (additionally crefs).
10689
10690 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10691
10692         * doc.cs : when there was no '.' in cref to methods in doc comment,
10693           then parameters were missing in the output. Fixed bug #76691.
10694
10695 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10696
10697         * driver.cs : don't output docs when there is an error.
10698           Fixed bug #76693.
10699
10700 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10701
10702         * doc.cs :
10703           Now it should detect indexers. Fixed primary concern in bug #76685.
10704           Fixed CS0419 message to not show the identical member signature in
10705           the message.
10706
10707 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
10708
10709         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
10710           instead of Type.FindMembers() since it does not handle events.
10711           Fixed bug #71604.
10712
10713 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
10714
10715         * codegen.cs: Fixed typo (speficied -> specified).
10716
10717 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
10718
10719         Fix #76369.
10720         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
10721
10722 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
10723
10724         * attribute.cs: Changed error message.
10725
10726         * cs-tokenizer.cs: One more check.
10727
10728 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
10729
10730         * statement.cs (Block.Resolve): Ignore empty statement.
10731
10732 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
10733
10734         * report.cs: Made error/warning methods more strict to avoid
10735         their misuse.
10736
10737         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
10738         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
10739         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
10740         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
10741
10742 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
10743
10744         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
10745         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
10746
10747         * class.cs (TypeContainer.IsComImport): New property.
10748         (Constructor.Define): Create proper ctor for ComImport types.
10749
10750         * expression.cs (New.CheckComImport): Fixed.
10751
10752 2005-11-07  Miguel de Icaza  <miguel@novell.com>
10753
10754         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
10755         that a parameter has been captured does not mean that we do not
10756         have to do the rest of the processing.  This fixes the second part
10757         of #76592.  If there was another anonymous method capturing
10758         values in the past, the Scope would never be set for the second
10759         method that captured the same parameter.
10760
10761         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
10762         properly manipulate the stack.   Second part of fix for #76592.
10763
10764         * expression.cs (New): Add support for invoking "new" on
10765         interfaces that have been flagged with the ComImport attribute and
10766         the CoClass.  Fixes #76637 
10767
10768         * statement.cs (Try.DoEmit): When a variable is captured, do not
10769         try to emit the vi.LocalBuilder variable as it has been captured.
10770         Create a temporary variable and store the results on the
10771         FieldBuilder.  Fixes #76642
10772
10773 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
10774
10775         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
10776
10777         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
10778
10779         * expression.cs (Binary.DoResolve): Added && optimalization.
10780     
10781         * typemanager.cs (AddUserType): Removed useless argument.
10782
10783 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
10784
10785         * statement.cs (Block.variables): Uses ListDictionary.
10786
10787 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
10788
10789         Fix #75969.
10790         * class.cs (PartialContainer.EmitType): Customized to emit
10791         security attributes.
10792         (ClassPart.ApplyAttributeBuilder): Transform security attribute
10793         for partial classes.
10794
10795 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
10796
10797         Fix #76599.
10798         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
10799         access has to be fixed.
10800         
10801         * typemanager.cs (IsUnmanagedType): Wrong common field type.
10802
10803 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
10804
10805         Fix #76590.
10806         * ecore.cs (NullCast.Reduce): Implemented.
10807
10808         * expression.cs (ArrayCreation.CheckIndices): Correcly check
10809         constant type.
10810         
10811         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
10812         properly.
10813         (Foreach.Resolve): Catch null properly.
10814
10815 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
10816  
10817         * cs-tokenizer.cs: Warning text fix.
10818
10819         * driver.cs: AllWarningNumbers exposed on public interface.
10820
10821         * report.cs (): Reviewed warning numbers.
10822         (IsValidWarning): Use binary search.
10823
10824 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
10825  
10826         * driver.cs: Implemeted resource visibility.
10827         (Resources): New class for code sharing between /res: and
10828         /linkres:
10829  
10830 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
10831
10832         Fix #76568.
10833         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
10834         folding.
10835         
10836         * convert (Convert.ImplicitReferenceConversion): NullCast holds
10837         contants only.
10838         
10839         * ecore.cs (NullCast): Child is contant only.
10840         
10841         * literal.cs (NullLiteral.Reduce): null can be converted to any
10842         reference type.
10843
10844 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
10845
10846         * driver.cs: Use Encoding.Default as default code page instead
10847           of ISO-28591.
10848
10849 2005-10-27  Raja R Harinath  <rharinath@novell.com>
10850
10851         Fix #76085.
10852         * expression.cs (Invocation.Error_InvalidArguments): Handle
10853         __arglist parameters.
10854         (Invocation.VerifyArgumentsCompat): Likewise.
10855         * support.cs (ReflectionParameters.GetSignatureForError): Print
10856         __arglist parameters.
10857         (InternalParamters.GetSignatureForError): Likewise.
10858         * parameter.cs (Parameters.GetSignatureForError): Likewise.
10859
10860 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
10861
10862         * attribute.cs (GetPropertyValue): Made public.
10863
10864         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
10865         Resolve.
10866         Add new property WrapNonExceptionThrows to handle 2.0 assembly
10867         attribute.
10868         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
10869         is not defined.
10870         
10871         * driver.cs: Reflect method name change.
10872         
10873         * statement.cs (Try.Resolve): Warn when try has both general
10874         exception handlers.
10875         
10876         * typemanager.cs: runtime_compatibility_attr_type new predefined
10877         type.
10878
10879 2005-10-26  Raja R Harinath  <harinath@gmail.com>
10880
10881         Fix #76419.
10882         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
10883         treat it as an empty parameter list.
10884
10885 2005-10-26  Raja R Harinath  <rharinath@novell.com>
10886
10887         Fix #76271.     
10888         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
10889         ResolveAsTypeStep silent.
10890         * statement.cs (Block.AddConstant): Mark block as used.
10891         (Block.ResolveMeta): Avoid piling on error messages
10892         if a constant initializer resolution fails.
10893
10894 2005-10-25  Raja R Harinath  <rharinath@novell.com>
10895
10896         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
10897         Remove.
10898         (NamespaceEntry.VerifyAllUsing): New.
10899         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
10900         behaviour.  Delegates actual resolution of alias to ...
10901         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
10902         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
10903         Update.
10904         * driver.cs (Driver.MainDriver): Update.
10905         
10906         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
10907         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
10908         property.
10909         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
10910         Remove.
10911         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
10912         RootNamespace.DefineNamespacesForAll.
10913
10914 2005-10-24  Raja R Harinath  <harinath@gmail.com>
10915
10916         * typemanager.cs (assemblies, external_aliases, modules)
10917         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
10918         (ComputeNamespaces, GetRootNamespace): Remove extra staging
10919         overhead.  Move resposibility ...
10920         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
10921         * driver.cs, attribute.cs, codegen.cs: Update to changes.
10922
10923 2005-10-23  Raja R Harinath  <harinath@gmail.com>
10924
10925         * namespace.cs (RootNamespace.all_namespaces): Renamed from
10926         cached_namespaces.  Improve usage.
10927         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
10928         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
10929         Move from GlobalRootNamespace and simplify.
10930         (RootNamespace.Global): Make instance variable.
10931         (RootNamespace.RootNamespace): Add "alias name" parameter.
10932         (GlobalRootNamespace): Simplify drastically.
10933         (Namespace.Lookup): Don't use GetNamespace.
10934         * typemanager.cs (GetRootNamespace): Rename from
10935         ComputeNamespaceForAlias.
10936         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
10937
10938 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
10939
10940         * anonymous.cs (AnonymousContainer): Don't crash when container
10941         doesn't exist.
10942
10943 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
10944
10945         * expression.cs (Binary.DoResolve): Warn when comparing same
10946         values.
10947
10948 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
10949
10950         Fix #76486.
10951         * expression.cs (Binary.DoResolve): It looks like there are no
10952         convetsion rules in enum context.
10953
10954 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10955
10956         Add support for extern alias qualifiers.
10957         * typemanager.cs: Move some LookupTypeReflection code
10958         to namespace.cs, to have cleaner code. Added some methods
10959         to help us keep track of the extern aliased references.
10960         * driver.cs: Add suport for extern alias assemblies on command
10961         line and check for their warnings/errors. Also keep track of the
10962         extern aliased assemblies.
10963         * namespace.cs: Move the global functionality of Namespace
10964         to GlobalRootNamespace/RootNamespace. Now the global namespace
10965         is GlobalRootNamespace.Globa. Also the code moved from 
10966         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
10967         Finally added LocalAliasEntry (AliasEntry before) and
10968         ExternAliasEntry, to handle alias statements.
10969         * cs-parser.jay: Add support in the grammar for extern alias
10970         statement.
10971         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
10972         Update callings to Namespace (now in GlobalRootNamespace).
10973
10974 2005-10-18  Raja R Harinath  <rharinath@novell.com>
10975
10976         Fix #76371.
10977         * class.cs (TypeContainer.DefineType): Move updating of
10978         topological sort earlier in the code.
10979         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
10980
10981 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
10982
10983         Fix #76273.
10984         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
10985         
10986         * constant.cs (Constant.TryReduce): Moved from Cast class.
10987         (Reduce): Made little bit more OO and fixed missing conversions.
10988         
10989         * ecore.cs (Reduce): Implemented.
10990         (Binary.EnumLiftUp): New method to upgrade values to enum values.
10991         
10992         * literal.cs (Reduce): Implemented.
10993         
10994         * class.cs: Reverted Miguel's wrong commit.
10995
10996 2005-10-14  Miguel de Icaza  <miguel@novell.com>
10997
10998         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
10999
11000 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11001
11002         * cs-parser.jay, expression.cs : CS0214 was missing error location
11003           for constants. Fixed bug #76404.
11004
11005 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11006
11007         Fix #76370.
11008         * convert.cs (ExplicitConversionCore): Fixed object->enum
11009         conversion.
11010
11011 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11012
11013         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11014         InstanceExpression.
11015         (PropertyExpr.EmitCall): Likewise.
11016         * expression.cs (Invocation.EmitArguments): Handle case where
11017         arguments == null.
11018         (Invocation.EmitCall): Avoid allocating temporary variable if
11019         there are no arguments.
11020
11021 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11022
11023         Fix #76323.
11024         * convert.cs (ImplicitConversionStandard): Move conversion of
11025         void* to arbitrary pointer types ...
11026         (ExplicitConversionStandard): .. here.
11027         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11028         error to always print typenames.
11029
11030 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11031
11032         * convert.cs (GetConversionOperator): Rename from
11033         GetConversionOperators.  Move operator selection code from ...
11034         (UserDefinedConversion): ... here.
11035
11036 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11037
11038         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11039         conversion.
11040
11041 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11042
11043         * assign.cs (Assign.DoResolve): Error method changed.
11044
11045         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11046         
11047         * const.cs (ResolveValue): Reset in_transit immediately.
11048         
11049         * constant.cs: Error method changed.
11050         
11051         * convert.cs: Removed useless location parameter.
11052         (ExplicitNumericConversion): Don't do double enum check.
11053         (ExplicitConversionCore): Renamed from ExplicitConversion.
11054         (ExplicitUnsafe): Extracted from ExplicitConversion.
11055         (ExplicitConversion): Uses for error reporting.
11056         
11057         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
11058         error messages.
11059         (ResolveBoolean): Uses common error method.
11060         (CastToDecimal): Get rid of ec.
11061         (CastFromDecimal): Optimized.
11062         (ConvCast): Get rid of ec.
11063         
11064         * enum.cs (ResolveValue): Reset in_transit immediately.
11065         (Emit): Return after first error.
11066         
11067         * expression.cs: Convert changes.
11068         
11069         * literal.cs: Error method changed.
11070         
11071         * statement.cs: Error method changed.
11072
11073 2005-10-03  Raja R Harinath  <rharinath@novell.com>
11074
11075         * support.cs (SeekableStreamReader.Position): Don't error out when
11076         the requested position is just beyond the end of the current
11077         buffered data.
11078
11079 2005-09-28  Raja R Harinath  <rharinath@novell.com>
11080
11081         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
11082         try to keep in sync with the byte count of the underlying Stream.
11083         However, this limits us to a window size of 2048 characters: i.e.,
11084         the maximum lookahead of our lexer/parser can be 2048 characters.
11085
11086 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
11087
11088         Fix #76255.
11089         * driver.cs: Fix compilation files with full root path.
11090
11091 2005-09-25  Miguel de Icaza  <miguel@novell.com>
11092
11093         * report.cs (SymbolRelatedToPreviousError): Format the output so
11094         it does not use an open parenthesis that is never closed. 
11095
11096         * driver.cs: Follow coding guidelines
11097
11098 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11099
11100         Fix #72930.
11101         * const.cs (Const.ResolveValue): Check for assigning non-null
11102         value to reference type.
11103
11104 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11105
11106         * anonymous.cs: Implemented ExprClassName.
11107         
11108         * assign.cs (Assign.DoResolve): Don't chrash when type is not
11109         delegate.
11110         
11111         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
11112         check.
11113         
11114         * class.cs (StaticClass.DefineContainerMembers): Report protected
11115         members as error.
11116         
11117         * codegen.cs: if(ed) PRODUCTION.
11118         
11119         * convert.cs (Error_CannotImplicitConversion): Better error
11120         distinction.
11121         
11122         * cs-parser.jay: More error checks.
11123         
11124         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
11125         
11126         * driver.cs (CSCParseOption): Enabled wrong option check.
11127         
11128         * ecore.cs (Expression.ExprClassName): Turned to property.
11129         (MemberExpr.CheckIntermediateModification): For checking boxed
11130         value types     modification.
11131         
11132         * statement.cs (Fixed.Resolve): Expression type must be
11133         convertible to fixed type.
11134         (CollectionForeach.GetEnumeratorFilter,TryType):
11135         Small refactoring for easier error checking.
11136
11137 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
11138
11139         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
11140         attributes.
11141         
11142         * class.cs (GeneratedBaseInitializer): New class for customization
11143         compiler generated initializers.
11144         (MemberBase.DoDefine): Check Obsolete attribute here.
11145         (FieldMember.DoDefine): Ditto.
11146         
11147         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
11148         constants.
11149         
11150         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
11151         (MemberCore.GetObsoleteAttribute): Removed argument.
11152         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
11153         (MemberCore.CheckObsoleteType): New helper.
11154         
11155         * delegate.cs,
11156         * enum.cs,
11157         * statement.cs: Updates after MemberCore changes.
11158         
11159         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
11160         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
11161         
11162         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
11163         obsolete attribute for compiler construct.
11164         (As.DoResolve): Cache result.
11165         
11166         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
11167
11168 2005-09-26  Raja R Harinath  <rharinath@novell.com>
11169
11170         Fix #76133.
11171         * expression.cs (This.VerifyFixed): In a value type T, the type of
11172         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
11173         value type R, 'this' is treated as a value parameter.
11174
11175 2005-09-22  Miguel de Icaza  <miguel@novell.com>
11176
11177         * statement.cs (Lock): Use the TemporaryVariable class instead of
11178         manually using local variables as those do not work when variables
11179         are captured.
11180
11181         * ecore.cs: Moved the TemporaryVariable class from being a nested
11182         class inside Foreach to be a public class that can be employed in
11183         other places. 
11184
11185 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
11186
11187         * cs-parser.jay: interface_accessors replaced by
11188         accessor_declarations.
11189
11190         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
11191         location.
11192         
11193         * statement.cs (GotoCase.Resolve): Convert null constant to
11194         null case.
11195         (SwitchLabel.ResolveAndReduce): Ditto.
11196         (SwitchLabel.NullStringCase): Custom null stamp.
11197         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
11198         
11199         typemanager.cs (CSharpSignature): Don't skip first argument
11200         for full names.
11201
11202 2005-09-18  Miguel de Icaza  <miguel@novell.com>
11203
11204         * driver.cs: Set InEmacs based on the environment variable EMACS. 
11205
11206         * location.cs (InEmacs): in this mode, do not report column
11207         location as it confuses Emacs.
11208
11209 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
11210
11211         * cfold.cs, constant.cs, convert.cs, ecore.cs,
11212         expression.cs, iterators.cs, literal.cs: Store constants and
11213         literals location.
11214         
11215         * class.cs (MemberBase.ShortName): Pass location.
11216         
11217         * cs-parser.jay: Some location fixes.
11218         
11219         * ecore.cs (Expression.Location): Made virtual.
11220
11221 2005-09-05  Miguel de Icaza  <miguel@novell.com>
11222
11223         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
11224         if the underlying types are the same, otherwise we need to produce
11225         code that will do the proper cast.
11226
11227         This was exposed by Marek's constant rewrite which produced
11228         invalid code for the call site:
11229
11230         enum X : long { a }
11231         void Method (X v) {}
11232
11233         Method ((X) 5)
11234
11235         This fixes test-49.cs
11236
11237 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11238
11239         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
11240           Type/Object should be allowed as well. Fixed bug #75968.
11241
11242 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11243
11244         * expression.cs : (Binary.DoResolve): when one is enum constant and
11245           another is constant 0, then return enum one *as enum type*.
11246           Fixed bug 74846.
11247
11248 2005-09-02  Raja R Harinath  <rharinath@novell.com>
11249
11250         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
11251         internal.
11252
11253         Fix #75941.
11254         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
11255         flow-branching for LocalVariableReferences in case we were invoked
11256         from a MemberAccess.
11257         * expression.cs (LocalVariableReference.VerifyAssigned): New.
11258         Carved out of ...
11259         (LocalVariableReference.DoResolveBase): ... this.
11260         (MemberAccess.Resolve): Do the check that was disabled during
11261         SimpleNameResolve.
11262
11263 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11264
11265         * class.cs :
11266           (PartialContainer.Create): check abstract/sealed/static strictly
11267           but abstract/sealed can exist only at one side. Fixed bug #75883.
11268
11269 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
11270
11271         Fix #75945.
11272         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
11273         specified, don't default to UnmanagedType.I4.
11274
11275 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11276
11277         * expression.cs : conditional operator should check possibly
11278           incorrect assign expression. Fixed bug #75946.
11279
11280 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11281
11282         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
11283           Reverting the change. gmcs is much complex than mcs on this matter.
11284
11285 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11286
11287         * cs-tokenizer.cs : To read another token ahead of the actual 
11288           consumption, use new SavedToken and cache token instead of moving
11289           back the stream with SeekableStreamReader (it seemed problematic).
11290         * cs-parser.jay,
11291           driver.cs : Thus use StreamReader directly.
11292         * support.cs : Thus removed SeekableStreamReader.
11293
11294 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11295
11296         Fix #75934.
11297         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
11298         (ScopeInfo.EmitScopeType): Use it to construct field names from
11299         names of captured locals.
11300
11301         Fix #75929.
11302         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
11303         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
11304         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
11305         (ExplicitConversion): Remove enum cases already handled by
11306         implicit conversion.  Move implicit conversion check to the beginning.
11307         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
11308         * expression.cs (ArrayCreation.EmitDynamicInitializers):
11309         Don't treat System.Enum as a struct.
11310
11311 2005-08-30  Jb Evain  <jbevain@gmail.com>
11312
11313         * attribute.cs: handles as expression in parameters.
11314
11315 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11316
11317         Fix #75802.
11318         * class.cs (TypeContainer.VerifyClsName): Don't use a
11319         PartialContainer when verifying CLS compliance.
11320         (AbstractPropertyEventMethod): Set Parent here, ...
11321         (PropertyMethod): ... not here.
11322
11323 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
11324
11325         * attribute.cs : escaped attribute name should not be allowed to be
11326           resolved (e.g. @class as classAttribute). Fixed bug #75930.
11327
11328 2005-08-29  Raja R Harinath  <rharinath@novell.com>
11329
11330         Fix #75927.
11331         * convert.cs (ImplicitStandardConversionExists): Allow zero also
11332         when converting a long constant to unsigned long.
11333         * expression.cs (Invocation.OverloadResolve): Add sanity check to
11334         detect where IsApplicable and VerifyArgumentsCompat disagree.
11335
11336 2005-08-29  Raja R Harinath  <rharinath@novell.com>
11337         and Carlos Alberto Cortez  <carlos@unixmexico.org>
11338
11339         Fix #75848.
11340         * class.cs (TypeContainer.CanElideInitializer): New helper.
11341         (TypeContainer.EmitFieldInitializers): Use it to determine if we
11342         can safely emitting the initializer of a field.
11343
11344 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11345
11346         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
11347           allowed inside a switch (without loop). Fixed bug #75433.
11348
11349 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
11350
11351         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
11352         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
11353
11354 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11355
11356         * driver.cs : kinda reverting the default encoding changes (not exact 
11357           revert since I noticed that "codepage:reset" might not work fine).
11358
11359 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11360
11361         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
11362           Location. Now getter and setter store location correctly.
11363           (errors/cs0111-12.cs now reports the expected location.)
11364
11365 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
11366
11367         * driver.cs : Use default encoding on the environment.
11368           Removed (now that) extra parameter for SeekableStreamReader.
11369         * support.cs : (SeekableStreamReader) third .ctor() argument for
11370           StreamReader is not required (always true). preamble size could
11371           be acquired in simpler and safe way.
11372
11373 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
11374
11375         * cs-parser.jay: report CS0642 at warning level 3
11376           and report CS0642 for an if else statement also
11377           fixes bug #74745. Patch by John Luke (and a bit
11378           modified by me).
11379           Removed extra CS0642 warning check for "while",
11380           "for" and "fixed".
11381         * statement.cs: In Block.Resolve(), CS0642 check
11382           is reimplemented to check a sequence of an empty
11383           statement and a block.
11384
11385           Both fix bug #66777.
11386
11387 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
11388
11389         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
11390         detection until I fix it.
11391         
11392         * cs-tokenizer.cs: Changed error message.
11393         
11394         * cs-parser.jay: Fixed 2 error locations.
11395         
11396         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
11397         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
11398         properties.
11399         
11400         * enum.cs (GetSignatureForError): Fixed.
11401         
11402         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
11403         method detection.
11404         
11405         * class.cs,
11406         * typemanager.cs (RegisterProperty): Removed.
11407         
11408         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
11409
11410 2005-08-24  Raja R Harinath  <rharinath@novell.com>
11411
11412         Fix #75874.
11413         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
11414         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
11415
11416 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11417
11418         * expression.cs : tiny fix is required for not warning positive ulong.
11419           See test-441.cs.
11420
11421 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11422
11423         * expression.cs : add CS0652 check for constant and integral
11424           expression. Fixed bug #53974.
11425
11426 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11427
11428         * expression.cs : in DoNumericPromotions(), check if there is implicit
11429           conversion overload for string (to check CS0034). Fixed bug #52492.
11430
11431 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11432
11433         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
11434
11435 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11436
11437         * ecore.cs : report location when it is *not* Null.
11438
11439 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
11440
11441         * codegen.cs,
11442           ecore.cs,
11443           flowanalysis.cs,
11444           expression.cs:
11445           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
11446           correctly. Fixed bug #75721.
11447
11448 2005-08-23  Raja R Harinath  <rharinath@novell.com>
11449
11450         * support.cs (SeekableStreamReader.Position): Avoid an expensive
11451         loop that performs 'min (pos, char_count)'.
11452
11453         Fix #75862.
11454         * expression.cs (Unary.ResolveOperator): Don't discard implicit
11455         converted value in Operator.OnesComplement.
11456
11457 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
11458
11459         * anonymous.cs: If the anon method is pulled into a helper class,
11460         it needs to be `internal' not `private'. Fixes runtime behavior on
11461         msft. bug #75704
11462
11463 2005-08-20  Martin Baulig  <martin@ximian.com>
11464
11465         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11466         scope if we don't already have it.
11467
11468         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
11469         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
11470         fixes #75867.
11471
11472 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
11473
11474         Fix #75803
11475         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
11476         is a partial class.
11477
11478 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
11479
11480         The big constants rewrite
11481         Fix #75746, #75685 and more
11482         As a side effect saved 1MB for MWF ;-)
11483         
11484         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
11485         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
11486         enum based for corlib compilation.
11487         
11488         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
11489         subtractions.
11490         
11491         * class.cs (FixedField.Define): Use ResolveAsConstant.
11492         
11493         * const.cs (IConstant): Interface constants and enums.
11494         (Const.ResolveValue): New method for constant resolvning.
11495         (ExternalConstant): Constants from imported assemblies.
11496         
11497         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
11498         conversion; like enums.
11499         (Constant.ToType): Converts this constant to different type.
11500         (Constant.Increment): Adds 1.
11501         
11502         * convert.cs (ImplicitConversionRequired): Simplified.
11503         
11504         * cs-parser.jay: Create EnumMember directly.
11505         
11506         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
11507         
11508         * doc.cs (GenerateEnumDocComment): Removed.
11509         
11510         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
11511         (ConvertIntLiteral): Removed.
11512         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
11513         
11514         * enum.cs (EnumMember): Implement IConstant.
11515         (Enum.IsValidEnumConstant): Removed.
11516         (Enum.GetNextDefaultValue): Removed.
11517         (Enum.FindMembers): Updated.
11518         (Enum.GenerateDocComment): Iterate enum members.
11519         
11520         * expression.cs (Cast.TryReduce): Handle enums correctly.
11521         (New.Constantify): Made public.
11522         (MemberAccess.DoResolve): Removed contant specific if(s).
11523         
11524         * literal.cs (NullLiteral): Implement new abstract methods.
11525         
11526         * statement.cs (GotoCase.Resolve): Use new constant methods.
11527         (SwitchLabel.ResolveAndReduce): Use new constant methods.
11528         
11529         * typemanager.cs (LookupEnum): Removed.
11530         (IsEnumType): Fixed to work with corlib.
11531         (RegisterConstant): Removed.
11532         (LookupConstant): Removed.
11533         (GetConstant): Changed to work with IConstant.
11534
11535 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
11536
11537         * location.cs : Fixed overflown (>255) column number.
11538
11539 2005-08-03  Raja R Harinath  <rharinath@novell.com>
11540
11541         First cut of the qualified-alias-member feature.
11542         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
11543         token.
11544         * cs-parser.jay (DOUBLE_COLON): New token.
11545         (namespace_or_type_name): Add rule for recognizing
11546         qualified-alias-members.
11547         (primary_expression): Likewise.
11548         (element_access): Allow QualifiedAliasMember as a possible
11549         type-bearing expression.
11550         (local_variable_type, local_variable_pointer_type): Likewise.
11551         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
11552         aliases in the current and enclosing namespace declarations.
11553         (NamespaceEntry.UsingAlias): Add CS0440 warning.
11554         * decl.cs (MemberName.is_double_colon): New.
11555         (MemberName.MemberName): Add new constructor for alias-member.
11556         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
11557         * expression.cs (QualifiedAliasMember): New expression type.
11558
11559 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11560
11561         * location.cs : it borked when no argument was specified.
11562
11563 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11564
11565         * location.cs : tiny ToString() format fix.
11566
11567 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11568
11569         * statement.cs : oops, it was missing.
11570
11571 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
11572
11573         A set of fixes for precise line/column location.
11574
11575         * location.cs :
11576           "token" field now holds a file/line "delta", a line number offset 
11577           from the segment, and a column number. See also:
11578           http://lists.ximian.com/pipermail/mono-devel-list/2004-
11579           December/009508.html
11580           Removed static IsNull. Use instance IsNull property instead.
11581         * cs-tokenizer.cs :
11582           For some tokens it stores Location. For Identifier it stores
11583           LocatedToken which is a pair of string name and location.
11584           Column numbers are adjusted only at getChar().
11585         * report.cs :
11586           Use Location.ToString() for reporting (it now contains column).
11587         * cs-parser.jay :
11588           Largely modified to use LocatedToken instead of
11589           string (IDENTIFIER), and to acquire Location from some tokens.
11590         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
11591           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
11592           codegen.cs :
11593           Now MemberName holds Location. DeclSpace.ctor() receives Location
11594           as a parameter. Removed extra parameters to all derived classes.
11595           Replaced Location.IsNull() with instance property.
11596         * assign.cs, expression.cs :
11597           Added .ctor() overload that omits Location.
11598         * attribute.cs :
11599           Added "nameEscaped" flag that indicates the identifier was escaped
11600           in the source file. This fixes bug #57047.
11601
11602 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
11603
11604         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
11605         New method, looking for lo-case imported cls type.
11606
11607         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
11608         here.
11609
11610         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
11611
11612         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
11613
11614         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
11615         all_imported_types.
11616         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
11617
11618         Optimized to save 3.5 MB for SWF compilation.
11619
11620 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
11621
11622         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
11623         (PartialContainer.Create): Moved logic AddToContainer.
11624         (PartialContainer.MarkForDuplicationCheck): Shares name.
11625         
11626         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
11627         place.
11628         
11629         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
11630         initialization.
11631         (Namespace.GetSignatureForError): New method.
11632         
11633         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
11634         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
11635
11636 2005-08-01  Raja R Harinath  <rharinath@novell.com>
11637
11638         Fix #75669.
11639         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
11640         member lookup rather than qualifier_type, since qualifier_type can
11641         be null.
11642
11643 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
11644
11645         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
11646         enum member.
11647
11648 2005-07-31  Miguel de Icaza  <miguel@novell.com>
11649
11650         * statement.cs: Copy the local exception into the exception
11651         captured local.  Fixes 75674
11652
11653 2005-07-31  Raja R Harinath  <harinath@gmail.com>
11654
11655         Fix #75658.
11656         * expression.cs (Invocation.OverloadResolve): Don't report error
11657         CS1501 if error CS1502 has been reported.
11658         (New.DoResolve): Delegate CS1501 reporting to
11659         Invocation.OverloadResolve.
11660
11661         Fix #75656.
11662         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
11663         invariant-meaning-in-block property in an enclosing block if
11664         necessary.
11665
11666 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
11667
11668         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
11669         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
11670         (Switch.CheckSwitch): Just save 50kb for SWF.
11671
11672 2005-07-27  Martin Baulig  <martin@ximian.com>
11673
11674         * anonymous.cs (CaptureContext.AddField): Added
11675         `AnonymousContainer am' argument; compute its toplevel scope if
11676         it's not already computed.  Fixes #75649.
11677
11678 2005-07-26  Raja R Harinath  <rharinath@novell.com>
11679
11680         Fix #75628.
11681         * class.cs (Constructor.Emit): Reset block to null if the block
11682         resolve fails.
11683
11684 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
11685
11686         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
11687
11688 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
11689
11690         * class.cs (MethodData.Define): Check whether accessor implementing
11691         interface is public.
11692
11693         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
11694
11695 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
11696
11697         Fix #57245
11698         * namespace.cs (LookupType): Moved same type check to...
11699         
11700         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
11701         with the same name.
11702
11703 2005-07-21  Raja R Harinath  <rharinath@novell.com>
11704
11705         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
11706         already found a typebuilder.
11707         * class.cs (MethodCore.IsDuplicateImplementation): Compare
11708         MemberNames, not strings.
11709
11710         * const.cs (Error_ExpressionMustBeConst): 
11711         Rename from Error_EpressionMustBeConst.
11712         * const.cs, class.cs, statement.cd: Update.
11713
11714 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
11715
11716         Fix #65573
11717
11718         * const.cs (Const.LookupConstantValue): Report missing contant expression
11719         everytime.
11720         (Error_EpressionMustBeConstant): Only one error method.
11721
11722         * class.cs, statement.c: Updated.
11723
11724 2005-07-20  Raja R Harinath  <rharinath@novell.com>
11725
11726         * statement.cs (Block.Flags): Add back HasVarargs.
11727         (Block.flags): Make protected.
11728         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
11729
11730         * typemanager.cs (types, typecontainers, user_types): Remove.
11731         (UserTypes, TypeContainers): Likewise.
11732         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
11733         (CleanUp, Reset): Update.
11734         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
11735         (GetNestedType): Use Type.GetNestedType.
11736         (CoreLookupType): Take two arguments, the namespace and the
11737         basename of the type.  Update to use the Namespace.Lookup
11738         mechanism.
11739         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
11740         (RealMemberLookup): Use IsNestedChildOf instead of playing with
11741         string concatenation and substring matches.
11742         * class.cs, enum.cs, delegate.cs: Update to changes.
11743
11744 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
11745
11746         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
11747         Expression and made virtual.
11748
11749         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
11750         (ImplicitStandardConversionExists): Fixed `byte' typo ?
11751
11752         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
11753
11754         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
11755         error message.
11756
11757         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
11758         change.
11759
11760 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
11761
11762         Fix #57707
11763         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
11764         AssemblyCultureAttribute is not used on executable.
11765
11766         * rootcontext.cs,
11767         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
11768
11769 2005-07-16  Raja R Harinath  <rharinath@novell.com>
11770
11771         Fix #60638.
11772         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
11773         New.  Reports CS0252/CS0253.
11774         Mostly taken from preliminary patch by Duncak Mak.
11775         (Binary.DoResolveOperator): Store results of operator lookup.
11776         Use them to detect if we need to warn about unintended reference
11777         comparisons.
11778
11779 2005-07-15  Raja R Harinath  <rharinath@novell.com>
11780
11781         Fix #72969.
11782         * namespace.cs (Namespace.Lookup): Add back location parameter.
11783         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
11784         * delegate.cs, ecore.cs, expression.cs: Update to changes.
11785
11786         * codegen.cs (EmitContext.DeclSpace): Make readonly.
11787         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
11788         (Namespace.LookupType): ... this.
11789         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
11790         of namespaces.
11791         * typemanager.cs (LookupTypeReflection): Remove buggy code that
11792         purported to handle pointers.
11793         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
11794         CoreLookupType.
11795
11796 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
11797
11798         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
11799         type as namespace.
11800
11801 2005-07-15  Raja R Harinath  <rharinath@novell.com>
11802
11803         * namespace.cs (Namespace.Lookup): Drop location parameter.
11804         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
11805         (NamespaceEntry.Lookup): ... this.
11806         (NamespaceEntry.Error_AmbiguousTypeReference):
11807         Move here from DeclSpace.
11808         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
11809         names ...
11810         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
11811         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
11812         Move to NamespaceEntry.
11813         * delegate.cs, expression.cs: Update to changes.
11814
11815 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
11816
11817         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
11818         CheckAttributeType and refactored.
11819         (Attribute.ResolvePossibleAttributeType): Changed to reuse
11820         ResolveAsTypeTerminal error handling.
11821         (ResolveAsTypeTerminal): Introduced because of global attributes extra
11822         handling.
11823         (GetSignatureForError): Print errors in same way.
11824
11825         * class.cs,
11826         * codegen.cs: Reflect attribute GetSignatureForError change.
11827
11828         * ecore.cs,
11829         * expression.cs: Add silent parameter to ResolveAsTypeStep.
11830
11831         * namespace.cs (UsingEntry): Refactored to make fields private.
11832
11833         * assign.cs,
11834         statement.cs: Error_UnexpectedKind has extra parameter.
11835
11836 2005-07-14  Raja R Harinath  <rharinath@novell.com>
11837
11838         * ecore.cs (IAlias): Remove.
11839         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
11840         that implement the interface.
11841         * namespace.cs (Namespace): Likewise.
11842         (Namespace.declspaces): Renamed from 'defined_names'.
11843         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
11844         DeclSpace instead of an IAlias.
11845         * tree.cs (Tree.AddDecl): Update.
11846
11847 2005-07-12  Raja R Harinath  <rharinath@novell.com>
11848
11849         * statement.cs (Block.Flags); Remove HasVarargs.
11850         (Block.HasVarargs): Move to ToplevelBlock.
11851         (Block.ThisVariable, Block.AddThisVariable): Likewise.
11852         (Block.Variables): Make protected.  Initialize variable hashtable
11853         if necessary.
11854         (Block.AddVariable): Update.
11855         (Block.Resolve): Update to changes.
11856         (ToplevelBlock.HasVarargs): New boolean.
11857         (ToplevelBlock.ThisVariable): Move here from Block.
11858         (ToplevelBlock.AddThisVariable): Likewise.
11859         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
11860         * expression.cs (This.ResolveBase): Update to changes.
11861         (ArglistAccess.DoResolve): Likewise.
11862
11863 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
11864
11865         Fix #75321
11866         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
11867
11868         * class.cs (TypeContainer.VerifyMembers): Distinguish between
11869         not used and not used & assigned.
11870         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
11871
11872 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
11873
11874         Fix #75053
11875         * expression.cs (Is.DoResolve): null is never provided type.
11876
11877 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
11878
11879         Fix #52496
11880         * cs-parser.jay: Less strict event error rule to catch more errors.
11881
11882 2005-07-08  Martin Baulig  <martin@ximian.com>
11883
11884         Fix test-iter-10.cs - distinguish whether we `yield' in a property
11885         gettter (allowed) or setter (not allowed).
11886
11887         * class.cs (Accessor): Implement IIteratorContainer.
11888         (Accessor.Yields): New public field.
11889         (PropertyBase.PropertyMethod.Define): Handle iterators on a
11890         per-accessor basis.
11891
11892         * cs-parser.jay
11893         (get_accessor_declaration, set_accessor_declaration): Set the
11894         `yields' flag on the accessor, not the property.
11895         (property_declaration): Do the iterators check on a per-accessor
11896         basis and not for the whole property.
11897
11898 2005-07-08  Martin Baulig  <martin@ximian.com>
11899
11900         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
11901         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
11902
11903 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
11904
11905         Fix #74975
11906         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
11907         (ExtractSecurityPermissionSet): Cope with self referencing security
11908         attributes properly.
11909
11910         * driver.cs (SetOutputFile): Made public property OutputFile.
11911
11912 2005-07-07  Raja R Harinath  <rharinath@novell.com>
11913
11914         Fix #75486.
11915         * class.cs (TypeContainer.first_nonstatic_field): Rename from
11916         has_nonstatic_fields.  Make into a FieldBase pointer.
11917         (TypeContainer.AddField): Add CS0282 check.
11918         (TypeContainer.EmitType): Update.
11919
11920 2005-07-06  Miguel de Icaza  <miguel@novell.com>
11921
11922         * cs-tokenizer.cs (consume_identifier): Do not create strings to
11923         compare if they start with __.
11924
11925 2005-07-06  Raja R Harinath  <rharinath@novell.com>
11926
11927         * statement.cs (Switch.SwitchGoverningType): Only look at
11928         UserCasts that don't need implicit standard conversions to one of
11929         the allowed switch types (Fixes test-322.cs).
11930         (LocalInfo.Resolve): Re-enable sanity-test.
11931
11932 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
11933
11934         * cs-tokenizer.cs (consume_identifier): Detect double undescores
11935         
11936         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
11937         
11938         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
11939
11940 2005-07-06  Raja R Harinath  <rharinath@novell.com>
11941
11942         Fix #75472.
11943         * ecore.cs (SimpleName.GetSignatureForError): Add.
11944         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
11945         (MemberAccess.GetSignatureForError): Add.
11946
11947 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
11948  
11949         The big error and warning messages review.
11950         
11951         * anonymous.cs,
11952         * assign.cs,
11953         * attribute.cs,
11954         * class.cs,
11955         * codegen.cs,
11956         * convert.cs,
11957         * cs-parser.jay,
11958         * cs-tokenizer.cs,
11959         * decl.cs,
11960         * delegate.cs,
11961         * doc.cs,
11962         * driver.cs,
11963         * ecore.cs,
11964         * enum.cs,
11965         * expression.cs,
11966         * flowanalysis.cs,
11967         * iterators.cs,
11968         * literal.cs,
11969         * location.cs,
11970         * modifiers.cs,
11971         * namespace.cs,
11972         * parameter.cs,
11973         * pending.cs,
11974         * report.cs,
11975         * rootcontext.cs,
11976         * statement.cs,
11977         * support.cs,
11978         * tree.cs,
11979         * typemanager.cs: Updated.
11980         
11981         * class.cs: (MethodCore.SetYields): Moved here to share.
11982         (PropertyMethod.Define): Moved iterator setup here.
11983         
11984         * iterators.cs: Add orig_method to have full access to parent
11985         container.
11986
11987 2005-07-05  Raja R Harinath  <rharinath@novell.com>
11988
11989         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
11990         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
11991         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
11992         variable of struct type.
11993         * expression.cs (Unary.ResolveOperator): Update to change.
11994         (Indirection.VerifyFixed): Likewise.
11995         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
11996         (ParameterReference.VerifyFixed): Value parameters are fixed.
11997         (This.VerifyFixed): Treat 'this' as a value parameter.
11998         * statement.cs (LocalInfo.IsFixed): Remove.
11999
12000 2005-07-01  Martin Baulig  <martin@ximian.com>
12001
12002         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12003         `ec.EmitThis ()' to get the correct scope.
12004
12005 2005-07-01  Martin Baulig  <martin@ximian.com>
12006
12007         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12008         instance is a ParameterReference; fixes #75299.
12009
12010 2005-07-01  Martin Baulig  <martin@ximian.com>
12011
12012         Reverted Marek's latest patch (r46725):
12013         - it contains structural changes which are neither mentioned in
12014           the ChangeLog nor explained anywhere; for example the additional
12015           argument of EmitContext's and Iterator's .ctor's and the
12016           TypeContainer.DefineMembers() change.
12017         - structural changes like this should go in in seperate patches
12018           and not be hidden in a huge patch which just seems to affect
12019           warnings and errors.
12020           a big and hard to understand patch.
12021         - it breaks iterators and causes regressions, for instance in
12022           test-iter-03.cs.      
12023
12024 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12025
12026         Fix #75412.
12027         * expression.cs (Indexers.map): Remove.
12028         (Indexers.Append): Filter out inaccessible setters and getters.
12029         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12030
12031         Fix #75283.
12032         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12033         Refactored from ...
12034         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12035         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12036         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12037         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12038
12039 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12040
12041         Fix #75322
12042         * class.cs (FieldBase.GetInitializerExpression): One more field
12043         for backup.
12044
12045 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12046
12047         * pending.cs: Do not define a proxy if the base method is virtual,
12048         it will be picked up by the runtime (bug 75270).
12049
12050 2005-06-08  Martin Baulig  <martin@ximian.com>
12051
12052         The big Iterators rewrite :-)
12053
12054         * iterators.cs: Rewrite this to use the anonymous methods framework.
12055
12056         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
12057         before the TypeContainers; see 2test-21.cs.
12058
12059         * class.cs
12060         (TypeContainer.DefineType): Don't create a new EmitContext if we
12061         already have one (this only happens if we're an Iterator).
12062         (TypeContainer.Define): Also call Define() on all our iterators.
12063         (Method.CreateEmitContext): Added support for iterators.
12064
12065         * anonymous.cs
12066         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
12067         (AnonymousContainer.CreateMethodHost): Moved here from
12068         AnonymousMethod and made abstract.
12069         (AnonymousContainer.CreateScopeType): New abstract method.
12070         (AnonymousContainer.IsIterator): New public property.
12071         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
12072         get the ScopeTypeBuilder rather than manually defining it here. 
12073         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
12074         iterators here.
12075
12076         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
12077         before RootContext.DefineTypes().
12078
12079         * codegen.cs (EmitContext.RemapToProxy): Removed.
12080         (EmitContext.CurrentAnonymousMethod): Changed type from
12081         AnonymousMethod -> AnonymousContainer.
12082         (EmitContext.ResolveTopBlock): Protect from being called twice.
12083         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
12084         (EmitContext.EmitThis): Removed the iterators hacks; use the
12085         anonymous methods framework for that.
12086
12087         * statement.cs
12088         (ToplevelBlock.Container): Make this a property, not a field.
12089         (ToplevelBlock.ReParent): New public method; move the
12090         ToplevelBlock into a new container.
12091         (Foreach.TemporaryVariable): Simplify.
12092
12093 2005-06-05  Martin Baulig  <martin@ximian.com>
12094
12095         * statement.cs (LocalInfo.CompilerGenerated): New flag.
12096         (Block.AddTemporaryVariable): New public method; creates a new
12097         `LocalInfo' for a temporary variable.
12098         (Block.EmitMeta): Create the LocalBuilders for all the temporary
12099         variables here.
12100         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
12101         non-iterator variables.
12102
12103 2005-06-05  Martin Baulig  <martin@ximian.com>
12104
12105         * statement.cs (Foreach.TemporaryVariable): Create the
12106         LocalBuilder in the Emit phase and not in Resolve since in some
12107         situations, we don't have an ILGenerator during Resolve; see
12108         2test-19.cs for an example.
12109
12110 2005-06-04  Martin Baulig  <martin@ximian.com>
12111
12112         **** Merged r45395 from GCS ****
12113
12114         The big Foreach rewrite - Part II.
12115
12116         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
12117         with `PropertyInfo ienumerator_getcurrent'.
12118
12119         * codegen.cs (VariableStorage): Removed.
12120
12121         * statement.cs
12122         (Foreach): Derive from Statement, not ExceptionStatement.
12123         (Foreach.CollectionForeach): New nested class.  Moved all the code
12124         dealing with collection foreach here.
12125         (Foreach.ForeachHelperMethods): Removed.
12126         (Foreach.TemporaryVariable): Implement IMemoryLocation.
12127
12128 2005-05-23  Martin Baulig  <martin@ximian.com>
12129
12130         * statement.cs (Try.DoResolve): Don't create a `finally' if we
12131         don't need to.  Fix #75014.
12132
12133 2005-05-20  Martin Baulig  <martin@ximian.com>
12134
12135         Merged r44808 from GMCS.
12136
12137         * class.cs (TypeContainer.CircularDepException): Removed.
12138         (TypeContainer.DefineType): Removed the `InTransit' stuff.
12139         (TypeContainer.CheckRecursiveDefinition): Check for circular class
12140         (CS0146) and interface (CS0529) dependencies here.
12141
12142 2005-06-21  Raja R Harinath  <rharinath@novell.com>
12143
12144         * expression.cs (Invocation.EmitCall): Fix initialization
12145         'this_call' to reflect current behaviour.  Fix indentation.
12146
12147         * convert.cs (FindMostEncompassedType): Add two trivial special
12148         cases (number_of_types == 0 || number_of_types == 1).
12149         (FindMostEncompasingType): Likewise.
12150
12151 2005-06-17  Raja R Harinath  <rharinath@novell.com>
12152
12153         Some cleanups preparing for the fix of #75283.
12154         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
12155         error testing.
12156         (EventExpr.InstanceResolve): Likewise.
12157         (EventExpr.DoResolve): Remove redundant checks.
12158
12159 2005-06-10  Duncan Mak  <duncan@novell.com>
12160
12161         * cs-tokenizer.cs (process_directives): New flag for controlling
12162         the processing of preprocessor directives.
12163         (x_token): After seeing a '#', return Token.NONE instead of going
12164         to handle_preprocessing_directive() when not processing
12165         directives. This avoids unnecessary processing during the token peek in
12166         is_punct().
12167
12168         This fixes #74939.
12169
12170         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
12171         the existing error reporting methods instead of Report.Error.
12172
12173         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
12174         after Raja's rewrite.
12175
12176 2005-06-08  Miguel de Icaza  <miguel@novell.com>
12177
12178         * class.cs: Small fix.
12179
12180 2005-06-08  Raja R Harinath  <rharinath@novell.com>
12181
12182         Fix #75160.
12183         * class.cs (GetPartialBases): Fix return value check of
12184         part.GetClassBases.
12185
12186 2005-06-07  Raja R Harinath  <rharinath@novell.com>
12187
12188         Ensure that partial classes are registered in their enclosing
12189         namespace.  Initial part of fix of #75160.
12190         * tree.cs (Tree.RecordDecl): Add new namespace argument.
12191         Register declspace with namespace here, not in
12192         DeclSpace.RecordDecl.
12193         * cs-parser.jay: Pass namespace to RecordDecl.
12194         * class.cs (PartialContainer.Create): Likewise.
12195         (ClassPart.DefineType): New sanity-check.  Throws an exception if
12196         called.
12197         * decl.cs (Declspace.RecordDecl): Remove.
12198         * namespace.cs (NamespaceEntry.DefineName): Remove.
12199
12200 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
12201
12202         * rootcontext.cs: Reset TargetExt as well.
12203
12204 2005-06-03  Raja R Harinath  <rharinath@novell.com>
12205
12206         * ecore.cs (Expression.Resolve): Emit CS0654 error when
12207         -langversion:ISO-1.
12208
12209 2005-06-02  Raja R Harinath  <rharinath@novell.com>
12210
12211         Fix #75080, cs0119.cs.
12212         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
12213         of ...
12214         (Expression.Resolve): ... this.  Use it.  Remove bogus code
12215         allowing ExprClass.Type and ExprClass.Namespace for
12216         ResolveFlags.VariableOrValue.
12217         (Expression.Resolve) [1-argument variant]: Change default resolve
12218         flags based on language version.
12219         (Expression.Error_UnexpectedKind): Use a simple string array
12220         rather than an ArrayList.
12221         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
12222         not ExprClass.Type.
12223         (TypeOfVoid.DoResolve): Likewise.
12224         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
12225         flags argument -- it always has the same value.
12226
12227 2005-05-31  Raja R Harinath  <rharinath@novell.com>
12228
12229         Fix #75081.
12230         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
12231         Use it in the error message.
12232         * assign.cs, expression.cs, statement.cs: Update.
12233
12234 2005-05-30  Raja R Harinath  <rharinath@novell.com>
12235
12236         Fix #75088.
12237         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
12238         the "almostMatchedMember" case too.
12239         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
12240         that failed the accessibility checks to 'almost_match'.
12241
12242 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
12243
12244         * attribute.cs: Use internal MethodBuilder methods to set
12245         ExactSpelling and SetLastError on PInvoke methods, instead
12246         of passing them via charset.  Fixes #75060.
12247
12248 2005-05-27  Raja R Harinath  <rharinath@novell.com>
12249
12250         * parameter.cs (Parameter): Remove TODO comment.
12251         (Parameter.DefineParameter): Remove Location parameter.
12252         (Parameters.LabelParameters): Likewise.
12253         * class.cs (Constructor.Emit): Update to change.
12254         (MethodData.Emit): Likewise.
12255         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
12256         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
12257
12258 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
12259
12260         * parameter.cs,
12261           Removed Parameters.Location and added Parameter.Location instead.
12262           Removed Location parameter from Emit() and GetSignature().
12263         * anonymous.cs,
12264           class.cs,
12265           cs-parser.jay,
12266           delegate.cs,
12267           iterators.cs,
12268           statement.cs :
12269           Modified all related calls.
12270
12271 2005-05-26  Raja R Harinath  <rharinath@novell.com>
12272
12273         Improve user-defined conversion handling.
12274         * convert.cs (GetConversionOperators): Rewrite.  Return only the
12275         applicable operators.
12276         (AddConversionOperators): New.  Helper for GetConversionOperators.
12277         (FindMostEncompassedType, FindMostEncompassingType): Verify that
12278         there is only one most encompassed/encompassing type.
12279         (FindMostSpecificSource, FindMostSpecificTarget): Remove
12280         "applicable operator" handling.
12281         (UserConversion): Move cache here from GetConversionOperators.
12282         Directly cache the chosen operator, rather than the whole
12283         MethodGroup.
12284         (ExplicitNumericConversion): Fix buggy implementation of Decimal
12285         case.  Allow conversion of decimal to sbyte and byte too.
12286         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
12287         New static methods.  Used to avoid allocating EmptyExpressions in
12288         convert.cs.
12289
12290 2005-05-24  Duncan Mak  <duncan@novell.com>
12291
12292         * ecore.cs (CastFromDecimal): New class for casting a decimal to
12293         another class, used in Convert.ExplicitNumericConversion.
12294         (CastToDecimal): New class, similar to above, but casts to
12295         System.Decimal, used in Convert.ImplicitNumericConversion and also
12296         in explicit convesion from double/float to decimal.
12297
12298         * convert.cs (ImplicitNumericConversion): Handle implicit
12299         conversions to System.Decimal.
12300         (ExplicitNumericConversion): handle explicit conversions to
12301         System.Decimal.
12302
12303         This fixes #68711.
12304         
12305 2005-05-20  Miguel de Icaza  <miguel@novell.com>
12306
12307         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
12308         know the type at this stage, just break through.   Fixes #75008 
12309
12310 2005-05-19  Martin Baulig  <martin@ximian.com>
12311
12312         * delegate.cs
12313         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
12314         to disable error reporting.
12315
12316         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
12317         here since we don't want to report an error; see the new test-336.cs.
12318
12319 2005-05-19  Raja R Harinath  <rharinath@novell.com>
12320
12321         * statement.cs (ToplevelBlock.GetParameterReference)
12322         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
12323         Move here from class Block.
12324         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
12325         * expression.cs (ParameterReference.DoResolveBase): Likewise.
12326
12327 2005-05-18  Martin Baulig  <martin@ximian.com>
12328
12329         Fix #74978.
12330
12331         * flowanalysis.cs
12332         (FlowBranching.Reachability): Add non-static public And() and Or()
12333         methods.
12334         (FlowBranchingSwitch): New class; do the `break_origins' thing
12335         like in FlowBranchingLoop.
12336         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
12337         reachability, not just locals and parameters.
12338         (FlowBranching.MergeChild): Remove some of the hacks for loop and
12339         switch; MergeBreakOrigins() now takes care of that.
12340
12341 2005-05-18  Martin Baulig  <martin@ximian.com>
12342
12343         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
12344         a loop and may leave it, reset the barrier; fixes #74974.
12345
12346 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
12347         
12348         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
12349         is back.
12350         
12351         * cs-parser.jay: Catch more lexical errors.
12352         
12353         * report.cs: Add one more Error method.
12354         
12355         * rootcontext.cs,
12356         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
12357
12358 2005-05-17  Martin Baulig  <martin@ximian.com>
12359
12360         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
12361         #70970. 
12362
12363 2005-05-16  Raja R Harinath  <rharinath@novell.com>
12364
12365         Fix test-382.cs.  Emit values of decimal constants.
12366         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
12367         Carved out of ...
12368         (TypeContainer.AddField): ... this.
12369         (TypeContainer.EmitFieldInitializers): Allow the list of fields
12370         with initializers to include 'Const's.
12371         (ClassPart.RegisterFieldForInitialization): Forward to
12372         PartialContainer.
12373         * const.cs (Const.Const): Pass initializer to base class.
12374         (Const.Define): In case of decimal constants, register them for
12375         initialization in a static constructor.
12376
12377 2005-05-14  Martin Baulig  <martin@ximian.com>
12378
12379         * statement.cs (Block.Resolve): Correctly handle unreachable code;
12380         do not call ResolveUnreachable() on unreachable statements in
12381         here, see the comment in the source code.
12382
12383 2005-05-13  Raja R Harinath  <rharinath@novell.com>
12384
12385         Fix #74934.
12386         * expression.cs (BinaryResolveOperator): If one of the operands of
12387         an equality comparison is 'null' and the other is a pointer type,
12388         convert the null to a NullPointer.
12389         * convert.cs (ImplicitReferenceConversion): If the expression is a
12390         NullLiteral and the target type is a pointer type, return a
12391         NullPointer instead.
12392         (ImplicitConversionStandard): Likewise.
12393
12394 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
12395         
12396         * cs-parser.jay: Set readonly context based on special constructs.
12397         
12398         * expression.cs (LocalVariableReference.DoResolveBase): Improved
12399         readonly variable error handling.
12400         
12401         * rootcontext.cs (EmitCode): Don't verify members when error
12402         occurred.
12403         
12404         * statement.cs (LocalInfo): Add reaodnly context information.
12405         (SetReadOnlyContext, GetReadOnlyContext): New methods.
12406
12407 2005-05-13  Raja R Harinath  <rharinath@novell.com>
12408
12409         * statement.cs (Block.Resolve): Revert change below.  Modify fix
12410         for #74041 to initialize 'resolved' to false only for explicit
12411         blocks.  Fixes #74873.
12412
12413 2005-05-12  Raja R Harinath  <harinath@gmail.com>
12414
12415         Fix #74920.
12416         * typemanager.cs (unmanaged_enclosing_types): New.
12417         (IsUnmanagedType): Avoid infloops by using
12418         'unmanaged_enclosing_types' to talk with recursive invocations.
12419
12420 2005-05-13  Martin Baulig  <martin@ximian.com>
12421
12422         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
12423         instance variable, not a local.  Fix #74873.
12424         (Block.ResolveUnreachable): Set it to true here.
12425
12426 2005-05-11  Duncan Mak  <duncan@novell.com>
12427
12428         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
12429         continuing to process for 'arg'.
12430         (handle_preprocessing_directive): Check the argument of the #endif
12431         directive and report error CS1025 if there are any trailing
12432         characters.
12433
12434         According to the C# spec, having even whitespace after the #endif
12435         directive is illegal; however, because we call arg.TrimEnd ()
12436         beforehand, we have the same behavior as csc, allowing whitespace
12437         after the directive.
12438
12439         Fixes #74892.
12440
12441 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
12442
12443         Fix #74863.
12444         
12445         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
12446         (Constructor.GetObsoleteAttribute): Implemented correctly.
12447
12448 2005-05-10  Martin Baulig  <martin@ximian.com>
12449
12450         * support.cs (ReflectionParameters.ParameterModifier): Use
12451         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
12452         and `ParameterAttributes.In'.  Fixes #74884.
12453
12454 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
12455
12456         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
12457         
12458         * expression.cs (Argument.GetParameterModifier): Turned to property.
12459         (Invocation.Error_InvalidArguments): Add more descriptive errors.
12460         
12461         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
12462         its C# equivalent.
12463         
12464 2005-05-09  Raja R Harinath  <rharinath@novell.com>
12465
12466         Fix #74852.
12467         * decl.cs (MemberCache.AddMethods): Register override methods,
12468         rather than non-override methods.
12469         * typemanager.cs (RegisterOverride): New.
12470         (IsOverride): Update.
12471
12472 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
12473
12474         Fix #73105.
12475         
12476         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
12477         recursive declaration.
12478         
12479         * statement.cs (Block.ResolveMeta): Report any error in resolving.
12480         
12481 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
12482
12483         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
12484         
12485         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
12486
12487 2005-05-05  Raja R Harinath  <rharinath@novell.com>
12488
12489         Fix #74797.
12490         * decl.cs (DeclSpace.FamilyAccessible): 
12491         Use TypeManager.IsNestedFamilyAccessible.
12492
12493         Fix reopened #64812.
12494         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
12495         internal'.
12496
12497 2005-05-04  Raja R Harinath  <rharinath@novell.com>
12498             Abin Thomas  <projectmonokochi@rediffmail.com>
12499             Anoob V E  <projectmonokochi@rediffmail.com>
12500             Harilal P R  <projectmonokochi@rediffmail.com>
12501
12502         Fix #64812.
12503         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
12504         allow access to all static members.
12505
12506 2005-05-04  Martin Baulig  <martin@ximian.com>
12507
12508         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
12509
12510 2005-05-04  Martin Baulig  <martin@ximian.com>
12511
12512         Fix #74655.
12513
12514         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
12515         section at the end; make things work if `default' is not the last
12516         section.        
12517
12518 2005-05-04  Martin Baulig  <martin@ximian.com>
12519
12520         Fix #70400.
12521
12522         * statement.cs (Switch): Replaced the `got_default' field with a
12523         `default_section' one.
12524         (Switch.CheckSwitch): Set `default_section' here.
12525         (Switch.Resolve): If we're a constant switch and the constant is
12526         not found, use the default section.
12527
12528 2005-05-03  Martin Baulig  <martin@ximian.com>
12529
12530         * expression.cs (ArrayAccess.EmitGetLength): New public method.
12531
12532         * statement.cs (Foreach.ArrayForeach): New nested class.
12533         (Foreach.TemporaryVariable): New nested class.
12534         (Foreach.EmitArrayForeach): Removed; this is now in the new
12535         ArrayForeach class.
12536
12537 2005-05-03  Raja R Harinath  <rharinath@novell.com>
12538
12539         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
12540         more conservative.
12541         (VerifyPendingMethods): Revert change below.
12542
12543         * typemanager.cs (IsOverride, RegisterNonOverride): New.
12544         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
12545         that used to trigger warning -28.  Remove warning -28.
12546         * expression.cs (Invocation.OverloadResolve): Use
12547         TypeManager.IsOverride to distinguish override methods.
12548
12549         Fix #74773.
12550         * pending.cs (VerifyPendingMethods): If a base type implements the
12551         requested interface, don't bother checking individual methods of
12552         the base type.  As a side-effect, this prevents the creation of
12553         unnecessary proxies.
12554
12555 2005-05-02  Martin Baulig  <martin@ximian.com>
12556
12557         Fix #70182.
12558
12559         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12560         Also `And' the locals if the old vector is null.
12561         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
12562         null; in this case we basically reset all the variables.        
12563
12564 2005-05-02  Martin Baulig  <martin@ximian.com>
12565
12566         Fix #74529.
12567
12568         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
12569         Added `FlowBranching branching' argument; always `and' the
12570         variables instead of `or'ing them unless we're an infinite loop.
12571
12572         * statement.cs (While.Resolve): Create a new sibling unless we're
12573         infinite.       
12574
12575 2005-05-02  Martin Baulig  <martin@ximian.com>
12576
12577         Fix #70140.
12578
12579         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
12580         arguments; use it instead of creating a new TopLevelBlock.
12581         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
12582         our ConstructorInitializer.
12583
12584         * statement.cs
12585         (TopLevelBlock.TopLevelBranching): New public property.
12586         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
12587         and create our `TopLevelBranching'.
12588
12589         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
12590         anonymous method host, use `block.TopLevelBranching' rather than
12591         creating a new branching.
12592
12593 2005-04-20  Miguel de Icaza  <miguel@novell.com>
12594
12595         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
12596         a ScopeInfo, if any of the current children is a child of the new
12597         entry, move those children there.
12598
12599 2005-04-30  Martin Baulig  <martin@ximian.com>
12600
12601         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
12602         at the beginning of a SwitchSection.  Fix #73335.
12603
12604 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
12605
12606         Fix #74378
12607         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
12608         
12609         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
12610         (FieldExpr.DoResolve): Obsolete members are ignored for field
12611         initializers.
12612         
12613 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
12614
12615         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
12616         of arrays detection.
12617
12618         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
12619         verification.
12620         (Field.VerifyClsCompliance): Volatile fields are not compliant.
12621
12622         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
12623         arrays report.
12624
12625 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
12626
12627         * cs-parser.jay: Use the prefered version of -unsafe in error
12628         message.
12629
12630 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
12631
12632         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
12633         circumstances.
12634
12635 2005-04-20  John Luke  <john.luke@gmail.com>
12636
12637         * driver.cs: fix typo in error message, --outout to --output
12638
12639 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
12640
12641         * codegen.cs (InRefOutArgumentResolving): New field.
12642         
12643         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
12644         fields outside contructor.
12645         
12646         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
12647         
12648 2005-04-19  Miguel de Icaza  <miguel@novell.com>
12649
12650         * anonymous.cs (CaptureContext.EmitParameterInstance): The
12651         parameter code was not completed ever, so it was not as up-to-date
12652         as local variables.  Must finish it.
12653
12654         The bug fix was to compare the Toplevel of the block, not the
12655         current block.  Thanks for Ben for pointing this out. 
12656
12657 2005-04-19  Raja R Harinath  <rharinath@novell.com>
12658
12659         * decl.cs (AddMethods): Use the declaring type of the problem
12660         method to determine if we want to squash a warning.
12661
12662 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
12663
12664         * attribute.cs: Removed debug output.
12665
12666         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
12667         
12668         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
12669         Report.Stderr.
12670         
12671 2005-04-18  Raja R Harinath  <rharinath@novell.com>
12672
12673         Fix #74481.
12674         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
12675         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
12676         all null comparisons against reference types.
12677
12678 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
12679
12680         Fix# 74565
12681         * class.cs (TypeContainer.CircularDepException) New nested
12682         exception class.
12683         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
12684         (TypeContainer.DefineType): Removed error, reset InTransit before
12685         exit.
12686         (Class.DefineType): Throw exception when is in Transit.
12687         Catch exception and report error.
12688         (Struct.DefineType): Throw exception when is in Transit.
12689         Catch exception and report error.
12690         (Interface.DefineType): Throw exception when is in Transit.
12691         Catch exception and report error.
12692
12693         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
12694         handle nested exception handlers.
12695
12696         * flowanalysis.cs (InTryWithCatch): New method, search for try with
12697         a catch.
12698
12699         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
12700         InFinally and InCatch storage.
12701
12702         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
12703         (Catch.Resolve): Set and Restore ec.InCatch.
12704         (Try.Resolve): Set and Restore ec.InFinally.
12705         (Try.HasCatch): True when try has catch.
12706
12707 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
12708
12709         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
12710           for the same event member, so exclude such cases from warning 419.
12711           Fixed bug #74633.
12712
12713 2005-04-16  Miguel de Icaza  <miguel@novell.com>
12714
12715         * expression.cs (Binary.ResolveOperator): Apply patch from John
12716         Luke to fix bug 59864: operators &, | and ^ on enumerations
12717         require that the same enum type on both sides.
12718
12719         * driver.cs: Add warnings to old flag usage, this is to assist
12720         people who produce Makefiles and hope that the Makefiles will be
12721         used on Windows.
12722
12723         * class.cs (TypeContainer.EmitType): Moved the definition of the
12724         special $PRIVATE$ field from the resolve phase to the Emit phase.
12725         During resolve we do not know if we are a struct with
12726         HasExplicitLayout, we know this only after the attributes for the
12727         type are emitted.
12728
12729         Set the FieldOffset to zero on the dummy field that we create for
12730         the class.   Fixes 74590.
12731
12732 2005-04-16  Raja R Harinath  <rharinath@novell.com>
12733
12734         Fix #73834.
12735         * ecore.cs (PropertyExpr.resolved): New.
12736         (DoResolve): Use it to handle a case of double resolution here.
12737         Handle a case of identical-name-and-type-name.
12738         * expression.cs (ArrayCreation.CheckIndices): Avoid double
12739         resolution by storing the results of expression resolution back
12740         into the "probes" array.
12741
12742 2005-04-15  Raja R Harinath  <rharinath@novell.com>
12743
12744         Fix cs0208-7.cs and cs0208-8.cs.
12745         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
12746         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
12747         error reporting to point out the reason a struct is not unmanaged.
12748
12749 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
12750
12751         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
12752           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
12753
12754 2005-04-13  Raja R Harinath  <rharinath@novell.com>
12755
12756         Fix #74528.
12757         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
12758         IdenticalNameAndTypeName here.
12759         (EventExpr.InstanceResolve): Likewise.
12760
12761 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
12762
12763         C# 2.0 DefaultCharSetAttribute implementation
12764         
12765         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
12766         which allows us to set GlobalNamespace for every resolve.
12767         (Attribute.ResolveArguments): Cut from Resolve.
12768         (Attribute.GetCharSetValue): Returns CharSet named argument.
12769         (Attribute.DefinePInvokeMethod): Gets default charset from
12770         module settings.
12771         (GlobalAttribute.ResolveAsTypeStep): Override.
12772         (GlobalAttribute.ResolveArguments): Override.
12773         
12774         * class.cs (TypeAttr): Is protected.
12775         
12776         * codegen.cs (ModuleClass.DefaultCharSet): New member.
12777         (ModuleClass.DefaultCharSetType): New memeber.
12778         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
12779         
12780         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
12781         charset from module.
12782         
12783         * delegate.cs (TypeAttr): Override.
12784         (Delegate.DefineType): Use this TypeAttr.
12785         
12786         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
12787         at very early stage (before types are defined) to resolve model
12788         module attributes. It will probably not work with corlib but it
12789         should be ok.
12790         
12791         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
12792         charset from module.
12793         
12794         * typemanager.cs (default_charset_type): New type.
12795
12796 2005-04-13  Raja R Harinath  <rharinath@novell.com>
12797
12798         * decl.cs (MemberCache.AddMethods): Don't warn if
12799         System.Object.Finalize has buggy MethodAttributes.
12800
12801         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
12802         removed below.
12803
12804 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
12805
12806         * doc.cs : detect ambiguous reference to overloaded members.
12807           Fixed bug #71603. MS 1.1 csc does not detect it.
12808
12809 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
12810
12811         * doc.cs : delegates must not be referenced with parameters.
12812           Fixed bug #71605.
12813
12814 2005-04-12  Miguel de Icaza  <miguel@novell.com>
12815
12816         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
12817
12818 2005-04-10  Miguel de Icaza  <miguel@novell.com>
12819
12820         * driver.cs (MainDriver): Stop processing if the CLS stage found
12821         errors. 
12822
12823         (CompilerCallableEntryPoint.InvokeCompiler): Always
12824         reset after execution;   Take a TextWriter argument for the
12825         output.
12826
12827         * report.cs: Use the error stream instead of hardcoding stderr. 
12828
12829 2005-04-09  Miguel de Icaza  <miguel@novell.com>
12830
12831         * class.cs: Reduce code paths to test, too small of an
12832         optimization to make it worth the extra testing.  Always perform
12833         it. 
12834
12835 2005-04-08  Raja R Harinath  <rharinath@novell.com>
12836
12837         Fix #74510.
12838         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
12839         operators that had errors reported on them.
12840
12841 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
12842
12843         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
12844         argument types.
12845         (Attribute.Resolve): Add named argument type checking.
12846         
12847         * class.cs (FixedField.Define): Use IsPrimitiveType
12848         
12849         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
12850         
12851         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
12852         unsafe parameter types.
12853         
12854         * statement.cs (Using.ResolveExpression): Add better error description.
12855         
12856         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
12857         
12858 2005-04-08  Raja R Harinath  <rharinath@novell.com>
12859
12860         Fix #74484.
12861         * attribute.cs (Attribute.GetAttributeUsage): Resolve
12862         AttributeUsageAttribute in the emitcontext of the attribute class,
12863         not in the emitcontext of the attributable entity it was attached to.
12864         * cs-parser.jay: Use 'current_class', not 'current_container',
12865         when creating a GlobalAttribute.
12866
12867 2005-04-08  Alp Toker  <alp@atoker.com>
12868
12869         * pending.cs: The fix to #58413 failed to compile methods implementing
12870         interfaces with/without params modifiers and vice versa, even though
12871         params modifiers aren't part of the signature. Make the modifier check
12872         less strict as in csc.
12873
12874 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
12875             Anoob V E  <projectmonokochi@rediffmail.com>
12876             Harilal P R  <projectmonokochi@rediffmail.com>
12877
12878         Fix #58413.
12879         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
12880         modifiers of pending methods.
12881         (PendingImplementation.PendingImplementation): Initialize it.
12882         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
12883         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
12884         with ParameterData.  Add check for modifiers.
12885         * class.cs (MethodData.Define): Update to changes.
12886
12887 2005-04-07  Raja R Harinath  <rharinath@novell.com>
12888
12889         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
12890
12891 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
12892
12893         * class.cs (PropertyMethod.Define): Check private accessor in abstract
12894         property.
12895         
12896         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
12897         
12898         * rootcontext.cs,
12899         * typemanager.cs: Registered RequiredAttributeAttribute.
12900         
12901 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
12902
12903         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
12904         Warning CS0169 is back at level 3.
12905         (IMethodData.SetMemberIsUsed): New method.
12906         
12907         * decl.cs (IsUsed): New value; moved from FieldBase.Status
12908         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
12909         
12910         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
12911
12912         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
12913         contants.
12914         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
12915         is used.
12916         
12917         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
12918         is used.
12919         
12920         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
12921         to avoid the problems with nested types.
12922
12923 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
12924             Anoob V.E  <projectmonokochi@rediffmail.com>
12925             Harilal P.R  <projectmonokochi@rediffmail.com>
12926             Raja R Harinath  <rharinath@novell.com>
12927
12928         Fix #73820.
12929         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
12930         attribute.
12931         * typemanager (GetConstructor): Make public.
12932
12933 2005-04-05  John Luke  <john.luke@gmail.com>
12934             Raja R Harinath  <rharinath@novell.com>
12935
12936         Fix #62232.
12937         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
12938         struct too.  Return false quicker in a few cases.
12939         (VerifyUnManaged): Use it.
12940
12941 2005-04-05  Raja R Harinath  <rharinath@novell.com>
12942
12943         Fix #74041.
12944         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
12945         not 'unreachable_seen'.
12946
12947 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
12948
12949         * attribute.cs (Attribute.GetValue): Removed unused.
12950         
12951         * codegen.cs (CodeGen.TrimExt): Removed unused.
12952         
12953         * cs-parser.jay (output): Removed unused.
12954         
12955         * cs-tokenizer.cs (hex_digits): Removed unused.
12956         
12957         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
12958         
12959         * expression.cs (Indirection.LoadExprValue): Removed unused.
12960         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
12961         
12962         * iterators.cs (Iterator.param_types): Removed unused.
12963         
12964         * statement.cs (Goto.block): Removed unused.
12965         (ToplevelBlock.did): Removed unused.
12966         (Switch.ResolveConstantSwitch): Removed unused.
12967
12968 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
12969
12970         * rootcontext.cs: Allow mcs to bootstrap with the compilation
12971         resetting thingy.
12972
12973 2005-04-01  Raja R Harinath  <rharinath@novell.com>
12974
12975         Fix #74232 and cs0208-3.cs.
12976         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
12977         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
12978         unmanaged type.  Don't use FieldBuilders when 't' is a
12979         TypeBuilder.  Use ModFlags and MemberType fields.
12980         * class.cs (MemberBase.member_type): Rename from MemberType.
12981         (MemberBase.MemberType): New property.  Determines member_type on
12982         demand.
12983         (MemberBase.DoDefine): Don't initialize MemberType here.
12984         (FieldMember.Define): Likewise.
12985
12986 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
12987
12988         Fix #74241
12989         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
12990         Attributes are emitted there.
12991         
12992 2005-04-01  Raja R Harinath  <rharinath@novell.com>
12993
12994         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
12995         keyword in 'partial enum' too.
12996         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
12997         is not allowed).
12998         Report from Kamil Skalski <nazgul@omega.pl>.
12999
13000         Fix #74309.
13001         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13002         have partial containers too.
13003
13004         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13005         in block' checks to Block.CheckInvariantMeaningInBlock.
13006         * statement.cs (Block.GetKnownVariableInfo): Make private.
13007         (Block.IsVariableUsedInChildBlock): Remove.
13008         (Block.IsVariableUsedInBlock): Likewise.
13009         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13010         conflicting declaration.
13011         (Block.AddVariable): Make error messages less long-winded and more
13012         specific.  Show location of conflicting declaration.
13013         * parameter.cs (Parameters.Location): New readonly property.
13014
13015 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13016
13017         Clean up semantics of invoking ResolveMemberAccess.
13018         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13019         can have an instance, ensure that we pass in a non-TypeExpression
13020         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13021         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13022         argument.  Update to changes and simplify.
13023         (FieldExpr.Emitinstance): Remove CS0120 check.
13024         (PropertyExpr.EmitInstance): Likewise.
13025         * expression.cs (Argument.Resolve): Likewise.
13026         (Invocation.DoResolve): Update to changes in semantics of
13027         InstanceExpression.
13028
13029 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13030
13031         Fix #74241
13032         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13033         customization.
13034         
13035         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13036
13037 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13038
13039         Fix difference in behaviour with commandline invocation.
13040         * driver.cs (Driver.Reset): New.
13041         (CompilerCallableEntryPoint): Call it.
13042
13043         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13044         variable" warnings if the boolean expression failed to resolve.
13045
13046 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13047
13048         * attribute.cs: Fix the union of several permissions when some of them
13049         are unrestricted (so the result isn't an unrestricted permission set).
13050         Fix #74036.
13051
13052 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13053
13054         * ecore.cs (MemberExpr): New class.  Convert from interface
13055         IMemberExpr.
13056         (MemberExpr.ResolveMemberAccess): Refactor and move here from
13057         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
13058         error checks.
13059         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
13060         (MethodGroupExpr.IsExplicitImpl): Remove.
13061         (Expression.GetFieldFromEvent): Remove.
13062         (SimpleName.MemberStaticCheck): Remove.
13063         (SimpleName.DoSimpleNameResolve): Update to changes.
13064         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
13065         (MemberAccess.IdenticalNameAndTypeName): Remove.
13066         (MemberAccess.error176): Move to MemberExpr.
13067         (MemberAccess.DoResolve): Update to changes.
13068         (BaseAccess.DoResolve): Likewise.
13069
13070 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
13071
13072         C# 2.0 Conditional attribute class implementation
13073         
13074         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
13075         Analyzes class whether it has attribute which has ConditionalAttribute
13076         and its condition is not defined.
13077         
13078         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
13079         (Class.IsExcluded): New method. Search for at least one defined
13080         condition in ConditionalAttribute of attribute class.
13081
13082 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13083
13084         * ecore.cs (PropertyExpr): Derive from Expression, not
13085         ExpressionStatement.
13086         (PropertyExpr.EmitStatement): Remove.
13087
13088 2005-03-29  Raja R Harinath  <rharinath@novell.com>
13089
13090         Fix #74060.
13091         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
13092         internal field "value__" of an enum be private.  The examples for
13093         "value__" that I found on MSDN all used FieldAttributes.Private.
13094
13095         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
13096         Don't mention IL method attribute names.
13097
13098         Fix #47991.  Remove a TODO.
13099         * statement.cs (Block.Toplevel): Make into a field.
13100         (Block.Parameters): Move into ToplevelBlock.
13101         (Block.known_variables): Rename from child_variable_names.
13102         (Block.Block): Remove variants that take Parameters.  Initialize
13103         'Toplevel' with the immediately surrounding toplevel block.
13104         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
13105         LocalInfo parameter.
13106         (Block.GetKnownVariableInfo): New.
13107         (Block.IsVariableNameUsedInChildBlock): Update.
13108         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
13109         the block, even though it may not be in scope.
13110         (Block.AddVariable): Remove Parameters parameter.  Use
13111         Toplevel.Parameters instead.
13112         (Block.AddConstant): Remove Parameters parameter.
13113         (Block.GetParameterReference): Update to use Toplevel.Parameters.
13114         (Block.IsParamaterReference): Likewise.
13115         (Block.IsLocalParameter): Likewise.  Simplify a lot.
13116         (ToplevelBlock.Parameters): New.  Moved from Block.
13117         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
13118         initialize Parameters to a non-null value.
13119         * cs-parser.jay: Update to changes.
13120         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
13121         simple names that mean different things in the same block.  Use
13122         Block.IsVariableNameUsedInBlock.
13123
13124 2005-03-28  Raja R Harinath  <rharinath@novell.com>
13125
13126         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
13127         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
13128         GetTypeHandle.  It is possible for a reflected type to derive from
13129         a TypeBuilder (e.g., int[] derives from the TypeBuilder
13130         System.Array during mscorlib compilation).
13131         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
13132         contain a method_hash, don't create one either.  Don't create a
13133         deep copy of the base cache's method_hash.
13134         (MemberCache.SetupCache): Rename back from DeepCopy.
13135         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
13136         already initialized.  If we see an override function, add its
13137         underlying base virtual function to the member_hash too.
13138
13139         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
13140
13141 2005-03-26  Raja R Harinath  <harinath@acm.org>
13142
13143         Fix #73038.
13144         * assign.cs (Assign.DoResolve): When the RHS of an assignment
13145         fails to resolve, ensure that the LHS is still resolved as an
13146         lvalue.
13147
13148 2005-03-25  Raja R Harinath  <harinath@acm.org>
13149
13150         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
13151         ec.ContainerType.
13152         (Enum.current_ec): Remove.
13153         (Enum.LookupEnumValue): Remove EmitContext argument.
13154         Just uses the one created during DefineType.
13155         (Enum.FindMembers): Update.
13156         * expression.cs (MemberAccess.DoResolve): Update.
13157
13158 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
13159
13160         * assign.cs (Assign.DoResolve): Check for CS1717 when
13161         source and target are same (uses Equals).
13162
13163         * expression.cs (LocalVariableReference, ParameterReference,
13164         This): Implemented Equals, GetHashCode.
13165
13166         * statement.cs (Block.GetParameterReference): Removed useless
13167         local variable.
13168
13169 2005-03-22  Raja R Harinath  <rharinath@novell.com>
13170
13171         Fix cs0128.cs
13172         * statement.cs (Block.AddVariable): Ensure that we skip implicit
13173         blocks before deciding whether the error is cs0136 or cs0128.
13174
13175         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
13176         (using_alias_directive, using_namespace_directive): Pass
13177         MemberName, not an expression to Namespace.UsingAlias and
13178         Namespace.Using.
13179         (MakeName): Use the MemberName of the namespace.
13180         * namespace.cs (Namespace.MemberName): New.
13181         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
13182         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
13183         Likewise.
13184         * decl.cs (MemberName.Name): Make readonly.
13185         (MemberName.FromDotted): New "constructor".
13186         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
13187         (MemberCore.Name): Compute from MemberName on demand.
13188         (MemberCore.SetMemberName): Provide a way to change the
13189         MemberName.
13190         (MemberCore.AddToContainer): Don't take a fullname parameter.
13191         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
13192         fully qualified name of the container to the member name.
13193         (TypeContainer.AddToTypeContainer): Use a fully qualified name
13194         only if the type is a member of the root container.
13195         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
13196         MemberName.Left rather than searching for an embedded ".".
13197         (PartialContainer.CreatePart): Update to changes in RootContext.
13198         (MemberBase.ShortName): Turn into a property.  Use
13199         MemberCore.SetMemberName.
13200         (MemberBase.ExplicitInterfaceName): Remove.
13201         (MemberBase.UpdateMemberName): Remove.
13202         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
13203         (PropertyBase.SetMemberName): New override.
13204         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
13205         (Tree.GetDecl): New.
13206         (Tree.AllDecls): Rename from Decls.
13207         * attribute.cs, enum.cs, report.cs: Update to changes.
13208         * driver.cs (MainDriver): Use MemberName.FromDotted on
13209         RootContext.MainClass.
13210
13211 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
13212
13213         * class.cs (FixedField.Define): Check for CS1664 and more sanity
13214         checks.
13215
13216         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
13217
13218 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
13219
13220         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
13221         property accessor modifiers.
13222
13223         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
13224         fixed buffer attribute (CS1716).
13225         (PropertyMethod.HasCustomAccessModifier): When property accessor
13226         has custom modifier.
13227
13228         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
13229         modifiers.
13230         (PropertyExpr.DoResolveLValue): Add CS0272.
13231
13232 2005-03-17  Miguel de Icaza  <miguel@novell.com>
13233
13234         * convert.cs: When converting to a pointer, use the proper Conv.U
13235         or Conv.I depending on the source data type.
13236
13237         * cs-tokenizer.cs: Make the size for large decimal constants,
13238         fixes #72957.
13239
13240 2005-03-17  Martin Baulig  <martin@ximian.com>
13241
13242         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
13243         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
13244
13245 2005-03-17  Martin Baulig  <martin@ximian.com>
13246
13247         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
13248         to bool so we can return an error condition.
13249         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
13250         returned an error.
13251
13252 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
13253
13254         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
13255         attributes.
13256
13257 2005-03-16  Raja R Harinath  <rharinath@novell.com>
13258
13259         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
13260         Refactor to avoid traversing the list of assemblies, and to avoid
13261         string concatenation.
13262         * typemanager.cs (guid_attr_type): Remove.
13263         (negative_hits, pointers, references): Remove hashes.
13264         (type_hash): New.
13265         (GetConstructedType): New.  Uses type_hash to handle constructed
13266         types (arrays, references, pointers).
13267         (GetReferenceType, GetPointerType): Use it.
13268         (GetNestedType): New.  Uses type_hash to handle nested types of
13269         reflected types.
13270         (LookupType, LookupTypeDirect): Remove.
13271         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
13272         'types' hash and LookupTypeReflection directly.
13273         (params_string, params_object): Use GetConstructedType.
13274         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
13275         top-level types.
13276         (Namespace.Lookup): Use cached_types.
13277         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
13278         provided by old TypeManager.LookupType.
13279         * rootcontext.cs (MakeFQN): Remove.
13280         * decl.cs (DeclSpace.MakeFQN): Likewise.
13281         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
13282         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13283         TypeManager.GetConstructedType.
13284         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
13285
13286 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
13287
13288         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
13289         indexers.
13290
13291         * cs-parser.jay: Reports CS1527 for any namespace element.
13292
13293         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
13294         Added CS0407.
13295
13296         * expression.cs (ParameterReference.IsAssigned): Changed error to
13297         CS0269.
13298         (Error_WrongNumArguments): Moved CS0245 detection here.
13299
13300         * statement.cs (Return.Resolve): Add CS1622 report.
13301
13302 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
13303
13304         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
13305
13306 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
13307
13308         * attribute.cs expression.cs: Get rid of some allocations.
13309
13310 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
13311
13312         * doc.cs : just eliminate the latest change.
13313
13314 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13315
13316         * doc.cs : commented out the latest change. It breaks xml-030.cs
13317
13318 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13319
13320         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
13321           fail. So invoke CreateType() in FindDocumentedType().
13322
13323 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13324
13325         * cs-tokenizer.cs : added IsKeyword().
13326         * doc.cs : Detect keyword incorrectly used as identifier.
13327           Allow identifiers prefixed by @.
13328
13329 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
13330
13331         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
13332         It caused exception in namespace resolving (again!).
13333         
13334         * class.cs (Class.ctor): Removed exit.
13335         (PropertyMethod.ctor): ditto.
13336         
13337         * codegen.cs (Codegen.Reset): Reset static data.
13338         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
13339         
13340         * cs-tokenizer.cs (Cleanup): Removed.
13341         
13342         * driver.cs (GetSystemDir): Rewrote to one line command.
13343         It caused problem with unloaded dynamic modules.
13344         (UnixParseOption): Removed Exit.
13345         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
13346         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
13347         Now can be mcs used as library.
13348         
13349         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
13350         empty location.
13351         
13352         * location.cs (Reset): Reset static data.
13353         
13354         * namespace.cs (Reset): Reset static data.
13355         
13356         * report.cs (Report.Reset): Reset static data.
13357         
13358         * rootcontext.cs (RootContext.Reset): Reset static data.
13359         
13360         * tree.cs (RootTypes.ctor): Use Location.Null
13361         
13362         * typemanager.cs (TypeManager.Reset): Reset static data.
13363         (CoreLookupType): Removed Exit.
13364         (TypeHandle.Reset): Reset static data.
13365         
13366 2005-03-10  Raja R Harinath  <rharinath@novell.com>
13367
13368         Fix #73516.
13369         * typemanager.cs (ComputeNamespaces): Import namespaces from
13370         referenced modules too.
13371
13372 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13373
13374         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
13375         than '.'.
13376
13377 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13378
13379         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
13380         enclosing DeclSpace.  This ensures that a name-lookup populates
13381         more caches and there are fewer 'TypeExpression's.  Carve out
13382         nested type lookup into ...
13383         (LookupNestedTypeInHierarchy): ... this.
13384
13385 2005-03-09  Raja R Harinath  <rharinath@novell.com>
13386
13387         Clean up a few partial-class semantics.  
13388         Fixes test-357.cs and cs1618-2.cs.
13389         * cs-parser.jay (struct_declaration): Use 'current_class' as
13390         parent of newly-created struct.  Remove call to Register ().
13391         Use 'pop_current_class' to complete handing the current struct.
13392         (interface_declaration): Likewise.
13393         (class_declaration): Likewise.
13394         (enum_declaration): Use 'current_class' as parent of newly created
13395         enum.
13396         (delegate_declaration): Likewise.
13397         (pop_current_class): New function.  This is used to handle closing
13398         up the 'current_class' and 'current_container', and pointing them
13399         to the enclosing class/container.
13400         (CSharpParser): Initialize 'current_class' too.
13401         * decl.cs (MemberCore): Add check for invariant: a partial
13402         container is not a parsed entity, and thus does not enclose any
13403         parsed members.
13404         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
13405         (DeclSpace.BaseTypeExpr): Use it.
13406         (DeclSpace.LookupType): Add check for invariant.
13407         * class.cs (TypeContainer): Add check for invariant: a nested
13408         class should have the same NamespaceEntry as its enclosing class.
13409         (TypeContainer.EmitFieldInitializers): Make virtual.
13410         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
13411         MemberCore.
13412         (TypeContainer.Register): Remove.
13413         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
13414         null.  Use TypeResolveEmitContext for resolving base types and
13415         interfaces.  Move initialization of Parts.TypeBuilder here from
13416         ...
13417         (TypeContainer.DefineNestedTypes): ... here.
13418         (PartialContainer): Take a Namespace not a NamespaceEntry.
13419         (PartialContainer.Create): Don't use Register.  Call the
13420         appropriate Add... function directly.
13421         (ClassPart): Take both the PartialContainer and the enclosing
13422         class as constructor arguments.
13423         (ClassPart.EmitFieldInitializers): Override.
13424         (ClassPart.PartFindNestedTypes): Remove.
13425         (FieldBase.GetInitializerExpression): Resolve the initializer
13426         expression in the emit context of the enclosing class.
13427         * tree.cs (RootTypes): Remove Register ().
13428         
13429 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
13430
13431         * cs-parser.jay: Removed CS0134.
13432         
13433         * driver.cs: Removed CS1901.
13434         
13435         * expression.cs (SizeOf.DoResolve): Don't report CS0233
13436         for predefined types.
13437
13438 2005-03-07  Duncan Mak  <duncan@novell.com>
13439
13440         * codegen.cs (Save):  Catch UnauthorizedAccessException as
13441         well. Fixes bug #73454.
13442
13443 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
13444
13445         * cs-tokenizer.cs (xtoken): Add CS1035.
13446         
13447         * class.cs (MethodData.Define): Add CS0683.
13448         (FieldMember.ctor): Add CS0681.
13449
13450 2005-03-07  Raja R Harinath  <rharinath@novell.com>
13451
13452         * ecore.cs (SimpleName.DoResolve): Rename from
13453         SimpleName.DoResolveAllowStatic.
13454         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
13455         Pass 'intermediate' flag to MemberStaticCheck.
13456         (SimpleName.MemberStaticCheck): Skip "static check" only in case
13457         of "intermediate" lookups via MemberAccess.
13458         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
13459         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
13460
13461 2005-03-07  Raja R Harinath  <rharinath@novell.com>
13462
13463         Fix #73394.
13464         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
13465         slipped in because of variable names that are identical to a
13466         builtin type's BCL equivalent ('string String;', 'int Int32;').
13467         (PropertyExpr.EmitInstance): Likewise.
13468
13469 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
13470
13471         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
13472         
13473         * report.cs (warning_ignore_table): Made public.
13474
13475 2005-03-04  Raja R Harinath  <rharinath@novell.com>
13476
13477         Fix #73282.
13478         * class.cs (MethodData.Emit): Pass 'container' to
13479         container.GetObsoleteAttribute instead of 'container.Parent'.
13480
13481 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
13482
13483         * cs-parser.jay: Add 1534 error test.
13484
13485         * iterators.cs (Yield.CheckContext): Add error 1629.
13486         (Iterator.ctor): Save unsafe modifier.
13487         (MoveNextMethod.DoEmit): Restore unsafe context.
13488
13489         * namespace.cs (UsingAlias): Better error message.
13490
13491 2005-03-03  Dan Winship  <danw@novell.com>
13492
13493         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
13494         the warning message [#73219]
13495
13496 2005-03-03  Raja R Harinath  <rharinath@novell.com>
13497
13498         Fix compile with MCS 1.0.0.0.
13499         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
13500         w_restore to not depend on string constant folding.
13501
13502 2005-03-03  Raja R Harinath  <rharinath@novell.com>
13503
13504         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
13505         CS0246 check to users who passed 'silent = false'.
13506         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
13507         check.
13508         (SimpleName.SimpleNameResolve): Update.
13509         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
13510         (MemberAccess.IdenticalNameAndTypeName): Update.
13511         * doc.cs (FindDocumentedTypeNonArray): Update.
13512
13513 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
13514
13515         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
13516         * parameters.cs (ComputeAndDefineParameters): Remove.
13517         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
13518         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
13519         Use GetParameterInfo.
13520
13521 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
13522
13523         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
13524
13525 2005-03-02  Raja R Harinath  <rharinath@novell.com>
13526
13527         Unify DeclSpace.LookupType and DeclSpace.FindType.
13528         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
13529         is in charge of defining nested types on demand.
13530         (DeclSpace.LookupType): Use it when the current_type is a
13531         TypeBuilder.  Use LookupTypeDirect for reflected types.
13532         (DeclSpace.FindType): Remove.
13533         (DeclSpace.LookupInterfaceOrClass): Likewise.
13534         (DeclSpace.DefineTypeAndParents): Likewise.
13535         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
13536         DeclSpace.LookupType.
13537         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
13538         * typemanager.cs (LookupType): Simplify.
13539         (AddUserType): Remove type from negative_hits.
13540         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
13541         * class.cs (TypeContainer.FindMembers): Move handling of nested
13542         types ...
13543         (TypeContainer.FindMembers_NestedTypes): ... here.
13544         (TypeContainer.FindNestedType): Implement override.
13545         (ClassPart.FindNestedType): Delegate to PartialContainer.
13546         (ClassPart.PartFindNestedType): Looks up the nested types of the
13547         part alone.
13548
13549 2005-03-02  Martin Baulig  <martin@ximian.com>
13550
13551         * class.cs (TypeContainer.DoDefineMembers): We also need a default
13552         static constructor in static classes.
13553
13554 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
13555
13556         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
13557         sizeParamIndex is not specified.
13558
13559 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
13560
13561         Fix #73117
13562         * report.cs (WarningMessage.IsEnabled): Missing null check.
13563
13564 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
13565
13566         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
13567         in the fields and not in the properties.
13568
13569 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
13570
13571         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
13572         fields as well.
13573
13574 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
13575
13576         * attribute.cs: Small refactoring (improved robustness).
13577         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
13578         (ValidateGuid): Removed.
13579         (Resolve): Removed referenced to above mentioned.
13580         (GetAttributeUsage): Made private and changed to work without
13581         class assistance.
13582         (GetIndexerAttributeValue): Don't crash.
13583         (GetConditionalAttributeValue): Ditto.
13584         (GetClsCompliantAttributeValue): Ditto.
13585         (ExtractSecurityPermissionSet): All attributes exceptions are
13586         error 648.
13587         (GetPropertyValue): New helper.
13588         (GetMethodImplOptions): New method.
13589         (DefinePInvokeMethod): Reuse common code. Implemented handling of
13590         some missing properties.
13591         
13592         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
13593         (Method.ApplyAttributeBuilder): Updated.
13594         
13595         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
13596         exception.
13597
13598 2005-02-28  Raja R Harinath  <rharinath@novell.com>
13599
13600         Fix #73052.
13601         * report.cs (Report.SymbolRelatedToPreviousError): Handle
13602         non-simple types (array, pointer, reference).
13603
13604 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
13605
13606         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
13607
13608         * class.cs (MethodCore.IsDuplicateImplementation): Special error
13609         for operators.
13610         (Method.CheckBase): Catch wrong destructor here.
13611         (MethodData.Define): Add errors 550, 668.
13612
13613         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
13614
13615         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
13616
13617         * pending.cs (VerifyPendingMethods): Add error 551.
13618
13619         * typemanager.cs (CSharpName): Next error report helper.
13620
13621 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
13622
13623         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
13624         attributes. Removed useless attribute double check.
13625         It saves almost 2MBs for corlib.
13626
13627 2005-02-25  Raja R Harinath  <rharinath@novell.com>
13628
13629         Fix #72924.
13630         * statement.cs (ExpressionStatement.Resolve): Make robust to being
13631         called twice in case of error.
13632
13633 2005-02-23  Chris Toshok  <toshok@ximian.com>
13634
13635         Fix compiler portions of #72827.
13636         * statement.cs (Block.Emit): call Begin/EndScope on the
13637         EmitContext instead of the ILGenerator.
13638
13639         * codegen.cs (EmitContext.BeginScope): new method, call
13640         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
13641         we have one.)
13642         (EmitContext.BeginScope): same, but EndScope and CloseScope
13643
13644         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
13645         offset and call the superclass's OpenScope(int) with it.
13646         (SymbolWriter.CloseScope): get the current il
13647         offset and call superclass's CloseScope(int) with it.
13648
13649 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
13650
13651         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
13652         CS1677 for out and ref as well.
13653
13654         * class.cs (Method.Define): Add error CS1599 detection.
13655         
13656         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
13657         
13658         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
13659         
13660         * delegate.cs (Delegate.Define): Add error CS1599 detection.
13661         
13662         * support.cs.cs (ModifierDesc): New helper method.
13663
13664 2005-02-23  Raja R Harinath  <rharinath@novell.com>
13665             Abin Thomas  <projectmonokochi@rediffmail.com>
13666             Anoob V E  <projectmonokochi@rediffmail.com>
13667             Harilal P R  <projectmonokochi@rediffmail.com>
13668
13669         Fix #57851, #72718.
13670         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
13671         MemberLookup (used for error reporting) actually returns a result.
13672         Fix error report number (122, not 112).
13673
13674 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
13675             Anoob V E  <projectmonokochi@rediffmail.com>
13676             Harilal P R  <projectmonokochi@rediffmail.com>
13677
13678         Fix #71134.
13679         * pending.cs (PendingImplementation.GetAbstractMethods):
13680         Find NonPublic members too.
13681
13682 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
13683
13684         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
13685         Fixed error 217.
13686         
13687         * class.cs (MethodCore.CheckMethodAgainstBase):
13688         Add error 239 report.
13689
13690 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13691
13692         Fix #68955.
13693         * expression.cs (Invocation.IsApplicable): Make public.
13694         (Invocation.IsParamsMethodApplicable): Likewise.
13695         * delegate.cs (Delegate.VerifyApplicability): Don't use
13696         Invocation.VerifyArgumentCompat for parameter applicability
13697         testing.  Use Invocation.IsApplicable and
13698         Invocation.IsParamsMethodApplicable.
13699
13700 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
13701
13702         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
13703         
13704         * class.cs (Operator.Define): Add error 217 report.
13705         
13706 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13707
13708         * namespace.cs (UsingEntry.Resolve): Undo change below.
13709
13710 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13711
13712         Fix #72756.
13713         * ecore.cs (Expression.MemberLookupFailed): Add argument to
13714         disable the error message when the extended MemberLookup also
13715         fails.
13716         (Expression.MemberLookupFinal): Update.
13717         (SimpleName.DoSimpleNameResolve): Update.
13718         * expression.cs (MemberAccess.ResolveNamespaceOrType):
13719         Don't use MemberLookupFinal.
13720         (New.DoResolve): Update.
13721         (BaseAccess.CommonResolve): Update.
13722
13723 2005-02-21  Raja R Harinath  <rharinath@novell.com>
13724
13725         Fix #72732.
13726         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
13727         occured previously, don't resolve again.
13728
13729 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
13730
13731         Fix #69949
13732         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
13733         argument. Call ResolveAttributeUsage for unresolved.
13734         when types doesn't match ctor arguments.
13735         
13736         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
13737         for nested attribute classes.
13738         (Class.attribute_usage): Removed.
13739         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
13740         for attribute class.
13741         
13742         * ecore.cs (IsAttribute): Removed.
13743         
13744         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
13745         
13746         * rootcontext.cs (RegisterAttribute): Removed, attributes are
13747         now normal types.
13748         (attribute_types): Removed.
13749         (EmitCode): Global attributes are emited as the latest.
13750
13751 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
13752
13753         * class.cs (EmitFieldInitializers): Don't emit field initializer
13754         for default values when optimilization is on.
13755         
13756         * constant.cs (Constant.IsDefaultValue): New property.
13757         
13758         * driver.cs: Add /optimize handling.
13759         
13760         * constant.cs,
13761         * ecore.cs,
13762         * literal.cs: Implement new IsDefaultValue property.
13763         
13764         * rootcontext.cs (Optimize): New field, holds /optimize option.
13765
13766 2005-02-18  Raja R Harinath  <rharinath@novell.com>
13767
13768         Fix crasher in re-opened #72347.
13769         * namespace.cs (Namespace.Lookup): Return null if
13770         DeclSpace.DefineType returns null.
13771
13772         Fix #72678.
13773         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
13774
13775 2005-02-18  Raja R Harinath  <rharinath@novell.com>
13776
13777         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
13778         now returns null if it cannot resolve to an lvalue.
13779         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
13780         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
13781         returned null.  Remove check for SimpleName.
13782         (EventExpr.DoResolveLValue): New.
13783         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
13784         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
13785         error from ...
13786         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
13787         avoid CS0131 error.
13788         (Unary.ResolveOperator): Move CS0211 check ...
13789         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
13790         CS0131 error.
13791         (Unary.DoResolveLValue): Simplify.
13792         (AddressOf.DoResolveLValue): New.
13793         (ArrayAccess.DoResolveLValue): New.
13794
13795 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
13796
13797         * attribute.cs (Attribute.Resolve): Add arguments casting for
13798         when types doesn't match ctor arguments.
13799
13800 2005-02-16  Raja R Harinath  <rharinath@novell.com>
13801
13802         Fix parts of #63202.
13803         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
13804         lookup of operator in base type.  Ensure that all checks happen
13805         when the operator resolves to an "op_..." method.
13806
13807 2005-02-15  Raja R Harinath  <rharinath@novell.com>
13808
13809         Fix #71992.
13810         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
13811         'ignore_cs0104' parameter.  Pass it to ...
13812         (NamespaceEntry.Lookup): ... this.
13813         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
13814         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
13815         (TypeLookupExpression.DoResolveAsTypeStep): Update.
13816         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
13817         Update.  Request that cs0104 errors be ignored.
13818         (ComposedCast.ResolveAsTypeStep): Update.
13819
13820 2005-02-14  Raja R Harinath  <rharinath@novell.com>
13821
13822         Fix #59209.
13823         * expression.cs (Invocation.BetterFunction): Remove support for
13824         comparing virtual functions and their overrides.
13825         (Invocation.IsOverride): New.
13826         (Invocation.OverloadResolve): Don't consider 'override' functions
13827         during candidate selection.  Store them in a lookaside list.
13828         If the selected method is a 'virtual' function, use the list to
13829         find any overrides that are closer to the LHS type.
13830
13831 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
13832
13833         * expression.cs (New.DoResolve): Add complex core type reduction.
13834         (New.Constantify): Converts complex core type syntax like 'new int ()'
13835         to simple constant.
13836         
13837 2005-02-14  Raja R Harinath  <rharinath@novell.com>
13838
13839         * decl.cs (EntryType.EntryType): New constructor to create an
13840         updated copy of a cache entry.
13841         (MemberCache.AddMethods): Use it.
13842         (MemberCache.ClearDeclaredOnly): Remove.
13843         (MemberCache.MemberCache): Update.
13844
13845 2005-02-11  Miguel de Icaza  <miguel@novell.com>
13846
13847         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
13848         variable.  This one is represents the actual low-level declaration
13849         of the method, as opposed to the semantic level `IsStatic'.   
13850
13851         An anonymous method which is hosted into a static method might be
13852         actually an instance method.  IsStatic would reflect the
13853         container, while MethodIsStatic represents the actual code
13854         generated.
13855
13856         * expression.cs (ParameterReference): Use the new MethodIsStatic
13857         instead of IsStatic.
13858
13859         * anonymous.cs (AnonymousMethod.Compatible): Pass the
13860         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
13861         set on the current EmitContext. 
13862
13863         * expression.cs (Cast): Overload DoResolveLValue so we can pass
13864         resolve our casted expression as an LValue.  This triggers the
13865         proper LValue processing that is later required by Assign.
13866
13867         This fixes 72347.
13868
13869         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
13870
13871 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
13872
13873         C# 2.0 Fixed buffer implementation
13874
13875         * anonymous.cs: Update after RegisterHelperClass renaming.
13876
13877         * attribute.cs (AttributeTester.fixed_buffer_cache):
13878         Cache of external fixed buffers.
13879         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
13880         implementation if field is fixed buffer else null.
13881
13882         * class.cs
13883         (TypeContainer.AddField): Accept FieldMember instead of Field.
13884         (FieldBase.IsFieldClsCompliant): Extracted code from
13885         VerifyClsCompliance descendant customization.
13886         (FixedField): New class handles fixed buffer fields.
13887         (FixedFieldExternal): Keeps information about imported fixed
13888         buffer.
13889         (IFixedField): Make access to internal or external fixed buffer
13890         same.
13891
13892         * cs-parser.jay: Add fixed buffer parsing.
13893
13894         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
13895         buffer.
13896
13897         * expression.cs (Indirection): Extended implementation to accept
13898         fixed buffer field.
13899         (PointerArithmetic.Emit): Get element from fixed buffer as well.
13900         (ElementAccess.MakePointerAccess): Get type as parameter.
13901         (DoResolve): Add fixed buffer field expression conversion.
13902         (DoResolveLValue): Ditto.
13903         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
13904         (ArrayPtr): Derives from FixedBufferPtr.
13905         (ArrayPtr.Emit): Add extra emit for array elements.
13906
13907         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
13908
13909         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
13910         for compiler generated types.
13911         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
13912
13913         * statement.cs (Fixed): Refactored to be easier add fixed buffer
13914         and consume less memory.
13915         (Fixed.Resolve): Add fixed buffer case.
13916
13917         * typemanager.cs (compiler_generated_attr_ctor,
13918         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
13919         (HasElementType): Add our own implementation to work on every
13920         runtime.
13921
13922 2005-02-11  Miguel de Icaza  <miguel@novell.com>
13923
13924         * anonymous.cs (CaptureContext): Track whether `this' has been
13925         referenced.   
13926
13927         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
13928         only captured `this' if it was implicitly done (instance
13929         methods/variables were used). 
13930
13931         * codegen.cs (EmitContext.CaptureThis): New method to flag that
13932         `this' must be captured.
13933
13934 2005-01-30  Miguel de Icaza  <miguel@novell.com>
13935  
13936         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
13937         is null it means that there has been no need to capture anything,
13938         so we just create a sibling.
13939
13940         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
13941
13942         Just a partial fix.  The other half is fairly elusive.
13943         
13944 2005-02-10  Raja R Harinath  <rharinath@novell.com>
13945
13946         Fix #52586, cs0121-4.cs.
13947         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
13948         and return a hashtable.
13949         (MemberCache.ClearDeclaredOnly): New.
13950         (MemberCache.MemberCache): Update to change.  Make a deep copy of
13951         the method_hash of a base type too.
13952         (MemberCache.AddMethods): Adapt to having a deep copy of the base
13953         type methods.  Overwrite entries with the same MethodHandle so
13954         that the ReflectedType is correct.  The process leaves in base
13955         virtual functions and their overrides as distinct entries.
13956         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
13957         matters since it was boxed in a ArrayList before.
13958         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
13959         modifier.
13960         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
13961         case of a virtual function and its override (choose the overload
13962         as better).
13963         (Invocation.OverloadResolve): Avoid 'override' members during
13964         'applicable_type' calculation.
13965
13966 2005-02-09  Raja R Harinath  <rharinath@novell.com>
13967
13968         Combine two near-redundant caches.
13969         * typemanager.cs (method_params): Rename from method_internal_params.
13970         (TypeManager.GetParameterData): New.  Replace
13971         Invocation.GetParameterData.
13972         (TypeManager.LookupParametersByBuilder): Remove.
13973         * expression.cs (Invocation.method_parameter_cache): Remove.
13974         (Invocation.GetParameterData): Remove.
13975         Update to changes.
13976         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
13977         Update to changes.
13978
13979 2005-02-08  Raja R Harinath  <rharinath@novell.com>
13980
13981         Fix #72015.
13982         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
13983         TypeManager.multicast_delegate_type is null, resolve it by looking
13984         up "System.MulticastDelegate".
13985         * rootcontext.cs (RootContext.ResolveCore): Simplify.
13986
13987 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
13988             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
13989             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
13990
13991         Fix cs0164.cs.
13992         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
13993         (LabeledStatement.AddReference): New.  Set 'referenced'.
13994         (Goto.Resolve): Use it.
13995
13996 2005-02-05  John Luke  <john.luke@gmail.com>
13997
13998         * driver.cs: remove duplicate -doc line in Usage ()
13999
14000 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14001
14002         * location.cs (Location.AddFile): Fix CS2002 error report.
14003
14004 2005-02-02  Martin Baulig  <martin@ximian.com>
14005
14006         * delegate.cs (Delegate.DefineType): Report an internal error if
14007         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14008         details.        
14009
14010 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14011
14012         Fix a crasher in a variant of #31984.
14013         * const.cs (Constant.CheckBase): New override that defers the
14014         new-or-override check in case the base type hasn't been populated
14015         yet.
14016         (Constant.Define): Ensure the new-or-override check is performed.
14017
14018 2005-02-01  Duncan Mak  <duncan@ximian.com>
14019
14020         * const.cs (LookupConstantValue): Check that `ce' is not null
14021         before calling GetValue ().
14022
14023 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14024
14025         Fix test-334.cs (#69519).
14026         * cs-parser.jay (using_alias_directive): Pass in an expression to
14027         NamespaceEntry.UsingAlias.
14028         (using_namespace_directive): Pass in an expression to
14029         NamespaceEntry.Using.
14030         (namespace_name): Don't flatten to a string.
14031         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14032         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14033         ResolveAsTypeStep.
14034         (NamespaceEntry.UsingEntry): Likewise.
14035         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14036         changes.
14037         (NamespaceEntry.LookupForUsing): Remove.
14038         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14039         names.
14040         (NamespaceEntry.Lookup): Remove support for dotted names.
14041
14042 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14043
14044         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14045         split into two.
14046         (NamespaceEntry.ImplicitParent): Compute on demand.
14047         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14048         parallels the current.
14049         (NamespaceEntry.LookupForUsing): Use it.
14050         (NamespaceEntry.Lookup): If the current namespace-entry is
14051         implicit, don't search aliases and using tables.
14052
14053 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14054
14055         Fix #31984.
14056         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
14057         BaseCache here.
14058         (TypeContainer.BaseCache): Compute on demand.
14059         (TypeContainer.FindMembers): Define constants and types if they're
14060         not already created.
14061         (FieldMember.Define): Move resetting of ec.InUnsafe before error
14062         check.
14063         * const.cs (Constant.Define): Make idempotent.
14064
14065 2005-01-29  Miguel de Icaza  <miguel@novell.com>
14066
14067         * pending.cs: Produce better code (no nops produced by using Ldarg
14068         + value).
14069         
14070         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
14071         i - 1' it should be arg + 1.
14072
14073         Fixes bug #71819.
14074
14075 2005-01-28  Raja R Harinath  <rharinath@novell.com>
14076
14077         * attribute.cs (Attribute.CheckAttributeType): Make private
14078         non-virtual.
14079         (Attribute.ResolveType): Make virtual.
14080         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
14081         handling of RootContext.Tree.Types.
14082
14083 2005-01-27  Raja R Harinath  <rharinath@novell.com>
14084
14085         Update attribute-handling to use the SimpleName/MemberAccess
14086         mechanisms.
14087         * cs-parser.jay (attribute): Pass in an expression to the
14088         constructors of Attribute and GlobalAttribute.
14089         * attribute.cs (Attribute): Take an expression for the name.
14090         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
14091         passed in attribute name expression.
14092         (Attribute.CheckAttributeType): Use it.
14093         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
14094         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
14095         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
14096         argument to prevent error messages if the lookup fails.
14097
14098 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
14099
14100         * expression.cs (Indirection): Implemented IVariable interface
14101         to support indirection in AddressOf operator.
14102         (PointerArithmetic.Emit): Add optimalization for case where
14103         result can be precomputed.
14104
14105 2005-01-26  Martin Baulig  <martin@ximian.com>
14106
14107         * class.cs (TypeContainer.AttributeTargets): Return the correct
14108         AttributeTargets depending on our `Kind' instead of throwing an
14109         exception; fixes #71632.
14110
14111 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
14112
14113         Fix #71257
14114         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
14115         constant members.
14116
14117 2005-01-25  Raja R Harinath  <rharinath@novell.com>
14118
14119         Fix #71602.
14120         * expression.cs (MemberAccess.DoResolve): Don't complain with
14121         cs0572 when the LHS of a member access has identical name and type
14122         name.
14123
14124 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
14125
14126         Fix #71651, #71675
14127         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
14128         CreatePermission.
14129         Create custom PermissionSet only for PermissionSetAttribute.
14130
14131 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
14132
14133         Fix #71649
14134         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
14135         delegates in static class.
14136
14137 2005-01-24  Martin Baulig  <martin@ximian.com>
14138
14139         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14140         merging an implicit block, just use its reachability.
14141
14142         * statement.cs (Block.Resolve): Make the unreachable code check
14143         work wrt. implicit blocks; see test-337 from #63842.
14144
14145 2005-01-21  Alp Toker  <alp@atoker.com>
14146  
14147         * cs-parser.jay: destructor_declaration's container is PartialContainer
14148         not Class when partial types are used, so use Kind prop instead of
14149         'is'.
14150         
14151 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
14152
14153         * cs-parser.jay: Improve error reporting when an interface
14154         declares new types.
14155
14156 2005-01-20  Dick Porter  <dick@ximian.com>
14157
14158         * support.cs: SeekableStreamReader fix from Sandor Dobos
14159         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
14160         chars are read.  Fixes bug 70369.
14161
14162 2005-01-20  Raja R Harinath  <rharinath@novell.com>
14163
14164         * cs-parser.jay (catch_clause): Simplify current_block handling
14165         somewhat.
14166
14167 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
14168
14169         * convert.cs (ImplicitStandardConversionExists): Synchronize the
14170         code with ImplicitStandardConversion to handle the implicit
14171         conversion of method groups into valid delegate invocations. 
14172
14173         The problem is that in parameter handling we were using this code
14174         path.  Fixes bug #64698
14175
14176 2005-01-19  Raja R Harinath  <rharinath@novell.com>
14177
14178         * cs-parser.jay: Fix several infelicities.
14179         - Avoid assigning to the parser value stack.  Code like 
14180           '$3 = null' is unclean.  Synthesize a value for the code block
14181           instead. 
14182         - Avoid using oob_stack for storing location information.  Use ...
14183         (_mark_): ... this.  New (empty) rule.  Saves the current location
14184         in $$.
14185         (foreach_statement): Avoid using oob_stack for current_block
14186         handling.  Use technique used in for_statement and
14187         using_statement.  Synthesize a value for the code block to store
14188         additional intermediate information.
14189
14190 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
14191
14192         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
14193         of a different type is only allowed to private fields of a
14194         containing type, not on fields of a base class.
14195
14196         See test-174.cs and error cs0122-9.cs
14197
14198 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14199
14200         Fix test-335.cs (bug #58126).
14201         * cs-parser.jay (argument): Split out non-expression parts of the
14202         rule into 'non_simple_argument'.
14203         (invocation_expression): Support parenthesized invocations with
14204         multiple arguments, and with single non-simple arguments.
14205
14206 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14207
14208         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
14209         places.
14210
14211 2005-01-12  Raja R Harinath  <rharinath@novell.com>
14212
14213         Fix cs0038-1.cs, cs1640-6.cs.
14214         * ecore.cs (Expression.Resolve): Remove special-case for
14215         SimpleName in error-handling.
14216         (Expression.almostMatchedMembers): Relax access permission to
14217         protected.
14218         (Expression.MemberLookupFailed): Handle duplicates in
14219         almostMatchedMembers list.
14220         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
14221         * expression.cs (New.DoResolve): Report CS1540 for more cases.
14222         * typemanager.cs (GetFullNameSignature): Use the MethodBase
14223         overload if the passed in MemberInfo is a MethodBase.
14224
14225 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
14226
14227         Fix #70749
14228         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
14229         for non-CAS & merge permission sets properly.
14230
14231 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14232
14233         Improve standard-compliance of simple name and member access 
14234         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
14235         * ecore.cs (FullNamedExpression): New abstract base class 
14236         for Namespaces and TypeExpressions.
14237         (ResolveFlags.SimpleName): Remove.
14238         (SimpleName): Remove support for dotted names.
14239         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
14240         DeclSpace.FindType and DeclSpace.LookupType.
14241         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
14242         (Expression.ExprClassName): Make member function.
14243         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
14244         a namespace.  Remove creation of dotted "SimpleName"s.
14245         (MemberAccess.DoResolve): Likewise.
14246         * decl.cs (DeclSpace.Cache): Make private.
14247         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
14248         (DeclSpace.FindType): Update.
14249         (DeclSpace.LookupType): Move here from RootContext.  Return a 
14250         FullNamedExpression.
14251         * namespace.cs (Namespace): Derive from FullNamedExpression
14252         so that it can be part of expression resolution.
14253         (Namespace.Lookup): Return an FullNamedExpression.
14254         (NamespaceEntry.LookupAlias): Lookup aliases only in current
14255         namespace.
14256         * rootcontext.cs (NamespaceLookup): Remove.
14257         (LookupType): Move to DeclSpace.
14258         * attribute.cs (CheckAttributeType): Update.
14259         * doc.cs (FindDocumentedType): Remove allowAlias argument.
14260         (FindDocumentedTypeNonArray): Likewise.
14261
14262 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14263
14264         Fix cs0509.cs, cs1632.cs.
14265         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
14266         is the same as IsInterface.
14267         (TypeContainer.GetClassBases): Likewise.
14268         * statement.cs (LabeledStatement.ig): New field.
14269         (LabeledStatement.LabelTarget): Save ILGenerator which created the
14270         label.
14271         (LabeledStatement.DoEmit): Check that the label was created with
14272         the same ILGenerator.
14273
14274 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14275
14276         Fix #71058
14277         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
14278         accessors to its properties.
14279
14280         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
14281         from accessors to property.
14282         
14283 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14284
14285         Fix #70722
14286         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
14287         only for overrides.
14288         
14289 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
14290
14291         * attribute.cs: Check for null and empty strings.  
14292
14293         I have lost another battle to Paolo.
14294
14295 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
14296
14297         Fix #70942
14298         * class.cs (PropertyMethod): Set Parent field in ctors.
14299         (SetMethod.InternalParameters): Add unsafe switch hack.
14300         Override MarkForDuplicationCheck where it is appropriate.
14301
14302         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
14303         It says whether container allows members with the same name.
14304         Base default is no.
14305         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
14306         Removed is_method parameter.
14307
14308 2005-01-06  Duncan Mak  <duncan@ximian.com>
14309
14310         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
14311         because the previous change led to incorrect reporting of CS1032
14312         ("Cannot define/undefine preprocessor symbols after first token in
14313         file"). Instead of using `tokens_seen' as the only flag that
14314         triggers CS1040, introduce `comments_seen'. This new flag is used
14315         to signify having seen comments on the current line, so it is
14316         unset after a newline.
14317
14318 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14319
14320         * doc.cs : When searching for a type, find nested type too.
14321           This fixes bug #71040.
14322
14323 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14324
14325         * doc.cs :
14326           - Warn missing member comment on those classes which also does not
14327             have doc comments. Fixed bug #71041.
14328           - Don't warn missing doc comment on default constructor.
14329             Fixed bug #71042.
14330
14331 2005-01-06  Duncan Mak  <duncan@ximian.com>
14332
14333         * cs-tokenizer.cs (xtoken): After handling traditional C-style
14334         comments, set `tokens_seen' to true. This allows us to detect
14335         misplaced preprocessor directives (i.e. not at the beginning of
14336         the a line, nor after whitespaces). In that case, report error
14337         CS1040. This fixes bug #56460.
14338
14339         * cs-parser.jay (interface_member_declaration): Add checks for
14340         IsExplicitImpl, and report CS0541 error if an interface member is
14341         defined as an explicit interface declaration.
14342
14343 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
14344
14345         Fix #70817
14346         * class.cs (PropertyMethod): Set Parent field in ctors.
14347         (SetMethod.InternalParameters): Add unsafe switch hack.
14348         
14349         * decl.cs (MemberCore.Parent): Cannot be readonly.
14350
14351 2005-01-06  Raja R Harinath  <rharinath@novell.com>
14352
14353         * decl.cs (DeclSpace.ResolveType): Remove.
14354         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
14355         Merge in code from ...
14356         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
14357         * class.cs, enum.cs: Update to changes.
14358
14359 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
14360
14361         * anonymous.cs: Ensure that we init the scope of our parent if it
14362         has not been initialized yet.
14363
14364 2004-12-30  Duncan Mak  <duncan@ximian.com>
14365
14366         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
14367         if field.FieldBuilder is null. Fixes #70758.
14368
14369         * convert.cs: Fixed some typos and updated some of the comments.
14370         (ImplicitStandardConversionExists):
14371         (TryImplicitIntConversion): If `target_type' is an interface and
14372         the type of `ic' implements this interface, return true or a new
14373         BoxedCast instead of null. This fixes #70468.
14374
14375 2004-12-29  Duncan Mak  <duncan@ximian.com>
14376
14377         * expression.cs (Argument.Emit): Check that Expr is
14378         IMemoryLocation before casting to it, and report CS1510 otherwise.
14379
14380         This fixes #70402.
14381
14382 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
14383
14384         * statement.cs (Block.ThisVariable): remove the recursion here, to
14385         make the --profile more sane.
14386
14387 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
14388
14389         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
14390         assembly, by JB Evain.
14391
14392 2004-12-17  Raja R Harinath  <rharinath@novell.com>
14393
14394         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
14395           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
14396         "parent" refers to enclosing type/class.  "base" refers to superclass.
14397
14398 2004-12-17  Raja R Harinath  <rharinath@novell.com>
14399
14400         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
14401         Ensure that we only have GlobalAttributes.
14402         * attribute.cs (Attribute.Emit): Make non-virtual.
14403         (GlobalAttribute.Emit): Remove.
14404         (Attribute.Resolve): Make virtual.
14405         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
14406         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
14407         the argument. Don't create one.
14408         (Attribute.GetObsoleteAttribute): Likewise.
14409         (Attribute.GetClsCompliantAttributeValue): Likewise.
14410         * class.cs, decl.cs: Update to changes.
14411
14412 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
14413
14414         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
14415         
14416         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
14417         
14418         * statement.cs (Foreach.Resolve): Add error 186 report.
14419
14420 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
14421
14422         * expression.cs (Conditional.DoResolve): Add warning 429.
14423         
14424         * statement.cs (If.Resolve): Add warning 665.
14425
14426 2004-12-16  Raja R Harinath  <rharinath@novell.com>
14427
14428         New invariant: RootContext.Tree.Types.NamespaceEntry == null
14429         except when in the parser, and in GlobalAttribute.
14430         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
14431         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
14432         RootContext.Tree.Types.NamespaceEntry once work is done.
14433         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
14434         and resets RootContext.Tree.Types.NamespaceEntry.
14435
14436 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
14437
14438         * cs-parser.jay: Don't create a block for every variable.
14439
14440 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
14441
14442         * location.cs: Provide extra information.
14443
14444         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
14445         variables from the captured environment, it is the ldarg_0.
14446
14447 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
14448
14449         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
14450         find a conclusion.
14451         
14452         * class.cs: Changed warning level for 169 to avoid developer
14453         displeasure from warning flooding. It will be changed back when they
14454         fix most of current BCL warnings.
14455         
14456         * RootContext.cs: Pushed default WarningLevel to 3.
14457         
14458         * statement.cs: Removed unused variable.
14459
14460 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
14461
14462         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
14463         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
14464         Add error 502 report.
14465         (StaticClass.DefineType): Add error 441 report.
14466         (Class.AllowedModifiersProp): New virtual property as temporary
14467         extension to AllowedModifiers.
14468         (Class.DefineType): Add error 418 report. Moved ModFlags check here
14469         to share implementation with StaticClass and don't call virtual
14470         methods from ctor.
14471         
14472         * driver.cs (MainDriver): Add error 1558 test.
14473
14474         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
14475         report. Moved error 36 test here.
14476
14477         * statement.cs (Throw.Resolve): Add error 724 report.
14478
14479         * typemanager.cs: Add out_attribute_type core type.
14480         
14481 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
14482
14483         * class.cs (TypeContainer.VerifyClsCompliance): Add error
14484         3018 report.
14485         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
14486
14487         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
14488         3017 report.
14489         
14490         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
14491
14492         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
14493         Add error 3023 report.
14494         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
14495
14496         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
14497         implementation.
14498
14499 2004-12-12  John Luke  <john.luke@gmail.com>
14500
14501         * driver.cs (AddArgs): take -- into account when
14502         adding arguments, fixes bug 65710 
14503
14504 2004-12-12  Martin Baulig  <martin@ximian.com>
14505
14506         * expression.cs (Unary.TryReduceNegative): Added support for
14507         SByteConstant and ByteConstant.
14508         (Unary.Reduce): Check error values from TryReduceNegative().
14509
14510 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
14511
14512         * attributes.cs (Attribute.Resolve): Avoid multiple error report
14513         and report exception as error 182.
14514
14515 2004-12-10  Raja R Harinath  <rharinath@novell.com>
14516
14517         * driver.cs (Main): Fix message when there are warnings.
14518
14519 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
14520
14521         * delegate.cs: Fixed my fix from yesterday, sorry about that.
14522
14523 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
14524
14525         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
14526         Reduced number of warnings.
14527         
14528         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
14529
14530 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
14531
14532         * driver.cs: Removed message.
14533
14534         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
14535
14536 2004-12-08    <vargaz@freemail.hu>
14537
14538         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
14539
14540 2004-12-08  Martin Baulig  <martin@ximian.com>
14541
14542         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
14543         instead of a CS3002 for properties and indexer.
14544
14545 2004-12-08  Martin Baulig  <martin@ximian.com>
14546
14547         * decl.cs (MemberName.ToString): Make this work again.
14548
14549 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
14550
14551         * attribute.cs (Resolve): Add error 591 detection.
14552
14553         * class.cs (FieldMember.Define): Add error 1547 detection.
14554         (Indexer.Define): Add error 620 detection.
14555         (Operator.Define): Add error 590 detection.
14556
14557         * ecore.cs: Missing argument for error 79.
14558
14559         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
14560         detection.
14561
14562 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
14563
14564         Fix #70106
14565         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
14566         only.
14567
14568 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
14569
14570         * cs-parser.jay : handle doc comments on implicit/explicit operators.
14571           Some operator comments were suppressed.
14572         * doc.cs : Implicit/explicit operator name in doc comments are like
14573           "op_Explicit(type)~returnType", so added suffix handling.
14574
14575 2004-12-07  Martin Baulig  <martin@ximian.com>
14576
14577         * decl.cs
14578         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
14579         (MemberCore.GetClsCompliantAttributeValue): Likewise.
14580         (DeclSpace.ec): New protected field; store the EmitContext here.
14581         (DeclSpace.EmitContext): New public property; moved here from
14582         `TypeContainer'.
14583         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
14584         EmitContext.
14585
14586         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
14587         (Enum.Emit): Don't create a new EmitContext.
14588
14589         * delegate.cs (Delegate.DefineType): Always create the
14590         EmitContext.
14591
14592         * iterators.cs (Iterators.DefineIterator): Create a new
14593         EmitContext and store it in `ec'.
14594
14595 2004-08-24  Martin Baulig  <martin@ximian.com>
14596
14597         * typemanager.cs
14598         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
14599         this for accessibility checks.
14600         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
14601         IsNestedFamilyAccessible.
14602         (TypeManager.IsSubclassOf): New method, do what the name actually
14603         says.   
14604
14605 2004-12-06  Raja R Harinath  <rharinath@novell.com>
14606
14607         Fix crash on cs0657-17.cs.
14608         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
14609         Use RootContext.Tree.Types, not 'new RootTypes ()'.
14610         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
14611         the case where the NamespaceEntry gets overwritten.
14612
14613 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
14614
14615         Fixed #69195, #56821
14616         * ecore.cs (ResolveBoolean): Tiny refactoring.
14617
14618         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
14619         of right expression resolving when left is false constant and
14620         operator is LogicalAnd OR true constant and operator is LogicalOr.
14621
14622         * statement.cs (ResolveUnreachable): Always reports warning.
14623
14624 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
14625
14626         * class.cs: Distinguish between 1721 and 1722 (just a little help
14627         for the programmer).
14628
14629 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
14630
14631         * delegate.cs: Only allow this on new versions of the language. 
14632
14633 2004-12-02  Duncan Mak  <duncan@ximian.com>
14634
14635         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
14636         Expression class.
14637         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
14638         here as a static method. Take an additional bool out parameter
14639         `must_do_cs1540_check' for signaling to InstanceResolve.
14640         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
14641         member field from PropertyExpr class and made it an argument of
14642         the method instead.
14643         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
14644         check for MarshalByRefObject, and report CS0122 instead of CS1540.
14645         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
14646         and `remove_accessor' as well as InstanceResolve: report CS0122
14647         where applicable.
14648
14649         Fixes #70129.
14650
14651 2004-12-03  Raja R Harinath  <rharinath@novell.com>
14652
14653         Fix test-327.cs, test-328.cs, and put in early infrastructure
14654         for eventually fixing #52697.
14655         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
14656         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
14657         from other methods.
14658         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
14659         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
14660         (VerifyUsing, error246): Update.
14661         * rootcontext.cs (RootContext.NamespaceLookup): Just use
14662         'NamespaceEntry.LookupNamespaceOrType'.
14663
14664 2004-12-03  Martin Baulig  <martin@ximian.com>
14665
14666         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
14667         method as our child, call AnonymousMethod.Compatible() on it.
14668
14669 2004-12-03  Raja R Harinath  <rharinath@novell.com>
14670
14671         Disable XML documentation support in 'basic' profile.
14672         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
14673         Redirect XmlElement to System.Object.
14674         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
14675         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
14676         * mcs.exe.sources: Add doc-bootstrap.cs.
14677         * doc-bootstrap.cs: New file.  Contains empty stub implementation
14678         of doc.cs.
14679
14680 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
14681
14682         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
14683           comments are allowed.
14684
14685 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
14686
14687         * delegate.cs: Add checks for subtypes in paramaters and return values
14688         in VerifyMethod () to add support for Covariance/Contravariance
14689         in delegates.
14690         
14691 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
14692
14693         * report.cs: Remove extra closing parenthesis.
14694
14695         * convert.cs (Error_CannotImplicitConversion): If the name of the
14696         types are the same, provide some extra information.
14697
14698         * class.cs (FieldBase): Use an unused bit field from the field to
14699         encode the `has_offset' property from the FieldMember.  This saves
14700         a couple of Ks on bootstrap compilation.
14701
14702         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
14703         method as our child, return the AnonymousMethod resolved
14704         expression.
14705
14706         * expression.cs (New.DoResolve): Allow return values from
14707         NewDelegate to also include AnonymousMethods.
14708
14709         Fixes #70150.
14710
14711 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
14712
14713         Fix bug #70102
14714         * attribute.cs (Resolve): Improved implementation of params
14715         attribute arguments.
14716
14717         * support.cs (ParameterData): Add HasParams to be faster.
14718
14719 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
14720
14721         all things are for /doc support:
14722
14723         * doc.cs: new file that supports XML documentation generation.
14724         * mcs.exe.sources: added doc.cs.
14725         * driver.cs:
14726           Handle /doc command line option.
14727           Report error 2006 instead of 5 for missing file name for /doc.
14728           Generate XML documentation when required, after type resolution.
14729         * cs-tokenizer.cs:
14730           Added support for picking up documentation (/// and /** ... */),
14731           including a new XmlCommentState enumeration.
14732         * cs-parser.jay:
14733           Added lines to fill Documentation element for field, constant,
14734           property, indexer, method, constructor, destructor, operator, event
14735           and class, struct, interface, delegate, enum.
14736           Added lines to warn incorrect comment.
14737         * rootcontext.cs :
14738           Added Documentation field (passed only when /doc was specified).
14739         * decl.cs:
14740           Added DocComment, DocCommentHeader, GenerateDocComment() and
14741           OnGenerateDocComment() and some supporting private members for
14742           /doc feature to MemberCore.
14743         * class.cs:
14744           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
14745         * delegate.cs:
14746           Added overriden DocCommentHeader.
14747         * enum.cs:
14748           Added overriden DocCommentHeader and GenerateDocComment().
14749
14750 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
14751
14752         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
14753         unwrapping the enumeration values, chain to
14754         DoConstantNumericPromotions again, so we can promote things to the
14755         fundamental types (takes care of enums that are bytes, sbytes).
14756
14757         Fixes bug #62054.
14758
14759 2004-12-01  Raja R Harinath  <rharinath@novell.com>
14760
14761         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
14762         Fix long-standing bug in type-lookup.  Use FindType instead of
14763         LookupType when ec.ResolvingTypeTree.
14764         (Attribute.ResolveType, Attribute.Resolve)
14765         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
14766         Update to changes.
14767         (Attributes.Search): Remove internal version.  Update.
14768         (Attributes.SearchMulti): Update.
14769         (Attributes.GetClsCompliantAttribute): Remove.
14770         (Attributes.GetIndexerNameAttribute): Remove.
14771         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
14772         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
14773         * class.cs (Indexer.Define): Likewise.
14774
14775 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
14776
14777         Fix bug #68790
14778         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
14779         MarshallByReference members access.
14780
14781         * expression.cs: Use CheckMarshallByRefAccess;
14782         Better error CS0197 message.
14783
14784         * report.cs: Print whole related error message.
14785
14786 2004-11-30  Raja R Harinath  <rharinath@novell.com>
14787
14788         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
14789         the current directory to help debugging.
14790
14791 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
14792
14793         * class (GetClassBases): Better error 60 report.
14794         (EventProperty): Disabled warning 67 detection.
14795
14796 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
14797
14798         Fix bug #60324
14799         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
14800
14801         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
14802         precise values.
14803
14804 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
14805
14806         Fix bug #49488
14807         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
14808
14809         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
14810
14811 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
14812
14813         * attribute.cs (Attribute.Resolve): Refine error reporting and
14814         report a cs0117 if the identifier does not exist, to distinguish
14815         from 0617 which is a miss-use of the actual identifier.
14816
14817         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
14818         between cs0070 and cs0079.
14819
14820         * class.cs (MemberBase.DoDefine): When reporting a wrong
14821         accessibility level, we use MethodCore to compare instead of
14822         Method (this was a regression in some refactoring effort).
14823
14824         So now we correctly report cs0056 again.
14825
14826         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
14827         testing the target_type (which was known to be object_type) and
14828         not the source type (which is anonymous_method).
14829
14830         Fixed reporting of error cs1660.
14831
14832         * expression.cs (UserCast.Source): Expose the underlying cast.
14833
14834         * statement.cs (Switch.SwitchGoverningType): Sort the list of
14835         allowed types to find a match to int32 first (most common).
14836
14837         In addition, it ignores any ImplicitUserConversions that did an
14838         internal implicit conversion (as the switch statement allows only
14839         one integral conversion to exist).
14840
14841         * class.cs (PartialContainer.Create): rename `name' to
14842         `member_name' for clarity.  Then replace the string calls with a
14843         call to MemberName.GetPartialName, as now using
14844         MemberName.ToString is an error (this is due to the side effects
14845         it had, that were fixed in the past).
14846
14847         This will restore the error reporting on a number of partial class
14848         errors that were missusing this (and getting an exception as a
14849         results, which is now just a plain textual warning, because
14850         yyparse debug output would crash otherwise).
14851
14852 2004-11-26  Raja R Harinath  <rharinath@novell.com>
14853
14854         * Makefile (PROGRAM_INSTALL_DIR): Remove.
14855
14856 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
14857
14858         * rootcontext.cs (LookupType): Make sure to cache lookups that
14859         don't give us a negative result. This saves about 5% of corlib
14860         compilation time.
14861
14862 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
14863
14864         * report.cs (AbstractMessage.Print): messages are sent to stderr
14865
14866         * class.cs (TypeContainer.GetClassBases): It is an error to have a
14867         non-interface in the list of interfaces (at this point, either
14868         parent was properly set, or a base class is being listed in the
14869         interfaces section).
14870
14871         This flags error 1722, and resolves the crash from bug 69259.
14872
14873 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
14874
14875         * statement.cs (Using.EmitExpressionFinally): make this work right
14876         for valuetypes. Fixes 69926.
14877
14878 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
14879
14880         * const.cs (Const.ChangeType): Cope with the "0 literal can be
14881         converted to an enum" here, before we try to change the underlying
14882         type.  This code exists, but it is a different code path than the
14883         one used while encoding constants.
14884
14885         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
14886         old bug: when converting from the null literal to a pointer,
14887         return an EmptyCast, not the NullLiteral.
14888
14889         This fixes #69921, the recent null_type changes probably made this
14890         bug more prominent.
14891
14892         (ImplicitReferenceConversionExists): In addition, resynchronized
14893         the code here, so it matches the same code in
14894         ImplicitReferenceConversionExists for the `from any class-type S
14895         to any interface-type T'.
14896         
14897
14898 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
14899
14900         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
14901
14902 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
14903
14904         * cs-parser.jay: Use verbosity accordingly. 
14905
14906 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
14907
14908         * expression.cs (Unary.ResolveOperator): Do not report warning;
14909         AddressOf reads from variable.
14910         
14911         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
14912
14913 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
14914
14915         Fix bug #69462
14916
14917         * attribute.cs (Attributable): Removed CheckTargets.
14918         (Attributes.Emit): Explicit attribute targets are tested here.
14919
14920         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
14921         not enabled for interfaces.
14922
14923         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
14924         (GetAssemblyName): Ouch next bug there.
14925
14926 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
14927
14928         * expression.cs: Error 275 added.
14929         
14930 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
14931
14932         Fix bug #69177 (Implemented decimal constant support)
14933
14934         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
14935         (BinaryFold): Add DecimalConstant.
14936
14937         * const.cs (Define): Decimal constant 
14938         (is not constant.
14939         (ChangeType): Add decimal type handling.
14940         (LookupConstantValue): Don't set value for decimal type but
14941         emit DecimalConstantAttribute. Needed for constant optimization.
14942
14943         * constant.cs (ToDecimal): New method.
14944         (ConvertToDecimal): New method.
14945         (IntConstant): Implemented ConvertToDecimal.
14946         (DecimalConstant.Emit): Emit optimized version for decimals in
14947         int range.
14948
14949         * expression.cs (ResolveOperator): Changed order of constant
14950         reduction to work correctly with native types which have
14951         overloaded operators.
14952         (ResolveMemberAccess): Extract constant value from attribute
14953         for decimal type.
14954
14955         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
14956
14957         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
14958         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
14959         (ChangeType): Decimal is special.
14960         (TypeToCoreType): Add decimal type.
14961
14962 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
14963
14964         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
14965         decimal types.
14966
14967 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
14968
14969         * class.cs (EventField.ApplyAttributeBuilder): Fix error
14970         test cs1667-5.cs.
14971
14972 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
14973
14974         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
14975
14976         * pending.cs (PendingImplementation): Grab only interfaces.
14977
14978 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
14979
14980         * statement.cs (ForeachHelperMethods): Add location member and
14981         error 202 detection.
14982
14983 2004-11-19  Raja R Harinath  <rharinath@novell.com>
14984
14985         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
14986         automatically handled by executable.make.
14987         (PROGRAM): Make profile-specific.
14988
14989 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
14990
14991         * expression.cs (DoResolveBase): Fixed wrong warning for out
14992         variables.
14993
14994 2004-11-18  Martin Baulig  <martin@ximian.com>
14995
14996         Merged latest changes into gmcs.  Please keep this comment in
14997         here, it makes it easier for me to see what changed in MCS since
14998         the last time I merged.
14999
15000 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15001
15002         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15003         (TypeHandle.GetMemberCache): New.
15004         (TypeHandle.TypeHandle): Update.
15005         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15006         (TypeManager.LookupParentInterfacesCache):
15007         Rename from LookupInterfaceCache.  Optimize slightly.
15008         (TypeManager.MemberLookup_FindMembers): Update.
15009         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15010         multi-type variant.
15011         (AddCacheContents): Rename from AddHashtable.
15012         * class.cs (TypeContainer.parent_container): Remove.
15013         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15014         (TypeContainer.DoDefineMembers): Don't initialize it.
15015         Update to name changes.
15016         
15017 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15018
15019         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15020         that factors the code to check access modifiers on override.  
15021
15022         (PropertyBase): Use the code here.
15023
15024         Patch from Lluis S'anchez, fixes bug #69361.
15025
15026 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15027
15028         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15029         routine that is used to report the use of a captured variable
15030         whose address has been taken.
15031
15032         There are two checks: one when variables are being captured and
15033         the other check is when the address of a variable is taken. 
15034         
15035         (because an anonymous methods might be resolved before *or* after
15036         the address has been taken) and 
15037
15038         * expression.cs (Conditional.DoResolve): Remove the special
15039         casing that Martin added to trueExpr and falseExpr being both
15040         NullLiteral.  We get the right behavior now just by introducing
15041         the null_type into the compiler. 
15042
15043         * convert.cs (ExplicitConversion): Change the code to use
15044         null_type instead of testing `expr is NullLiteral'.
15045         (ImplicitConversionStandard): use null_type too.
15046         (ImplicitReferenceConversionExists): use null_type too.
15047         (ImplicitReferenceConversion): use null_type too.
15048
15049         * literal.cs: The type of `NullLiteral' is now null_type instead
15050         of object_type. 
15051         (Resolve): Set the type here.
15052
15053         * typemanager.cs: Introduce null_type.
15054
15055 2004-11-17  Martin Baulig  <martin@ximian.com>
15056
15057         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
15058         direction, like FindMembers() does.  Fixes #69546, testcase is in
15059         test-315.cs.    
15060
15061 2004-11-16  Martin Baulig  <martin@ximian.com>
15062
15063         This is based on a patch from Marek Safar, see bug #69082.
15064         Fixes bugs #63705 and #67130.
15065
15066         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
15067         method; create a MemberCache for an interface type and cache the
15068         result.
15069
15070         * decl.cs (IMemberContainer.ParentContainer): Removed.
15071         (IMemberContainer.ParentCache): New property.
15072         (MemberCache.SetupCacheForInterface): Removed.
15073         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
15074         to create a cache for an interface's "parent".
15075
15076         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
15077         interfaces too.
15078
15079 2004-11-16  Martin Baulig  <martin@ximian.com>
15080
15081         Merged back from gmcs; these changes already went into gmcs a
15082         couple of weeks ago.
15083
15084         * typemanager.cs
15085         (TypeManager.AddUserType): Removed the `ifaces' argument.
15086         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
15087         `TypeExpr []'.
15088         (TypeManager.AddUserInterface): Removed.
15089         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
15090         `TypeExpr []'.
15091         (TypeManager.GetInterfaces): Likewise.
15092         (TypeManager.GetExplicitInterfaces): Likewise.
15093
15094         * ecore.cs (TypeExpr.GetInterfaces): Removed.
15095
15096         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
15097         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
15098
15099 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
15100
15101         * statement.cs: Avoid adding bools to a hashtable.
15102
15103 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
15104
15105         * expression.cs (Invocation.OverloadResolve): Flag error if we are
15106         calling an unsafe method from a safe location.
15107
15108 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
15109
15110         Fix #69167
15111         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
15112
15113 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
15114
15115         * namespace.cs (VerifyUsing): use GetPartialName instead of
15116         ToString. 
15117
15118 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
15119
15120         * statement.cs (Return.Resolve): Fix regression in typo: if
15121         `in_exc', we have to request a NeedReturnLabel, this was a typo
15122         introduced in the anonymous method check-in.  Fixes #69131.
15123
15124         * Indexers were using the ShortName when defining themselves,
15125         causing a regression in the compiler bootstrap when applying the
15126         patch from 2004-11-02 (first part), now they use their full name
15127         and the bug is gone.
15128
15129 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
15130
15131         * driver.cs: Strip the path from the names of embedded resources. Fixes
15132         #68519.
15133
15134 2004-11-04  Raja R Harinath  <rharinath@novell.com>
15135
15136         Fix error message regression: cs0104-2.cs.
15137         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
15138         (AliasEntry.Resolve): Update.
15139         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
15140         'silent' flag.
15141         (RootContext.LookupType): Update.
15142
15143 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
15144
15145         * cs-parser.jay: Add support for handling accessor modifiers
15146         * class: Add support port accessor modifiers and error checking,
15147         define PropertyMethod.Define as virtual (not abstract anymore)
15148         * ecore.cs: Add checking for proeprties access with access modifiers
15149         * iterators.cs: Modify Accessor constructor call based in the modified
15150         constructor
15151 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
15152
15153         * expression.cs (StringConcat): Handle being called twice,
15154         as when we have a concat in a field init with more than two
15155         ctors in the class
15156
15157 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
15158
15159         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
15160         special case explicit implementations, we should always produce
15161         the .property or .event declaration.
15162         
15163         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
15164         since it will not return correct data if people use this
15165         unresolved in the presence of using statements (see test-313).
15166
15167         * class.cs (MethodData.Define): If we are an explicit interface
15168         implementation, set the method name to the full name of the
15169         interface plus the name of the method.  
15170
15171         Notice that using the method.MethodName.GetFullName() does not
15172         work, as it will only contain the name as declared on the source
15173         file (it can be a shorthand in the presence of using statements)
15174         and not the fully qualifed type name, for example:
15175
15176         using System;
15177
15178         class D : ICloneable {
15179                 object ICloneable.Clone ()  {
15180                 }
15181         }
15182
15183         Would produce a method called `ICloneable.Clone' instead of
15184         `System.ICloneable.Clone'.
15185
15186         * namespace.cs (Alias.Resolve): Use GetPartialName.
15187         
15188 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15189
15190         * cs-parser.jay: Add error 1055 report.
15191
15192 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
15193
15194         * assign.cs (Assign.DoResolve): Only do the transform of
15195         assignment into a New if the types are compatible, if not, fall
15196         through and let the implicit code deal with the errors and with
15197         the necessary conversions. 
15198
15199 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15200
15201         * cs-parser.jay: Add error 1031 report.
15202
15203         * cs-tokenizer.cs: Add location for error 1038.
15204
15205 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15206
15207         * cs-parser.jay: Add error 1016 report.
15208
15209 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15210
15211         * cs-parser.jay: Add errors 1575,1611 report.
15212
15213 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15214
15215         * cs-parser.jay: Add error 1001 report.
15216
15217 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15218
15219         Fix #68850
15220         * attribute.cs (GetMarshal): Add method argument for
15221         caller identification.
15222
15223         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
15224         agument for GetMarshal and RuntimeMissingSupport.
15225
15226 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15227
15228         * attribute.cs (ExtractSecurityPermissionSet): Removed
15229         TypeManager.code_access_permission_type.
15230
15231         * typemanager.cs: Removed TypeManager.code_access_permission_type.
15232
15233 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
15234
15235         * expression.cs (LocalVariableReference.DoResolveLValue): Check
15236         for obsolete use of a variable here.   Fixes regression on errors
15237         cs0619-25 and cs0619-26.
15238
15239 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
15240
15241         Fix #62358, implemented security attribute encoding.
15242
15243         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
15244         Tests permitted SecurityAction for assembly or other types.
15245         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
15246         data from SecurityPermissionAttribute to PermisionSet class.
15247
15248         * class.cs (ApplyAttributeBuilder): Added special handling
15249         for System.Security.Permissions.SecurityAttribute based types.
15250
15251         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
15252         special handling for System.Security.Permissions.SecurityAttribute
15253         based types.
15254
15255         * enum.cs (ApplyAttributeBuilder): Added special handling
15256         for System.Security.Permissions.SecurityAttribute based types.
15257
15258         * parameter.cs (ApplyAttributeBuilder): Added special handling
15259         for System.Security.Permissions.SecurityAttribute based types.
15260
15261         * rootcontext.cs: Next 2 core types.
15262
15263         * typemanager.cs (TypeManager.security_permission_attr_type):
15264         Built in type for the SecurityPermission Attribute.
15265         (code_access_permission_type): Build in type.
15266
15267 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
15268
15269         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
15270         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
15271         all of this information into
15272         EmitContext.EmitCapturedVariableInstance.
15273         
15274         * codegen.cs (EmitCapturedVariableInstance): move here the
15275         funcionality of emitting an ldarg.0 in the presence of a
15276         remapping.   This centralizes the instance emit code.
15277
15278         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
15279         then emit a load of this: it means that we have reached the
15280         topmost ScopeInfo: the one that contains the pointer to the
15281         instance of the class hosting the anonymous method.
15282
15283         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
15284         captures to the topmost CaptureContext.
15285
15286 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
15287
15288         * expression.cs (LocalVariableReference): Move the knowledge about
15289         the iterators into codegen's EmitCapturedVariableInstance.
15290
15291 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
15292
15293         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
15294         all code paths return a value from an anonymous method (it is the
15295         same as the 161 error, but for anonymous methods).
15296
15297 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
15298
15299         The introduction of anonymous methods in the compiler changed
15300         various ways of doing things in the compiler.  The most
15301         significant one is the hard split between the resolution phase
15302         and the emission phases of the compiler.
15303
15304         For instance, routines that referenced local variables no
15305         longer can safely create temporary variables during the
15306         resolution phase: they must do so from the emission phase,
15307         since the variable might have been "captured", hence access to
15308         it can not be done with the local-variable operations from the runtime.
15309         
15310         * statement.cs 
15311
15312         (Block.Flags): New flag `IsTopLevel' to indicate that this block
15313         is a toplevel block.
15314
15315         (ToplevelBlock): A new kind of Block, these are the blocks that
15316         are created by the parser for all toplevel method bodies.  These
15317         include methods, accessors and anonymous methods.
15318
15319         These contain some extra information not found in regular blocks:
15320         A pointer to an optional CaptureContext (for tracking captured
15321         local variables and parameters).  A pointer to the parent
15322         ToplevelBlock.
15323         
15324         (Return.Resolve): Catch missmatches when returning a value from an
15325         anonymous method (error 1662).
15326         Invoke NeedReturnLabel from the Resolve phase instead of the emit
15327         phase.
15328
15329         (Break.Resolve): ditto.
15330
15331         (SwitchLabel): instead of defining the labels during the
15332         resolution phase, we now turned the public ILLabel and ILLabelCode
15333         labels into methods called GetILLabelCode() and GetILLabel() that
15334         only define the label during the Emit phase.
15335
15336         (GotoCase): Track the SwitchLabel instead of the computed label
15337         (its contained therein).  Emit the code by using
15338         SwitchLabel.GetILLabelCode ().
15339
15340         (LocalInfo.Flags.Captured): A new flag has been introduce to track
15341         whether the Local has been captured or not.
15342
15343         (LocalInfo.IsCaptured): New property, used to tell whether the
15344         local has been captured.
15345         
15346         * anonymous.cs: Vastly updated to contain the anonymous method
15347         support.
15348
15349         The main classes here are: CaptureContext which tracks any
15350         captured information for a toplevel block and ScopeInfo used to
15351         track the activation frames for various local variables.   
15352
15353         Each toplevel block has an optional capture context associated
15354         with it.  When a method contains an anonymous method both the
15355         toplevel method and the anonymous method will create a capture
15356         context.   When variables or parameters are captured, they are
15357         recorded on the CaptureContext that owns them, for example:
15358
15359         void Demo () {
15360              int a;
15361              MyDelegate d = delegate {
15362                  a = 1;
15363              }
15364         }
15365
15366         Here `a' will be recorded as captured on the toplevel
15367         CapturedContext, the inner captured context will not have anything
15368         (it will only have data if local variables or parameters from it
15369         are captured in a nested anonymous method.
15370
15371         The ScopeInfo is used to track the activation frames for local
15372         variables, for example:
15373
15374         for (int i = 0; i < 10; i++)
15375                 for (int j = 0; j < 10; j++){
15376                    MyDelegate d = delegate {
15377                         call (i, j);
15378                    }
15379                 }
15380
15381         At runtime this captures a single captured variable `i', but it
15382         captures 10 different versions of the variable `j'.  The variable
15383         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
15384         recorded on a child.  
15385
15386         The toplevel ScopeInfo will also track information like the `this'
15387         pointer if instance variables were referenced (this is necessary
15388         as the anonymous method lives inside a nested class in the host
15389         type of the method). 
15390
15391         (AnonymousMethod): Expanded to track the Toplevel, implement
15392         `AnonymousMethod.Compatible' to tell whether an anonymous method
15393         can be converted to a target delegate type. 
15394
15395         The routine now also produces the anonymous method content
15396
15397         (AnonymousDelegate): A helper class that derives from
15398         DelegateCreation, this is used to generate the code necessary to
15399         produce the delegate for the anonymous method that was created. 
15400
15401         * assign.cs: API adjustments for new changes in
15402         Convert.ImplicitStandardConversionExists.
15403
15404         * class.cs: Adjustments to cope with the fact that now toplevel
15405         blocks are of type `ToplevelBlock'. 
15406
15407         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
15408         insteda of standard blocks.
15409
15410         Flag errors if params arguments are passed to anonymous methods.
15411
15412         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
15413         `CurrentAnonymousMethod' which points to the current Anonymous
15414         Method.  The variable points to the AnonymousMethod class that
15415         holds the code being compiled.  It is set in the new EmitContext
15416         created for the anonymous method.
15417
15418         (EmitContext.Phase): Introduce a variable and an enumeration to
15419         assist in enforcing some rules about when and where we are allowed
15420         to invoke certain methods (EmitContext.NeedsReturnLabel is the
15421         only one that enfonces this right now).
15422
15423         (EmitContext.HaveCaptureInfo): new helper method that returns
15424         whether we have a CapturedContext initialized.
15425
15426         (EmitContext.CaptureVariable): New method used to register that a
15427         LocalInfo must be flagged for capturing. 
15428
15429         (EmitContext.CapturedParameter): New method used to register that a
15430         parameters must be flagged for capturing. 
15431         
15432         (EmitContext.CapturedField): New method used to register that a
15433         field must be flagged for capturing. 
15434
15435         (EmitContext.HaveCapturedVariables,
15436         EmitContext.HaveCapturedFields): Return whether there are captured
15437         variables or fields. 
15438
15439         (EmitContext.EmitMethodHostInstance): This is used to emit the
15440         instance for the anonymous method.  The instance might be null
15441         (static methods), this (for anonymous methods that capture nothing
15442         and happen to live side-by-side with the current method body) or a
15443         more complicated expression if the method has a CaptureContext.
15444
15445         (EmitContext.EmitTopBlock): Routine that drives the emission of
15446         code: it will first resolve the top block, then emit any metadata
15447         and then emit the code.  The split is done so that we can extract
15448         any anonymous methods and flag any captured variables/parameters.
15449         
15450         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
15451         during this phase, the ILGenerator should not be used as labels
15452         and local variables declared here might not be accessible to any
15453         code that is part of an anonymous method.  
15454
15455         Exceptions to this include the temporary variables that are
15456         created by some statements internally for holding temporary
15457         variables. 
15458         
15459         (EmitContext.EmitMeta): New routine, in charge of emitting all the
15460         metadata for a cb
15461
15462         (EmitContext.TemporaryReturn): This method is typically called
15463         from the Emit phase, and its the only place where we allow the
15464         ReturnLabel to be defined other than the EmitMeta.  The reason is
15465         that otherwise we would have to duplicate a lot of logic in the
15466         Resolve phases of various methods that today is on the Emit
15467         phase. 
15468
15469         (EmitContext.NeedReturnLabel): This no longer creates the label,
15470         as the ILGenerator is not valid during the resolve phase.
15471
15472         (EmitContext.EmitThis): Extended the knowledge in this class to
15473         work in anonymous methods in addition to iterators. 
15474
15475         (EmitContext.EmitCapturedVariableInstance): This emits whatever
15476         code is necessary on the stack to access the instance to a local
15477         variable (the variable will be accessed as a field).
15478
15479         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
15480         EmitContext.EmitAddressOfParameter): Routines to support
15481         parameters (not completed at this point). 
15482         
15483         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
15484         will also remove the parameters.
15485
15486         * convert.cs (Convert): Define a `ConstantEC' which points to a
15487         null.  This is just to prefity some code that uses
15488         ImplicitStandardConversion code and do not have an EmitContext
15489         handy.
15490
15491         The idea is to flag explicitly that at that point in time, it is
15492         known that the conversion will not trigger the delegate checking
15493         code in implicit conversions (which requires a valid
15494         EmitContext). 
15495
15496         Everywhere: pass new EmitContext parameter since
15497         ImplicitStandardConversionExists now requires it to check for
15498         anonymous method conversions. 
15499
15500         (Convert.ImplicitStandardConversionExists): If the type of an
15501         expression is the anonymous_method_type, and the type is a
15502         delegate, we invoke the AnonymousMethod.Compatible method to check
15503         whether an implicit conversion is possible. 
15504
15505         (Convert.ImplicitConversionStandard): Only do implicit method
15506         group conversions if the language level is not ISO_1.
15507
15508         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
15509         MethodInfo for the Invoke method.  used by Delegate and
15510         AnonymousDelegate.
15511
15512         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
15513         method conversions if the target type is a delegate.
15514
15515         Removed extra debugging nops.
15516
15517         (LocalVariableReference): Turn the `local_info' into a public
15518         field. 
15519
15520         Add `prepared' field, the same hack used for FieldExprs to cope
15521         with composed assignments, as Local variables do not necessarily
15522         operate purely on the stack as they used to: they can be captured
15523         fields. 
15524
15525         Add `temp' for a temporary result, like fields.
15526
15527         Refactor DoResolve and DoResolveLValue into DoResolveBase.
15528
15529         It now copes with Local variables that are captured and emits the
15530         proper instance variable to load it from a field in the captured
15531         case. 
15532
15533         (ParameterReference.DoResolveBase): During the resolve phase,
15534         capture parameters if we are in an anonymous method.
15535
15536         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
15537         anonymous method, use the EmitContext helper routines to emit the
15538         parameter reference.
15539
15540         * iterators.cs: Set RemapToProxy to true/false during the
15541         EmitDispose class.
15542
15543         * parameters.cs (GetParameterByName): New helper method. 
15544
15545         * typemanager.cs (anonymous_method_type) a new type that
15546         represents an anonyous method.  This is always an internal type,
15547         used as a fencepost to test against the anonymous-methodness of an
15548         expression. 
15549         
15550 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
15551
15552         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
15553         561 report.
15554         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
15555
15556 2004-10-18  Martin Baulig  <martin@ximian.com>
15557
15558         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
15559         `Type' directly, but call ResolveType() on it.
15560         (Catch.Resolve): Likewise.
15561         (Foreach.Resolve): Likewise.
15562
15563 2004-10-18  Martin Baulig  <martin@ximian.com>
15564
15565         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
15566         `Type' directly, but call ResolveType() on it.
15567         (Probe.DoResolve): Likewise.
15568         (ArrayCreation.LookupType): Likewise.
15569         (TypeOf.DoResolve): Likewise.
15570         (SizeOf.DoResolve): Likewise.
15571
15572 2004-10-18  Martin Baulig  <martin@ximian.com>
15573
15574         * expression.cs (Invocation.BetterFunction): Put back
15575         TypeManager.TypeToCoreType().
15576
15577 2004-10-18  Raja R Harinath  <rharinath@novell.com>
15578
15579         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
15580         the ResolveType.
15581
15582 2004-10-18  Martin Baulig  <martin@ximian.com>
15583
15584         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
15585         `Type' directly, but call ResolveType() on it.
15586
15587 2004-10-18  Martin Baulig  <martin@ximian.com>
15588
15589         * class.cs (FieldMember.Define): Don't access the TypeExpr's
15590         `Type' directly, but call ResolveType() on it.
15591         (MemberBase.DoDefine): Likewise.
15592
15593         * expression.cs (New.DoResolve): Don't access the TypeExpr's
15594         `Type' directly, but call ResolveType() on it.
15595         (ComposedCast.DoResolveAsTypeStep): Likewise.
15596
15597         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
15598         `Type' directly, but call ResolveType() on it.
15599
15600 2004-10-17  John Luke  <john.luke@gmail.com>
15601
15602         * class.cs (Operator.GetSignatureForError): use CSharpName
15603
15604         * parameter.cs (Parameter.GetSignatureForError): Returns
15605         correct name even if was not defined.
15606
15607 2004-10-13  Raja R Harinath  <rharinath@novell.com>
15608
15609         Fix #65816.
15610         * class.cs (TypeContainer.EmitContext): New property.
15611         (DefineNestedTypes): Create an emitcontext for each part.
15612         (MethodCore.DoDefineParameters): Use container's emitcontext.
15613         Pass type array to InternalParameters.
15614         (MemberBase.DoDefine): Use container's emitcontext.
15615         (FieldMember.Define): Likewise.
15616         (Event.Define): Likewise.
15617         (SetMethod.GetParameterInfo): Change argument to EmitContext.
15618         Pass type array to InternalParameters.
15619         (SetIndexerMethod.GetParameterInfo): Likewise.
15620         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
15621         * delegate.cs (Define): Pass emitcontext to
15622         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
15623         array to InternalParameters.
15624         * expression.cs (ParameterReference.DoResolveBase): Pass
15625         emitcontext to GetParameterInfo.
15626         (ComposedCast.DoResolveAsTypeStep): Remove check on
15627         ec.ResolvingTypeTree.
15628         * parameter.cs (Parameter.Resolve): Change argument to
15629         EmitContext.  Use ResolveAsTypeTerminal.
15630         (Parameter.GetSignature): Change argument to EmitContext.
15631         (Parameters.ComputeSignature): Likewise.
15632         (Parameters.ComputeParameterTypes): Likewise.
15633         (Parameters.GetParameterInfo): Likewise.
15634         (Parameters.ComputeAndDefineParameterTypes): Likewise.
15635         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
15636         * support.cs (InternalParameters..ctor): Remove variant that takes
15637         a DeclSpace.
15638         * typemanager.cs (system_intptr_expr): New.
15639         (InitExpressionTypes): Initialize it.
15640
15641 2004-10-12  Chris Toshok  <toshok@ximian.com>
15642
15643         * cs-parser.jay: fix location for try_statement and catch_clause.
15644
15645 2004-10-11  Martin Baulig  <martin@ximian.com>
15646
15647         * report.cs: Don't make --fatal abort on warnings, we have
15648         -warnaserror for that.
15649
15650 2004-10-07  Raja R Harinath  <rharinath@novell.com>
15651
15652         More DeclSpace.ResolveType avoidance.
15653         * decl.cs (MemberCore.InUnsafe): New property.
15654         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
15655         with newly created EmitContext.
15656         (FieldMember.Define): Likewise.
15657         * delegate.cs (Delegate.Define): Likewise.
15658         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
15659         only if normal name-lookup fails.
15660         (TypeExpr.DoResolve): Enable error-checking.
15661         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
15662         (SizeOf.DoResolve): Likewise.
15663         (ComposedCast.DoResolveAsTypeStep): Likewise.
15664         (StackAlloc.DoResolve): Likewise.
15665         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
15666         (Block.Unsafe): New property.
15667         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
15668         (Unsafe): Set 'unsafe' flag of contained block.
15669         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
15670         (Fixed.Resolve): Likewise.
15671         (Catch.Resolve): Likewise.
15672         (Using.ResolveLocalVariableDecls): Likewise.
15673         (Foreach.Resolve): Likewise.
15674
15675 2004-10-05  John Luke <john.luke@gmail.com>
15676
15677         * cs-parser.jay: add location to error CS0175
15678
15679 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
15680
15681         * ecore.cs (Expression.Constantity): Add support for turning null
15682         into a constant.
15683
15684         * const.cs (Const.Define): Allow constants to be reference types
15685         as long as the value is Null.
15686
15687 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
15688
15689         * namespace.cs (NamespaceEntry.Using): No matter which warning
15690         level is set, check if this namespace name has already been added.
15691
15692 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
15693
15694         * expression.cs: reftype [!=]= null should always use br[true,false].
15695         # 67410
15696
15697 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
15698
15699         Fix #67108
15700         * attribute.cs: Enum conversion moved to 
15701         GetAttributeArgumentExpression to be applied to the all
15702         expressions.
15703
15704 2004-10-01  Raja R Harinath  <rharinath@novell.com>
15705
15706         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
15707         * class.c (TypeContainer.DefineType): Flag error if
15708         base types aren't accessible due to access permissions.
15709         * decl.cs (DeclSpace.ResolveType): Move logic to
15710         Expression.ResolveAsTypeTerminal.
15711         (DeclSpace.ResolveTypeExpr): Thin layer over
15712         Expression.ResolveAsTypeTerminal.
15713         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
15714         Refactor code into NestedAccess.  Use it.
15715         (DeclSpace.NestedAccess): New.
15716         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
15717         argument to silence errors.  Check access permissions.
15718         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
15719         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
15720         (Cast.DoResolve): Likewise.
15721         (New.DoResolve): Likewise.
15722         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
15723         (TypeOf.DoResolve): Likewise.
15724
15725         * expression.cs (Invocation.BetterConversion): Return the Type of
15726         the better conversion.  Implement section 14.4.2.3 more faithfully.
15727         (Invocation.BetterFunction): Make boolean.  Make correspondence to
15728         section 14.4.2.2 explicit.
15729         (Invocation.OverloadResolve): Update.
15730         (Invocation): Remove is_base field.
15731         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
15732         (Invocation.Emit): Likewise.
15733
15734 2004-09-27  Raja R Harinath  <rharinath@novell.com>
15735
15736         * README: Update to changes.
15737
15738 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
15739
15740         * cs-parser.jay: Reverted 642 warning fix.
15741
15742 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15743
15744         Fix bug #66615
15745         * decl.cs (FindMemberWithSameName): Indexer can have more than
15746         1 argument.
15747
15748 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15749
15750         * expression.cs (LocalVariableReference.DoResolveLValue):
15751         Do not report warning 219 for out values.
15752         (EmptyExpression.Null): New member to avoid extra allocations.
15753
15754 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15755
15756         * cs-parser.jay: Fix wrong warning 642 report.
15757
15758         * cs-tokenizer.cs (CheckNextToken): New helper;
15759         Inspect next character if is same as expected.
15760
15761 2004-09-23  Martin Baulig  <martin@ximian.com>
15762
15763         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
15764         (Convert.ImplicitReferenceConversionExists): Likewise.
15765
15766 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
15767
15768         * class.cs (Operator.Define): Add error 448 and 559 report.
15769
15770 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
15771
15772         * class.cs (MemberBase.IsTypePermitted): New protected
15773         method for checking error CS0610.
15774
15775 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
15776
15777         * class.cs (TypeContainer.HasExplicitLayout): New property
15778         Returns whether container has StructLayout attribute set Explicit.
15779         (FieldMember): New abstract class for consts and fields.
15780         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
15781         (Field): Reuse FieldMember.
15782
15783         * const.cs (Const): Reuse FieldMember.
15784
15785         * rootcontext.cs: EmitConstants call moved to class.
15786
15787 2004-09-22  Martin Baulig  <martin@ximian.com>
15788
15789         Thanks to Peter Sestoft for this bug report.
15790
15791         * expression.cs (Conditional): If both the `trueExpr' and the
15792         `falseExpr' is a NullLiteral, return a NullLiteral.
15793
15794 2004-09-22  Martin Baulig  <martin@ximian.com>
15795
15796         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
15797         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
15798         for the "get_Current" call.
15799
15800 2004-09-22  Martin Baulig  <martin@ximian.com>
15801
15802         Marek and me just fixed one of our oldest bugs: #28562 :-)
15803
15804         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
15805
15806         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
15807         we're an EnumConstant, just return that.
15808         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
15809         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
15810         to get the value which'll actually be written into the attribute.
15811         However, we have to use GetValue() to access the attribute's value
15812         in the compiler.        
15813
15814 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
15815
15816         * constant.cs (Constant.IsNegative): New abstract property
15817         IsNegative.
15818
15819         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
15820         (StackAlloc.DoResolve): Reused IsNegative.
15821
15822 2004-09-21  Martin Baulig  <martin@ximian.com>
15823
15824         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
15825         if we're used in an iterator, we may be called from different
15826         methods.
15827
15828         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
15829         we actually have an exception block.
15830
15831 2004-09-20  John Luke <jluke@cfl.rr.com>
15832
15833         * class.cs, cs-parser.jay: Improve the error report for 1520:
15834         report the actual line where the error happens, not where the
15835         class was declared.
15836
15837         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
15838         Pass location information that was available elsewhere.
15839
15840 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
15841
15842         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
15843         runtime to delay sign assemblies.
15844
15845 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
15846
15847         * cs-parser.jay: Do not report the stack trace, this is barely
15848         used nowadays.
15849
15850 2004-08-22  John Luke  <john.luke@gmail.com>
15851  
15852         * driver.cs : check that a resource id is not already used
15853         before adding it, report CS1508 if it is, bug #63637
15854
15855 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
15856
15857         * ecore.cs: Removed dead code.
15858
15859 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
15860
15861         * class.cs: Do not report warning CS0067 on the interfaces.
15862
15863 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
15864
15865         * cs-parser.jay: Add error 504 report.
15866
15867 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
15868
15869         * rootcontext.cs: WarningLevel is 4 by default now.
15870
15871         * statement.cs (Fixed.Resolve): Do not null
15872         VariableInfo.
15873
15874 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
15875
15876         Fixed bug #55780
15877         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
15878         deep search when property is not virtual.
15879         (PropertyExpr.ResolveAccessors): Make one call for both
15880         accessors.
15881
15882 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15883
15884         Fixed bug #65766
15885         * statement.cs: Error 152 report constains also location.
15886
15887 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15888
15889         Fixed bug #65766
15890         * const.cs: Explicitly set constant as static.
15891
15892 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15893
15894         Fixed bug #64226
15895         * cs-parser.jay: Add error 1017 report.
15896
15897 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
15898
15899         Fixed bug #59980, #64224
15900         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
15901
15902         * typemanager.cs (IsSpecialMethod): Simplified
15903
15904 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
15905
15906         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
15907         condition with better params.
15908
15909 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
15910
15911         Fixed bug #65238
15912         * attribute.cs (Resolve): Property has to have both
15913         accessors.
15914
15915 2004-09-14  Martin Baulig  <martin@ximian.com>
15916
15917         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
15918
15919 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
15920
15921         Fixed bug #61902
15922         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
15923         called and is obsolete then this member suppress message
15924         when call is inside next [Obsolete] method or type.
15925
15926         * expression.cs: Use TestObsoleteMethodUsage member.
15927
15928 2004-09-14  Martin Baulig  <martin@ximian.com>
15929
15930         * cs-parser.jay: Sync a bit with the GMCS version.
15931
15932 2004-09-14  Martin Baulig  <martin@ximian.com>
15933
15934         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
15935         (CSharpParser.yacc_verbose_flag): New public field.
15936
15937         * genericparser.cs: Removed.
15938
15939 2004-09-14  Raja R Harinath  <rharinath@novell.com>
15940
15941         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
15942
15943 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
15944
15945         * class.cs (MethodCore.CheckBase): Fix bug #65757.
15946
15947 2004-09-10  Martin Baulig  <martin@ximian.com>
15948
15949         Backported my MemberName changes from GMCS into MCS.
15950
15951         - we are now using a special `MemberName' class instead of using
15952         strings; in GMCS, the `MemberName' also contains the type
15953         arguments.
15954
15955         - changed the grammar rules a bit:
15956           * the old `member_name' is now a `namespace_or_type_name':
15957             The rule is that we use `namespace_or_type_name' everywhere
15958             where we expect either a "member name" (GetEnumerator) or a
15959             "member name" with an explicit interface name
15960             (IEnumerable.GetEnumerator).
15961             In GMCS, the explicit interface name may include type arguments
15962             (IEnumerable<T>.GetEnumerator).
15963           * we use `member_name' instead of just `IDENTIFIER' for
15964             "member names":
15965             The rule is that we use `member_name' wherever a member may
15966             have type parameters in GMCS.       
15967
15968         * decl.cs (MemberName): New public class.
15969         (MemberCore.MemberName): New public readonly field.
15970         (MemberCore.ctor): Take a `MemberName' argument, not a string.
15971         (DeclSpace): Likewise.
15972
15973         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
15974         * enum.cs (Enum.ctor): Likewise.
15975
15976         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
15977         MemberName.     
15978         (AliasEntry.ctor): Take a MemberName, not an Expression.
15979         (AliasEntry.UsingAlias): Likewise.
15980
15981         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
15982         (IMethodData.MemberName): Changed type from string to MemberName.
15983         (MemberBase.ExplicitInterfaceName): Likewise.
15984         (AbstractPropertyEventMethod.SetupName): Make this private.
15985         (AbstractPropertyEventMethod.ctor): Added `string prefix'
15986         argument; compute the member name here.
15987         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
15988         on the `member.MemberName' and the `prefix'.
15989
15990         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
15991         not `type_name'.
15992         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
15993         thus, we get a `MemberName' instead of a `string'.  These
15994         declarations may have type parameters in GMCS.
15995         (interface_method_declaration, delegate_declaration): Likewise.
15996         (class_declaration, interface_declaration): Likewise.
15997         (method_header): Use `namespace_or_type_name' instead of
15998         `member_name'.  We may be an explicit interface implementation.
15999         (property_declaration, event_declaration): Likewise.
16000         (member_name): This is now just an `IDENTIFIER', not a
16001         `namespace_or_type_name'.
16002         (type_name, interface_type): Removed.
16003         (namespace_or_type_name): Return a MemberName, not an Expression.
16004         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16005         call GetTypeExpression() on the MemberName to get an expression.
16006         (IndexerDeclaration.interface_type): Changed type from string to
16007         MemberName.
16008         (MakeName): Operate on MemberName's instead of string's.
16009
16010 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16011
16012         Fix bug #55770.
16013         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16014         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16015         lookup to avoid symbols introduced by 'using'.
16016         * rootcontext.cs (NamespaceLookup): Update.
16017
16018 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16019
16020         * class.cs (TypeContainer.DoDefineMembers): Do not call
16021         DefineDefaultConstructor for static classes.
16022
16023 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16024
16025         * attribute.cs (Attribute.Resolve): Add error 653 report.
16026
16027         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16028         report.
16029         (Method.ApplyAttributeBuilder): Add error 685 report.
16030         (Operator.Define): Add error 564 report.
16031
16032         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16033
16034         * expression.cs (Invocation.DoResolve): Add error
16035         245 and 250 report.
16036
16037         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16038         error 674 report.
16039
16040 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16041
16042         * class.cs (ConstructorInitializer.Resolve):
16043         Wrong error number (515->516).
16044
16045 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16046
16047         * class.cs (Indexer.Define): Add error 631 report.
16048
16049 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16050
16051         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16052
16053 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16054
16055         * expression.cs (Probe.DoResolve): Add error CS0241 report.
16056
16057 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
16058
16059         * cs-parser.jay: Added error CS0241 report.
16060
16061 2004-09-10  Raja R Harinath  <rharinath@novell.com>
16062
16063         * cs-parser.jay (fixed_statement): Introduce a scope for the
16064         declaration in the 'fixed' statement.
16065
16066 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16067
16068         * cs-parser.jay: Added CS0230 error report.
16069
16070 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16071
16072         * cs-parser.jay: Added errors CS0231 and CS0257 report.
16073
16074 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16075
16076         * expression.cs (Argument.Resolve): Added error CS0192 and
16077         CS0199 report.
16078
16079 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16080
16081         C# 2.0 #pragma warning feature
16082
16083         * cs-tokenizer.cs (PreProcessPragma): New method; 
16084         Handles #pragma directive.
16085
16086         * report.cs (WarningRegions): New class; Support
16087         class for #pragma warning directive. It tests whether
16088         warning is enabled for a given line.
16089
16090 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
16091
16092         * const.cs: Add more descriptive error report, tahnks to
16093         Sebastien. 
16094
16095 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
16096
16097         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
16098
16099 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
16100
16101         * expression.cs: Apply patch from Ben: Remove dead code from
16102         ArrayCreation, and remove the TurnintoConstant call in const.cs,
16103         as that code just threw an exception anwyays.
16104
16105         * const.cs: Remove the call to the turnintoconstant, for details
16106         see bug: #63144
16107         
16108         * literal.cs: The type of the null-literal is the null type;  So
16109         we use a placeholder type (literal.cs:System.Null, defined here)
16110         for it.
16111
16112         * expression.cs (Conditional.DoResolve): Remove some old code that
16113         is no longer needed, conversions have been fixed.
16114
16115         (ArrayCreationExpression.DoResolve): Return false if we fail to
16116         resolve the inner expression.
16117
16118 2004-09-07  Raja R Harinath  <rharinath@novell.com>
16119
16120         Fix test-290.cs.
16121         * cs-parser.jay (delegate_declaration): Record a delegate
16122         declaration as a type declaration.
16123         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
16124
16125 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
16126
16127         * parameter.cs: Do not crash if the type can not be resolved. 
16128
16129         * expression.cs: Report errors with unsafe pointers, fixes #64896
16130
16131 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
16132
16133         * expression.cs: Pointer arith always needs to do a conv.i
16134         if the operand is a long. fix 65320
16135
16136 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16137
16138         Fixed cs0619-37.cs, cs0619-38.cs
16139
16140         * enum.cs (GetObsoleteAttribute): Removed.
16141
16142         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
16143         on Enum member is double staged. The first is tested member
16144         and then enum.
16145
16146 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16147
16148         Fixed #56986, #63631, #65231
16149
16150         * class.cs: (TypeContainer.AddToMemberContainer): New method,
16151         adds member to name container.
16152         (TypeContainer.AddToTypeContainer): New method, adds type to
16153         name container.
16154         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
16155         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
16156         AddOperator): Simplified by reusing AddToMemberContainer.
16157         (TypeContainer.UserDefinedStaticConstructor): Changed to property
16158         instead of field.
16159         (Method.CheckForDuplications): Fixed implementation to test all
16160         possibilities.
16161         (MemberBase): Detection whether member is explicit interface
16162         implementation is now in constructor.
16163         (MemberBase.UpdateMemberName): Handles IndexerName.
16164         (Accessor): Changed to keep also location information.
16165         (AbstractPropertyEventMethod): Is derived from MemberCore.
16166         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
16167         will be emited or not.
16168         (PropertyBase.AreAccessorsDuplicateImplementation):
16169         Tests whether accessors are not in collision with some method.
16170         (Operator): Is derived from MethodCore to simplify common
16171         operations.
16172
16173         * decl.cs (Flags.TestMethodDuplication): Test for duplication
16174         must be performed.
16175         (DeclSpace.AddToContainer): Adds the member to defined_names
16176         table. It tests for duplications and enclosing name conflicts.
16177
16178         * enum.cs (EnumMember): Clean up to reuse the base structures
16179
16180 2004-09-03  Martin Baulig  <martin@ximian.com>
16181
16182         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
16183         into TypeContainer, to make partial classes work again.
16184
16185 2004-09-03  Martin Baulig  <martin@ximian.com>
16186
16187         * rootcontext.cs (RootContext.V2): Removed.
16188
16189 2004-03-23  Martin Baulig  <martin@ximian.com>
16190
16191         * expression.cs (Invocation.OverloadResolve): Added `bool
16192         may_fail' argument and use it instead of the Location.IsNull() hack.
16193
16194 2004-09-03  Martin Baulig  <martin@ximian.com>
16195
16196         Merged latest changes into gmcs.  Please keep this comment in
16197         here, it makes it easier for me to see what changed in MCS since
16198         the last time I merged.
16199
16200 2004-09-03  Raja R Harinath  <rharinath@novell.com>
16201
16202         Fix #61128.
16203         * expression.cs (BetterConversion): Don't allow either conversion 
16204         to be null.  Remove redundant implicit conversion test when 'q ==
16205         null' -- when this function is invoked, we already know that the
16206         implicit conversion exists.
16207         (BetterFunction): Assume that 'best' is non-null.  Remove
16208         redundant reimplementation of IsApplicable when 'best' is null.
16209         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
16210         number of arguments.
16211         (IsAncestralType): Extract from OverloadResolve.
16212         (OverloadResolve): Make robust to the MethodGroupExpr being
16213         unsorted.  Implement all the logic of Section 14.5.5.1, and
16214         support overloading of methods from multiple applicable types.
16215         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
16216
16217         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
16218         (RealError, Warning): Append type of report to related symbol.
16219
16220 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
16221
16222         * enum.cs: Fixed CLS-Compliance checks for enum members.
16223         Error tests cs3008-8.cs, cs3014-8.cs
16224
16225 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16226
16227         Fixed bug #62342, #63102
16228         * class.cs: ImplementIndexer uses member.IsExplicitImpl
16229         like ImplementMethod.
16230
16231 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16232
16233         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16234         Fixed bug #65170.
16235
16236 2004-09-02  Martin Baulig  <martin@ximian.com>
16237
16238         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
16239         TypeManager.GetArgumentTypes() rather than calling GetParameters()
16240         on the MethodBase.
16241
16242 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
16243
16244         C# 2.0 Static classes implemented
16245
16246         * class.cs (TypeContainer): instance_constructors,
16247         initialized_fields, initialized_static_fields,
16248         default_constructor, base_inteface_types are protected to be
16249         accessible from StaticClass.
16250         (TypeContainer.DefineDefaultConstructor): New virtual method
16251         for custom default constructor generating
16252         (StaticClass): New class to handle "Static classes" feature.
16253
16254         * cs-parser.jay: Handle static keyword on class like instance
16255         of StaticClass.
16256
16257         * driver.cs: Added "/langversion" command line switch with two
16258         options (iso-1, default).
16259
16260 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
16261
16262         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
16263
16264 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
16265
16266         * delegate.cs: Style.
16267
16268 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16269
16270         * delegate.cs: Add seperate instance expr field for miguel.
16271
16272 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16273
16274         * PointerArithmetic (Resolve): make sure we are not doing
16275         pointer arith on void*. Also, make sure we are resolved
16276         by not setting eclass until resolve.
16277
16278         All callers: Make sure that PointerArithmetic gets resolved.
16279
16280 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16281
16282         * ArrayCreation (LookupType): If the type does not resolve 
16283         to an array, give an error.
16284
16285 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
16286
16287         * statement.cs (Try.Resolve): Fixed bug #64222
16288
16289 2004-08-27  Martin Baulig  <martin@ximian.com>
16290
16291         * class.cs
16292         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
16293         crash here.     
16294
16295 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16296
16297         * ecore.cs (Constantify): Get underlying type via
16298         System.Enum.GetUnderlyingType to avoid StackOverflow on the
16299         Windows in special cases.
16300
16301 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16302
16303         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
16304         for obtaining also private methods.
16305         (GetRemoveMethod): Used GetRemoveMethod (true)
16306         for obtaining also private methods.
16307
16308 2004-08-24  Martin Baulig  <martin@ximian.com>
16309
16310         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
16311         MethodAttributes.HideBySig for operators.
16312
16313 2004-08-23  Martin Baulig  <martin@ximian.com>
16314
16315         Back to the old error reporting system :-)
16316
16317         * report.cs (Message): Removed.
16318         (Report.MessageData, ErrorData, WarningData): Removed.
16319         (Report.Error, Warning): Back to the old system.
16320
16321 2004-08-23  Martin Baulig  <martin@ximian.com>
16322
16323         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
16324
16325         * class.cs (TypeContainer.ParentContainer): New public virtual
16326         method; replaces the explicit interface implementation.
16327         (ClassPart.ParentContainer): Override.
16328
16329 2004-08-23  Martin Baulig  <martin@ximian.com>
16330
16331         * statement.cs (Switch): Added support for constant switches; see
16332         #59428 or test-285.cs.
16333
16334 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
16335
16336         Fixed bug #62740.
16337         * statement.cs (GetEnumeratorFilter): Removed useless
16338         logic because C# specs is strict. GetEnumerator must be
16339         public.
16340
16341 2004-08-22  Martin Baulig  <martin@ximian.com>
16342
16343         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
16344         a switch and may break, reset the barrier.  Fixes #59867.
16345
16346 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
16347
16348         CLS-Compliance speed up (~5% for corlib)
16349
16350         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
16351         New method. Tests container for CLS-Compliant names
16352
16353         * class.cs (TypeContainer.VerifyClsName): New method.
16354         Checks whether container name is CLS Compliant.
16355         (Constructor): Implements IMethodData.
16356
16357         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
16358         low-case table for CLS Compliance test.
16359         (MemberCache.VerifyClsParameterConflict): New method.
16360         Checks method parameters for CS3006 error.
16361
16362         * enum.cs (EnumMember): Is derived from MemberCore.
16363         (Enum.VerifyClsName): Optimized for better performance.
16364
16365 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
16366
16367         * report.cs: Renamed Error_T to Error and changed all
16368         references.
16369
16370 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
16371
16372         * class.cs (TypeContainer.IndexerArrayList): New inner class
16373         container for indexers.
16374         (TypeContainer.DefaultIndexerName): New constant for default
16375         indexer name. Replaced all "Item" with this constant.
16376         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
16377
16378         * typemanager.cs (TypeManager.default_member_ctor): Cache here
16379         DefaultMemberAttribute constructor.
16380
16381 2004-08-05  Martin Baulig  <martin@ximian.com>
16382
16383         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
16384         Fix bug #59429.
16385
16386 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
16387
16388         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
16389         multi platforms problem.
16390
16391         * compiler.csproj: Included shared files.
16392
16393 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16394
16395         Fix bug 60333, 55971 in the more general way
16396         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16397         Added arg_type argument for constant conversion.
16398         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
16399
16400 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16401
16402         Fix bug #59760
16403         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
16404         OperatorArrayList, MethodCoreArrayList for typecontainer
16405         containers. Changed class member types to these new types.
16406         (MethodArrayList.DefineMembers): Added test for CS0659.
16407
16408 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
16409
16410         * cfold.cs: Synchronize the folding with the code in expression.cs
16411         Binary.DoNumericPromotions for uint operands.
16412
16413         * attribute.cs: Revert patch from Raja, it introduced a regression
16414         while building Blam-1.2.1 (hard to isolate a test case).
16415
16416 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
16417
16418         Fix for #55382
16419         * class.cs:
16420         (TypeContainer.Define): Renamed to DefineContainerMembers because of
16421         name collision.
16422         (MethodCore.parent_method): New member. The method we're overriding
16423         if this is an override method.
16424         (MethodCore.CheckBase): Moved from Method class and made common.
16425         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
16426         private.
16427         (MethodCore.CheckForDuplications): New abstract method. For custom
16428         member duplication search in a container
16429         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
16430         method and its return type.
16431         (Event.conflict_symbol): New member. Symbol with same name in the
16432         parent class.
16433
16434         * decl.cs:
16435         (MemberCache.FindMemberWithSameName): New method. The method
16436         is looking for conflict with inherited symbols.
16437
16438 2004-08-04  Martin Baulig  <martin@ximian.com>
16439
16440         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
16441
16442         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
16443
16444 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16445
16446         * report.cs (Message): New enum for better error, warning reference in
16447         the code.
16448         (MessageData): New inner abstract class. It generally handles printing of
16449         error and warning messages.
16450         Removed unused Error, Warning, Message methods.
16451
16452 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16453
16454         Fix for cs0592-8.cs test
16455         * attribute.cs
16456         (Attributable.ValidAttributeTargets): Made public.
16457         (Attribute.ExplicitTarget): New member for explicit target value.
16458         (Attribute.CheckTargets): Now we translate explicit attribute
16459         target to Target here.
16460
16461 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
16462
16463         * ecore.cs (MethodGroupExpr): new IsBase property.
16464
16465         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
16466
16467         * delegate.cs (DelegateCreation): store a MethodGroupExpr
16468         rather than an instance expr.
16469
16470         (DelegateCreation.Emit): Use the method group rather than
16471         the instance expression. Also, if you have base.Foo as the
16472         method for a delegate, make sure to emit ldftn, not ldftnvirt.
16473
16474         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
16475
16476         (NewDelegate.DoResolve): Only check for the existance of Invoke
16477         if the method is going to be needed. Use MethodGroupExpr.
16478
16479         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
16480
16481         * expression.cs: For pointer arith., make sure to use
16482         the size of the type, not the size of the pointer to
16483         the type.
16484
16485 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
16486
16487         Fix for #60722
16488         * class.cs (Class): Added error CS0502 test.
16489
16490 2004-08-03  John Luke  <jluke@cfl.rr.com>
16491             Raja R Harinath  <rharinath@novell.com>
16492
16493         Fix for #60997.
16494         * attribute.cs (Attribute.complained_before): New flag.
16495         (Attribute.ResolveType, Attribute.Resolve),
16496         (Attribute.DefinePInvokeMethod): Set it.
16497         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
16498         
16499 2004-08-03  Martin Baulig  <martin@ximian.com>
16500
16501         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
16502         use a user-defined operator; we still need to do numeric
16503         promotions in case one argument is a builtin type and the other
16504         one has an implicit conversion to that type.  Fixes #62322.
16505
16506 2004-08-02  Martin Baulig  <martin@ximian.com>
16507
16508         * statement.cs (LocalInfo.Flags): Added `IsThis'.
16509         (LocalInfo.IsThis): New public property.
16510         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
16511
16512 2004-08-01  Martin Baulig  <martin@ximian.com>
16513
16514         * class.cs (TypeContainer.GetClassBases): Don't set the default
16515         here since we may get called from GetPartialBases().
16516         (TypeContainer.DefineType): If GetClassBases() didn't return a
16517         parent, use the default one.
16518
16519 2004-07-30  Duncan Mak  <duncan@ximian.com>
16520
16521         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
16522
16523 2004-07-30  Martin Baulig  <martin@ximian.com>
16524
16525         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
16526
16527         * class.cs (SourceMethod): New public class, derive from the
16528         symbol writer's ISourceMethod.
16529         (Method): Use the new symbol writer API.
16530
16531         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
16532         as argument and use the new symbol writer.
16533
16534         * location.cs
16535         (SourceFile): Implement the symbol writer's ISourceFile.
16536         (Location.SymbolDocument): Removed.
16537         (Location.SourceFile): New public property.
16538
16539         * symbolwriter.cs: Use the new symbol writer API.
16540
16541 2004-07-30  Raja R Harinath  <rharinath@novell.com>
16542
16543         * Makefile (install-local): Remove.  Functionality moved to
16544         executable.make.
16545
16546 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
16547
16548         * Makefile: Install mcs.exe.config file together with mcs.exe.
16549         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
16550         correct runtime version.
16551         
16552 2004-07-25  Martin Baulig  <martin@ximian.com>
16553
16554         * class.cs
16555         (TypeContainer.RegisterOrder): Removed, this was unused.
16556         (TypeContainer, interface_order): Removed.
16557         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
16558         TypeContainer as argument since we can also be called with a
16559         `PartialContainer' for a partial class/struct/interface.
16560         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
16561         of checking whether we're an `Interface' - we could be a
16562         `PartialContainer'.
16563         (PartialContainer.Register): Override; call
16564         AddClass()/AddStruct()/AddInterface() on our parent.
16565
16566         * cs-parser.jay (interface_member_declaration): Add things to the
16567         `current_container', not the `current_class'.
16568
16569         * rootcontext.cs (RegisterOrder): The overloaded version which
16570         takes an `Interface' was unused, removed.
16571
16572         * typemanager.cs (TypeManager.LookupInterface): Return a
16573         `TypeContainer', not an `Interface'.
16574         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
16575         contain a `PartialContainer' for an interface, so check it's
16576         `Kind' to figure out what it is.
16577
16578 2004-07-25  Martin Baulig  <martin@ximian.com>
16579
16580         * class.cs (Class.DefaultTypeAttributes): New public constant.
16581         (Struct.DefaultTypeAttributes): Likewise.
16582         (Interface.DefaultTypeAttributes): Likewise.
16583         (PartialContainer.TypeAttr): Override this and add the
16584         DefaultTypeAttributes.
16585
16586 2004-07-25  Martin Baulig  <martin@ximian.com>
16587
16588         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
16589         we can just use the `Parent' field instead.
16590
16591 2004-07-25  Martin Baulig  <martin@ximian.com>
16592
16593         * class.cs (TypeContainer.Emit): Renamed to EmitType().
16594
16595 2004-07-25  Martin Baulig  <martin@ximian.com>
16596
16597         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
16598         our parts before defining any methods.
16599         (TypeContainer.VerifyImplements): Make this virtual.
16600         (ClassPart.VerifyImplements): Override and call VerifyImplements()
16601         on our PartialContainer.
16602
16603 2004-07-25  Martin Baulig  <martin@ximian.com>
16604
16605         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
16606
16607         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
16608         argument, we can just use the `Parent' field instead.
16609
16610         * class.cs
16611         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
16612         (MemberBase.DoDefine): Likewise.
16613
16614 2004-07-24  Martin Baulig  <martin@ximian.com>
16615
16616         * decl.cs (MemberCore.Parent): New public field.
16617         (DeclSpace.Parent): Moved to MemberCore.
16618
16619         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
16620         (MemberBase.ctor): Added TypeContainer argument, pass it to our
16621         parent's .ctor.
16622         (FieldBase, Field, Operator): Likewise.
16623         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
16624         (EventField, Event): Likewise.
16625
16626 2004-07-23  Martin Baulig  <martin@ximian.com>
16627
16628         * class.cs (PartialContainer): New public class.
16629         (ClassPart): New public class.
16630         (TypeContainer): Added support for partial classes.
16631         (TypeContainer.GetClassBases): Splitted some of the functionality
16632         out into GetNormalBases() and GetPartialBases().
16633
16634         * cs-tokenizer.cs (Token.PARTIAL): New token.
16635         (Tokenizer.consume_identifier): Added some hacks to recognize
16636         `partial', but only if it's immediately followed by `class',
16637         `struct' or `interface'.
16638
16639         * cs-parser.jay: Added support for partial clases.
16640
16641 2004-07-23  Martin Baulig  <martin@ximian.com>
16642
16643         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
16644         a `DeclSpace' and also made it readonly.
16645         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
16646         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
16647         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
16648
16649         * cs-parser.jay: Pass the `current_class', not the
16650         `current_container' (at the moment, this is still the same thing)
16651         to a new Method, Property, Event, Indexer or Constructor.
16652
16653 2004-07-23  Martin Baulig  <martin@ximian.com>
16654
16655         * cs-parser.jay (CSharpParser): Added a new `current_class' field
16656         and removed the `current_interface' one.
16657         (struct_declaration, class_declaration, interface_declaration):
16658         Set `current_class' to the newly created class/struct/interface;
16659         set their `Bases' and call Register() before parsing their body.
16660
16661 2004-07-23  Martin Baulig  <martin@ximian.com>
16662
16663         * class.cs (Kind): New public enum.
16664         (TypeContainer): Made this class abstract.
16665         (TypeContainer.Kind): New public readonly field.
16666         (TypeContainer.CheckDef): New public method; moved here from
16667         cs-parser.jay.
16668         (TypeContainer.Register): New public abstract method.
16669         (TypeContainer.GetPendingImplementations): New public abstract
16670         method.
16671         (TypeContainer.GetClassBases): Removed the `is_class' and
16672         `is_iface' parameters.
16673         (TypeContainer.DefineNestedTypes): Formerly known as
16674         DoDefineType().
16675         (ClassOrStruct): Made this class abstract.
16676
16677         * tree.cs (RootTypes): New public type. 
16678
16679 2004-07-20  Martin Baulig  <martin@ximian.com>
16680
16681         * tree.cs (Tree.RecordNamespace): Removed.
16682         (Tree.Namespaces): Removed.
16683
16684         * rootcontext.cs (RootContext.IsNamespace): Removed.
16685
16686         * cs-parser.jay (namespace_declaration): Just create a new
16687         NamespaceEntry here.
16688
16689 2004-07-20  Martin Baulig  <martin@ximian.com>
16690
16691         * statement.cs (ExceptionStatement): New abstract class.  This is
16692         now used as a base class for everyone who's using `finally'.
16693         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
16694         our local variables before using them.
16695
16696         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
16697         virtual method.  This is used by Yield.Resolve() to "steal" an
16698         outer block's `finally' clauses.
16699         (FlowBranchingException): The .ctor now takes an ExceptionStatement
16700         argument.
16701
16702         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
16703         version which takes an ExceptionStatement.  This version must be
16704         used to create exception branchings.
16705
16706         * iterator.cs
16707         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
16708         (Iterator.EmitMoveNext): Added exception support; protect the
16709         block with a `fault' clause, properly handle 'finally' clauses.
16710         (Iterator.EmitDispose): Run all the `finally' clauses here.
16711
16712 2004-07-20  Martin Baulig  <martin@ximian.com>
16713
16714         * iterator.cs: This is the first of a set of changes in the
16715         iterator code.  Match the spec more closely: if we're an
16716         IEnumerable, then GetEnumerator() must be called.  The first time
16717         GetEnumerator() is called, it returns the current instance; all
16718         subsequent invocations (if any) must create a copy.
16719
16720 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
16721
16722         * expression.cs: Resolve the constant expression before returning
16723         it. 
16724
16725 2004-07-19  Martin Baulig  <martin@ximian.com>
16726
16727         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
16728         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
16729         the return type of the new EmitContext.
16730
16731 2004-07-18  Martin Baulig  <martin@ximian.com>
16732
16733         * class.cs (Property.Define): Fix iterators.
16734
16735         * iterators.cs (Iterator.Define): Moved the
16736         `container.AddInterator (this)' call here from the .ctor; only do
16737         it if we resolved successfully.
16738
16739 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
16740
16741         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
16742         `true' for preprocessing directives that we parse.  The return
16743         value indicates whether we should return to regular tokenizing or
16744         not, not whether it was parsed successfully.
16745
16746         In the past if we were in: #if false ... #line #endif, we would
16747         resume parsing after `#line'.  See bug 61604.
16748
16749         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
16750         building: IsEnumType should return true only for enums, not for
16751         enums or System.Enum itself.  This fixes #61593.
16752
16753         Likely what happened is that corlib was wrong: mcs depended on
16754         this bug in some places.  The bug got fixed, we had to add the
16755         hack, which caused bug 61593.
16756
16757         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
16758         that was a workaround for the older conditions.
16759
16760 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
16761
16762         * assign.cs: IAssignMethod has a new interface, as documented
16763         inline. All assignment code now uses this new api.
16764
16765         * ecore.cs, expression.cs: All classes which implement
16766         IAssignMethod now use the new interface.
16767
16768         * expression.cs (Invocation): add a hack to EmitCall so that
16769         IndexerAccess can be the target of a compound assignment without
16770         evaluating its arguments twice.
16771
16772         * statement.cs: Handle changes in Invocation api.
16773
16774 2004-07-16  Martin Baulig  <martin@ximian.com>
16775
16776         * iterators.cs: Rewrote this.  We're now using one single Proxy
16777         class for both the IEnumerable and the IEnumerator interface and
16778         `Iterator' derives from Class so we can use the high-level API.
16779
16780         * class.cs (TypeContainer.AddIterator): New method.
16781         (TypeContainer.DoDefineType): New protected virtual method, which
16782         is called from DefineType().
16783         (TypeContainer.DoDefineMembers): Call DefineType() and
16784         DefineMembers() on all our iterators.
16785         (TypeContainer.Emit): Call Emit() on all our iterators.
16786         (TypeContainer.CloseType): Call CloseType() on all our iterators.
16787
16788         * codegen.cs (EmitContext.CurrentIterator): New public field.
16789
16790 2004-07-15  Martin Baulig  <martin@ximian.com>
16791
16792         * typemanager.cs
16793         (TypeManager.not_supported_exception_type): New type.   
16794
16795 2004-07-14  Martin Baulig  <martin@ximian.com>
16796
16797         * iterators.cs: Use real error numbers.
16798
16799 2004-07-14  Martin Baulig  <martin@ximian.com>
16800
16801         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
16802         requires this to be a System.Collection.IEnumerable and not a
16803         class implementing that interface.
16804         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
16805
16806 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
16807
16808         * class.cs: Fixed previous fix, it broke some error tests.
16809
16810 2004-07-12  Martin Baulig  <martin@ximian.com>
16811
16812         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
16813         Fixes #61293.
16814
16815 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
16816
16817         * assign.cs (LocalTemporary): Add new argument: is_address,If
16818         `is_address' is true, then the value that we store is the address
16819         to the real value, and not the value itself.
16820         
16821         * ecore.cs (PropertyExpr): use the new local temporary
16822         stuff to allow us to handle X.Y += z (where X is a struct)
16823
16824 2004-07-08  Martin Baulig  <martin@ximian.com>
16825
16826         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
16827         not always return, just like we're doing in Using.Resolve().
16828
16829 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
16830
16831         * cs-parser.jay (fixed_statement): flag this as Pinned.
16832
16833 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
16834
16835         * typemanager.cs (TypeManager): Removed MakePinned method, this
16836         mechanism is replaced with the .NET 2.x compatible mechanism of
16837         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
16838
16839         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
16840         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
16841         `IsFixed' property which has a different meaning.
16842
16843 2004-07-02  Raja R Harinath  <rharinath@novell.com>
16844
16845         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
16846         visible from inside a nested class, not just the names of the
16847         immediately enclosing class.
16848         Fix for bug #60730.
16849
16850 2004-06-24  Raja R Harinath  <rharinath@novell.com>
16851
16852         * expression.cs (BetterConversion): Remove buggy special-case
16853         handling of "implicit constant expression conversions".  At this
16854         point, we already know that the conversion is possible -- we're
16855         only checking to see which is better.
16856
16857 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16858
16859         * cs-parser.jay: Added error CS0210 test.
16860
16861 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16862
16863         * cs-parser.jay: Added error CS0134 test.
16864
16865 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16866
16867         Fix bug #52507
16868         * cs-parser.jay: Added error CS0145 test.
16869
16870 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
16871
16872         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
16873
16874 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
16875         
16876         * expression.cs (StackAlloc.Resolve): The argument may not
16877         be a constant; deal with this case.
16878         
16879 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
16880
16881         * attribute.cs (IndexerName_GetIndexerName): Renamed to
16882         GetIndexerAttributeValue.
16883         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
16884
16885         * class.cs (Indexer.Define): Added error tests for CS0415,
16886         CS0609.
16887
16888 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
16889
16890         * attribute.cs (Attribute.Resolve): Keep field code in sync with
16891         property code.
16892
16893 2004-06-23  Martin Baulig  <martin@ximian.com>
16894
16895         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
16896         neither return nor throw, reset the barrier as well.  Fixes #60457.
16897
16898 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
16899
16900         * class.cs : EventAttributes is now set to None by default.
16901           This fixes bug #60459.
16902
16903 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
16904
16905         Fix bug #60219
16906         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
16907         Don't throw exception but return null (it's sufficient now).
16908
16909 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
16910
16911         * typemanager.cs (GetArgumentTypes): Faster implementation.
16912
16913 2004-06-18  Martin Baulig  <martin@ximian.com>
16914
16915         * attribute.cs (Attribute.Resolve): Check whether we're an
16916         EmptyCast which a Constant child.  Fixes #60333.
16917
16918 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
16919
16920         * statement.cs (EmitCollectionForeach): Account for the fact that
16921         not all valuetypes are in areas which we can take the address of.
16922         For these variables, we store to a temporary variable. Also, make
16923         sure that we dont emit a `callvirt' on a valuetype method.
16924
16925 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
16926
16927         * expression.cs (StackAlloc.DoReSolve): Added test for
16928         negative parameter (CS0247).
16929
16930 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
16931
16932         Fix bug #59792
16933         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
16934
16935 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
16936
16937         Fix bug #59781
16938         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
16939         ulong.
16940
16941 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
16942
16943         Fix bug #58254 & cs1555.cs, cs1556.cs
16944         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
16945
16946 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
16947
16948         * cs-parser.jay: Added error CS1669 test for indexers.
16949
16950 2004-06-11  Martin Baulig  <martin@ximian.com>
16951
16952         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
16953         call this twice: for params and varargs methods.
16954
16955 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
16956
16957         * class.cs:
16958         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
16959
16960 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
16961
16962         * attribute.cs (Attribute.GetValidTargets): Made public.
16963
16964         * class.cs: 
16965         (AbstractPropertyEventMethod): New class for better code sharing.
16966         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
16967         CS1667 report.
16968         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
16969
16970 2004-06-11  Raja R Harinath  <rharinath@novell.com>
16971
16972         Fix bug #59477.
16973         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
16974         that the call to Resolve is part of a MemberAccess.
16975         (Expression.Resolve): Use it for SimpleName resolution.
16976         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
16977         Add 'intermediate' boolean argument.
16978         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
16979         error message when the SimpleName can be resolved ambiguously
16980         between an expression and a type.
16981         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
16982         public.
16983         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
16984         call on the left-side.
16985
16986 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
16987
16988         * class.cs:
16989         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
16990
16991 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
16992
16993         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
16994
16995 2004-06-11  Martin Baulig  <martin@ximian.com>
16996
16997         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
16998         varargs methods if applicable.
16999
17000 2004-06-11  Martin Baulig  <martin@ximian.com>
17001
17002         * expression.cs (Invocation.EmitCall): Don't use
17003         `method.CallingConvention == CallingConventions.VarArgs' since the
17004         method could also have `CallingConventions.HasThis'.
17005
17006 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17007
17008         * class.cs (Event.GetSignatureForError): Implemented.
17009         Fixed crash in error test cs3010.cs
17010
17011 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17012
17013         * cs-tokenizer.cs: Change the way we track __arglist to be
17014         consistent with the other keywords.
17015
17016 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17017
17018         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17019         tomorrow.
17020
17021 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17022
17023         * codegen.cs: Check that all referenced assemblies have a strongname
17024         before strongnaming the compiled assembly. If not report error CS1577.
17025         Fix bug #56563. Patch by Jackson Harper.
17026         * typemanager.cs: Added a method to return all referenced assemblies.
17027         Fix bug #56563. Patch by Jackson Harper.
17028
17029 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17030
17031         * class.cs:
17032         (Method.ApplyAttributeBuilder): Moved and added conditional
17033         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17034
17035         * delegate.cs:
17036         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17037
17038 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17039
17040         Fixed #59640
17041         * class.cs: (EventField.attribute_targets): Changed default target.
17042
17043 2004-06-08  Martin Baulig  <martin@ximian.com>
17044
17045         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17046
17047 2004-06-08  Martin Baulig  <martin@ximian.com>
17048
17049         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17050
17051 2004-06-07  Martin Baulig  <martin@ximian.com>
17052
17053         Added support for varargs methods.
17054
17055         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
17056         keyword.
17057
17058         * cs-parser.jay: Added support for `__arglist'.
17059
17060         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
17061
17062         * expression.cs (Argument.AType): Added `ArgList'.
17063         (Invocation): Added support for varargs methods.
17064         (ArglistAccess): New public class.
17065         (Arglist): New public class.
17066
17067         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
17068
17069         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
17070         a method's top-level block if the method has varargs.
17071
17072         * support.cs (ReflectionParameters, InternalParameters): Added
17073         support for varargs methods.    
17074
17075 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
17076
17077         * class.cs: Provide location in indexer error report.
17078
17079         * driver.cs: Use standard names.
17080
17081         * namespace.cs: Catch the use of using after a namespace has been
17082         declared also on using aliases.
17083
17084 2004-06-03  Raja R Harinath  <rharinath@novell.com>
17085
17086         Bug #50820.
17087         * typemanager.cs (closure_private_ok, closure_invocation_type)
17088         (closure_qualifier_type, closure_invocation_assembly)
17089         (FilterWithClosure): Move to ...
17090         (Closure): New internal nested class.
17091         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
17092         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
17093         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
17094         (MemberLookup, MemberLookupFailed): Use it.
17095         * expression.cs (New.DoResolve): Treat the lookup for the
17096         constructor as being qualified by the 'new'ed type.
17097         (Indexers.GetIndexersForTypeOrInterface): Update.
17098
17099 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
17100
17101         * attribute.cs
17102         (GetConditionalAttributeValue): New method. Returns
17103         condition of ConditionalAttribute.
17104         (SearchMulti): New method.  Returns all attributes of type 't'.
17105         Use it when attribute is AllowMultiple = true.
17106         (IsConditionalMethodExcluded): New method.
17107
17108         * class.cs
17109         (Method.IsExcluded): Implemented. Returns true if method has conditional
17110         attribute and the conditions is not defined (method is excluded).
17111         (IMethodData): Extended interface for ConditionalAttribute support.
17112         (PropertyMethod.IsExcluded): Implemented.
17113
17114         * decl.cs
17115         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
17116
17117         * expression.cs
17118         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
17119         on the method.
17120
17121 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
17122
17123         * expression.cs (ArrayCreationExpression): Make this just an
17124         `expression'. It can't be a statement, so the code here was
17125         dead.
17126
17127 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17128
17129         Fixed #59072
17130         * typemanager.cs (GetFullNameSignature): New method for
17131         MethodBase types.
17132
17133 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17134
17135         Fixed #56452
17136         * class.cs (MemberBase.GetSignatureForError): New virtual method.
17137         Use this method when MethodBuilder is null.
17138         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
17139         Added test for error CS0626 (MONO reports error for this situation).
17140         (IMethodData.GetSignatureForError): Extended interface.
17141
17142 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17143
17144         * attribute.cs
17145         (AttributeTester.GetObsoleteAttribute): Returns instance of
17146         ObsoleteAttribute when type is obsolete.
17147
17148         * class.cs
17149         (TypeContainer.VerifyObsoleteAttribute): Override.
17150         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
17151         (MethodCode.VerifyObsoleteAttribute): Override.
17152         (MemberBase.VerifyObsoleteAttribute): Override.
17153
17154         * decl.cs
17155         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
17156         and report proper error.
17157
17158         *delegate.cs
17159         Delegate.VerifyObsoleteAttribute): Override.
17160
17161         * ecore.cs
17162         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
17163         and report proper error.
17164         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
17165
17166         * enum.cs
17167         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
17168         and enum member.
17169
17170         * expression.cs
17171         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
17172         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
17173         Added test for ObsoleteAttribute.
17174
17175         * statement.cs
17176         (Catch): Derived from Statement.
17177
17178 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17179  
17180         Fixed bug #59071 & cs0160.cs
17181  
17182         * statement.cs (Try.Resolve): Check here whether order of catch
17183         clauses matches their dependencies.
17184
17185 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
17186
17187         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
17188         caused a regression: #59343.  Referencing nested classes from an
17189         assembly stopped working.
17190
17191 2004-05-31  Martin Baulig  <martin@ximian.com>
17192
17193         MCS is now frozen for beta 2.
17194
17195 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17196
17197         * convert.cs: add a trivial cache for overload operator resolution.
17198
17199 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17200
17201         * decl.cs: If possible, use lookuptypedirect here. We can only do
17202         this if there is no `.' after the namespace. Avoids using
17203         LookupType, which does lots of slow processing.
17204         (FindNestedType) New method, does what it says :-).
17205         * namespace.cs: use LookupTypeDirect.
17206         * rootcontext.cs: use membercache, if possible.
17207         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
17208
17209 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17210
17211         * expression.cs:
17212         According to the spec, 
17213
17214         In a member access of the form E.I, if E is a single identifier,
17215         and if the meaning of E as a simple-name (§7.5.2) is a constant,
17216         field, property, localvariable, or parameter with the same type as
17217         the meaning of E as a type-name (§3.8), then both possible
17218         meanings of E are permitted.
17219
17220         We did not check that E as a simple-name had the same type as E as
17221         a type name.
17222
17223         This trivial check gives us 5-7% on bootstrap time.
17224
17225 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17226
17227         * expression.cs (Invocation.OverloadResolve): Avoid the
17228         use of hashtables and boxing here by allocating on demand.
17229
17230 2004-05-30  Martin Baulig  <martin@ximian.com>
17231
17232         * rootcontext.cs (RootContext.LookupType): Don't cache things if
17233         we're doing a silent lookup.  Don't try to lookup nested types in
17234         TypeManager.object_type (thanks to Ben Maurer).
17235
17236 2004-05-30  Martin Baulig  <martin@ximian.com>
17237
17238         Committing a patch from Ben Maurer.
17239
17240         * rootcontext.cs (RootContext.LookupType): Cache negative results.
17241
17242 2004-05-29  Martin Baulig  <martin@ximian.com>
17243
17244         * class.cs (IMethodData.ShouldIgnore): New method.
17245
17246         * typemanager.cs (TypeManager.MethodFlags): Don't take a
17247         `Location' argument, we don't need it anywhere.  Use
17248         `IMethodData.ShouldIgnore ()' instead of
17249         `MethodData.GetMethodFlags ()'.
17250         (TypeManager.AddMethod): Removed.
17251         (TypeManager.AddMethod2): Renamed to AddMethod.
17252
17253 2004-05-29  Martin Baulig  <martin@ximian.com>
17254
17255         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
17256
17257         * convert.cs (Convert.ImplicitReferenceConversion): If we're
17258         converting from a class type S to an interface type and we already
17259         have an object on the stack, don't box it again.  Fixes #52578.
17260
17261 2004-05-29  Martin Baulig  <martin@ximian.com>
17262
17263         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17264         Added support for `params' parameters.  Fixes #59267.
17265
17266 2004-05-29  Martin Baulig  <martin@ximian.com>
17267
17268         * literal.cs (NullPointer): Provide a private .ctor which sets
17269         `type' to TypeManager.object_type.  Fixes #59048.
17270
17271 2004-05-29  Martin Baulig  <martin@ximian.com>
17272
17273         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
17274         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
17275
17276         * ecore.cs (EventExpr.instance_expr): Make the field private.
17277
17278 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
17279
17280         Fixed bug #50080 & cs0214-2.cs
17281         * expression.cs (Cast.DoResolve): Check unsafe context here.
17282         
17283         * statement.cs (Resolve.DoResolve): Likewise.
17284
17285 2004-05-26  Martin Baulig  <martin@ximian.com>
17286
17287         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
17288
17289         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
17290         (RootContext.LookupType): Pass down the `silent' flag.
17291
17292 2004-05-25  Martin Baulig  <martin@ximian.com>
17293
17294         * expression.cs
17295         (MethodGroupExpr.IdenticalTypeName): New public property.
17296         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
17297         expression actually refers to a type.
17298
17299 2004-05-25  Martin Baulig  <martin@ximian.com>
17300
17301         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
17302         for #56176 and made it actually work.
17303
17304 2004-05-25  Martin Baulig  <martin@ximian.com>
17305
17306         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
17307         (FieldExpr, PropertyExpr): Override and implement
17308         CacheTemporaries.  Fixes #52279.
17309
17310 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
17311
17312         * location.cs: In the new compiler listing a file twice is a
17313         warning, not an error.
17314
17315 2004-05-24  Martin Baulig  <martin@ximian.com>
17316
17317         * enum.cs (Enum.DefineType): For the `BaseType' to be a
17318         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
17319
17320 2004-05-24  Martin Baulig  <martin@ximian.com>
17321
17322         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
17323         walking the `using' list.  Fixes #53921.
17324
17325 2004-05-24  Martin Baulig  <martin@ximian.com>
17326
17327         * const.cs (Const.LookupConstantValue): Added support for
17328         EmptyCast's; fixes #55251.
17329
17330 2004-05-24  Martin Baulig  <martin@ximian.com>
17331
17332         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
17333         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
17334         which does the CS0135 check.  The reason is that we first need to
17335         check whether the variable actually exists.
17336
17337 2004-05-24  Martin Baulig  <martin@ximian.com>
17338
17339         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
17340         than RootContext.LookupType() to find the explicit interface
17341         type.  Fixes #58584.
17342
17343 2004-05-24  Raja R Harinath  <rharinath@novell.com>
17344
17345         * Makefile: Simplify.  Use executable.make.
17346         * mcs.exe.sources: New file.  List of sources of mcs.exe.
17347
17348 2004-05-24  Anders Carlsson  <andersca@gnome.org>
17349
17350         * decl.cs:
17351         * enum.cs:
17352         Use the invariant culture when doing String.Compare for CLS case
17353         sensitivity.
17354         
17355 2004-05-23  Martin Baulig  <martin@ximian.com>
17356
17357         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
17358         don't have any dots.  Fixes #52622, added cs0246-8.cs.
17359
17360         * namespace.cs (NamespaceEntry.Lookup): Likewise.
17361         
17362 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
17363
17364         * class.cs (MemberBase.Define): Reuse MemberType member for 
17365         resolved type. Other methods can use it too.
17366
17367 2004-05-23  Martin Baulig  <martin@ximian.com>
17368
17369         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
17370         the variable also exists in the current block (otherwise, we need
17371         to report a CS0103).  Fixes #58670.
17372
17373 2004-05-23  Martin Baulig  <martin@ximian.com>
17374
17375         * flowanalysis.cs (Reachability.Reachable): Compute this
17376         on-the-fly rather than storing it as a field.
17377
17378 2004-05-23  Martin Baulig  <martin@ximian.com>
17379
17380         * flowanalysis.cs (Reachability.And): Manually compute the
17381         resulting `barrier' from the reachability.      
17382        
17383 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
17384
17385         Fix bug #57835
17386         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
17387         instance of ObsoleteAttribute when symbol is obsolete.
17388
17389         * class.cs
17390         (IMethodData): Extended interface for ObsoleteAttribute support.
17391
17392 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
17393
17394         * attribute.cs: Fix bug #55970
17395
17396 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
17397
17398         Fix bug #52705
17399         * attribute.cs
17400         (GetObsoleteAttribute): New method. Creates the instance of
17401         ObsoleteAttribute.
17402         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
17403         ObsoleteAttribute when member is obsolete.
17404         (AttributeTester.Report_ObsoleteMessage): Common method for
17405         Obsolete error/warning reporting.
17406
17407         * class.cs
17408         (TypeContainer.base_classs_type): New member for storing parent type.
17409
17410         * decl.cs
17411         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
17412         for this MemberCore.
17413
17414 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17415
17416         * attribute.cs, const.cs: Fix bug #58590
17417
17418 2004-05-21  Martin Baulig  <martin@ximian.com>
17419
17420         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
17421         out parameters if the end of the method is unreachable.  Fixes
17422         #58098. 
17423
17424 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17425
17426         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
17427         Hari was right, why extra method.
17428
17429 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
17430
17431         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
17432
17433 2004-05-20  Martin Baulig  <martin@ximian.com>
17434
17435         Merged this back from gmcs to keep the differences to a minumum.
17436
17437         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
17438         instead of a Declspace.
17439         (Attribute.ResolveType): Likewise.
17440         (Attributes.Search): Likewise.
17441         (Attributes.Contains): Likewise.
17442         (Attributes.GetClsCompliantAttribute): Likewise.
17443
17444         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
17445         argument.
17446         (MethodData.ApplyAttributes): Take an EmitContext instead of a
17447         DeclSpace.
17448
17449 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
17450
17451         Fix bug #58688 (MCS does not report error when the same attribute
17452         is assigned twice)
17453
17454         * attribute.cs (Attribute.Emit): Distinction between null and default.
17455
17456 2004-05-19  Raja R Harinath  <rharinath@novell.com>
17457
17458         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
17459         of a top-level attribute without an attribute target.
17460         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
17461         Make non-static.
17462         (Attribute.Conditional_GetConditionName), 
17463         (Attribute.Obsolete_GetObsoleteMessage): Update.
17464         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
17465         part of ScanForIndexerName.
17466         (Attribute.CanIgnoreInvalidAttribute): New function.
17467         (Attribute.ScanForIndexerName): Move to ...
17468         (Attributes.ScanForIndexerName): ... here.
17469         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
17470         (Attributes.Search): New internal variant that can choose not to
17471         complain if types aren't resolved.  The original signature now
17472         complains.
17473         (Attributes.GetClsCompliantAttribute): Use internal variant, with
17474         complaints suppressed.
17475         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
17476         only if it not useful.
17477         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
17478         top-level for attributes that are shared between the assembly
17479         and a top-level class.
17480         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
17481         * class.cs: Update to reflect changes.
17482         (DefineIndexers): Fuse loops.
17483         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
17484         a couple more variants of attribute names.
17485
17486 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
17487
17488         Fix bug #52585 (Implemented explicit attribute declaration)
17489
17490         * attribute.cs:
17491         (Attributable.ValidAttributeTargets): New abstract method. It gets
17492         list of valid attribute targets for explicit target declaration.
17493         (Attribute.Target): It holds target itself.
17494         (AttributeSection): Removed.
17495         (Attribute.CheckTargets): New method. It checks whether attribute
17496         target is valid for the current element.
17497
17498         * class.cs:
17499         (EventProperty): New class. For events that are declared like
17500         property (with add and remove accessors).
17501         (EventField): New class. For events that are declared like field.
17502         class.cs
17503
17504         * cs-parser.jay: Implemented explicit attribute target declaration.
17505
17506         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
17507         Override ValidAttributeTargets.
17508
17509         * parameter.cs:
17510         (ReturnParameter): Class for applying custom attributes on 
17511         the return type.
17512         (ParameterAtribute): New class. Class for applying custom
17513         attributes on the parameter type.
17514
17515 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
17516
17517         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
17518         definitions. 
17519
17520         (Method): Allow UNSAFE here.
17521
17522         * modifiers.cs: Support unsafe reporting.
17523
17524 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
17525
17526         * decl.cs: Fix bug #58478.
17527
17528 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17529
17530         * statement.cs: When checking for unreachable code on an EmptyStatement,
17531         set the location. Fixes bug #58488.
17532
17533 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
17534
17535         * driver.cs: Add -pkg handling.
17536
17537         From Gonzalo: UseShelLExecute=false
17538
17539 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
17540
17541         * attribute.cs:
17542         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
17543         for attribute.
17544         (Attribute.IsClsCompliaceRequired): Moved to base for better
17545         accesibility.
17546         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
17547         when attribute is AttributeUsageAttribute.
17548         (Attribute.GetValidTargets): Simplified.
17549         (Attribute.GetAttributeUsage): New method returns AttributeUsage
17550         attribute for this type.
17551         (Attribute.ApplyAttributes): Method renamed to Emit and make
17552         non-static.
17553         (GlobalAttributeSection): New class for special handling of global
17554         attributes (assembly, module).
17555         (AttributeSection.Emit): New method.
17556
17557         * class.cs: Implemented Attributable abstract methods.
17558         (MethodCore.LabelParameters): Moved to Parameter class.
17559         (Accessor): Is back simple class.
17560         (PropertyMethod): Implemented Attributable abstract class.
17561         (DelegateMethod): Implemented Attributable abstract class.
17562         (Event): New constructor for disctintion between normal Event
17563         and Event with accessors.
17564
17565         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
17566
17567         * codegen.cs, const.cs, decl.cs, delegate.cs:
17568         (CommonAssemblyModulClass): Implemented Attributable abstract class
17569         and simplified.
17570
17571         * enum.cs: Implement IAttributeSupport interface.
17572         (EnumMember): New class for emum members. Implemented Attributable
17573         abstract class
17574
17575         * parameter.cs:
17576         (ParameterBase): Is abstract.
17577         (ReturnParameter): New class for easier [return:] attribute handling.
17578
17579         * typemanager.cs: Removed builder_to_attr.
17580
17581 2004-05-11  Raja R Harinath  <rharinath@novell.com>
17582
17583         Fix bug #57151.
17584         * attribute.cs (Attribute.GetPositionalValue): New function.
17585         * class.cs (TypeContainer.VerifyMembers): New function.
17586         (TypeContainer.Emit): Use it.
17587         (ClassOrStruct): New base class for Class and Struct.
17588         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
17589         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
17590         class.
17591         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
17592         then each non-static field should have a FieldOffset attribute.
17593         Otherwise, none of the fields should have a FieldOffset attribute.
17594         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
17595         and FieldOffset attributes.
17596         * typemanager.cs (TypeManager.struct_layout_attribute_type)
17597         (TypeManager.field_offset_attribute_type): New core types.
17598         (TypeManager.InitCoreTypes): Initialize them.
17599
17600 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
17601
17602         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
17603         Return correct type.
17604         From bug #58270.
17605
17606 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
17607
17608         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
17609         be implicitly converted to ulong.
17610         
17611         * expression.cs: The logic for allowing operator &, | and ^ worked
17612         was wrong, it worked before because we did not report an error in
17613         an else branch.  Fixes 57895.
17614
17615         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
17616         allow volatile fields to be reference types.
17617
17618 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
17619
17620         * driver.cs: Add support for /debug-
17621
17622 2004-05-07  Raja R Harinath  <rharinath@novell.com>
17623
17624         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
17625         Add a 'complain' parameter to silence errors.
17626         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
17627         silently overlooked type-resolutions.
17628         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
17629         to reflect changes.
17630         (Attributes.Search): New function.
17631         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
17632         (Attributes.GetAttributeFullName): Remove hack.
17633         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
17634         Update to reflect changes.
17635         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
17636         Use Attributes.Search instead of nested loops.
17637
17638 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
17639
17640         * decl.cs:
17641         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
17642         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
17643         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
17644
17645         * report.cs: (Report.Warning): Renamed to Warning_T because of
17646         parameter collision.
17647
17648 2004-05-05  Raja R Harinath  <rharinath@novell.com>
17649
17650         * expression.cs (MemberAccess.ResolveMemberAccess):
17651         Exit with non-zero status after Report.Error.
17652         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
17653         Likewise.
17654         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
17655
17656 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
17657
17658         * support.cs: Don't hang when the file is empty.
17659
17660 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
17661
17662         * support.cs: In SeekableStreamReader, compute the preamble size of the
17663           underlying stream. Position changes should take into account that initial
17664           count of bytes.
17665
17666 2004-05-03  Todd Berman  <tberman@sevenl.net>
17667
17668         * driver.cs: remove unused GetSysVersion function.
17669
17670 2004-05-03  Todd Berman  <tberman@sevenl.net>
17671
17672         * driver.cs: Remove the hack from saturday, as well as the hack
17673         from jackson (LoadAssemblyFromGac), also adds the CWD to the
17674         link_paths to get that bit proper.
17675
17676 2004-05-01  Todd Berman  <tberman@sevenl.net>
17677
17678         * driver.cs: Try a LoadFrom before a Load, this checks the current
17679         path. This is currently a bug in mono that is be fixed, however, this
17680         provides a workaround for now. This will be removed when the bug
17681         is fixed.
17682
17683 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
17684
17685         * CryptoConvert.cs: Updated to latest version. Fix issue with 
17686         incomplete key pairs (#57941).
17687
17688 2004-05-01  Todd Berman  <tberman@sevenl.net>
17689
17690         * driver.cs: Remove '.' from path_chars, now System.* loads properly
17691         from the GAC
17692
17693 2004-04-30  Jackson Harper  <jackson@ximian.com>
17694
17695         * codegen.cs: Open keys readonly.
17696         
17697 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17698
17699         * typemanager.cs: don't report cyclic struct layout when a struct
17700         contains 2 or more fields of the same type. Failed for Pango.AttrShape
17701         which has 2 Pango.Rectangle fields.
17702
17703 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17704
17705         * expression.cs: Handle IntPtr comparisons with IL code
17706         rather than a method call.
17707
17708 2004-04-29  Martin Baulig  <martin@ximian.com>
17709
17710         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
17711         the list of PropertyInfo's in class hierarchy and find the
17712         accessor.  Fixes #56013.
17713
17714 2004-04-29  Martin Baulig  <martin@ximian.com>
17715
17716         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
17717
17718 2004-04-29  Martin Baulig  <martin@ximian.com>
17719
17720         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
17721
17722         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
17723
17724 2004-04-29  Martin Baulig  <martin@ximian.com>
17725
17726         * class.cs (ConstructorInitializer.Resolve): Check whether the
17727         parent .ctor is accessible.  Fixes #52146.
17728
17729 2004-04-29  Martin Baulig  <martin@ximian.com>
17730
17731         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
17732
17733         * statement.cs (Using.EmitLocalVariableDecls): Use
17734         TypeManager.idisposable_type, not typeof (IDisposable).
17735         (Foreach.EmitCollectionForeach): Added support for valuetypes.
17736
17737 2004-04-29  Martin Baulig  <martin@ximian.com>
17738
17739         * class.cs (Event.Define): Don't emit the field and don't set
17740         RTSpecialName and SpecialName for events on interfaces.  Fixes
17741         #57703. 
17742
17743 2004-04-29  Raja R Harinath  <rharinath@novell.com>
17744
17745         Refactor Attribute.ApplyAttributes.
17746         * attribute.cs (Attributable): New base class for objects that can
17747         have Attributes applied on them.
17748         (Attribute): Make AttributeUsage fields public.
17749         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
17750         (Attribute.IsInternalCall): New property.
17751         (Attribute.UsageAttr): Convert to a public read-only property.
17752         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
17753         (Attribute.ResolveType, Attribute.Resolve)
17754         (Attribute.ScanForIndexerName): Update to reflect changes.
17755         (Attribute.CheckAttributeTarget): Re-format.
17756         (Attribute.ApplyAttributes): Refactor, to various
17757         Attributable.ApplyAttributeBuilder methods.
17758         * decl.cs (MemberCore): Make Attributable.
17759         * class.cs (Accessor): Make Attributable.
17760         (MethodData.ApplyAttributes): Use proper attribute types, not
17761         attribute names.
17762         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
17763         (TypeContainer.ApplyAttributeBuilder)
17764         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
17765         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
17766         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
17767         (Operator.ApplyAttributeBuilder): New factored-out methods.
17768         * const.cs (Const.ApplyAttributeBuilder): Likewise.
17769         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
17770         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
17771         * parameter.cs (ParameterBase): New Attributable base class
17772         that can also represent Return types.
17773         (Parameter): Update to the changes.
17774
17775 2004-04-29  Jackson Harper  <jackson@ximian.com>
17776
17777         * driver.cs: Prefer the corlib system version when looking for
17778         assemblies in the GAC. This is still a hack, but its a better hack
17779         now.
17780         
17781 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
17782
17783         * decl.cs, enum.cs: Improved error 3005 reporting.
17784   
17785         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
17786         (related_symbols): New private member for list of symbols
17787         related to reported error/warning.
17788         
17789         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
17790
17791 2004-04-29  Martin Baulig  <martin@ximian.com>
17792
17793         * ecore.cs (Expression.Constantify): If we're an enum and
17794         TypeManager.TypeToCoreType() doesn't give us another type, use
17795         t.UnderlyingSystemType.  Fixes #56178.  
17796
17797 2004-04-29  Martin Baulig  <martin@ximian.com>
17798
17799         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
17800         interfaces and for each interface, only add members directly
17801         declared in that interface.  Fixes #53255.
17802
17803 2004-04-28  Martin Baulig  <martin@ximian.com>
17804
17805         * expression.cs (ConditionalLogicalOperator): Use a temporary
17806         variable for `left' to avoid that we evaluate it more than once;
17807         bug #52588.
17808
17809 2004-04-28  Martin Baulig  <martin@ximian.com>
17810
17811         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
17812         `void[]' (CS1547).
17813
17814 2004-04-28  Martin Baulig  <martin@ximian.com>
17815
17816         * statement.cs (LocalInfo.Resolve): Check whether the type is not
17817         void (CS1547).
17818
17819         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
17820         whether the type is not void (CS1547).
17821
17822 2004-04-28  Martin Baulig  <martin@ximian.com>
17823
17824         * expression.cs (Unary.DoResolveLValue): Override this and report
17825         CS0131 for anything but Operator.Indirection.
17826
17827 2004-04-28  Martin Baulig  <martin@ximian.com>
17828
17829         Committing a patch from Ben Maurer; see bug #50820.
17830
17831         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
17832         check for classes.
17833
17834         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
17835         classes.        
17836
17837 2004-04-28  Martin Baulig  <martin@ximian.com>
17838
17839         Committing a patch from Ben Maurer; see bug #50820.
17840
17841         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
17842         check for classes.
17843
17844         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
17845         classes.        
17846
17847 2004-04-28  Martin Baulig  <martin@ximian.com>
17848
17849         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
17850         (Block.AddLabel): Call DoLookupLabel() to only search in the
17851         current block.
17852
17853 2004-04-28  Martin Baulig  <martin@ximian.com>
17854
17855         * cfold.cs (ConstantFold.BinaryFold): Added special support for
17856         comparing StringConstants and NullLiterals in Equality and Inequality.
17857
17858 2004-04-28  Jackson Harper  <jackson@ximian.com>
17859
17860         * driver.cs: Attempt to load referenced assemblies from the
17861         GAC. This is the quick and dirty version of this method that
17862         doesnt take into account versions and just takes the first
17863         canidate found. Will be good enough for now as we will not have more
17864         then one version installed into the GAC until I update this method.
17865
17866 2004-04-28  Martin Baulig  <martin@ximian.com>
17867
17868         * typemanager.cs (TypeManager.CheckStructCycles): New public
17869         static method to check for cycles in the struct layout.
17870
17871         * rootcontext.cs (RootContext.PopulateTypes): Call
17872         TypeManager.CheckStructCycles() for each TypeContainer.
17873         [Note: We only need to visit each type once.]
17874
17875 2004-04-28  Martin Baulig  <martin@ximian.com>
17876
17877         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
17878
17879         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
17880         success and added `out object value'.  Use a `bool resolved' field
17881         to check whether we've already been called rather than
17882         `ConstantValue != null' since this breaks for NullLiterals.
17883
17884 2004-04-28  Raja R Harinath  <rharinath@novell.com>
17885
17886         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
17887         setting of this flag, since the 'set' method may be non-public.
17888
17889 2004-04-28  Raja R Harinath  <rharinath@novell.com>
17890
17891         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
17892         check on current_vector.Block.
17893
17894 2004-04-27  Martin Baulig  <martin@ximian.com>
17895
17896         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
17897         a field initializer.  Fixes #56459.
17898
17899 2004-04-27  Martin Baulig  <martin@ximian.com>
17900
17901         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
17902         we're not attempting to use an indexer.  Fixes #52154.
17903
17904 2004-04-27  Martin Baulig  <martin@ximian.com>
17905
17906         * statement.cs (Return): Don't create a return label if we don't
17907         need it; reverts my change from January 20th.  Thanks to Ben
17908         Maurer for this.
17909
17910 2004-04-27  Martin Baulig  <martin@ximian.com>
17911
17912         According to the spec, `goto' can only leave a nested scope, but
17913         never enter it.
17914
17915         * statement.cs (Block.LookupLabel): Only lookup in the current
17916         block, don't recurse into parent or child blocks.
17917         (Block.AddLabel): Check in parent and child blocks, report
17918         CS0140/CS0158 if we find a duplicate.
17919         (Block): Removed this indexer for label lookups.
17920         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
17921         this already does the error reporting for us.
17922
17923         * flowanalysis.cs
17924         (FlowBranching.UsageVector.Block): New public variable; may be null.
17925         (FlowBranching.CreateSibling): Added `Block' argument.
17926         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
17927         label for the target of a `goto' and check whether we're not
17928         leaving a `finally'.
17929
17930 2004-04-27  Martin Baulig  <martin@ximian.com>
17931
17932         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17933         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
17934         just for returns).
17935
17936 2004-04-27  Martin Baulig  <martin@ximian.com>
17937
17938         * statement.cs (Block.AddLabel): Also check for implicit blocks
17939         and added a CS0158 check.
17940
17941 2004-04-27  Martin Baulig  <martin@ximian.com>
17942
17943         * flowanalysis.cs (FlowBranchingLoop): New class.
17944         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
17945         UsageVector's instead of an ArrayList.
17946         (FlowBranching.Label): Likewise.
17947         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
17948         (FlowBranching.AddBreakVector): New method.
17949
17950 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
17951
17952         * attribute.cs: Small regression fix: only convert the type if we
17953         the type is different, fixes System.Drawing build.
17954
17955 2004-04-27  Martin Baulig  <martin@ximian.com>
17956
17957         * attribute.cs (Attribute.Resolve): If we have a constant value
17958         for a named field or property, implicity convert it to the correct
17959         type.
17960
17961 2004-04-27  Raja R Harinath  <rharinath@novell.com>
17962
17963         * statement.cs (Block.Block): Implicit blocks share
17964         'child_variable_names' fields with parent blocks.
17965         (Block.AddChildVariableNames): Remove.
17966         (Block.AddVariable): Mark variable as "used by a child block" in
17967         every surrounding block.
17968         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
17969         been used in a child block, complain about violation of "Invariant
17970         meaning in blocks" rule.
17971         * cs-parser.jay (declare_local_variables): Don't use
17972         AddChildVariableNames.
17973         (foreach_statement): Don't create an implicit block: 'foreach'
17974         introduces a scope.
17975
17976 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
17977
17978         * convert.cs (ImplicitNumericConversion): 0 is also positive when
17979         converting from 0L to ulong.  Fixes 57522.
17980
17981 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
17982
17983         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
17984         derived class hides via 'new' keyword field from base class (test-242.cs).
17985         TODO: Handle this in the more general way.
17986         
17987         * class.cs (CheckBase): Ditto.
17988
17989 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
17990
17991         * decl.cs (caching_flags): New member for storing cached values
17992         as bit flags.
17993         (MemberCore.Flags): New enum where bit flags for caching_flags
17994         are defined.
17995         (MemberCore.cls_compliance): Moved to caching_flags.
17996         (DeclSpace.Created): Moved to caching_flags.
17997
17998         * class.cs: Use caching_flags instead of DeclSpace.Created
17999         
18000 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18001
18002         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18003         if we are only a derived class, not a nested class.
18004
18005         * typemanager.cs: Same as above, but do this at the MemberLookup
18006         level (used by field and methods, properties are handled in
18007         PropertyExpr).   Allow for the qualified access if we are a nested
18008         method. 
18009
18010 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18011
18012         * class.cs: Refactoring.
18013         (IMethodData): New inteface; Holds links to parent members
18014         to avoid member duplication (reduced memory allocation).
18015         (Method): Implemented IMethodData interface.
18016         (PropertyBase): New inner classes for get/set methods.
18017         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18018         (Event): New inner classes for add/remove methods.
18019         (Event.DelegateMethod): Implemented IMethodData interface.
18020
18021         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18022         EmitContext (related to class.cs refactoring).
18023
18024 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18025
18026         * delegate.cs (Delegate.VerifyApplicability): If the number of
18027         arguments are the same as the number of parameters, first try to
18028         verify applicability ignoring  any 'params' modifier on the last
18029         parameter.
18030         Fixes #56442.
18031
18032 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18033
18034         * class.cs (TypeContainer.AddIndexer): Use
18035         'ExplicitInterfaceName' to determine if interface name was
18036         explicitly specified.  'InterfaceType' is not initialized at this time.
18037         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18038         Indexers array is already in the required order.  Initialize
18039         'IndexerName' only if there are normal indexers.
18040         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18041         (TypeContainer.Emit): Emit DefaultMember attribute only if
18042         IndexerName is initialized.
18043         Fixes #56300.
18044
18045 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18046
18047         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18048         Fixes #57007
18049
18050 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18051
18052         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18053         attributes.
18054         Fix for #56456.
18055
18056         * attribute.cs (Attribute.Resolve): Check for duplicate named
18057         attributes.
18058         Fix for #56463.
18059
18060 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
18061
18062         * iterators.cs (MarkYield): track whether we are in an exception,
18063         and generate code accordingly.  Use a temporary value to store the
18064         result for our state.
18065
18066         I had ignored a bit the interaction of try/catch with iterators
18067         since their behavior was not entirely obvious, but now it is
18068         possible to verify that our behavior is the same as MS .NET 2.0
18069
18070         Fixes 54814
18071
18072 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
18073
18074         * iterators.cs: Avoid creating temporaries if there is no work to
18075         do. 
18076
18077         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
18078         Enumerations, use TypeManager.EnumToUnderlying and call
18079         recursively. 
18080
18081         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
18082         bug #57013
18083
18084         (This.Emit): Use EmitContext.EmitThis to emit our
18085         instance variable.
18086
18087         (This.EmitAssign): Ditto.
18088
18089         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
18090         codepaths, we will move all the functionality into
18091         Mono.CSharp.This 
18092
18093         (FieldExpr.EmitAssign): Ditto.
18094
18095         This fixes several hidden bugs that I uncovered while doing a code
18096         review of this today.
18097
18098         * codegen.cs (EmitThis): reworked so the semantics are more clear
18099         and also support value types "this" instances.
18100
18101         * iterators.cs: Changed so that for iterators in value types, we
18102         do not pass the value type as a parameter.  
18103
18104         Initialization of the enumerator helpers is now done in the caller
18105         instead of passing the parameters to the constructors and having
18106         the constructor set the fields.
18107
18108         The fields have now `assembly' visibility instead of private.
18109
18110 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
18111
18112         * expression.cs (Argument.Resolve): Check if fields passed as ref
18113         or out are contained in a MarshalByRefObject.
18114
18115         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
18116         another compiler type.
18117
18118 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
18119
18120         * class.cs (Indexer.Define): use the new name checking method.
18121         Also, return false on an error.
18122         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
18123         (is_identifier_[start/part]_character): make static.
18124
18125 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
18126
18127         * expression.cs (Binary.ResolveOperator): Do no append strings
18128         twice: since we can be invoked more than once (array evaluation)
18129         on the same concatenation, take care of this here.  Based on a fix
18130         from Ben (bug #56454)
18131
18132 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
18133
18134         * codegen.cs: Fix another case where CS1548 must be reported (when 
18135         delay-sign isn't specified and no private is available #56564). Fix
18136         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
18137         error when MCS is used on the MS runtime and we need to delay-sign 
18138         (which seems unsupported by AssemblyBuilder - see #56621).
18139
18140 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
18141
18142         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
18143         (TypeManager.ComputeNamespaces): Faster implementation for
18144         Microsoft runtime.
18145
18146         * compiler.csproj: Updated AssemblyName to mcs.
18147
18148 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
18149
18150         * rootcontext.cs: Add new types to the boot resolution.
18151
18152         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
18153         MulticastDelegate is not allowed.
18154
18155         * typemanager.cs: Add new types to lookup: System.TypedReference
18156         and ArgIterator.
18157
18158         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
18159         check for TypedReference or ArgIterator, they are not allowed. 
18160
18161         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
18162         makes us properly catch 1510 in some conditions (see bug 56016 for
18163         details). 
18164
18165 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
18166
18167         * CryptoConvert.cs: update from corlib version
18168         with endian fixes.
18169
18170 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
18171
18172         * class.cs (Indexer.Define): Check indexername declaration
18173
18174 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
18175
18176         * attribute.cs (IsClsCompliant): Fixed problem with handling
18177         all three states (compliant, not-compliant, undetected).
18178
18179 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
18180
18181         * attribute.cs (Attribute): Location is now public.
18182         (Resolve): Store resolved arguments (pos_values) in attribute class.
18183         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
18184         (GetClsCompliantAttributeValue): New method that gets
18185         CLSCompliantAttribute value.
18186         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
18187         if exists else null.
18188         (AttributeTester): New class for CLS-Compliant verification routines.
18189
18190         * class.cs (Emit): Add CLS-Compliant verification.
18191         (Method.GetSignatureForError): Implemented.
18192         (Constructor.GetSignatureForError): Implemented
18193         (Constructor.HasCompliantArgs): Returns if constructor has
18194         CLS-Compliant arguments.
18195         (Constructor.Emit): Override.
18196         (Construcor.IsIdentifierClsCompliant): New method; For constructors
18197         is needed to test only parameters.
18198         (FieldBase.GetSignatureForError): Implemented.
18199         (TypeContainer): New member for storing base interfaces.
18200         (TypeContainer.FindMembers): Search in base interfaces too.
18201
18202         * codegen.cs (GetClsComplianceAttribute): New method that gets
18203         assembly or module CLSCompliantAttribute value.
18204         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
18205         for assembly.
18206         (ModuleClass.Emit): Add error 3012 test.
18207
18208         * const.cs (Emit): Override and call base for CLS-Compliant tests.
18209
18210         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
18211         state for all decl types.
18212         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
18213         if CLS-Compliant tests are required.
18214         (IsClsCompliaceRequired): New method. Analyze whether code
18215         must be CLS-Compliant.
18216         (IsExposedFromAssembly): New method. Returns true when MemberCore
18217         is exposed from assembly.
18218         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
18219         value or gets cached value.
18220         (HasClsCompliantAttribute): New method. Returns true if MemberCore
18221         is explicitly marked with CLSCompliantAttribute.
18222         (IsIdentifierClsCompliant): New abstract method. This method is
18223         used to testing error 3005.
18224         (IsIdentifierAndParamClsCompliant): New method. Common helper method
18225         for identifier and parameters CLS-Compliant testing.
18226         (VerifyClsCompliance): New method. The main virtual method for
18227         CLS-Compliant verifications.
18228         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
18229         null. I don't know why is null (too many public members !).
18230         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
18231         and get value of first CLSCompliantAttribute that found.
18232
18233         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
18234         (VerifyClsCompliance): Override and add extra tests.
18235
18236         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
18237         clscheck- disable CLS-Compliant verification event if assembly is has
18238         CLSCompliantAttribute(true).
18239
18240         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
18241         ApllyAttribute is now called in emit section as in the other cases.
18242         Possible future Emit integration.
18243         (IsIdentifierClsCompliant): New override.
18244         (VerifyClsCompliance): New override.
18245         (GetEnumeratorName): Returns full enum name.
18246
18247         * parameter.cs (GetSignatureForError): Implemented.
18248
18249         * report.cs (WarningData): New struct for Warning message information.
18250         (LocationOfPreviousError): New method.
18251         (Warning): New method. Reports warning based on the warning table.
18252         (Error_T): New method. Reports error based on the error table.
18253
18254         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
18255         verifications are done here.
18256
18257         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
18258
18259         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
18260         CLSCompliantAttribute.
18261         (all_imported_types): New member holds all imported types from other
18262         assemblies.
18263         (LoadAllImportedTypes): New method fills static table with exported types
18264         from all referenced assemblies.
18265         (Modules): New property returns all assembly modules.
18266
18267 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
18268
18269         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
18270         throwing a parser error.
18271
18272         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
18273         which removes the hardcoded get_/set_ prefixes for properties, as
18274         IL allows for the properties to be named something else.  
18275
18276         Bug #56013
18277
18278         * expression.cs: Do not override operand before we know if it is
18279         non-null.  Fix 56207
18280
18281 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18282
18283         * typemanager.cs: support for pinned variables.
18284
18285 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18286
18287         * decl.cs, typemanager.cs: Avoid using an arraylist
18288         as a buffer if there is only one result set.
18289
18290 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18291
18292         * expression.cs: Make sure you cant call a static method
18293         with an instance expression, bug #56174.
18294
18295 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
18296
18297         * class.cs (IsDuplicateImplementation): Improve error reporting to
18298         flag 663 (method only differs in parameter modifier).
18299
18300         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
18301         in preprocessor directives.
18302
18303         * location.cs (LookupFile): Allow for the empty path.
18304
18305         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
18306         better approach for some of that patch, but its failing with the
18307         CharSet enumeration.  For now try/catch will do.
18308
18309         * typemanager.cs: Do not crash if a struct does not have fields.
18310         Fixes 56150.
18311
18312 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18313
18314         * expression.cs: cs0213, cant fix a fixed expression.
18315         fixes 50231.
18316
18317 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18318
18319         * cs-parser.jay: detect invalid embeded statements gracefully.
18320         bug #51113.
18321
18322 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18323
18324         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
18325         As a regex:
18326         s/
18327         the invocation type may not be a subclass of the tye of the item/
18328         The type of the item must be a subclass of the invocation item.
18329         /g
18330
18331         Fixes bug #50820.
18332
18333 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
18334
18335         * attribute.cs: Added methods to get a string and a bool from an
18336         attribute. Required to information from AssemblyKeyFileAttribute,
18337         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
18338         * codegen.cs: Modified AssemblyName creation to include support for
18339         strongnames. Catch additional exceptions to report them as CS1548.
18340         * compiler.csproj: Updated include CryptoConvert.cs.
18341         * compiler.csproj.user: Removed file - user specific configuration.
18342         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
18343         Mono.Security assembly. The original class is maintained and tested in
18344         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
18345         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
18346         like CSC 8.0 (C# v2) supports.
18347         * Makefile: Added CryptoConvert.cs to mcs sources.
18348         * rootcontext.cs: Added new options for strongnames.
18349
18350 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
18351
18352         * driver.cs: For --expect-error, report error code `2'
18353         if the program compiled with no errors, error code `1' if
18354         it compiled with an error other than the one expected.
18355
18356 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
18357
18358         * compiler.csproj: Updated for Visual Studio .NET 2003.
18359         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
18360         * compiler.sln: Updated for Visual Studio .NET 2003.
18361
18362 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
18363
18364         * expression.cs: Fix bug #47234. We basically need to apply the
18365         rule that we prefer the conversion of null to a reference type
18366         when faced with a conversion to 'object' (csc behaviour).
18367
18368 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18369
18370         * statement.cs: Shorter form for foreach, eliminates
18371         a local variable. r=Martin.
18372
18373 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18374
18375         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
18376         checks if we can use brtrue/brfalse to test for 0.
18377         * expression.cs: use the above in the test for using brtrue/brfalse.
18378         cleanup code a bit.
18379
18380 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18381
18382         * expression.cs: Rewrite string concat stuff. Benefits:
18383
18384         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
18385         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
18386         rather than a concat chain.
18387
18388         * typemanager.cs: Add lookups for more concat overloads.
18389
18390 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
18391
18392         * expression.cs: Emit shorter il code for array init.
18393
18394         newarr
18395         dup
18396         // set 1
18397
18398         // set 2
18399
18400         newarr
18401         stloc.x
18402
18403         ldloc.x
18404         // set 1
18405
18406         ldloc.x
18407         // set 2
18408
18409 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
18410
18411         * statement.cs: Before, two switch blocks would be merged if the
18412         total size of the blocks (end_item - begin_item + 1) was less than
18413         two times the combined sizes of the blocks.
18414
18415         Now, it will only merge if after the merge at least half of the
18416         slots are filled.
18417
18418         fixes 55885.
18419
18420 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
18421
18422         * class.cs : csc build fix for GetMethods(). See bug #52503.
18423
18424 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
18425
18426         * expression.cs: Make sure fp comparisons work with NaN.
18427         This fixes bug #54303. Mig approved this patch a long
18428         time ago, but we were not able to test b/c the runtime
18429         had a related bug.
18430
18431 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
18432
18433         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
18434
18435 2004-03-19  Martin Baulig  <martin@ximian.com>
18436
18437         * class.cs (MemberCore.IsDuplicateImplementation): Report the
18438         error here and not in our caller.
18439
18440 2004-03-19  Martin Baulig  <martin@ximian.com>
18441
18442         * interface.cs: Completely killed this file.
18443         (Interface): We're now a TypeContainer and live in class.cs.
18444
18445         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
18446         argument; we're now also called for interfaces.
18447         (TypeContainer.DefineMembers): Allow this method being called
18448         multiple times.
18449         (TypeContainer.GetMethods): New public method; formerly known as
18450         Interface.GetMethod().  This is used by PendingImplementation.
18451         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
18452         it's now private and non-static.
18453         (Interface): Moved this here; it's now implemented similar to
18454         Class and Struct.
18455         (Method, Property, Event, Indexer): Added `bool is_interface'
18456         argument to their .ctor's.
18457         (MemberBase.IsInterface): New public field.
18458
18459         * cs-parser.jay: Create normal Method, Property, Event, Indexer
18460         instances instead of InterfaceMethod, InterfaceProperty, etc.
18461         (opt_interface_base): Removed; we now use `opt_class_base' instead.
18462         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
18463
18464 2004-03-19  Martin Baulig  <martin@ximian.com>
18465
18466         * class.cs (MethodCore.IsDuplicateImplementation): New private
18467         method which does the CS0111 checking.
18468         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
18469         Use IsDuplicateImplementation().
18470
18471 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
18472
18473         * decl.cs (FindMemberToOverride): New method to find the correct
18474         method or property to override in the base class.
18475         * class.cs
18476             - Make Method/Property use the above method to find the
18477               version in the base class.
18478             - Remove the InheritableMemberSignatureCompare as it is now
18479               dead code.
18480
18481         This patch makes large code bases much faster to compile, as it is
18482         O(n) rather than O(n^2) to do this validation.
18483
18484         Also, it fixes bug 52458 which is that nested classes are not
18485         taken into account when finding the base class member.
18486
18487         Reviewed/Approved by Martin.
18488
18489 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
18490
18491         * interface.cs: In all interface classes removed redundant
18492         member initialization.
18493
18494 2004-03-16  Martin Baulig  <martin@ximian.com>
18495
18496         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
18497
18498 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
18499
18500         * decl.cs (DefineTypeAndParents): New helper method to define a
18501         type's containers before the type itself is defined;  This is a
18502         bug exposed by the recent changes to Windows.Forms when an
18503         implemented interface was defined inside a class that had not been
18504         built yet.   
18505
18506         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
18507
18508         (Check): Loop correctly to report errors modifiers
18509         (UNSAFE was not in the loop, since it was the same as TOP).
18510
18511         * interface.cs: Every interface member now takes a ModFlags,
18512         instead of a "is_new" bool, which we set on the base MemberCore. 
18513
18514         Every place where we called "UnsafeOk" in the interface, now we
18515         call the proper member (InterfaceMethod.UnsafeOK) instead to get
18516         the unsafe settings from the member declaration instead of the
18517         container interface. 
18518
18519         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
18520
18521         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
18522         `set_indexer_name' to the pending bits (one per type).
18523
18524         We fixed a bug today that was picking the wrong method to
18525         override, since for properties the existing InterfaceMethod code
18526         basically ignored the method name.  Now we make sure that the
18527         method name is one of the valid indexer names.
18528
18529 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
18530  
18531         * support.cs (SeekableStreamReader): Keep track of stream byte
18532         positions and don't mix them with character offsets to the buffer.
18533
18534         Patch from Gustavo Giráldez
18535
18536 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
18537
18538         * interface.cs (InterfaceSetGetBase): Removed double member
18539         initialization, base class does it as well.
18540
18541 2004-03-13  Martin Baulig  <martin@ximian.com>
18542
18543         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
18544         when compiling corlib.
18545
18546 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
18547
18548         * convert.cs (ExplicitConversion): We were reporting an error on
18549         certain conversions (object_type source to a value type, when the
18550         expression was `null') before we had a chance to pass it through
18551         the user defined conversions.
18552
18553         * driver.cs: Replace / and \ in resource specifications to dots.
18554         Fixes 50752
18555
18556         * class.cs: Add check for duplicate operators.  Fixes 52477
18557
18558 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
18559
18560         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
18561         that are in the middle of the statements, not only at the end.
18562         Fixes #54987
18563
18564         * class.cs (TypeContainer.AddField): No longer set the
18565         `HaveStaticConstructor' flag, now we call it
18566         `UserDefineStaticConstructor' to diferentiate the slightly
18567         semantic difference.
18568
18569         The situation is that we were not adding BeforeFieldInit (from
18570         Modifiers.TypeAttr) to classes that could have it.
18571         BeforeFieldInit should be set to classes that have no static
18572         constructor. 
18573
18574         See:
18575
18576         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
18577
18578         And most importantly Zoltan's comment:
18579
18580         http://bugzilla.ximian.com/show_bug.cgi?id=44229
18581
18582         "I think beforefieldinit means 'it's ok to initialize the type sometime 
18583          before its static fields are used', i.e. initialization does not need
18584          to be triggered by the first access to the type. Setting this flag
18585          helps the JIT to compile better code, since it can run the static
18586          constructor at JIT time, and does not need to generate code to call it
18587          (possibly lots of times) at runtime. Unfortunately, mcs does not set
18588          this flag for lots of classes like String. 
18589          
18590          csc sets this flag if the type does not have an explicit static 
18591          constructor. The reasoning seems to be that if there are only static
18592          initalizers for a type, and no static constructor, then the programmer
18593          does not care when this initialization happens, so beforefieldinit
18594          can be used.
18595          
18596          This bug prevents the AOT compiler from being usable, since it 
18597          generates so many calls to mono_runtime_class_init that the AOT code
18598          is much slower than the JITted code. The JITted code is faster, 
18599          because it does not generate these calls if the vtable is type is
18600          already initialized, which is true in the majority of cases. But the
18601          AOT compiler can't do this."
18602
18603 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
18604
18605         * class.cs (MethodData.Emit): Refactor the code so symbolic
18606         information is generated for destructors;  For some reasons we
18607         were taking a code path that did not generate symbolic information
18608         before. 
18609
18610 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
18611
18612         * class.cs: Create a Constructor.CheckBase method that
18613         takes care of all validation type code. The method
18614         contains some code that was moved from Define.
18615
18616         It also includes new code that checks for duplicate ctors.
18617         This fixes bug #55148.
18618
18619 2004-03-09  Joshua Tauberer <tauberer@for.net>
18620
18621         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
18622         a { ... }-style array creation invokes EmitStaticInitializers
18623         which is not good for reference-type arrays.  String, decimal
18624         and now null constants (NullCast) are not counted toward
18625         static initializers.
18626
18627 2004-03-05  Martin Baulig  <martin@ximian.com>
18628
18629         * location.cs (SourceFile.HasLineDirective): New public field;
18630         specifies whether the file contains or is referenced by a "#line"
18631         directive.
18632         (Location.DefineSymbolDocuments): Ignore source files which
18633         either contain or are referenced by a "#line" directive.        
18634
18635 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
18636
18637         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
18638         direct access to our parent, so check the method inline there.
18639
18640 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
18641
18642         * expression.cs (Invocation.EmitCall): Miguel's last commit
18643         caused a regression. If you had:
18644
18645             T t = null;
18646             t.Foo ();
18647
18648         In Foo the implict this would be null.
18649
18650 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
18651
18652         * expression.cs (Invocation.EmitCall): If the method is not
18653         virtual, do not emit a CallVirt to it, use Call.
18654
18655         * typemanager.cs (GetFullNameSignature): Improve the method to
18656         cope with ".ctor" and replace it with the type name.
18657
18658         * class.cs (ConstructorInitializer.Resolve): Now the method takes
18659         as an argument the ConstructorBuilder where it is being defined,
18660         to catch the recursive constructor invocations.
18661
18662 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
18663
18664         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
18665         routines to check if a type is an enumerable/enumerator allow
18666         classes that implement the IEnumerable or IEnumerator interfaces.
18667
18668         * class.cs (Property, Operator): Implement IIteratorContainer, and
18669         implement SetYields.
18670
18671         (Property.Define): Do the block swapping for get_methods in the
18672         context of iterators.   We need to check if Properties also
18673         include indexers or not.
18674
18675         (Operator): Assign the Block before invoking the
18676         OperatorMethod.Define, so we can trigger the Iterator code
18677         replacement. 
18678
18679         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
18680         Property and Operator classes are not created when we parse the
18681         declarator but until we have the block completed, so we use a
18682         singleton SimpleIteratorContainer.Simple to flag whether the
18683         SetYields has been invoked.
18684
18685         We propagate this setting then to the Property or the Operator to
18686         allow the `yield' to function.
18687
18688 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
18689
18690         * codegen.cs: Implemented attribute support for modules.
18691         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
18692         Assembly/Module functionality.
18693
18694         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
18695         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
18696         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
18697
18698 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
18699
18700         * interface.cs (FindMembers): The operation is performed on all base
18701         interfaces and not only on the first. It is required for future CLS Compliance patch.
18702
18703 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
18704
18705         * statement.cs, codegen.cs:
18706         This patch deals with patterns such as:
18707
18708         public class List : IEnumerable {
18709
18710                 public MyEnumerator GetEnumerator () {
18711                         return new MyEnumerator(this);
18712                 }
18713
18714                 IEnumerator IEnumerable.GetEnumerator () {
18715                         ...
18716                 }
18717                 
18718                 public struct MyEnumerator : IEnumerator {
18719                         ...
18720                 }
18721         }
18722
18723         Before, there were a few things we did wrong:
18724         1) we would emit callvirt on a struct, which is illegal
18725         2) we emited ldarg when we needed to emit ldarga
18726         3) we would mistakenly call the interface methods on an enumerator
18727         type that derived from IEnumerator and was in another assembly. For example:
18728
18729         public class MyEnumerator : IEnumerator
18730
18731         Would have the interface methods called, even if there were public impls of the
18732         method. In a struct, this lead to invalid IL code.
18733
18734 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
18735
18736         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
18737           renamed to Emit.
18738
18739         * delegate.cs (Define): Fixed crash when delegate type is undefined.
18740
18741 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
18742
18743         * cs-parser.jay: Fix small regression: we were not testing V2
18744         compiler features correctly.
18745
18746         * interface.cs: If the emit context is null, then create one
18747
18748 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
18749
18750         * decl.cs (GetSignatureForError): New virtual method to get full name
18751           for error messages.
18752
18753         * attribute.cs (IAttributeSupport): New interface for attribute setting.
18754           Now it is possible to rewrite ApplyAttributes method to be less if/else.
18755
18756         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
18757           Duplicated members and code in these classes has been removed.
18758           Better encapsulation in these classes.
18759
18760 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
18761
18762         * assign.cs (Assign.DoResolve): When dealing with compound
18763         assignments, there is a new rule in ECMA C# 2.4 (might have been
18764         there before, but it is documented here) that states that in:
18765
18766         a op= b;
18767
18768         If b is of type int, and the `op' is a shift-operator, then the
18769         above is evaluated as:
18770
18771         a = (int) a op b 
18772
18773         * expression.cs (Binary.ResolveOperator): Instead of testing for
18774         int/uint/long/ulong, try to implicitly convert to any of those
18775         types and use that in pointer arithmetic.
18776
18777         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
18778         method to print information for from the type, not from the
18779         null-method we were given.
18780
18781 2004-02-01  Duncan Mak  <duncan@ximian.com>
18782
18783         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
18784         parsing for cmd, fixes bug #53694.
18785
18786 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
18787
18788         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
18789         in the member name duplication tests. Property and operator name duplication
18790         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
18791
18792 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
18793
18794         * interface.cs (PopulateMethod): Fixed crash when interface method
18795         returns not existing type (error test cs0246-3.cs).
18796
18797 2004-02-02  Ravi Pratap M <ravi@ximian.com>
18798
18799         * cs-parser.jay (interface_accessors): Re-write actions to also
18800         store attributes attached to get and set methods. Fix spelling
18801         while at it.
18802
18803         (inteface_property_declaration): Modify accordingly.
18804
18805         (InterfaceAccessorInfo): New helper class to store information to pass
18806         around between rules that use interface_accessors.
18807
18808         * interface.cs (Emit): Apply attributes on the get and set
18809         accessors of properties and indexers too.
18810
18811         * attribute.cs (ApplyAttributes): Modify accordingly to use the
18812         right MethodBuilder when applying attributes to the get and set accessors.
18813
18814 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
18815
18816         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
18817
18818 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
18819
18820         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
18821
18822 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
18823
18824         * cs-parser.jay: Remove YIELD token, instead use the new grammar
18825         changes that treat `yield' specially when present before `break'
18826         or `return' tokens.
18827
18828         * cs-tokenizer.cs: yield is no longer a keyword.
18829
18830 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
18831
18832         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
18833         setting for default constructors.
18834         For default constructors are almost every time set wrong Modifier. The
18835         generated IL code has been alright. But inside mcs this values was
18836         wrong and this was reason why several of my CLS Compliance tests
18837         failed.
18838
18839 2004-01-22  Martin Baulig  <martin@ximian.com>
18840
18841         * cs-parser.jay (namespace_or_type_name): Return an Expression,
18842         not a QualifiedIdentifier.  This is what `type_name_expression'
18843         was previously doing.
18844         (type_name_expression): Removed; the code is now in
18845         `namespace_or_type_name'.
18846         (qualified_identifier): Removed, use `namespace_or_type_name'
18847         instead.
18848         (QualifiedIdentifier): Removed this class.      
18849
18850 2004-01-22  Martin Baulig  <martin@ximian.com>
18851
18852         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
18853         not a string as alias name.
18854
18855 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
18856
18857         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
18858         #52730 bug, and instead compute correctly the need to use a
18859         temporary variable when requesting an address based on the
18860         static/instace modified of the field and the constructor.
18861  
18862 2004-01-21  Martin Baulig  <martin@ximian.com>
18863
18864         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
18865         class and namespace before looking up aliases.  Fixes #52517.
18866
18867 2004-01-21  Martin Baulig  <martin@ximian.com>
18868
18869         * flowanalysis.cs (UsageVector.Merge): Allow variables being
18870         assinged in a 'try'; fixes exception4.cs.
18871
18872 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18873         * class.cs : Implemented parameter-less constructor for TypeContainer
18874
18875         * decl.cs: Attributes are now stored here. New property OptAttributes
18876
18877         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
18878
18879         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
18880
18881 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18882
18883         * typemanager.cs (CSharpSignature): Now reports also inner class name.
18884           (CSharpSignature): New method for indexer and property signature.
18885
18886 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18887
18888         * pending.cs (IsVirtualFilter): Faster implementation.
18889
18890 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18891
18892         * typemanager.cs: Avoid inclusion of same assembly more than once.
18893
18894 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18895
18896         * cs-parser.jay: Fixed problem where the last assembly attribute
18897           has been applied also to following declaration (class, struct, etc.)
18898           
18899 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
18900
18901         * class.cs: Added error CS0538, CS0539 reporting.
18902         Fixed crash on Microsoft runtime when field type is void.
18903
18904         * cs-parser.jay: Added error CS0537 reporting.
18905
18906         * pending.cs: Added error CS0535 reporting.
18907         Improved error report for errors CS0536, CS0534.
18908
18909 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
18910
18911         Merge a few bits from the Anonymous Method MCS tree.
18912
18913         * statement.cs (ToplevelBlock): New class for toplevel methods,
18914         will hold anonymous methods, lifted variables.
18915
18916         * cs-parser.jay: Create toplevel blocks for delegates and for
18917         regular blocks of code. 
18918
18919 2004-01-20  Martin Baulig  <martin@ximian.com>
18920
18921         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
18922         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
18923         and `NeedExplicitReturn'; added `IsLastStatement'.
18924         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
18925         have a `ReturnLabel' or we're not unreachable.
18926
18927         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
18928         child's reachability; don't just override ours with it.  Fixes
18929         #58058 (lluis's example).
18930         (FlowBranching): Added public InTryOrCatch(), InCatch(),
18931         InFinally(), InLoop(), InSwitch() and
18932         BreakCrossesTryCatchBoundary() methods.
18933
18934         * statement.cs (Return): Do all error checking in Resolve().
18935         Unless we are the last statement in a top-level block, always
18936         create a return label and jump to it.
18937         (Break, Continue): Do all error checking in Resolve(); also make
18938         sure we aren't leaving a `finally'.
18939         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
18940         statement in a top-level block.
18941         (Block.Flags): Added `IsDestructor'.
18942         (Block.IsDestructor): New public property.
18943
18944 2004-01-20  Martin Baulig  <martin@ximian.com>
18945
18946         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
18947
18948 2004-01-20  Martin Baulig  <martin@ximian.com>
18949
18950         * statement.cs (Statement.ResolveUnreachable): New public method.
18951         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
18952         (Block.Resolve): Resolve unreachable statements.
18953
18954 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
18955
18956         * expression.cs: We need to fix the case where we do
18957         not have a temp variable here.
18958
18959         * assign.cs: Only expression compound assignments need
18960         temporary variables.
18961
18962 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
18963
18964         * flowanalysis.cs: Reduce memory allocation in a few ways:
18965           - A block with no variables should not allocate a bit
18966             vector for itself.
18967           - A method with no out parameters does not need any tracking
18968             for assignment of the parameters, so we need not allocate
18969             any data for it.
18970           - The arrays:
18971                 public readonly Type[] VariableTypes;
18972                 public readonly string[] VariableNames;
18973             Are redundant. The data is already stored in the variable
18974             map, so we need not allocate another array for it.
18975           - We need to add alot of checks for if (params | locals) == null
18976             due to the first two changes.
18977
18978 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
18979
18980         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
18981         implement IMemoryLocation, we store a copy on a local variable and
18982         take the address of it.  Patch from Benjamin Jemlich
18983
18984         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
18985         to use a special "type_name_expression" rule which reduces the
18986         number of "QualifiedIdentifier" classes created, and instead
18987         directly creates MemberAccess expressions.
18988
18989 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
18990
18991         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
18992         that fixes #52853.  Null literal assignment to ValueType
18993
18994         * class.cs (MethodData.Emit): Instead of checking the name of the
18995         method to determine if its a destructor, create a new derived
18996         class from Method called Destructor, and test for that.  
18997
18998         * cs-parser.jay: Create a Destructor object instead of a Method.  
18999
19000         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19001
19002         Fixes: 52933
19003
19004 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19005
19006         * expression.cs (Binary.ResolveOperator): Perform an implicit
19007         conversion from MethodGroups to their delegate types on the
19008         Addition operation.
19009
19010         * delegate.cs: Introduce a new class DelegateCreation that is the
19011         base class for `NewDelegate' and `ImplicitDelegateCreation',
19012         factor some code in here.
19013
19014         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19015         conversion from MethodGroups to compatible delegate types. 
19016
19017         * ecore.cs (Expression.Resolve): Do not flag error 654
19018         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19019         we allow conversions from MethodGroups to delegate types now.
19020
19021         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19022         assignments in v2 either.
19023
19024 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19025
19026         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19027         static read-only fields in ctors.
19028
19029         Applied patch from Benjamin Jemlich 
19030
19031         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19032
19033 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19034
19035         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19036         here to return true, as they can be used like this:
19037
19038                 (XXX) int.MEMBER ()
19039
19040         Fixed 49836 and all the other dups
19041
19042 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19043
19044         * driver.cs: Implement /win32res and /win32icon.
19045
19046 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19047
19048         * cs-parser.jay: Add a rule to improve error handling for the
19049         common mistake of placing modifiers after the type.
19050
19051 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19052
19053         * cs-parser.jay (interface_event_declaration): Catch
19054         initialization of events on interfaces, and report cs0068
19055
19056         * cs-parser.jay (interface_event_declaration): Catch
19057         initialization of events. 
19058
19059         * ecore.cs: Better report missing constructors.
19060
19061         * expression.cs (Binary.ResolveOperator): My previous bug fix had
19062         the error reporting done in the wrong place.  Fix.
19063
19064         * expression.cs (Binary.ResolveOperator): Catch the 
19065         operator + (E x, E y) error earlier, and later allow for implicit
19066         conversions in operator +/- (E e, U x) from U to the underlying
19067         type of E.
19068
19069         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
19070         52596, if the container class is abstract, the default constructor
19071         is protected otherwise its public (before, we were always public).
19072
19073         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
19074         fixed statement.
19075
19076         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
19077         Jemlich that fixes bug #52597, MCS was generating invalid code for
19078         idisposable structs.   Thanks to Ben for following up with this
19079         bug as well.
19080
19081 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
19082
19083         * driver.cs: Allow assemblies without code to be generated, fixes
19084         52230.
19085
19086 2004-01-07  Nick Drochak <ndrochak@gol.com>
19087
19088         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
19089
19090 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
19091
19092         * cs-parser.jay: Add rules to improve error reporting if fields or
19093         methods are declared at the namespace level (error 116)
19094
19095         * Add rules to catch event add/remove
19096
19097 2004-01-04  David Sheldon <dave-mono@earth.li>
19098
19099   * expression.cs: Added matching ")" to error message for 
19100   CS0077
19101
19102 2004-01-03 Todd Berman <tberman@gentoo.org>
19103
19104         * ecore.cs, attribute.cs:
19105         Applying fix from #52429.
19106
19107 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19108
19109         * ecore.cs, expression.cs, statement.cs:
19110         Total rewrite of how we handle branching. We
19111         now handle complex boolean expressions with fewer
19112         jumps. As well if (x == 0) no longer emits a ceq.
19113
19114         if (x is Foo) is much faster now, because we generate
19115         better code.
19116
19117         Overall, we get a pretty big improvement on our benchmark
19118         tests. The code we generate is smaller and more readable.
19119
19120         I did a full two-stage bootstrap. The patch was reviewed
19121         by Martin and Miguel.
19122
19123 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19124
19125         * cs-parser.jay: Make primary_expression not take a QI.
19126         we dont need this because the member_access rule covers
19127         us here. So we replace the rule with just IDENTIFIER.
19128
19129         This has two good effects. First, we remove a s/r conflict.
19130         Second, we allocate many fewer QualifiedIdentifier objects.
19131
19132 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19133
19134         * attribute.cs: Handle MarshalAs attributes as pseudo, and
19135         set the correct information via SRE. This prevents
19136         hanging on the MS runtime. Fixes #29374.
19137
19138 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19139
19140         * convert.cs: correctly handle conversions to value types
19141         from Enum and ValueType as unboxing conversions.
19142
19143         Fixes bug #52569. Patch by Benjamin Jemlich.
19144
19145 2004-01-02  Ravi Pratap  <ravi@ximian.com>
19146
19147         * expression.cs (BetterConversion): Prefer int -> uint
19148         over int -> ulong (csc's behaviour). This fixed bug #52046.
19149
19150 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19151
19152         * decl.cs (MemberCache.FindMembers): now returns a
19153         MemberInfo [].
19154
19155         * typemanager.cs: In general, go with with ^^.
19156         (CopyNewMethods): take an IList.
19157         (RealMemberLookup): Only allocate an arraylist
19158         if we copy from two sets of methods.
19159
19160         This change basically does two things:
19161         1) Fewer array lists allocated due to CopyNewMethods.
19162         2) the explicit cast in MemberList costed ALOT.
19163
19164 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
19165
19166         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
19167         a hashtable to avoid needless string allocations when an identifier is
19168         used more than once (the common case).
19169
19170 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19171
19172         * pending.cs: MS's TypeBuilder.GetInterfaces ()
19173         is broken, it will not return anything. So, we
19174         have to use the information we have in mcs to
19175         do the task.
19176
19177         * typemanager.cs: Add a cache for GetInterfaces,
19178         since this will now be used more often (due to ^^)
19179
19180         (GetExplicitInterfaces) New method that gets the
19181         declared, not effective, interfaces on a type
19182         builder (eg, if you have interface IFoo, interface
19183         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
19184         { IBar }.
19185
19186         This patch makes MCS able to bootstrap itself on
19187         Windows again.
19188
19189 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19190
19191         * expression.cs: Remove the Nop's that Miguel put
19192         in by mistake.
19193
19194 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19195
19196         * report.cs, codegen.cs: Give the real stack trace to
19197         the error when an exception is thrown.
19198
19199 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19200
19201         * decl.cs: only allocate hashtables for ifaces if 
19202         it is an iface!
19203
19204 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19205
19206         * expression.cs: fix the error from cs0121-2.cs
19207         (a parent interface has two child interfaces that
19208         have a function with the same name and 0 params
19209         and the function is called through the parent).
19210
19211 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
19212
19213         * class.cs, rootcontext.cs, typmanager.cs: do not
19214         leak pointers.
19215
19216 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19217
19218         * codegen.cs: remove stack for the ec flow branching.
19219         It is already a linked list, so no need.
19220
19221 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19222
19223         * Makefile: Allow custom profiler here.
19224
19225 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19226
19227         * typemanager.cs (LookupType):
19228           - Use a static char [], because split takes
19229             a param array for args, so it was allocating
19230             every time.
19231           - Do not store true in a hashtable, it boxes.
19232
19233 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19234
19235         * flowanalysis.cs: bytify common enums.
19236
19237 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19238
19239         * modifiers.cs: Add a new set of flags for the
19240         flags allowed on explicit interface impls.
19241         * cs-parser.jay: catch the use of modifiers in
19242         interfaces correctly.
19243         * class.cs: catch private void IFoo.Blah ().
19244
19245         All related to bug #50572.
19246
19247 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19248
19249         * decl.cs: Rewrite the consistant accessability checking.
19250         Accessability is not linear, it must be implemented in
19251         a tableish way. Fixes #49704.
19252
19253 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19254
19255         * expression.cs: Handle negation in a checked context.
19256         We must use subtraction from zero. Fixes #38674.
19257
19258 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19259
19260         * class.cs: Ignore static void main in DLLs.
19261         * rootcontext.cs: Handle the target type here,
19262         since we are have to access it from class.cs
19263         * driver.cs: account for the above.
19264
19265 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19266
19267         * report.cs: Give line numbers and files if available.
19268
19269 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
19270
19271         * driver.cs: Implement /addmodule.
19272
19273         * typemanager.cs:  Change 'modules' field so it now contains Modules not
19274         ModuleBuilders.
19275
19276 2003-12-20  Martin Baulig  <martin@ximian.com>
19277
19278         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
19279         (FieldBase.IsAssigned): Removed this field.
19280         (FieldBase.SetAssigned): New public method.
19281         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
19282
19283 2003-12-20  Martin Baulig  <martin@ximian.com>
19284
19285         * expression.cs (LocalVariableReference.DoResolve): Don't set
19286         `vi.Used' if we're called from DoResolveLValue().
19287
19288         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
19289         returns the usage vector it just merged into the current one -
19290         pass this one to UsageWarning().
19291         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
19292         of the `EmitContext', don't call this recursively on our children.
19293
19294 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
19295
19296         * driver.cs: Implement /target:module.
19297
19298 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
19299
19300         * support.cs (CharArrayHashtable): New helper class.
19301
19302         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
19303         char arrays, not strings, so we can avoid creating a string in
19304         consume_identifier if the identifier is a keyword.
19305
19306 2003-12-16  Martin Baulig  <martin@ximian.com>
19307
19308         * statement.cs (LocalInfo.Assigned): Removed this property.
19309         (LocalInfo.Flags): Removed `Assigned'.
19310         (LocalInfo.IsAssigned): New public method; takes the EmitContext
19311         and uses flow analysis.
19312         (Block.UsageWarning): Made this method private.
19313         (Block.Resolve): Call UsageWarning() if appropriate.
19314
19315         * expression.cs (LocalVariableReference.DoResolve): Always set
19316         LocalInfo.Used here.
19317
19318 2003-12-13  Martin Baulig  <martin@ximian.com>
19319
19320         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
19321         any value here; we're now using flow analysis to figure out
19322         whether a statement/block returns a value.
19323
19324 2003-12-13  Martin Baulig  <martin@ximian.com>
19325
19326         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
19327         working again.
19328         (FlowBranching.MergeFinally): Don't call
19329         `branching.CheckOutParameters()' here, this is called in
19330         MergeTopBlock().
19331         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
19332         when adding the `finally' vector.       
19333
19334 2003-12-13  Martin Baulig  <martin@ximian.com>
19335
19336         * flowanalysis.cs
19337         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
19338         actually work and also fix #48962.
19339
19340 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19341
19342         * decl.cs: Do not check System.Object for nested types,
19343         since we know it does not have any. Big bang for buck:
19344
19345         BEFORE:
19346            Run 1:   8.35 seconds
19347            Run 2:   8.32 seconds
19348            corlib:  17.99 seconds
19349         AFTER:
19350            Run 1:   8.17 seconds
19351            Run 2:   8.17 seconds
19352            corlib:  17.39 seconds
19353
19354 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19355
19356         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
19357         time we are returning 0 members, so we save alot here.
19358
19359 2003-12-11  Martin Baulig  <martin@ximian.com>
19360
19361         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
19362         `MergeChild()', also just take the `FlowBranching' as argument;
19363         call Merge() on it and return the result.
19364         (FlowBranching.Merge): We don't need to do anything if we just
19365         have one sibling.
19366
19367 2003-12-11  Martin Baulig  <martin@ximian.com>
19368
19369         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
19370         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
19371         Maurer for this idea.
19372
19373 2003-12-11  Martin Baulig  <martin@ximian.com>
19374
19375         * flowanalysis.cs (MergeResult): This class is now gone; we now
19376         use the `UsageVector' for this.  The reason for this is that if a
19377         branching just has one sibling, we don't need to "merge" them at
19378         all - that's the next step to do.
19379         (FlowBranching.Merge): We now return a `UsageVector' instead of a
19380         `MergeResult'.
19381
19382 2003-12-11  Martin Baulig  <martin@ximian.com>
19383
19384         Reworked flow analyis and made it more precise and bug-free.  The
19385         most important change is that we're now using a special `Reachability'
19386         class instead of having "magic" meanings of `FlowReturns'.  I'll
19387         do some more cleanups and optimizations and also add some more
19388         documentation this week.
19389
19390         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
19391         largely reworked this class.
19392         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
19393         the new `Reachability' class instead of having "magic" values here.
19394         (FlowBranching): We're now using an instance of `Reachability'
19395         instead of having separate `Returns', `Breaks' etc. fields.
19396
19397         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
19398         based on flow analysis; ignore the return value of block.Emit ().
19399
19400 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
19401
19402         * driver.cs typemanager.cs: Find the mono extensions to corlib even
19403         if they are private.
19404
19405 2003-12-09  Martin Baulig  <martin@ximian.com>
19406
19407         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
19408         call them directly on the UsageVector.
19409
19410 2003-12-09  Martin Baulig  <martin@ximian.com>
19411
19412         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
19413         Changed return type from `FlowReturns' to `Reachability'.
19414
19415 2003-12-09  Martin Baulig  <martin@ximian.com>
19416
19417         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
19418         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
19419         `Reachable' fields with a single `Reachability' one.
19420
19421 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19422
19423         * class.cs (FindMembers): Remove foreach's.
19424
19425         Bootstrap times:
19426
19427         BEFORE
19428                 Run 1:   8.74 seconds
19429                 Run 2:   8.71 seconds
19430
19431         AFTER
19432                 Run 1:   8.64 seconds
19433                 Run 2:   8.58 seconds
19434
19435
19436 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19437
19438         * cs-parser.jay:
19439         * gen-treedump.cs:
19440         * statement.cs:
19441         This patch does a few things:
19442                 1. EmptyStatement is now a singleton, so it is never reallocated.
19443                 2. All blah is EmptyStatement constructs have been changed to
19444                    blah == EmptyStatement.Value, which is much faster and valid
19445                    now that EmptyStatement is a singleton.
19446                 3. When resolving a block, rather than allocating a new array for
19447                    the non-empty statements, empty statements are replaced with
19448                    EmptyStatement.Value
19449                 4. Some recursive functions have been made non-recursive.
19450         Mainly the performance impact is from (3), however (1) and (2) are needed for
19451         this to work. (4) does not make a big difference in normal situations, however
19452         it makes the profile look saner.
19453
19454         Bootstrap times:
19455
19456         BEFORE
19457         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
19458         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
19459         Total memory allocated: 56397 KB
19460
19461         AFTER
19462         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
19463         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
19464         Total memory allocated: 55666 KB
19465
19466 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19467
19468         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
19469         than the hashtable in a hashtable version
19470
19471         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
19472         we always end up concating a string. This results in a huge perf
19473         loss, because many strings have to be tracked by the GC. In this
19474         patch, we first use a hashtable that works with two keys, so that
19475         the strings do not need to be concat'ed.
19476
19477         Bootstrap times:
19478         BEFORE
19479                 Run 1:   8.74 seconds
19480                 Run 2:   8.71 seconds
19481
19482         AFTER
19483                 Run 1:   8.65 seconds
19484                 Run 2:   8.56 seconds
19485
19486 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
19487
19488         * Makefile: Add a new target `do-time' that does a quick and simple
19489         profile, leaving easy to parse output.
19490
19491 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
19492
19493         * codegen.cs (Init): Create the dynamic assembly with 
19494         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
19495
19496 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19497
19498         * support.cs: Make the PtrHashtable use only one
19499         instance of its comparer.
19500
19501 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
19502
19503         * typemanager.cs: Fix lookup of GetNamespaces.
19504
19505 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
19506
19507         * expression.cs: Removed redundant line.
19508
19509         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
19510         ArrayLists, use for loops with bounds.  
19511
19512         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
19513         arraylist.
19514
19515         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
19516         arraylists, use for loop with bounds.
19517
19518         The above three changes give us a 0.071 second performance
19519         improvement out of 3.294 seconds down to 3.223.  On my machine
19520         the above changes reduced the memory usage by 1,387 KB during
19521         compiler bootstrap.
19522
19523         * cs-parser.jay (QualifiedIdentifier): New class used to represent
19524         QualifiedIdentifiers.  Before we created a new string through
19525         concatenation, and mostly later on, the result would be
19526         manipulated by DecomposeQI through string manipulation.
19527
19528         This reduced the compiler memory usage for bootstrapping from
19529         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
19530         compile times in 0.05 seconds.
19531
19532 2003-11-28  Dick Porter  <dick@ximian.com>
19533
19534         * support.cs: Do string compares with the Invariant culture.
19535
19536         * rootcontext.cs: 
19537         * gen-treedump.cs: 
19538         * expression.cs: 
19539         * driver.cs: 
19540         * decl.cs: 
19541         * codegen.cs: 
19542         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
19543         the comparison is done with the Invariant culture.
19544
19545 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
19546
19547         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
19548         GetEnumerator method.
19549
19550         (ProbeCollectionType): Iterate starting at the most specific type
19551         upwards looking for a GetEnumerator
19552
19553         * expression.cs: Shift count can be up to 31 for int/uint and 63
19554         for long/ulong.
19555
19556 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
19557
19558         * statement.cs (Block.LookupLabel): Also look for the label on the
19559         children blocks.  Use a hash table to keep track of visited
19560         nodes. 
19561
19562         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
19563         we actually did transform the other operand, otherwise fall back
19564         to the common codepath that casts to long.
19565
19566         * cs-tokenizer.cs: Use the same code pattern as the int case.
19567         Maybe I should do the parsing myself, and avoid depending on the
19568         Parse routines to get this done.
19569
19570 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
19571
19572         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
19573         which fixes bug 51347.  This time test it.
19574
19575         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
19576         attributes for example can not tell the difference between these.
19577         The difference was only a syntax feature of the language. 
19578
19579         * attribute.cs: Apply attributes to delegates.
19580
19581         * delegate.cs: Call the apply attributes method.
19582
19583 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
19584
19585         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
19586         comparing 0 vs Byte.MinValue, not the value
19587
19588         (ImplicitConversionRequired): When reporting a conversion error,
19589         use error 31 to print out the constant error instead of the
19590         simpler 29.
19591
19592         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
19593         which fixes bug 51347.
19594
19595 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
19596
19597         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
19598         which fixes the -warnaserror command line option.
19599
19600 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
19601
19602         * cfold.cs (DoNumericPromotions): During constant folding of
19603         additions on UIntConstant, special case intconstants with
19604         IntConstants like we do on the expression binary operator. 
19605
19606 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
19607
19608         * convert.cs (ImplicitReferenceConversion): We were missing a case
19609         (System.Enum are not value types or class types, so we need to
19610         classify them separatedly).
19611
19612         * driver.cs: We do not support error 2007.
19613
19614 2003-11-12 Jackson Harper <jackson@ximian.com>
19615
19616         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
19617         system directory. Also use the full file name so users can
19618         libraries names mscorlib-o-tron.dll in a non system dir.
19619
19620 2003-11-10  Martin Baulig  <martin@ximian.com>
19621
19622         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
19623         (TypeManager.InitCoreTypes): Initialize them here, but instead of
19624         calling `ResolveType()' on them, directly assign their `Type'.
19625
19626 2003-11-08  Martin Baulig  <martin@ximian.com>
19627
19628         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
19629         return value and the `out parent' parameter.
19630         (TypeContainer.DefineType): Moved the CS0644 check into
19631         GetClassBases().  Don't pass the interface types to the
19632         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
19633         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
19634
19635         * ecore.cs (TypeExpr.IsAttribute): New property.
19636         (TypeExpr.GetInterfaces): New method.
19637
19638         * interface.cs (Interface.GetInterfaceTypeByName): Return a
19639         TypeExpr instead of a Type.
19640         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
19641         (Interface.DefineType): Don't pass the interface types to the
19642         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
19643         them later and then call `TypeBulider.AddInterfaceImplementation()'.
19644
19645         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
19646         instead of a `Type[]'.
19647         (TypeManager.RegisterBuilder): Likewise.
19648         (TypeManager.AddUserInterface): Likewise.
19649         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
19650         `Type[]' and also return a `TypeExpr[]'.
19651         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
19652
19653 2003-11-08  Martin Baulig  <martin@ximian.com>
19654
19655         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
19656         Expression.     
19657
19658 2003-11-08  Martin Baulig  <martin@ximian.com>
19659
19660         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
19661         TypeManager.ResolveExpressionTypes().
19662
19663         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
19664         instead of an Expression.
19665         (TypeExpr): This is now an abstract base class for `TypeExpression'.
19666         (TypeExpression): New public class; formerly known as `TypeExpr'.
19667
19668         * expression.cs (ComposedCast): Derive from TypeExpr.
19669
19670         * typemanager.cs (TypeManager.system_*_expr): These are now
19671         TypExpr's instead of Expression's.
19672         (TypeManager.ResolveExpressionTypes): New public static function;
19673         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
19674         of them.        
19675
19676 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
19677
19678         * expression.cs (New.DoResolve): Do not dereference value that
19679         might be a null return.
19680
19681         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
19682         sure that the constant value has the right type.  Fixes an
19683         unreported bug, similar to 50425.
19684
19685         * const.cs (Const.LookupConstantValue): Call
19686         ImplicitStandardConversionExists before doing a conversion to
19687         avoid havng the TypeManager.ChangeType do conversions.
19688
19689         Reduced the number of casts used
19690
19691         (Const.ChangeType): New routine to enable reuse of the constant
19692         type changing code from statement.
19693
19694         * typemanager.cs (ChangeType): Move common initialization to
19695         static global variables.
19696
19697         Fixes #50425.
19698
19699         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
19700         every value type to go through, even if it was void.  Fix that. 
19701
19702         * cs-tokenizer.cs: Use is_identifier_start_character on the start
19703         character of the define, and the is_identifier_part_character for
19704         the rest of the string.
19705
19706 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
19707
19708         * expression.cs (UnaryMutator.EmitCode): When I updated
19709         LocalVariableReference.DoResolve, I overdid it, and dropped an
19710         optimization done on local variable references.
19711
19712 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
19713
19714         * ecore.cs: Convert the return from Ldlen into an int.
19715
19716 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
19717
19718         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
19719         the accessibility, this is a special case for toplevel non-public
19720         classes (internal for instance).
19721
19722 2003-10-20  Nick Drochak <ndrochak@gol.com>
19723
19724         * ecore.cs: Fix typo and build.  Needed another right paren.
19725
19726 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
19727
19728         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
19729         `internal' case regular and protected, but not allowing protected
19730         to be evaluated later.  Bug 49840
19731
19732 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
19733
19734         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
19735         to kb.Nlast, and not the kb.nFirst to isolate the switch
19736         statement.
19737
19738         Extract the underlying type, so enumerations of long/ulong are
19739         treated like long/ulong.
19740
19741 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
19742
19743         * expression.cs (New): Overload the meaning of RequestedType to
19744         track the possible creation of the NewDelegate type, since
19745         DoResolve is invoked more than once for new constructors on field
19746         initialization.
19747
19748         See bugs: #48800 and #37014
19749
19750         * cs-parser.jay (declare_local_constants): Take an arraylist
19751         instead of a single constant.
19752
19753         (local_constant_declaration): It should take a
19754         constant_declarators, not a constant_declarator.  Fixes 49487
19755
19756         * convert.cs: Fix error report.
19757
19758 2003-10-13 Jackson Harper <jackson@ximian.com>
19759
19760         * typemanager.cs (TypeToCoreType): Add float and double this fixes
19761         bug #49611
19762
19763 2003-10-09  Martin Baulig  <martin@ximian.com>
19764
19765         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
19766         to the .ctor.
19767         (MethodCore.DoDefineParameters): Removed the TypeContainer
19768         argument; use the DeclSpace which was passed to the .ctor instead.
19769         (MethodCore.CheckParameter): Take a DeclSpace instead of a
19770         TypeContainer; we only need a DeclSpace here.
19771
19772 2003-10-09  Martin Baulig  <martin@ximian.com>
19773
19774         * class.cs (MethodData): Added additional `DeclSpace ds' argument
19775         to the .ctor.
19776         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
19777         EmitContext's .ctor.    
19778
19779 2003-10-09  Martin Baulig  <martin@ximian.com>
19780
19781         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
19782         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
19783         AsAccessible(), moved them as well.
19784
19785         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
19786
19787 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
19788
19789         * cs-parser.jay : Renamed yyName to yyNames related to jay.
19790
19791 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
19792
19793         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
19794         generation for >=, as spotted by Paolo, bug 48679.  
19795         Patch from David Waite.
19796
19797         * cs-tokenizer.cs: Add handling for #pragma.
19798
19799         * cs-parser.jay: Allow for both yield and yield return in the
19800         syntax.  The anti-cobolization of C# fight will go on!
19801
19802         * class.cs (TypeBuilder.DefineType): Catch error condition here
19803         (Parent.DefineType erroring out and returning null).
19804
19805         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
19806         coping with enumerations variables, we were mistakenly processing
19807         them as a regular value type instead of built-in types.  Fixes the
19808         bug #48063
19809
19810         * typemanager.cs (IsBuiltinOrEnum): New method.
19811
19812 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
19813
19814         * cs-parser.jay: Upgrade: yield now needs the return clause.
19815
19816 2003-09-19  Martin Baulig  <martin@ximian.com>
19817
19818         * decl.cs (MemberCache.SetupCacheForInterface): Take a
19819         `MemberCache parent' argument.  Normally, an interface doesn't
19820         have a parent type except System.Object, but we use this in gmcs
19821         for generic type parameters.
19822
19823 2003-09-18  Martin Baulig  <martin@ximian.com>
19824
19825         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
19826         on `type.IsInterface'; don't check whether the type has a parent
19827         to determine whether it's an interface.
19828
19829 2003-09-15  Martin Baulig  <martin@ximian.com>
19830
19831         * class.cs (TypeContainer.DefineType): Added an error flag to
19832         avoid reporting duplicate CS0146's ("class definition is
19833         circular.").
19834
19835         * driver.cs (Driver.MainDriver): Abort if
19836         RootContext.ResolveTree() reported any errors.
19837
19838 2003-09-07  Martin Baulig  <martin@ximian.com>
19839
19840         * report.cs (Error, Warning): Added overloaded versions which take
19841         a `params object[] args' and call String.Format().
19842
19843 2003-09-07  Martin Baulig  <martin@ximian.com>
19844
19845         * decl.cs (DeclSpace..ctor): Don't call
19846         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
19847         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
19848         (DeclSpace.RecordDecl): New method.
19849
19850         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
19851
19852 2003-09-02  Ravi Pratap  <ravi@ximian.com>
19853
19854         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
19855         value attributes to be applied to ParameterBuilders.
19856
19857         * class.cs (MethodCore.LabelParameters): Make static and more
19858         generic so that it can be used from other places - like interface
19859         methods, for instance.
19860
19861         * interface.cs (Interface.Emit): Call LabelParameters before
19862         emitting attributes on the InterfaceMethod.
19863
19864 2003-08-26  Martin Baulig  <martin@ximian.com>
19865
19866         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
19867         resolving aliases; fixes #47927.
19868
19869 2003-08-26  Martin Baulig  <martin@ximian.com>
19870
19871         * statement.cs (Using.DoResolve): This is internally emitting a
19872         try/finally clause, so we need to set ec.NeedExplicitReturn if we
19873         do not always return.  Fixes #47681.
19874
19875 2003-08-26  Martin Baulig  <martin@ximian.com>
19876
19877         * decl.cs (MemberCore): Moved WarningNotHiding(),
19878         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
19879         into MemberBase.
19880         (AdditionResult): Make this nested in DeclSpace.
19881         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
19882         argument; call NamespaceEntry.Define() unless we're nested in a
19883         class or struct.
19884
19885         * namespace.cs (Namespace.DefineName): New public function.  This
19886         is called from DeclSpace's .ctor to add 
19887         (Namespace.Lookup): Include DeclSpaces in the lookup.
19888
19889         * class.cs (Operator): Derive from MemberBase, not MemberCore.
19890
19891         * const.cs (Const): Derive from MemberBase, not MemberCore.     
19892
19893 2003-08-25  Martin Baulig  <martin@ximian.com>
19894
19895         * convert.cs (Convert.ExplicitReferenceConversion): When
19896         converting from an interface type to a class, unbox if the target
19897         type is a struct type.  Fixes #47822.
19898
19899 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19900
19901         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
19902         #47854.
19903
19904 2003-08-22  Martin Baulig  <martin@ximian.com>
19905
19906         * class.cs (TypeManager.DefineType): When defining a nested type,
19907         call DefineType() on our parent; fixes #47801.
19908
19909 2003-08-22  Martin Baulig  <martin@ximian.com>
19910
19911         * class.cs (MethodData.Define): While checking if a method is an
19912         interface implementation, improve the test a bit more to fix #47654.
19913
19914 2003-08-22  Martin Baulig  <martin@ximian.com>
19915
19916         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
19917         correctly; fixes #47722.
19918
19919 2003-08-22  Martin Baulig  <martin@ximian.com>
19920
19921         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
19922         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
19923
19924         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
19925
19926 2003-08-22  Martin Baulig  <martin@ximian.com>
19927
19928         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
19929         can only be assigned in static constructors.  Fixes #47161.
19930
19931 2003-08-22  Martin Baulig  <martin@ximian.com>
19932
19933         Rewrote and improved the flow analysis code.
19934
19935         * flowbranching.cs (FlowBranching): Make this class abstract.
19936         (FlowBranching.CreateBranching): New static function to create a
19937         new flow branching.
19938         (FlowBranchingBlock, FlowBranchingException): New classes.
19939         (FlowBranching.UsageVector.Type): New public readonly field.
19940         (FlowBranching.UsageVector.Breaks): Removed the setter.
19941         (FlowBranching.UsageVector.Returns): Removed the setter.
19942         (FlowBranching.UsageVector): Added Break(), Return(),
19943         NeverReachable() and Throw() methods to modify the reachability.
19944         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
19945         done by FlowBranching.Merge().
19946         (FlowBranching.UsageVector.MergeChild): New method; merges the
19947         merge result into the current vector.
19948         (FlowBranching.Merge): New abstract method to merge a branching.
19949
19950 2003-08-12  Martin Baulig  <martin@ximian.com>
19951
19952         * expression.cs (Indirection.CacheTemporaries): Create the
19953         LocalTemporary with the pointer type, not its element type.
19954
19955 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
19956
19957         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
19958         token was a keyword or not.
19959
19960         Add `error' options where an IDENTIFIER was expected;  Provide
19961         CheckToken and CheckIdentifierToken convenience error reporting
19962         functions. 
19963
19964         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
19965
19966         * decl.cs: Rename `NamespaceEntry Namespace' public field into
19967         NameSpaceEntry NameSpaceEntry.
19968
19969         (LookupInterfaceOrClass): Avoid creating a full qualified name
19970         from namespace and name: avoid doing lookups when we know the
19971         namespace is non-existant.   Use new Tree.LookupByNamespace which
19972         looks up DeclSpaces based on their namespace, name pair.
19973
19974         * driver.cs: Provide a new `parser verbose' to display the
19975         exception thrown during parsing.  This is turned off by default
19976         now, so the output of a failure from mcs is more graceful.
19977
19978         * namespace.cs: Track all the namespaces defined in a hashtable
19979         for quick lookup.
19980
19981         (IsNamespace): New method
19982
19983 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
19984
19985         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
19986         we know that we need to concatenate (full typename can never be
19987         null). 
19988
19989         * class.cs: ditto.
19990
19991         * statement.cs: Use a bitfield;  Do not initialize to null things
19992         which are done by the constructor by default.
19993
19994         * cs-parser.jay: bug fix, parameter was 4, not 3.
19995
19996         * expression.cs: Just use the property;
19997
19998         * statement.cs: No need for GetVariableInfo method.
19999
20000 2003-08-08  Martin Baulig  <martin@ximian.com>
20001
20002         * flowanalysis.cs (FlowReturns): This is now nested in the
20003         `FlowBranching' class.
20004         (MyBitVector): Moved this here from statement.cs.
20005         (FlowBranching.SiblingType): New enum type.
20006         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20007
20008 2003-08-07  Martin Baulig  <martin@ximian.com>
20009
20010         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20011         `FlowBranching' class and called `BranchingType'.
20012
20013 2003-08-07  Martin Baulig  <martin@ximian.com>
20014
20015         * flowanalysis.cs: Moved all the control flow analysis code into
20016         its own file.
20017
20018 2003-08-07  Martin Baulig  <martin@ximian.com>
20019
20020         * assign.cs (Assign.DoResolve): `target' must either be an
20021         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20022         #37319.
20023
20024 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20025
20026         * expression.cs (BinaryMethod): This kind of expression is created by the
20027         Binary class if it determines that the operator has to be handled
20028         by a method.
20029
20030         (BinaryDelegate): This kind of expression is created if we are
20031         dealing with a + or - operator on delegates.
20032
20033         (Binary): remove method, argumetns, and DelegateOperator: when
20034         dealing with methods, 
20035
20036         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20037
20038         * statement.cs (Block): use bitfields for the three extra booleans
20039         we had in use.   Remove unused topblock parameter.
20040
20041         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20042
20043         * assign.cs: Drop extra unneeded tests.
20044
20045 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20046
20047         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20048
20049         * statement.cs (Foreach): Use VariableStorage instead of
20050         LocalBuilders.   
20051
20052         * codegen.cs (VariableStorage): New class used by clients that
20053         require a variable stored: locals or fields for variables that
20054         need to live across yield.
20055
20056         Maybe provide a convenience api for EmitThis+EmitLoad?
20057
20058         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
20059         these bad boys.
20060
20061 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
20062
20063         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
20064         RemapParameterLValue): New methods that are used to turn a
20065         precomputed FieldInfo into an expression like this:
20066
20067                 instance.FieldInfo
20068
20069         The idea is to use this instead of making LocalVariableReference
20070         have more than one meaning.
20071
20072         * cs-parser.jay: Add error production to BASE.
20073
20074         * ecore.cs: Deal with TypeManager.GetField returning null, which
20075         is now a valid return value.
20076
20077         (FieldExprNoAddress): New expression for Fields whose address can
20078         not be taken.
20079
20080         * expression.cs (LocalVariableReference): During the resolve
20081         phases, create new expressions if we are in a remapping context.
20082         Remove code that dealt with remapping here.
20083
20084         (ParameterReference): same.
20085
20086         (ProxyInstance): New expression, like the `This' expression, but
20087         it is born fully resolved.  We know what we are doing, so remove
20088         the errors that are targeted to user-provided uses of `this'.
20089
20090         * statement.cs (Foreach): our variable is now stored as an
20091         Expression;  During resolution, follow the protocol, dont just
20092         assume it will return this.
20093
20094 2003-08-06  Martin Baulig  <martin@ximian.com>
20095
20096         * support.cs (SeekableStreamReader.cs): New public class.
20097
20098         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
20099         SeekableStreamReader instead of the normal StreamReader.
20100
20101 2003-08-04  Martin Baulig  <martin@ximian.com>
20102
20103         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
20104         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
20105         deambiguate casts and delegate invocations.
20106         (parenthesized_expression): Use the new tokens to ensure this is
20107         not a cast of method invocation.
20108
20109         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
20110         when reading a `)' and Deambiguate_CloseParens () was previously
20111         called.
20112
20113         * expression.cs (ParenthesizedExpression): New class.  This is
20114         just used for the CS0075 test.
20115         (Binary.DoResolve): Check for CS0075.   
20116
20117 2003-07-29  Ravi Pratap  <ravi@ximian.com>
20118
20119         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
20120         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
20121         reference comparison.
20122
20123         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
20124         examine the ReturnType for equality - this is necessary in the
20125         cases of implicit and explicit operators whose signature also
20126         includes the return type.
20127
20128 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
20129
20130         * namespace.cs: Cache the result of the namespace computation,
20131         instead of computing it every time.
20132
20133 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
20134
20135         * decl.cs: Use a global arraylist that we reuse over invocations
20136         to avoid excesive memory consumption.  Reduces memory usage on an
20137         mcs compile by one meg (45 average).
20138
20139         * typemanager.cs (LookupTypeReflection): In .NET pointers are
20140         private, work around that.
20141
20142 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
20143
20144         * literal.cs (IntLiteral): Define Zero and One static literals. 
20145
20146         * cs-parser.jay (integer_literal): use static literals to reduce
20147         memory usage for the most used literals (0, 1 and -1).  211kb
20148         reduced in memory usage.
20149
20150         Replace all calls to `new ArrayList' with `new
20151         ArrayList(4)' which is a good average number for most allocations,
20152         and also requires only 16 bytes of memory for its buffer by
20153         default. 
20154
20155         This reduced MCS memory usage in seven megabytes for the RSS after
20156         bootstrapping.
20157
20158 2003-07-28  Ravi Pratap  <ravi@ximian.com>
20159
20160         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
20161         handle params methods the correct way by forming only one
20162         applicable set with params and normal methods in them. Earlier we
20163         were looking at params methods only if we found no normal methods
20164         which was not the correct thing to do.
20165
20166         (Invocation.BetterFunction): Take separate arguments indicating
20167         when candidate and the best method are params methods in their
20168         expanded form.
20169
20170         This fixes bugs #43367 and #46199.
20171
20172         * attribute.cs: Documentation updates.
20173
20174         (CheckAttribute): Rename to CheckAttributeTarget.
20175         (GetValidPlaces): Rename to GetValidTargets.
20176
20177         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
20178         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
20179
20180         Fixes bug #44468.
20181
20182 2003-07-28  Martin Baulig  <martin@ximian.com>
20183
20184         * class.cs (TypeContainer.DefineMembers): Use the base type's full
20185         name when looking up the base class of a nested class.  Fixes #46977.
20186
20187 2003-07-26  Martin Baulig  <martin@ximian.com>
20188
20189         * expression.cs (Indexers.Indexer): New nested struct; contains
20190         getter, setter and the indexer's type.
20191         (Indexers.Properties): This is now an ArrayList of
20192         Indexers.Indexer's.
20193         (IndexerAccess.DoResolveLValue): Correctly set the type if the
20194         indexer doesn't have any getters.
20195
20196         * assign.cs (Assign.DoResolve): Also do the implicit conversions
20197         for embedded property and indexer assignments.
20198
20199 2003-07-26  Martin Baulig  <martin@ximian.com>
20200
20201         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
20202         preprocessor directive is not the first non-whitespace character
20203         on a line.
20204
20205 2003-07-26  Martin Baulig  <martin@ximian.com>
20206
20207         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
20208         namespace parsing, follow the spec more closely.
20209
20210         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
20211         NamespaceEntry.Lookup().
20212
20213 2003-07-25  Martin Baulig  <martin@ximian.com>
20214
20215         * MethodCore.cs (OverridesSomething): New public field; it's set
20216         from TypeContainer.DefineMembers if this method overrides
20217         something (which doesn't need to be a method).  Fix #39462.
20218
20219 2003-07-25  Ravi Pratap  <ravi@ximian.com>
20220
20221         * typemanager.cs (GetMembers): Ensure that the list of members is
20222         reversed. This keeps things in sync.
20223
20224         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
20225         find an AttributeUsage attribute.
20226
20227         * expression.cs (Invocation.OverloadResolve): Perform the check
20228         which disallows Invoke to be directly called on a Delegate.
20229
20230         (Error_InvokeOnDelegate): Report error cs1533.
20231
20232 2003-07-25  Martin Baulig  <martin@ximian.com>
20233
20234         * expression.cs (Indexers.GetIndexersForType): Only look in the
20235         interface hierarchy if the requested type is already an
20236         interface.  Fixes #46788 while keeping #46502 fixed.
20237
20238 2003-07-25  Martin Baulig  <martin@ximian.com>
20239
20240         * class.cs (TypeContainer.DefineMembers): Check whether all
20241         readonly fields have been assigned and report warning CS0649 if
20242         not.
20243
20244         * statement.cs (LocalInfo.IsFixed): Always return true if this is
20245         a valuetype.
20246
20247 2003-07-24  Ravi Pratap  <ravi@ximian.com>
20248
20249         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
20250         returned from GetMethods to make things consistent with the
20251         assumptions MCS makes about ordering of methods.
20252
20253         This should comprehensively fix bug #45127 and it does :-)
20254
20255         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
20256         ordering is actually reverse.
20257
20258         * Clean up some debug messages I left lying around.
20259
20260         * interface.cs (Populate*): Get rid of code which emits attributes
20261         since the stage in which we emit attributes is the 'Emit' stage,
20262         not the define stage.
20263
20264         (Emit): Move attribute emission for interface members here.
20265
20266 2003-07-22  Ravi Pratap  <ravi@ximian.com>
20267
20268         * expression.cs (Invocation.OverloadResolve): Follow the spec more
20269         closely: we eliminate methods in base types when we have an
20270         applicable method in a top-level type.
20271
20272         Please see section 14.5.5.1 for an exact description of what goes
20273         on. 
20274
20275         This fixes bug #45127 and a host of other related to corlib compilation.
20276
20277         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
20278         array is the method corresponding to the top-level type (this is
20279         because of the changes made to icall.c) so we change this
20280         accordingly.
20281
20282         (MethodGroupExpr.Name): This too.
20283
20284         * typemanager.cs (GetElementType): New method which does the right
20285         thing when compiling corlib. 
20286
20287         * everywhere: Make use of the above in the relevant places.
20288
20289 2003-07-22  Martin Baulig  <martin@ximian.com>
20290
20291         * cs-parser.jay (invocation_expression): Moved
20292         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
20293         `cast_expression', but create a InvocationOrCast which later
20294         resolves to either an Invocation or a Cast.
20295
20296         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
20297         method; call this before EmitStatement() to make sure that this
20298         expression can be used as a statement.
20299
20300         * expression.cs (InvocationOrCast): New class; resolves to either
20301         an Invocation or a Cast.
20302
20303         * statement.cs (StatementExpression): Call ResolveStatement() on
20304         the ExpressionStatement before emitting it.
20305
20306 2003-07-21  Martin Baulig  <martin@ximian.com>
20307
20308         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
20309         `ref' and `out' attributes match; fixes #46220.
20310         (MemberAccess.ResolveMemberAccess): You can't reference a type
20311         through an expression; fixes #33180.
20312         (Indexers.GetIndexersForType): Don't return the indexers from
20313         interfaces the class implements; fixes #46502.
20314
20315 2003-07-21  Martin Baulig  <martin@ximian.com>
20316
20317         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
20318         CS0661 checks; fixes bug #30442.
20319
20320 2003-07-21  Martin Baulig  <martin@ximian.com>
20321
20322         * decl.cs (AdditionResult): Added `Error'.
20323
20324         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
20325
20326         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
20327         makes cs0031.cs actually work.
20328
20329 2003-07-20  Martin Baulig  <martin@ximian.com>
20330
20331         * namespace.cs: Fixed that bug which caused a crash when compiling
20332         the debugger's GUI.
20333
20334 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
20335
20336         * typemanager.cs (LookupTypeReflection): Never expose types which
20337         are NotPublic, NestedPrivate, NestedAssembly, or
20338         NestedFamANDAssem.  We used to return these, and later do a check
20339         that would report a meaningful error, but the problem is that we
20340         would not get the real match, if there was a name override.
20341
20342 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
20343
20344         * namespace.cs (Namespace, Name): Do not compute the namespace
20345         name dynamically, compute it in the constructor.  This reduced
20346         memory usage by 1697 KB.
20347
20348         * driver.cs: Use --pause to pause at the end.
20349
20350 2003-07-17  Peter Williams  <peter@newton.cx>
20351
20352         * Makefile: Change the name of the test target so that it doesn't
20353         conflict with the recursive test target.
20354
20355 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
20356
20357         * expression.cs (LocalVariableReference.Emit, EmitAssign,
20358         AddressOf): Do not use EmitThis, that was wrong, use the actual
20359         this pointer.
20360
20361 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
20362
20363         * class.cs (MethodData.Define): While checking if a method is an
20364         interface implementation, improve the test: If we are not public
20365         (use new test here: use the computed MethodAttributes directly,
20366         instead of the parsed modifier flags) check if the `implementing'
20367         method comes from an interface or not.
20368
20369         * pending.cs (VerifyPendingMethods): Slightly better error
20370         message.
20371
20372         * makefile: add test target that does the mcs bootstrap.
20373
20374 2003-07-16  Ravi Pratap  <ravi@ximian.com>
20375
20376         * interface.cs (Define): Do nothing here since there are no
20377         members to populate etc. Move the attribute emission out of here
20378         since this was just totally the wrong place to put it. Attribute
20379         application happens during the 'Emit' phase, not in the 'Define'
20380         phase.
20381
20382         (Emit): Add this method and move the attribute emission here
20383
20384         * rootcontext.cs (EmitCode): Call the Emit method on interface
20385         types too.
20386
20387 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
20388
20389         * expression.cs (OverloadResolve): Report error only if Location
20390         is not 'Null' which means that there was a probe going on.
20391
20392 2003-07-14  Martin Baulig  <martin@ximian.com>
20393
20394         * expression.cs (ConditionalLogicalOperator): New public class to
20395         implement user defined conditional logical operators.
20396         This is section 14.11.2 in the spec and bug #40505.
20397
20398 2003-07-14  Martin Baulig  <martin@ximian.com>
20399
20400         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
20401
20402 2003-07-14  Martin Baulig  <martin@ximian.com>
20403
20404         * codegen.cs (EmitContext.InFixedInitializer): New public field.
20405
20406         * ecore.cs (IVariable.VerifyFixed): New interface method.
20407
20408         * expression.cs (Unary.ResolveOperator): When resolving the `&'
20409         operator, check whether the variable is actually fixed.  Fixes bug
20410         #36055.  Set a variable definitely assigned when taking its
20411         address as required by the spec.
20412
20413         * statement.cs (LocalInfo.IsFixed): New field.
20414         (LocalInfo.MakePinned): Set `IsFixed' to true.
20415
20416 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
20417
20418         * attribute.cs (Attribute.Resolve): While doing a Member lookup
20419         for .ctors, ensure that we only ask for members declared in the
20420         attribute type (BindingFlags.DeclaredOnly).
20421
20422         Fixes bug #43632.
20423
20424         * expression.cs (Error_WrongNumArguments): Report error 1501
20425         correctly the way CSC does.
20426
20427 2003-07-13  Martin Baulig  <martin@ximian.com>
20428
20429         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
20430         lookup on the fully qualified name, to make things like "X.X" work
20431         where "X.X" is a fully qualified type name, but we also have a
20432         namespace "X" in the using list.  Fixes #41975.
20433
20434 2003-07-13  Martin Baulig  <martin@ximian.com>
20435
20436         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
20437         function. If we're a CompoundAssign, we need to create an embedded
20438         CompoundAssign, not an embedded Assign.
20439         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
20440         Fixes #45854.
20441
20442 2003-07-13  Martin Baulig  <martin@ximian.com>
20443
20444         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
20445         work to fix bug #46088.
20446
20447 2003-07-13  Ravi Pratap <ravi@ximian.com>
20448
20449         * class.cs (Operator.Emit): Do not emit attributes here - it is
20450         taken care of by the Method class that we delegate too. This takes
20451         care of bug #45876.
20452
20453 2003-07-10  Martin Baulig  <martin@ximian.com>
20454
20455         * expression.cs (TypeOfVoid): New class.
20456         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
20457
20458 2003-07-10  Martin Baulig  <martin@ximian.com>
20459
20460         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
20461         bug #35957.
20462
20463 2003-07-10  Martin Baulig  <martin@ximian.com>
20464
20465         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
20466         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
20467
20468         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
20469
20470         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
20471
20472 2003-07-10  Martin Baulig  <martin@ximian.com>
20473
20474         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
20475         of decimal.  Fixes #42850.
20476
20477         NOTE: I also fixed the created byte blob, but this doesn't work on
20478         the MS runtime and csc never produces any byte blobs for decimal
20479         arrays.
20480
20481 2003-07-10  Martin Baulig  <martin@ximian.com>
20482
20483         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
20484         structs; fixes #32068.
20485         (Block.AddChildVariableNames): Fixed #44302.
20486
20487 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20488
20489         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
20490
20491 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20492
20493         * attribute.cs: And this test is onger needed.
20494
20495 2003-07-08  Martin Baulig  <martin@ximian.com>
20496
20497         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
20498         inaccessible types.  Fixes #36313.
20499
20500         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
20501
20502         * namespace.cs (NamespaceEntry): Create implicit entries for all
20503         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
20504         implicit entries for N1.N2 and N1.
20505
20506 2003-07-08  Martin Baulig  <martin@ximian.com>
20507
20508         Rewrote the handling of namespaces to fix a lot of the issues
20509         wrt. `using' aliases etc.
20510
20511         * namespace.cs (Namespace): Splitted this class into a
20512         per-assembly `Namespace' and a per-file `NamespaceEntry'.
20513
20514         * typemanager.cs (TypeManager.IsNamespace): Removed.
20515         (TypeManager.ComputeNamespaces): Only compute namespaces from
20516         loaded assemblies here, not the namespaces from the assembly we're
20517         currently compiling.
20518
20519 2003-07-08  Martin Baulig  <martin@ximian.com>
20520
20521         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
20522
20523 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20524
20525         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
20526         already fixed it.  
20527
20528         I thought about the memory savings here, but LookupTypeReflection
20529         is used under already very constrained scenarios.  Compiling
20530         corlib or mcs only exposes one hit, so it would not really reduce
20531         any memory consumption.
20532
20533 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20534
20535         * typemanager.cs: fixes bug #45889 by only adding public types from
20536         other assemblies to the list of known types.
20537
20538 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
20539
20540         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
20541         on the type we resolved.
20542
20543 2003-07-05  Martin Baulig  <martin@ximian.com>
20544
20545         * pending.cs (PendingImplementation.ParentImplements): Don't
20546         create the proxy if the parent is abstract.
20547
20548         * class.cs (TypeContainer.DefineIndexers): Process explicit
20549         interface implementations first.  Fixes #37714.
20550
20551 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
20552
20553         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
20554         defined recursively;  but since we modify the input parameters
20555         (left is set to `this' temporarily), we reset this value if the
20556         left_is_explicit is false, which gives the original semantics to
20557         the code.  
20558
20559         * literal.cs (NullPointer): new class used to represent a null
20560         literal in a pointer context.
20561
20562         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
20563         type is a pointer, use a NullPointer object instead of a
20564         NullLiteral.   Closes 43687
20565
20566         (ExplicitConversion): Convert pointer values using
20567         the conv opcode to the proper type.
20568
20569         * ecore.cs (New): change ValueTypeVariable property into a method,
20570         that returns whether the valuetype is suitable for being used.
20571
20572         * expression.cs (Binary.DoNumericPromotions): Only return if we
20573         the int constant was a valid uint, and we can return both left and
20574         right as uints.  If not, we continue processing, to trigger the
20575         type conversion.  This fixes 39018.
20576
20577         * statement.cs (Block.EmitMeta): During constant resolution, set
20578         the CurrentBlock property on the emitcontext, so that we resolve
20579         constants propertly.
20580
20581 2003-07-02  Martin Baulig  <martin@ximian.com>
20582
20583         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
20584         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
20585
20586         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
20587         than emitting it here.
20588
20589         * statement.cs: Fixed some more flow analysis bugs.
20590
20591 2003-07-02  Martin Baulig  <martin@ximian.com>
20592
20593         * class.cs (MethodData.Define): When implementing interface
20594         methods, set Final unless we're Virtual.
20595
20596         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
20597         check work for interface methods.
20598
20599 2003-07-01  Martin Baulig  <martin@ximian.com>
20600
20601         * ecore.cs (EmitContext.This): Replaced this property with a
20602         GetThis() method which takes a Location argument.  This ensures
20603         that we get the correct error location for a CS0188.
20604
20605 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
20606
20607         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
20608         ImplicitStandardConversion.
20609
20610         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
20611
20612 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
20613
20614         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
20615         optimization.
20616
20617 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
20618
20619         * class.cs (Constructor.Define): Turn off initlocals for unsafe
20620         constructors.
20621
20622         (MethodData.Define): Turn off initlocals for unsafe methods.
20623
20624 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
20625
20626         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
20627         complete;  Fixes #37521.
20628
20629         * delegate.cs: Use Modifiers.TypeAttr to compute the
20630         TypeAttributes, instead of rolling our own.  This makes the flags
20631         correct for the delegates.
20632
20633 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
20634
20635         * class.cs (Constructor.Define): Set the private flag for static
20636         constructors as well.
20637
20638         * cs-parser.jay (statement_expression): Set the return value to
20639         null, to avoid a crash when we catch an error.
20640
20641 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
20642
20643         * cs-parser.jay: Applied patch from Jackson that adds support for
20644         extern and unsafe modifiers to destructor declarations.
20645
20646         * expression.cs: Report error 21 if the user is trying to index a
20647         System.Array.
20648
20649         * driver.cs: Add an error message, suggested by the bug report.
20650
20651         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
20652         if we do not have a ": this ()" constructor initializer.  Fixes 45149
20653
20654 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
20655
20656         * namespace.cs: Add some information to reduce FAQs.
20657
20658 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
20659
20660         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
20661         underlying enumeration types.  Fixes #43915.
20662
20663         * expression.cs: Treat ushort/short as legal values to be used in
20664         bitwise operations.
20665
20666 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
20667
20668         * delegate.cs: transfer custom attributes for paramenters from
20669         the delegate declaration to Invoke and BeginInvoke.
20670
20671 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
20672
20673         * attribute.cs: handle custom marshalers and emit marshal info
20674         for fields, too.
20675
20676 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
20677
20678         * makefile.gnu: Added anonymous.cs to the compiler sources.
20679
20680 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
20681
20682         * iterators.cs: Change the name of the proxy class to include two
20683         underscores.
20684
20685         * cs-parser.jay: Update grammar to include anonymous methods.
20686
20687         * anonymous.cs: new file.
20688
20689 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
20690
20691         * class.cs (Field.Define): Add missing test for pointers and
20692         safety. 
20693
20694 2003-05-27  Ravi Pratap  <ravi@ximian.com>
20695
20696         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
20697         we use the stobj opcode.
20698
20699         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
20700         since it wasn't the correct fix. 
20701
20702         It still is puzzling that we are required to use stobj for IntPtr
20703         which seems to be a ValueType.
20704
20705 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
20706
20707         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
20708         during regular simple name resolution.   Now, the trick is that
20709         instead of returning for processing the simplename, we do a
20710         TypeManager.LookupType (ie, a rooted lookup as opposed to a
20711         contextual lookup type).   If a match is found, return that, if
20712         not, return for further composition.
20713
20714         This fixes long-standing 30485.
20715
20716         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20717         using the address to initialize an object, do an Stobj instead of
20718         using the regular Stelem.
20719
20720         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
20721         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
20722         Because if we are a BaseIndexerAccess that value will be true.
20723         Fixes 43643.
20724
20725         * statement.cs (GotoCase.Resolve): Return after reporting an
20726         error, do not attempt to continue. 
20727
20728         * expression.cs (PointerArithmetic.Emit): If our operand is a
20729         long, convert our constants to match the operand before
20730         multiplying.  Convert to I type before adding.   Fixes 43670.
20731
20732 2003-05-14  Ravi Pratap  <ravi@ximian.com>
20733
20734         * enum.cs (ImplicitConversionExists) : Rename to
20735         ImplicitEnumConversionExists to remove ambiguity. 
20736
20737         * ecore.cs (NullCast): New type of cast expression class which
20738         basically is very similar to EmptyCast with the difference being
20739         it still is a constant since it is used only to cast a null to
20740         something else
20741         (eg. (string) null)
20742
20743         * convert.cs (ImplicitReferenceConversion): When casting a null
20744         literal, we return a NullCast.
20745
20746         * literal.cs (NullLiteralTyped): Remove - I don't see why this
20747         should be around anymore.
20748
20749         The renaming (reported was slightly wrong). Corrections:
20750
20751         ConvertImplicitStandard -> ImplicitConversionStandard
20752         ConvertExplicitStandard -> ExplicitConversionStandard
20753
20754         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
20755         before passing them in !
20756
20757         * convert.cs (ImplicitConversionStandard): When comparing for
20758         equal expr and target types, ensure that expr is not a
20759         NullLiteral.
20760
20761         In general, we must not be checking (expr_type ==
20762         target_type) in the top level conversion methods
20763         (ImplicitConversion, ExplicitConversion etc). This checking is
20764         done in the methods that they delegate to.
20765
20766 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
20767
20768         * convert.cs: Move Error_CannotConvertType,
20769         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
20770         ImplicitNumericConversion, ImplicitConversionExists,
20771         ImplicitUserConversionExists, StandardConversionExists,
20772         FindMostEncompassedType, FindMostSpecificSource,
20773         FindMostSpecificTarget, ImplicitUserConversion,
20774         ExplicitUserConversion, GetConversionOperators,
20775         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
20776         TryImplicitIntConversion, Error_CannotConvertImplicit,
20777         ConvertImplicitRequired, ConvertNumericExplicit,
20778         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
20779         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
20780         its own file.
20781
20782         Perform the following renames:
20783
20784         StandardConversionExists -> ImplicitStandardConversionExists
20785         ConvertImplicit -> ImplicitConversion
20786         ConvertImplicitStandard -> ImplicitStandardConversion
20787         TryImplicitIntConversion -> ImplicitIntConversion
20788         ConvertImplicitRequired -> ImplicitConversionRequired
20789         ConvertNumericExplicit -> ExplicitNumericConversion
20790         ConvertReferenceExplicit -> ExplicitReferenceConversion
20791         ConvertExplicit -> ExplicitConversion
20792         ConvertExplicitStandard -> ExplicitStandardConversion
20793
20794 2003-05-19  Martin Baulig  <martin@ximian.com>
20795
20796         * statement.cs (TypeInfo.StructInfo): Made this type protected.
20797         (TypeInfo): Added support for structs having structs as fields.
20798
20799         * ecore.cs (FieldExpr): Implement IVariable.
20800         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
20801         VariableInfo for the field.
20802
20803 2003-05-18  Martin Baulig  <martin@ximian.com>
20804
20805         * expression.cs (This.DoResolve): Report a CS0027 if we're
20806         emitting a field initializer.
20807
20808 2003-05-18  Martin Baulig  <martin@ximian.com>
20809
20810         * expression.cs (This.ResolveBase): New public function.
20811         (This.DoResolve): Check for CS0188.
20812
20813         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
20814         This.Resolve().
20815
20816         * ecore.cs (MethodGroupExpr.DoResolve): Set the
20817         `instance_expression' to null if we don't have any non-static
20818         methods.
20819
20820 2003-05-18  Martin Baulig  <martin@ximian.com>
20821
20822         Reworked the way how local variables and parameters are handled by
20823         the flow analysis code.
20824
20825         * statement.cs (TypeInfo, VariableMap): New public classes.
20826         (VariableInfo): New public class.  This is now responsible for
20827         checking whether a variable has been assigned.  It is used for
20828         parameters and local variables.
20829         (Block.EmitMeta): Take the InternalParameters as argument; compute
20830         the layout of the flow vectors here.
20831         (Block.LocalMap, Block.ParameterMap): New public properties.
20832         (FlowBranching): The .ctor doesn't get the InternalParameters
20833         anymore since Block.EmitMeta() now computes the layout of the flow
20834         vector.
20835         (MyStructInfo): This class is now known as `StructInfo' and nested
20836         in `TypeInfo'; we don't access this directly anymore.
20837
20838         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
20839         property and removed IsAssigned(), IsFieldAssigned(),
20840         SetAssigned() and SetFieldAssigned(); we now call them on the
20841         VariableInfo so we don't need to duplicate this code everywhere.
20842
20843         * expression.cs (ParameterReference): Added `Block block' argument
20844         to the .ctor.
20845         (LocalVariableReference, ParameterReference, This): The new
20846         VariableInfo class is now responsible for all the definite
20847         assignment stuff.
20848
20849         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
20850         IsParameterAssigned, SetParameterAssigned): Removed.
20851
20852 2003-05-18  Martin Baulig  <martin@ximian.com>
20853
20854         * typemanager.cs (InitCoreTypes): Try calling
20855         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
20856         the 3-args-version.  Corlib now also needs our `void_type'.
20857         (GetMethod): Added overloaded version which takes an optional
20858         `bool report_errors' to allow lookups of optional methods.
20859
20860 2003-05-12  Martin Baulig  <martin@ximian.com>
20861
20862         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
20863         only used for locals and not for parameters.
20864
20865 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
20866
20867         * support.cs (InternalParameters.ParameterType): Return the
20868         ExternalType of the parameter.
20869
20870         * parameter.cs (Parameter.ExternalType): drop the two arguments,
20871         they were unused.
20872
20873 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
20874
20875         * class.cs (MethodData.Define): Do not set the `newslot' on
20876         interface members, if they are also flagged as "override".
20877
20878         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
20879         better code for ++i and i++.  This only works for static fields
20880         and local variables.
20881
20882         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
20883         want to pull the DeclSpace out of the builder_to_declspace instead
20884         of the TypeBuilder (like in TypeContainer.FindMembers).
20885
20886         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
20887         instead of LookupTypeContainer.  Fixes the crash on .NET for
20888         looking up interface members.
20889
20890         * const.cs: Create our own emit context during the Definition
20891         stage, so that constants are evaluated in the proper context, when
20892         a recursive definition happens.
20893
20894 2003-05-11  Martin Baulig  <martin@ximian.com>
20895
20896         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
20897         new block for a switch section.
20898         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
20899         the adding/lookup in the switch block.  Fixes #39828.
20900
20901 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
20902
20903         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
20904         functionality: I needed to convert the data after I had performed
20905         the add/sub operation into the operands type size.
20906
20907         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
20908         pass the type for the box operation, otherwise the resulting
20909         object would have been of type object.
20910
20911         (BoxedCast): Add constructor to specify the type to box as.
20912
20913 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
20914
20915         * iterators.cs: I was reusing the `count' variable inadvertently,
20916         take steps to not allow this to happen.
20917
20918 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
20919
20920         * attribute.cs (Attribute.Resolve): Params attributes are encoded
20921         by creating an array at the point where the params starts and
20922         putting all those arguments there, then adjusting the size of the
20923         array.
20924
20925 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
20926
20927         * expression.cs (New.AddressOf): Implement interface
20928         IMemoryLocation.  This is used when the `new' operator is used in
20929         the context of an invocation to a method on a value type.
20930
20931         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
20932         example. 
20933
20934         * namespace.cs: Also check the using aliases here.
20935
20936         * driver.cs: Move the test for using validity after the types have
20937         been entered, so we do a single pass that also includes the using
20938         aliases. 
20939
20940         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
20941         in the regular case.   CreateSiblingForFinally is doing extra
20942         error checking.
20943
20944         * attribute.cs (GetAttributeArgumentExpression): Store the result
20945         on an out value, and use the return value to indicate failure
20946         instead of using null (which is a valid return for Constant.GetValue).
20947
20948         * statement.cs: Perform the analysis flow for the increment
20949         portion after the statement, because this will be the real flow of
20950         execution.  Fixes #42385
20951
20952         * codegen.cs (EmitContext.EmitArgument,
20953         EmitContext.EmitStoreArgument): New helper functions when the
20954         RemapToProxy flag is set.
20955
20956         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
20957         function.
20958
20959         Add support for remapping parameters. 
20960
20961         * iterators.cs: Propagate parameter values;  Store parameter
20962         values in the proxy classes.
20963
20964 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
20965
20966         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
20967         need a proxy reference;  I do not know what I was thinking
20968
20969         * cs-parser.jay (constructor_initializer): catch another error,
20970         and display nice message.
20971
20972         (field_declaration): catch void field declaration
20973         to flag a better error. 
20974
20975         * class.cs (MemberBase.CheckBase): Report an error instead of a
20976         warning if a new protected member is declared in a struct. 
20977         (Field.Define): catch the error of readonly/volatile.
20978
20979         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
20980
20981         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
20982         volatile variable is taken
20983
20984 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
20985
20986         * statement.cs (Fixed.Resolve): Report an error if we are not in
20987         an unsafe context.
20988
20989 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
20990
20991         * typemanager.cs: reuse the code that handles type clashes for
20992         delegates and enumerations.
20993
20994         * class.cs (Report28): Always report.
20995
20996         * expression.cs (EncodeAsAttribute): Allow nulls here.
20997
20998 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
20999
21000         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21001         the functionality for testing whether an expression is valid for
21002         an attribute here.  Also handle the case of arrays of elements
21003         being stored. 
21004
21005         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21006         encoding a linear array into an array of objects that are suitable
21007         to be passed to an CustomAttributeBuilder.
21008
21009         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21010
21011         * ecore.cs: (FieldExpr): Handle field remapping here.
21012
21013         * iteratators.cs: Pass the instance variable (if the method is an
21014         instance method) to the constructors, so we can access the field
21015         variables on the class.
21016
21017         TODO: Test this with structs.  I think the THIS variable on
21018         structs might have to be a pointer, and not a refenrece
21019
21020 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21021
21022         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21023         local variables to fields in a proxy class.
21024
21025         * iterators.cs (PopulateProxy): Rename our internal fields to
21026         <XXX>.  
21027         Create a <THIS> field if we are an instance method, so we can
21028         reference our parent container variables.
21029         (MapVariable): Called back from the EmitContext code to enter a
21030         new variable to field mapping into the proxy class (we just create
21031         a FieldBuilder).
21032
21033         * expression.cs
21034         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21035         for using the remapped locals to fields.
21036
21037         I placed the code here, because that gives the same semantics to
21038         local variables, and only changes the Emit code.
21039
21040         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21041         statements inside iterators.
21042         (VariableInfo): Add a FieldBuilder for the cases when we are
21043         remapping local variables to fields in a proxy class
21044
21045         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21046         current_block != null.
21047
21048         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21049         not cope with strings, as it has been moved to the
21050         TableSwitchEmit.  Fixed bug in switch generation.
21051
21052         * expression.cs (New.DoResolve): Provide more context for the user
21053         when reporting an error.
21054
21055         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
21056         pointers. 
21057
21058         * expression.cs (MemberAccess.DoResolve): When we get a type back,
21059         check the permissions for it.  Note than in a type-resolution
21060         context the check was already present in DeclSpace.ResolveType,
21061         but was missing from the MemberAccess.
21062
21063         (ArrayCreation.CheckIndices): warn if the user has
21064         more nested levels of expressions, but there are no more
21065         dimensions specified.  Avoids crash on bug 41906.
21066
21067 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
21068
21069         * statement.cs (Block): replace Implicit bool, for a generic
21070         flags.   
21071         New flag: `Unchecked'.  This is used during the EmitMeta phase
21072         (which is out-of-line with the regular Resolve/Emit process for a
21073         statement, as this is done ahead of time, but still gets a chance
21074         to call constant resolve).
21075
21076         (Block.Flags): new enum for adding a new flag.
21077
21078         (Block.EmitMeta): track the state of unchecked.
21079
21080         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
21081         to enable constant resolution to work there as well.
21082
21083 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
21084
21085         * typemanager.cs (ienumerable_type): Also look up
21086         System.Collections.IEnumerable. 
21087
21088 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
21089
21090         TODO: Test more than one conditional per method.
21091
21092         * class.cs (Indexer.Define): Report the location where the user is
21093         referencing the unsupported feature.
21094
21095         (MethodData): Overload the use of `conditionals' to
21096         minimize the creation of needless ArrayLists.   This saves roughly
21097         212kb on my machine.
21098
21099         (Method): Implement the new IIteratorContainer interface.
21100         (Method.SetYields): Implement the method by setting the ModFlags
21101         to contain METHOD_YIELDS.
21102
21103         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
21104         which just got set to null.
21105
21106         * iterators.cs: New file.
21107
21108         (Yield, YieldBreak): New statements.
21109
21110         * statement.cs (Return.Resolve): Flag an error if we are used in
21111         an iterator method.
21112
21113         * codegen.cs (InIterator): New flag set if the code is being
21114         compiled in an iterator method.
21115
21116         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
21117         internal modifier, and we just use it to avoid adding extra
21118         fields, as this is seldom used.  
21119
21120         * cs-parser.jay: Add yield_statement (yield and yield break).
21121
21122         * driver.cs: New flag -v2 to turn on version 2 features. 
21123
21124         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
21125         hashtable when v2 is enabled.
21126
21127 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
21128
21129         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
21130         there is already a namespace defined with this name.
21131
21132         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
21133         people upgraded their corlibs.
21134
21135         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
21136         always use fully qualified types, no need to use the compiler
21137         front end.
21138
21139         (TypeManager.IsNamespace): Use binarysearch.
21140
21141         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
21142         AddDelegate): I did not quite use the new IsValid API properly: I
21143         have to pass the short-name and the fullname.  I was passing only
21144         the basename instead of the fullname sometimes. 
21145
21146         (TypeContainer.DefineType): call NamespaceClash.
21147
21148         * interface.cs (Interface.DefineType): use NamespaceClash before
21149         defining the type.
21150
21151         * delegate.cs (Delegate.DefineType): use NamespaceClash before
21152         defining the type.
21153
21154         * enum.cs: (Enum.DefineType): use NamespaceClash before
21155         defining the type.
21156
21157         * typemanager.cs (: 3-line patch that gives us some tasty 11%
21158         speed increase.  First, use the negative_hits cache when we get a
21159         negative.  Second, add the type with its full original name
21160         instead of the new . and + encoded name (reflection uses + to
21161         separate type from a nested type).  Use LookupTypeReflection
21162         directly which bypasses the type->name hashtable (that we already
21163         know does not contain the type.
21164
21165         * decl.cs (DeclSpace.ResolveTypeExpr): track the
21166         location/container type. 
21167
21168         * driver.cs: When passing utf8, use directly the UTF8Encoding.
21169
21170 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
21171
21172         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
21173
21174         * delegate.cs (NewDelegate.Resolve): Test whether an instance
21175         method is being referenced in the method group from a static
21176         context, and report error 120 if so.
21177
21178         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
21179         Error118. 
21180
21181         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
21182         is created, we create the A namespace).
21183
21184         * cs-parser.jay: A namespace also introduces a DeclarationFound.
21185         Fixes #41591
21186
21187 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
21188
21189         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
21190         invocation to ModuleBuilder.GetType with the same values will
21191         return a new type instance, so we need to cache its return
21192         values. 
21193
21194         * expression.cs (Binary.ResolveOperator): Only allow the compare
21195         operators on enums if they are of the same type.
21196
21197         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
21198         types of ValueType on their own case.  Before we were giving them
21199         the same treatment as objects.
21200
21201         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
21202         fullname.  Short name is used to compare against container name.
21203         Fullname is used to check against defined namespace names.
21204
21205         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
21206         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
21207
21208         (Method.CheckBase): Call parent.
21209         (MemberBase.CheckBase): Check for protected members on sealed
21210         classes.
21211         (PropertyBase.CheckBase): Call parent.
21212         (Field.Define): Call parent.
21213
21214         * report.cs: Negative error codes are now mapped to 8000 - code,
21215         so that the display is render more nicely.
21216
21217         * typemanager.cs: Do not use try/catch, instead report a regular
21218         error. 
21219
21220         (GetPointerType, GetReferenceType): These methods provide
21221         mechanisms to obtain the T* and T& from a T.  We had the code
21222         previously scattered around the code base, and it also used
21223         TypeManager.LookupType that would go through plenty of caches.
21224         This one goes directly to the type source.
21225
21226         In some places we did the Type.GetType followed by
21227         ModuleBuilder.GetType, but not in others, so this unifies the
21228         processing as well.
21229
21230         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
21231         statements now that we have namespace information.
21232
21233         * typemanager.cs (IsNamespace): New method, returns whether the
21234         string presented is a namespace or not.
21235
21236         (ComputeNamespaces): New public entry point, computes the list of
21237         available namespaces, using the GetNamespaces API call in Mono, or
21238         the slower version in MS.NET.   
21239
21240         Now before we start the semantic analysis phase, we have a
21241         complete list of namespaces including everything that the user has
21242         provided.
21243
21244         Deleted old code to cache namespaces in .nsc files.
21245
21246 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
21247
21248         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
21249         class/struct location definition Location for the implicit
21250         constructor location.
21251
21252         (Operator.Define): Use the location of the operator for the
21253         implicit Method definition.
21254
21255         (Constructor.Emit): use the constructor location for the implicit
21256         base initializer constructor.
21257
21258         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
21259         and the Expression class now contains two new methods:
21260
21261         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
21262         isolate type lookup from the rest of the resolution process.
21263
21264         Since we use Expressions to hold type definitions due to the way
21265         we parse the input we have historically overloaded Resolve to
21266         perform the Type lookups if a special flag is passed.  Now this is
21267         eliminated and two methods take their place. 
21268
21269         The differences in the two methods between xStep and xTerminal is
21270         that xStep is involved in our current lookup system that uses
21271         SimpleNames to compose a name, while xTerminal is used just to
21272         catch the case where the simplename lookup failed.
21273
21274 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
21275
21276         * expression.cs (ResolveMemberAccess): Remove redundant code.
21277         TypeExpr expressions are always born fully resolved.
21278
21279         * interface.cs (PopulateMethod): Do not lookup the types twice.
21280         We were doing it once during SemanticAnalysis and once during
21281         PopulateMethod.
21282
21283         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
21284         in local variable type definitions, were being returned as a
21285         SimpleName (we decomposed everything into a string), that is
21286         because primary_expression was being used instead of a type in the
21287         grammar (reduce/reduce conflicts).
21288
21289         The part that was wrong is that we converted the expression into a
21290         string (an oversimplification in one hand, compounded with primary
21291         expressions doing string concatenation).
21292
21293         So things like:
21294
21295         A.B.C [] x;
21296
21297         Would return "A.B.C[]" as a SimpleName.  This stopped things like
21298         using clauses from working on this particular context.  And a type
21299         was being matched directly against "A.B.C[]".
21300
21301         We now use the correct approach, and allow for ComposedCast to be
21302         part of the unary expression.  So the "A.B.C []" become a composed
21303         cast of "A.B.C" (as a nested group of MemberAccess with a
21304         SimpleName at the end) plus the rank composition "[]". 
21305
21306         Also fixes 35567
21307
21308 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
21309
21310         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
21311         for the access level checking.
21312
21313         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
21314         `TypeContainer container', because I kept getting confused when I
21315         was debugging this code.
21316
21317         * expression.cs (Indexers): Instead of tracking getters/setters,
21318         we now track them in parallel.  We create one arraylist less, but
21319         most importantly it is possible now for the LValue code to find a
21320         matching get for a set.
21321
21322         (IndexerAccess.DoResolveLValue): Update the code.
21323         GetIndexersForType has been modified already to extract all the
21324         indexers from a type.  The code assumed it did not.
21325
21326         Also make the code set the correct return type for the indexer.
21327         This was fixed a long time ago for properties, but was missing for
21328         indexers.  It used to be void_type.
21329
21330         (Binary.Emit): Test first for doubles instead of
21331         floats, as they are more common.
21332
21333         (Binary.EmitBranchable): Use the .un version of the branch opcodes
21334         when dealing with floats and the <=, >= operators.  This fixes bug
21335         #39314 
21336
21337         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
21338         to load the array value by emitting a load on the foreach variable
21339         type.  This was incorrect.  
21340
21341         We now emit the code to load an element using the the array
21342         variable type, and then we emit the conversion operator.
21343
21344         Fixed #40176
21345
21346 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
21347
21348         * attribute.cs: Avoid allocation of ArrayLists in the common case.
21349
21350 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
21351
21352         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
21353         test for protection before we test for signatures. 
21354
21355         (MethodSignature.ToString): implement.
21356
21357         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
21358         to the case where we reduced into a LongConstant.
21359
21360         * decl.cs (CheckAccessLevel): If the type is an array, we can not
21361         depend on whether the information is acurrate, because the
21362         Microsoft runtime will always claim that the array type is public,
21363         regardless of the real state.
21364
21365         If the type is a pointer, another problem happens: the type is
21366         reported as non-public in Microsoft.  
21367
21368         In both cases we have to call CheckAccessLevel recursively with
21369         the underlying type as the argument to be tested.
21370
21371 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
21372
21373         * assign.cs (Assign.Emit): If we are dealing with a compound
21374         assignment expression, we should use the code path that stores the
21375         intermediate result in a temporary value.  This fixes #40903.
21376
21377         *expression.cs (Indirection.ToString): Provide ToString method for
21378         debugging. 
21379
21380 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
21381
21382         * class.cs: Null out fields holding references to Block objects so
21383         they can be garbage collected.
21384
21385         * expression.cs (OverloadResolve): Remove unused local.
21386
21387 2003-04-07  Martin Baulig  <martin@ximian.com>
21388
21389         * codegen.cs (EmitContext.CurrentFile): New public field.
21390         (EmitContext.Mark): Use the CurrentFile to check whether the
21391         location is in the correct file.
21392         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
21393
21394 2003-04-07  Martin Baulig  <martin@ximian.com>
21395
21396         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
21397
21398         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
21399         location.  [FIXME: The location argument which gets passed to this
21400         method is sometimes wrong!]
21401
21402 2003-04-07  Nick Drochak <ndrochak@gol.com>
21403
21404         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
21405
21406 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
21407
21408         * expression.cs (Indirection.EmitAssign): We were using the
21409         temporary, but returning immediately instead of continuing the
21410         EmitAssing flow.
21411
21412 2003-04-06  Martin Baulig  <martin@ximian.com>
21413
21414         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
21415         if it's a nested child, but also deriving from the outer class.
21416         See test 190.cs.
21417
21418         * typemanager.cs (IsNestedChildOf): Make this work if it's a
21419         nested child, but also deriving from the outer class.  See
21420         test-190.cs.
21421         (FilterWithClosure): We may access private members of the outer
21422         class if we're a nested child and deriving from the outer class.
21423         (RealMemberLookup): Only set `closure_private_ok' if the
21424         `original_bf' contained BindingFlags.NonPublic.
21425
21426 2003-04-05  Martin Baulig  <martin@ximian.com>
21427
21428         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
21429
21430 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
21431
21432         * class.cs (Event.Define): Do not allow abstract events to have
21433         initializers. 
21434
21435 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
21436
21437         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
21438         block in event declarations.
21439
21440         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
21441         value type, get its address.
21442
21443         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
21444         leaving a class on the stack instead of a boolean value (int
21445         0/1).  Change the code so we compare against null, and then the
21446         result against zero.
21447
21448         * class.cs (TypeContainer.GetClassBases): We were checking for the
21449         parent class being sealed too late.
21450
21451         * expression.cs (Binary.Emit): For <= and >= when dealing with
21452         floating point values, use cgt.un and clt.un instead of cgt and
21453         clt alone.
21454
21455 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
21456
21457         * statement.cs: Apply the same optimization as MS: skip the 
21458         GetEnumerator returning an IEnumerator, and use the one returning a 
21459         CharEnumerator instead. This allows us to avoid the try-finally block 
21460         and the boxing.
21461
21462 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
21463
21464         * cs-parser.jay: Attributes cannot be applied to
21465                          namespaces. Fixes #40473
21466
21467 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21468
21469         * class.cs:
21470         (Add*): check if the name is valid using the full name for constants,
21471         fields, properties and events.
21472
21473 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
21474
21475         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
21476         char constants to be part of the enumeration.
21477
21478         * expression.cs (Conditional.DoResolve): Add support for operator
21479         true. Implements the missing functionality from 14.12
21480
21481         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
21482         operator true/false as required by the spec.
21483
21484         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
21485         implicit conversion to boolean.
21486
21487         * statement.cs (Statement.ResolveBoolean): A boolean expression is
21488         also one where the type implements `operator true'. 
21489
21490         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
21491         get an expression that will invoke operator true based on an
21492         expression.  
21493
21494         (GetConversionOperators): Removed the hack that called op_True
21495         here.  
21496
21497         (Expression.ResolveBoolean): Move this from Statement.
21498
21499 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
21500
21501         * ecore.cs (FieldExpr): do not allow initialization of initonly
21502         fields on derived classes
21503
21504 2003-03-13  Martin Baulig  <martin@ximian.com>
21505
21506         * statement.cs (Block.Emit): Call ig.BeginScope() and
21507         ig.EndScope() when compiling with debugging info; call
21508         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
21509
21510 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
21511
21512         * expression.cs (Indexers): Do not construct immediately, allow
21513         for new members to be appended as we go.  Fixes 38143
21514
21515 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21516
21517         * expression.cs: save/restore context when resolving an unchecked
21518         expression.
21519
21520 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
21521
21522         * cfold.cs: Catch division by zero in modulus operator during
21523         constant folding.
21524
21525 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
21526
21527         * interface.cs (Interface.DefineMembers): Avoid defining members
21528         twice. 
21529
21530 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
21531
21532         * driver.cs: handle the +/- options for -noconfig
21533
21534         * statement.cs (Unckeched.Resolve): Also track the state of
21535         unchecked in the Resolve phase.
21536
21537 2003-02-27  Martin Baulig  <martin@ximian.com>
21538
21539         * ecore.cs (Expression.MemberLookup): Don't create a
21540         MethodGroupExpr for something which is not a method.  Fixes #38291.
21541
21542 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
21543
21544         * class.cs (MemberBase.CheckParameters): Also check that the type
21545         is unmanaged if it is a pointer.
21546
21547         * expression.cs (SizeOf.Resolve): Add location information.
21548
21549         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
21550         a managed type is declared.
21551
21552         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
21553         parameter modifiers as well.  Fixes bug 38606
21554
21555         * class.cs: Very sad.  Am backing out the speed up changes
21556         introduced by the ArrayList -> Array in the TypeContainer, as they
21557         were not actually that much faster, and introduced a bug (no error
21558         reports on duplicated methods).
21559
21560         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
21561         source first, this will guarantee that we have a valid expression
21562         before calling in lower levels functions that will require a
21563         resolved object.  Then use this original_source in the
21564         target.ResolveLValue instead of the original source that was
21565         passed to us.
21566
21567         Another change.  Use target.Resolve instead of LValueResolve.
21568         Although we are resolving for LValues, we will let the Assign code
21569         take care of that (it will be called again from Resolve).  This
21570         basically allows code like this:
21571
21572         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
21573         class Y { void A (X x) { x [0] += o; }
21574
21575         The problem was that the indexer was trying to resolve for
21576         set_Item (idx, object o) and never finding one.  The real set_Item
21577         was set_Item (idx, X).  By delaying the process we get the right
21578         semantics. 
21579
21580         Fixes bug 36505
21581
21582 2003-02-23  Martin Baulig  <martin@ximian.com>
21583
21584         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
21585         while calling DoEmit ().
21586
21587         * codegen.cs (EmitContext.Mark): Don't mark locations in other
21588         source files; if you use the #line directive inside a method, the
21589         compiler stops emitting line numbers for the debugger until it
21590         reaches the end of the method or another #line directive which
21591         restores the original file.
21592
21593 2003-02-23  Martin Baulig  <martin@ximian.com>
21594
21595         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
21596
21597 2003-02-23  Martin Baulig  <martin@ximian.com>
21598
21599         * statement.cs (Block.AddChildVariableNames): We need to call this
21600         recursively, not just for our immediate children.
21601
21602 2003-02-23  Martin Baulig  <martin@ximian.com>
21603
21604         * class.cs (Event.Define): Always make the field private, like csc does.
21605
21606         * typemanager.cs (TypeManager.RealMemberLookup): Make events
21607         actually work, fixes bug #37521.
21608
21609 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
21610
21611         * delegate.cs: When creating the various temporary "Parameters"
21612         classes, make sure that we call the ComputeAndDefineParameterTypes
21613         on those new parameters (just like we do with the formal ones), to
21614         allow them to be resolved in the context of the DeclSpace.
21615
21616         This fixes the bug that Dick observed in Bugzilla #38530.
21617
21618 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
21619
21620         * expression.cs (ResolveMemberAccess): When resolving a constant,
21621         do not attempt to pull a constant if the value was not able to
21622         generate a valid constant.
21623
21624         * const.cs (LookupConstantValue): Do not report more errors than required.
21625
21626 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21627
21628         * expression.cs: fixes bug #38328.
21629
21630 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
21631
21632         * class.cs: Changed all the various members that can be part of a
21633         class from being an ArrayList to be an Array of the right type.
21634         During the DefineType type_list, interface_list, delegate_list and
21635         enum_list are turned into types, interfaces, delegates and enums
21636         arrays.  
21637
21638         And during the member population, indexer_list, event_list,
21639         constant_list, field_list, instance_constructor_list, method_list,
21640         operator_list and property_list are turned into their real arrays.
21641
21642         Although we could probably perform this operation earlier, for
21643         good error reporting we need to keep the lists and remove the
21644         lists for longer than required.
21645
21646         This optimization was triggered by Paolo profiling the compiler
21647         speed on the output of `gen-sample-program.pl' perl script. 
21648
21649         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
21650         not crash in methods like MemberLookupFailed that use this field.  
21651
21652         This problem arises when the compiler fails to resolve a type
21653         during interface type definition for example.
21654
21655 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
21656
21657         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
21658         inherit from System.Object, so we have to stop at null, not only
21659         when reaching System.Object.
21660
21661 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
21662
21663         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
21664         DeclaredOnly because the parent indexer might have had a different
21665         name, but did not loop until the top of the hierarchy was reached.
21666
21667         The problem this one fixes is 35492: when a class implemented an
21668         indexer from an interface, we were getting the interface method
21669         (which was abstract) and we were flagging an error (can not invoke
21670         abstract method).
21671
21672         This also keeps bug 33089 functioning, and test-148 functioning.
21673
21674         * typemanager.cs (IsSpecialMethod): The correct way of figuring
21675         out if a method is special is to see if it is declared in a
21676         property or event, or whether it is one of the predefined operator
21677         names.   This should fix correctly #36804.
21678
21679 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
21680
21681         The goal here is to remove the dependency on EmptyCast.Peel ().
21682         Killing it completely.
21683
21684         The problem is that currently in a number of places where
21685         constants are expected, we have to "probe" for an EmptyCast, and
21686         Peel, which is not the correct thing to do, as this will be
21687         repetitive and will likely lead to errors. 
21688
21689         The idea is to remove any EmptyCasts that are used in casts that
21690         can be reduced to constants, so we only have to cope with
21691         constants. 
21692
21693         This bug hunt was triggered by Bug 37363 and the desire to remove
21694         the duplicate pattern where we were "peeling" emptycasts to check
21695         whether they were constants.  Now constants will always be
21696         constants.
21697
21698         * ecore.cs: Use an enumconstant here instead of wrapping with
21699         EmptyCast.  
21700
21701         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
21702         throwing me off.  By handling this we can get rid of a few hacks.
21703
21704         * statement.cs (Switch): Removed Peel() code.
21705
21706 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
21707
21708         * class.cs: Location information for error 508
21709
21710         * expression.cs (New.DoResolve): Add a guard against double
21711         resolution of an expression.  
21712
21713         The New DoResolve might be called twice when initializing field
21714         expressions (see EmitFieldInitializers, the call to
21715         GetInitializerExpression will perform a resolve on the expression,
21716         and later the assign will trigger another resolution
21717
21718         This leads to bugs (#37014)
21719
21720         * delegate.cs: The signature for EndInvoke should contain any ref
21721         or out parameters as well.  We were not doing this in the past. 
21722
21723         * class.cs (Field.Define): Do not overwrite the type definition
21724         inside the `volatile' group.  Turns out that volatile enumerations
21725         were changing the type here to perform a validity test, which
21726         broke conversions. 
21727
21728 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
21729
21730         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
21731         and structs, we do not want to load the instance variable
21732
21733         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
21734         enum_type has to be handled like an object reference (implicit
21735         conversions exists from this to object), but the regular IsClass
21736         and IsValueType tests will never return true for this one.
21737
21738         Also we use TypeManager.IsValueType instead of type.IsValueType,
21739         just for consistency with the rest of the code (this is only
21740         needed if we ever use the construct exposed by test-180.cs inside
21741         corlib, which we dont today).
21742
21743 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
21744
21745         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
21746         just InternalCall.
21747
21748 2003-02-09  Martin Baulig  <martin@ximian.com>
21749
21750         * namespace.cs (Namespace..ctor): Added SourceFile argument.
21751         (Namespace.DefineNamespaces): New static public method; this is
21752         called when we're compiling with debugging to add all namespaces
21753         to the symbol file.
21754
21755         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
21756         pass it to the Namespace's .ctor.
21757
21758         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
21759         and MethodBase arguments; pass the namespace ID to the symwriter;
21760         pass the MethodBase instead of the token to the symwriter.
21761         (SymbolWriter.DefineNamespace): New method to add a namespace to
21762         the symbol file.
21763
21764 2003-02-09  Martin Baulig  <martin@ximian.com>
21765
21766         * symbolwriter.cs: New file.  This is a wrapper around
21767         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
21768         methods here in near future.
21769
21770 2003-02-09  Martin Baulig  <martin@ximian.com>
21771
21772         * codegen.cs (EmitContext.Mark): Just pass the arguments to
21773         ILGenerator.MarkSequencePoint() which are actually used by the
21774         symbol writer.
21775
21776 2003-02-09  Martin Baulig  <martin@ximian.com>
21777
21778         * location.cs (SourceFile): New public sealed class.  This
21779         contains the name and an index which is used in the location's token.
21780         (Location): Reserve an appropriate number of bits in the token for
21781         the source file instead of walking over that list, this gives us a
21782         really huge performance improvement when compiling with debugging.
21783
21784         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
21785         `SourceFile' argument instead of a string.
21786         (Driver.ProcessFile): Add all the files via Location.AddFile(),
21787         but don't parse/tokenize here, we need to generate the list of all
21788         source files before we do that.
21789         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
21790         the files.
21791
21792         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
21793         instead of a string.
21794
21795         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
21796         of a string.
21797
21798 2003-02-09  Martin Baulig  <martin@ximian.com>
21799
21800         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
21801         filename on `#line default'.
21802
21803 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
21804
21805         * statement.cs: don't clear the pinned var when the fixed statement
21806         returns from the method (fixes bug#37752).
21807
21808 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
21809
21810         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
21811         to IsValueType.
21812
21813 2003-02-07  Martin Baulig  <martin@ximian.com>
21814
21815         * driver.cs: Removed the `--debug-args' command line argument.
21816
21817         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
21818         automatically by the AsssemblyBuilder.
21819         (CodeGen.InitializeSymbolWriter): We don't need to call any
21820         initialization function on the symbol writer anymore.  This method
21821         doesn't take any arguments.
21822
21823 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
21824
21825         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
21826         from referenced assemblies as well.
21827
21828 2003-02-02  Martin Baulig  <martin@ximian.com>
21829
21830         * class.cs (MethodData.Emit): Generate debugging info for external methods.
21831
21832 2003-02-02  Martin Baulig  <martin@ximian.com>
21833
21834         * class.cs (Constructor.Emit): Open the symbol writer before
21835         emitting the constructor initializer.
21836         (ConstructorInitializer.Emit): Call ec.Mark() to allow
21837         single-stepping through constructor initializers.
21838
21839 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
21840
21841         * class.cs: Handle error 549: do not allow virtual methods in
21842         sealed classes. 
21843
21844 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
21845
21846         * decl.cs: Check access levels when resolving types
21847
21848 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
21849
21850         * statement.cs: Add parameters and locals set in catch blocks that might 
21851         return to set vector
21852
21853 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
21854
21855         * class.cs (Operator): Set the SpecialName flags for operators.
21856
21857         * expression.cs (Invocation.DoResolve): Only block calls to
21858         accessors and operators on SpecialName methods.
21859
21860         (Cast.TryReduce): Handle conversions from char constants.
21861
21862
21863 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
21864
21865         * statement.cs: small memory and time optimization in FlowBranching.
21866
21867 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
21868
21869         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
21870         problem that the last fix but in the other sid (Set).
21871
21872         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
21873         access when there is no indexer in the hierarchy.
21874
21875 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
21876
21877         * class.cs: Combine some if statements.
21878
21879 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21880
21881         * driver.cs: fixed bug #37187.
21882
21883 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
21884
21885         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
21886         any indexer, it's needed to build a list with all the indexers in the
21887         hierarchy (AllGetters), else we have problems. Fixes #35653.
21888
21889 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
21890
21891         * class.cs (MethodData.Define): It is wrong for an interface
21892         implementation to be static in both cases: explicit and implicit.
21893         We were only handling this in one case.
21894
21895         Improve the if situation there to not have negations.
21896
21897         * class.cs (Field.Define): Turns out that we do not need to check
21898         the unsafe bit on field definition, only on usage.  Remove the test.
21899
21900 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21901
21902         * driver.cs: use assembly.Location instead of Codebase (the latest
21903         patch made mcs fail when using MS assemblies).
21904
21905 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
21906
21907         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
21908         get the path to *corlib.dll.
21909
21910 2003-01-21  Nick Drochak <ndrochak@gol.com>
21911
21912         * cs-tokenizer.cs:
21913         * pending.cs:
21914         * typemanager.cs: Remove compiler warnings
21915
21916 2003-01-20  Duncan Mak  <duncan@ximian.com>
21917
21918         * AssemblyInfo.cs: Bump the version number to 0.19.
21919
21920 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21921
21922         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
21923
21924 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
21925
21926         * class.cs (Constructor::Emit): Emit debugging info for constructors.
21927
21928 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
21929
21930         * cs-parser.jay: Small fix: we were not comparing the constructor
21931         name correctly.   Thanks to Zoltan for the initial pointer.
21932
21933 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
21934
21935         * cs-tokenizer.cs: Set file name when specified with #line
21936
21937 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
21938
21939         * cs-parser.jay: Only perform the constructor checks here if we
21940         are named like the class;  This will help provider a better
21941         error.  The constructor path is taken when a type definition is
21942         not found, but most likely the user forgot to add the type, so
21943         report that rather than the constructor error.
21944
21945 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
21946
21947         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
21948         allocations.
21949
21950 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
21951
21952         * cs-parser.jay: Add cleanup call.
21953
21954 2003-01-13  Duncan Mak  <duncan@ximian.com>
21955
21956         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
21957         consistent with other methods.
21958
21959 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
21960
21961         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
21962
21963 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
21964
21965         * attribute.cs: only set GuidAttr to true when we have a
21966         GuidAttribute.
21967
21968 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21969
21970         * ecore.cs:
21971         * expression.cs:
21972         * typemanager.cs: fixes to allow mcs compile corlib with the new
21973         Type.IsSubclassOf fix.
21974
21975 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
21976
21977         * expression.cs (LocalVariableReference.DoResolve): Classify a
21978         constant as a value, not as a variable.   Also, set the type for
21979         the variable.
21980
21981         * cs-parser.jay (fixed_statement): take a type instead of a
21982         pointer_type, so we can produce a better error message later.
21983
21984         * statement.cs (Fixed.Resolve): Flag types that are not pointers
21985         as an error.  
21986
21987         (For.DoEmit): Make inifinite loops have a
21988         non-conditional branch back.
21989
21990         (Fixed.DoEmit): First populate the pinned variables, then emit the
21991         statement, then clear the variables.  Before I was emitting the
21992         code once for each fixed piece.
21993
21994
21995 2003-01-08  Martin Baulig  <martin@ximian.com>
21996
21997         * statement.cs (FlowBranching.MergeChild): A break in a
21998         SWITCH_SECTION does not leave a loop.  Fixes #36155.
21999
22000 2003-01-08  Martin Baulig  <martin@ximian.com>
22001
22002         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22003         lives in the same number space than `param_map'.  Fixes #36154.
22004
22005 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22006
22007         * cs-parser.jay (constructor_declaration): Set the
22008         Constructor.ModFlags before probing for it.  This makes the
22009         compiler report 514, 515 and 132 (the code was there, but got
22010         broken). 
22011
22012         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22013         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22014         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22015
22016 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22017
22018         * enum.cs: create the enum static fields using the enum type.
22019
22020 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22021
22022         * class.cs: don't try to create the ParamBuilder for the return
22023         type if it's not needed (and handle it breaking for the ms runtime
22024         anyway).
22025
22026 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22027
22028         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22029
22030 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22031
22032         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22033         the command.   This showed up while compiling the JANET source
22034         code, which used \r as its only newline separator.
22035
22036 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22037
22038         * class.cs (Method.Define): If we are an operator (because it
22039         reuses our code), then set the SpecialName and HideBySig.  #36128
22040
22041 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22042
22043         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22044         exception, report error 120 `object reference required'.
22045
22046         * driver.cs: Add --pause option, used during to measure the size
22047         of the process as it goes with --timestamp.
22048
22049         * expression.cs (Invocation.DoResolve): Do not allow methods with
22050         SpecialName to be invoked.
22051
22052 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22053
22054         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
22055         number before adding it.
22056
22057 2002-12-21  Ravi Pratap  <ravi@ximian.com>
22058
22059         * ecore.cs (StandardImplicitConversion): When in an unsafe
22060         context, we allow conversion between void * to any other pointer
22061         type. This fixes bug #35973.
22062
22063 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
22064
22065         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
22066         is not thrown when extensionless outputs are used 
22067
22068 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22069
22070         * rootcontext.cs: fixed compilation of corlib.
22071
22072 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
22073
22074         * attribute.cs (Attributes.Contains): Add new method.
22075
22076         * class.cs (MethodCore.LabelParameters): if the parameter is an
22077         `out' parameter, check that no attribute `[In]' has been passed.
22078
22079         * enum.cs: Handle the `value__' name in an enumeration.
22080
22081 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
22082
22083         * decl.cs: Added special case to allow overrides on "protected
22084         internal" methods
22085
22086 2002-12-18  Ravi Pratap  <ravi@ximian.com>
22087
22088         * attribute.cs (Attributes.AddAttributeSection): Rename to this
22089         since it makes much more sense.
22090
22091         (Attributes.ctor): Don't require a Location parameter.
22092
22093         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
22094
22095         * attribute.cs (ApplyAttributes): Remove extra Location parameters
22096         since we already have that information per attribute.
22097
22098         * everywhere : make appropriate changes.
22099
22100         * class.cs (LabelParameters): Write the code which actually
22101         applies attributes to the return type. We can't do this on the MS
22102         .NET runtime so we flag a warning in the case an exception is
22103         thrown.
22104
22105 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
22106
22107         * const.cs: Handle implicit null conversions here too.
22108
22109 2002-12-17  Ravi Pratap  <ravi@ximian.com>
22110
22111         * class.cs (MethodCore.LabelParameters): Remove the extra
22112         Type [] parameter since it is completely unnecessary. Instead
22113         pass in the method's attributes so that we can extract
22114         the "return" attribute.
22115
22116 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
22117
22118         * cs-parser.jay (parse): Use Report.Error to flag errors instead
22119         of ignoring it and letting the compile continue.
22120
22121         * typemanager.cs (ChangeType): use an extra argument to return an
22122         error condition instead of throwing an exception.
22123
22124 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
22125
22126         * expression.cs (Unary.TryReduce): mimic the code for the regular
22127         code path.  Perform an implicit cast in the cases where we can
22128         implicitly convert to one of the integral types, and then reduce
22129         based on that constant.   This fixes bug #35483.
22130
22131 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22132
22133         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
22134
22135 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22136
22137         * namespace.cs: fixed bug #35489.
22138
22139 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
22140
22141         * class.cs: Remove some dead code.
22142
22143         * cs-parser.jay: Estimate the number of methods needed
22144         (RootContext.MethodCount);
22145
22146         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
22147         numbers instead of StringBuilders.
22148
22149         * support.cs (PtrHashtable): Add constructor with initial size;
22150         We can now reduce reallocations of the method table.
22151
22152 2002-12-10  Ravi Pratap  <ravi@ximian.com>
22153
22154         * attribute.cs (ApplyAttributes): Keep track of the emitted
22155         attributes on a per-target basis. This fixes bug #35413.
22156
22157 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
22158
22159         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
22160         default to the Windows 1252 encoding.
22161
22162         (UnixParseOption): Support version, thanks to Alp for the missing
22163         pointer. 
22164
22165         * AssemblyInfo.cs: Add nice assembly information.
22166
22167         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
22168         (bug 35169).
22169
22170         * cs-parser.jay: Allow a trailing comma before the close bracked
22171         in the attribute_section production.
22172
22173         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
22174         address of the instance was being taken, I will take this out,
22175         because we take the address of the object immediately here.
22176
22177 2002-12-09  Ravi Pratap  <ravi@ximian.com>
22178
22179         * typemanager.cs (AreMultipleAllowed): Take care of the most
22180         obvious case where attribute type is not in the current assembly -
22181         stupid me ;-)
22182
22183 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
22184
22185         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
22186         definitions, instead of doing that afterwards.  
22187
22188         Also we use a nice little hack, depending on the constructor, we
22189         know if we are a "composed" name or a simple name.  Hence, we
22190         avoid the IndexOf test, and we avoid 
22191
22192         * codegen.cs: Add code to assist in a bug reporter to track down
22193         the source of a compiler crash. 
22194
22195 2002-12-07  Ravi Pratap  <ravi@ximian.com>
22196
22197         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
22198         types have been emitted for a given element and flag an error
22199         if something which does not have AllowMultiple set is used more
22200         than once.
22201
22202         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
22203         attribute types and their corresponding AllowMultiple properties
22204
22205         (AreMultipleAllowed): Check the property for a given type.
22206
22207         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
22208         property in the case we have a TypeContainer.
22209
22210         (Attributes.AddAttribute): Detect duplicates and just skip on
22211         adding them. This trivial fix catches a pretty gross error in our
22212         attribute emission - global attributes were being emitted twice!
22213
22214         Bugzilla bug #33187 is now fixed.
22215
22216 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
22217
22218         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
22219         instead of pp_and).
22220
22221         * expression.cs (Binary.ResolveOperator): I can only use the
22222         Concat (string, string, string) and Concat (string, string,
22223         string, string) if the child is actually a concatenation of
22224         strings. 
22225
22226 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
22227
22228         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
22229         context where we need a 2-character lookahead.
22230
22231         * pending.cs (PendingImplementation): Rework so we can keep track
22232         of interface types all the time, and flag those which were
22233         implemented by parents as optional.
22234
22235 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
22236
22237         * expression.cs (Binary.ResolveOperator): Use
22238         String.Concat(string,string,string) or
22239         String.Concat(string,string,string,string) when possible. 
22240
22241         * typemanager: More helper methods.
22242
22243
22244 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
22245
22246         * pending.cs: remove the bogus return from GetMissingInterfaces()
22247         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
22248
22249 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22250
22251         * namespace.cs: avoid duplicated 'using xxx' being added to
22252         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
22253         when we get more than one 'using' statement for the same namespace.
22254         Report a CS0105 warning for it.
22255
22256 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
22257
22258         * cs-tokenizer.cs (consume_identifier): use read directly, instead
22259         of calling getChar/putback, uses internal knowledge of it.    
22260
22261         (xtoken): Reorder tokenizer so most common patterns are checked
22262         first.  This reduces the compilation time in another 5% (from 8.11s
22263         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
22264
22265         The parsing time is 22% of the compilation in mcs, and from that
22266         64% is spent on the tokenization process.  
22267
22268         I tried using a binary search for keywords, but this is slower
22269         than the hashtable.  Another option would be to do a couple of
22270         things:
22271
22272                 * Not use a StringBuilder, instead use an array of chars,
22273                   with a set value.  Notice that this way we could catch
22274                   the 645 error without having to do it *afterwards*.
22275
22276                 * We could write a hand-parser to avoid the hashtable
22277                   compares altogether.
22278
22279         The identifier consumption process takes 37% of the tokenization
22280         time.  Another 15% is spent on is_number.  56% of the time spent
22281         on is_number is spent on Int64.Parse:
22282
22283                 * We could probably choose based on the string length to
22284                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
22285                   computations. 
22286
22287         Another 3% is spend on wrapping `xtoken' in the `token' function.
22288
22289         Handle 0xa0 as whitespace (#34752)
22290
22291 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
22292
22293         * typemanager.cs (IsCLRType): New routine to tell whether a type
22294         is one of the builtin types.  
22295
22296         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
22297         typecode in more places instead of doing pointer comparissions.
22298         We could leverage some knowledge about the way the typecodes are
22299         laid out.
22300
22301         New code to cache namespaces in assemblies, it is currently not
22302         invoked, to be used soon.
22303
22304         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
22305
22306         * expression.cs (Binary.ResolveOperator): specially handle
22307         strings, and do not perform user-defined operator overloading for
22308         built-in types.
22309
22310 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
22311
22312         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
22313         internalcall as it is a pretty simple operation;  Avoid whenever
22314         possible to call Char.IsLetter.
22315
22316         (consume_identifier): Cut by half the number of
22317         hashtable calls by merging the is_keyword and GetKeyword behavior.
22318
22319         Do not short-circuit, because if we do, we
22320         report errors (ie, #if false && true would produce an invalid
22321         directive error);
22322
22323
22324 2002-11-24  Martin Baulig  <martin@ximian.com>
22325
22326         * expression.cs (Cast.TryReduce): If we're in checked syntax,
22327         check constant ranges and report a CS0221.  Fixes #33186.
22328
22329 2002-11-24  Martin Baulig  <martin@ximian.com>
22330
22331         * cs-parser.jay: Make this work for uninitialized variable
22332         declarations in the `for' initializer.  Fixes #32416.
22333
22334 2002-11-24  Martin Baulig  <martin@ximian.com>
22335
22336         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
22337         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
22338
22339 2002-11-24  Martin Baulig  <martin@ximian.com>
22340
22341         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
22342         argument; if true, we also check for user-defined conversions.
22343         This is only needed if both arguments are of a user-defined type.
22344         Fixes #30443, added test-175.cs.
22345         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
22346
22347         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
22348
22349 2002-11-24  Martin Baulig  <martin@ximian.com>
22350
22351         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
22352         function to get the store opcode.
22353         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
22354         only emit the Ldelema if the store opcode is Stobj.  You must run
22355         both test-34 and test-167 to test this.  Fixes #34529.
22356
22357 2002-11-23  Martin Baulig  <martin@ximian.com>
22358
22359         * ecore.cs (Expression.MemberLookup): Added additional
22360         `qualifier_type' argument which is used when we're being called
22361         from MemberAccess.DoResolve() and null if we're called from a
22362         SimpleName lookup.
22363         (Expression.MemberLookupFailed): New method to report errors; this
22364         does the CS1540 check and reports the correct error message.
22365
22366         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
22367         argument for the CS1540 check and redone the way how we're dealing
22368         with private members.  See the comment in the source code for details.
22369         (FilterWithClosure): Reverted this back to revision 1.197; renamed
22370         `closure_start_type' to `closure_qualifier_type' and check whether
22371         it's not null.  It was not this filter being broken, it was just
22372         being called with the wrong arguments.
22373
22374         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
22375         and pass it the correct `qualifier_type'; this also does the error
22376         handling for us.
22377
22378 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
22379
22380         * expression.cs (Invocation.EmitParams): If the we are dealing
22381         with a non-built-in value type, load its address as well.
22382
22383         (ArrayCreation): Use a a pretty constant instead
22384         of the hardcoded value 2.   Use 6 instead of 2 for the number of
22385         static initializers.  
22386
22387         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
22388         because they are not really value types, just glorified integers. 
22389
22390         * driver.cs: Do not append .exe, the CSC compiler does not do it.
22391
22392         * ecore.cs: Remove redundant code for enumerations, make them use
22393         the same code path as everything else, fixes the casting issue
22394         with enumerations in Windows.Forms.
22395
22396         * attribute.cs: Do only cast to string if it is a string, the
22397         validation happens later.
22398
22399         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
22400         people upgrade their corlibs.
22401
22402         * ecore.cs: Oops, enumerations were not following the entire code path
22403
22404 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
22405
22406         * typemanager.cs (FilterWithClosure): Commented out the test for
22407         1540 in typemanager.cs, as it has problems when accessing
22408         protected methods from a parent class (see test-174.cs). 
22409
22410         * attribute.cs (Attribute.ValidateGuid): new method.
22411         (Attribute.Resolve): Use above.
22412
22413 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
22414
22415         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
22416
22417         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
22418         handling for enumerations, as we only needed the TypeContainer
22419         functionality to begin with (this is required for the fix below to
22420         work for enums that reference constants in a container class for
22421         example). 
22422
22423         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
22424
22425         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
22426         a valid TypeBuilder to perform lookups on.o
22427
22428         * class.cs (InheritableMemberSignatureCompare): Use true in the
22429         call to GetGetMethod and GetSetMethod, because we are comparing
22430         the signature, and we need to get the methods *even* if they are
22431         private. 
22432
22433         (PropertyBase.CheckBase): ditto.
22434
22435         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
22436         GotoCase.Resolve): Use Peel on EmpytCasts.
22437
22438         * ecore.cs (EmptyCast): drop child, add Peel method.
22439
22440 2002-11-17  Martin Baulig  <martin@ximian.com>
22441
22442         * ecore.cs (EmptyCast.Child): New public property.
22443
22444         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
22445         label resolved to an EmptyCast.  Fixes #34162.
22446         (GotoCase.Resolve): Likewise.
22447         (Block.EmitMeta): Likewise.
22448
22449 2002-11-17  Martin Baulig  <martin@ximian.com>
22450
22451         * expression.cs (Invocation.BetterConversion): Prefer int over
22452         uint; short over ushort; long over ulong for integer literals.
22453         Use ImplicitConversionExists instead of StandardConversionExists
22454         since we also need to check for user-defined implicit conversions.
22455         Fixes #34165.  Added test-173.cs.
22456
22457 2002-11-16  Martin Baulig  <martin@ximian.com>
22458
22459         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
22460         with the `true' and `false' literals.  Fixes #33151.
22461
22462 2002-11-16  Martin Baulig  <martin@ximian.com>
22463
22464         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
22465         October 22nd; don't do the cs1540 check for static members.
22466
22467         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
22468         now using our own filter here and doing the cs1540 check again.
22469
22470 2002-11-16  Martin Baulig  <martin@ximian.com>
22471
22472         * support.cs (InternalParameters): Don't crash if we don't have
22473         any fixed parameters.  Fixes #33532.
22474
22475 2002-11-16  Martin Baulig  <martin@ximian.com>
22476
22477         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
22478         when looking up static methods to make this work on Windows.
22479         Fixes #33773.
22480
22481 2002-11-16  Martin Baulig  <martin@ximian.com>
22482
22483         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
22484         a setter rather than using PropertyInfo.CanWrite.
22485
22486 2002-11-15  Nick Drochak  <ndrochak@gol.com>
22487
22488         * class.cs: Allow acces to block member by subclasses. Fixes build
22489         breaker.
22490
22491 2002-11-14  Martin Baulig  <martin@ximian.com>
22492
22493         * class.cs (Constructor.Emit): Added the extern/block check.
22494         Fixes bug #33678.
22495
22496 2002-11-14  Martin Baulig  <martin@ximian.com>
22497
22498         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
22499         iteration while looking for indexers, this is needed because the
22500         indexer may have a different name in our base classes.  Fixed the
22501         error reporting (no indexers at all, not get accessor, no
22502         overloaded match).  Fixes bug #33089.
22503         (IndexerAccess.DoResolveLValue): Likewise.
22504
22505 2002-11-14  Martin Baulig  <martin@ximian.com>
22506
22507         * class.cs (PropertyBase.CheckBase): Make this work for multiple
22508         indexers.  Fixes the first part of bug #33089.
22509         (MethodSignature.InheritableMemberSignatureCompare): Added support
22510         for properties.
22511
22512 2002-11-13  Ravi Pratap  <ravi@ximian.com>
22513
22514         * attribute.cs (Attribute.Resolve): Catch the
22515         NullReferenceException and report it since it isn't supposed to
22516         happen. 
22517
22518 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
22519
22520         * expression.cs (Binary.EmitBranchable): Also handle the cases for
22521         LogicalOr and LogicalAnd that can benefit from recursively
22522         handling EmitBranchable.  The code now should be nice for Paolo.
22523
22524 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
22525
22526         * typemanager.cs (LookupType): Added a negative-hit hashtable for
22527         the Type lookups, as we perform quite a number of lookups on
22528         non-Types.  This can be removed once we can deterministically tell
22529         whether we have a type or a namespace in advance.
22530
22531         But this might require special hacks from our corlib.
22532
22533         * TODO: updated.
22534
22535         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
22536         and double which avoids a conversion from an integer to a double.
22537
22538         * expression.cs: tiny optimization, avoid calling IsConstant,
22539         because it effectively performs the lookup twice.
22540
22541 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
22542
22543         But a bogus return here to keep the semantics of the old code
22544         until the Mono runtime is fixed.
22545
22546         * pending.cs (GetMissingInterfaces): New method used to remove all
22547         the interfaces that are already implemented by our parent
22548         classes from the list of pending methods. 
22549
22550         * interface.cs: Add checks for calls after ResolveTypeExpr.
22551
22552 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
22553
22554         * class.cs (Class.Emit): Report warning 67: event not used if the
22555         warning level is beyond 3.
22556
22557         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
22558         being a NullLiteral.
22559
22560         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
22561         specifiers. 
22562
22563         * class.cs (TypeContainer.GetClassBases): Cover a missing code
22564         path that might fail if a type can not be resolved.
22565
22566         * expression.cs (Binary.Emit): Emit unsigned versions of the
22567         operators. 
22568
22569         * driver.cs: use error 5.
22570
22571 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
22572
22573         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
22574
22575 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
22576
22577         * cs-parser.jay (switch_section): A beautiful patch from Martin
22578         Baulig that fixed 33094.
22579
22580 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
22581
22582         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
22583         Check whether the base is abstract and report an error if so.
22584
22585         * expression.cs (IndexerAccess.DoResolveLValue,
22586         IndexerAccess.DoResolve): ditto. 
22587
22588         (Invocation.DoResolve): ditto.
22589
22590         (Invocation.FullMethodDesc): Improve the report string.
22591
22592         * statement.cs (Block): Eliminate IsVariableDefined as it is
22593         basically just a wrapper for GetVariableInfo.
22594
22595         * ecore.cs (SimpleName): Use new 
22596
22597         * support.cs (ReflectionParamter.ParameterType): We unwrap the
22598         type, as we return the actual parameter ref/unref state on a
22599         different call.
22600
22601 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
22602
22603         * support.cs: Return proper flags REF/OUT fixing the previous
22604         commit.  
22605
22606         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
22607         not used to mean `ref' but `ref or out' in ParameterReference
22608
22609         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
22610         full type signature instead of calling TypeManger.CSharpName
22611         ourselves. 
22612
22613         * support.cs (InternalParameters.ParameterDesc): Do not compare
22614         directly to the modflags, because REF/OUT will actually be bitsets
22615         if set. 
22616
22617         * delegate.cs (VerifyMethod): Check also the modifiers.
22618
22619         * cs-tokenizer.cs: Fix bug where floating point values with an
22620         exponent where a sign was missing was ignored.
22621
22622         * driver.cs: Allow multiple assemblies to be specified in a single
22623         /r: argument
22624
22625 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
22626
22627         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
22628         because identifiers after a parenthesis would end up in this kind
22629         of production, and we needed to desamiguate it for having casts
22630         like:
22631
22632                 (UserDefinedType *) xxx
22633
22634 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
22635
22636         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
22637         we should set on the Bindingflags.NonPublic, but not turn on
22638         private_ok.  private_ok controls whether a Private member is
22639         returned (this is chekced on the filter routine), while the
22640         BindingFlags.NonPublic just controls whether private/protected
22641         will be allowed.   This fixes the problem part of the problem of
22642         private properties being allowed to be used in derived classes.
22643
22644         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
22645         so we can call the children DoResolveLValue method (this will
22646         properly signal errors on lvalue assignments to base properties)
22647
22648         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
22649         getter are null, and we have a property info, we know that this
22650         happened because the lookup failed, so we report an error 122 for
22651         protection level violation.
22652
22653         We also silently return if setter and getter are null in the
22654         resolve functions, this condition only happens if we have flagged
22655         the error before.  This is the other half of the problem. 
22656
22657         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
22658         not have accessibility information, that is why we were returning
22659         true in the filter function in typemanager.cs.
22660
22661         To properly report 122 (property is inaccessible because of its
22662         protection level) correctly, we report this error in ResolveAccess
22663         by failing if both the setter and the getter are lacking (ie, the
22664         lookup failed). 
22665
22666         DoResolve and DoLResolve have been modified to check for both
22667         setter/getter being null and returning silently, the reason being
22668         that I did not want to put the knowledge about this error in upper
22669         layers, like:
22670
22671         int old = Report.Errors;
22672         x = new PropertyExpr (...);
22673         if (old != Report.Errors)
22674                 return null;
22675         else
22676                 return x;
22677
22678         So the property expr is returned, but it is invalid, so the error
22679         will be flagged during the resolve process. 
22680
22681         * class.cs: Remove InheritablePropertySignatureCompare from the
22682         class, as we no longer depend on the property signature to compute
22683         whether it is possible to implement a method or not.
22684
22685         The reason is that calling PropertyInfo.GetGetMethod will return
22686         null (in .NET, in Mono it works, and we should change this), in
22687         cases where the Get Method does not exist in that particular
22688         class.
22689
22690         So this code:
22691
22692         class X { public virtual int A { get { return 1; } } }
22693         class Y : X { }
22694         class Z : Y { public override int A { get { return 2; } } }
22695
22696         Would fail in Z because the parent (Y) would not have the property
22697         defined.  So we avoid this completely now (because the alternative
22698         fix was ugly and slow), and we now depend exclusively on the
22699         method names.
22700
22701         (PropertyBase.CheckBase): Use a method-base mechanism to find our
22702         reference method, instead of using the property.
22703
22704         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
22705         routines are gone now.
22706
22707         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
22708         names, they were incorrectly named.
22709
22710         * cs-tokenizer.cs: Return are more gentle token on failure. 
22711
22712         * pending.cs (PendingImplementation.InterfaceMethod): This routine
22713         had an out-of-sync index variable, which caused it to remove from
22714         the list of pending methods the wrong method sometimes.
22715
22716 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
22717
22718         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
22719         CanWrite, because those refer to this particular instance of the
22720         property, and do not take into account the fact that we can
22721         override single members of a property.
22722
22723         Constructor requires an EmitContext.  The resolution process does
22724         not happen here, but we need to compute the accessors before,
22725         because the resolution does not always happen for properties.
22726
22727         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
22728         subclass, before we did not update this flag, but we did update
22729         bindingflags. 
22730
22731         (GetAccessors): Drop this routine, as it did not work in the
22732         presence of partially overwritten set/get methods. 
22733
22734         Notice that this broke the cs1540 detection, but that will require
22735         more thinking. 
22736
22737 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22738
22739         * class.cs:
22740         * codegen.cs:
22741         * driver.cs: issue a warning instead of an error if we don't support
22742         debugging for the platform. Also ignore a couple of errors that may
22743         arise when trying to write the symbols. Undo my previous patch.
22744
22745 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22746
22747         * driver.cs: ignore /debug switch except for Unix platforms.
22748
22749 2002-10-23  Nick Drochak  <ndrochak@gol.com>
22750
22751         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
22752
22753 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
22754
22755         * driver.cs: Do not make mcs-debug conditional, so we do not break
22756         builds that use it.
22757
22758         * statement.cs (UsageVector.MergeChildren): I would like Martin to
22759         review this patch.  But basically after all the children variables
22760         have been merged, the value of "Breaks" was not being set to
22761         new_breaks for Switch blocks.  I think that it should be set after
22762         it has executed.  Currently I set this to the value of new_breaks,
22763         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
22764         conservative, but I do not understand this code very well.
22765
22766         I did not break anything in the build, so that is good ;-)
22767
22768         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
22769
22770 2002-10-20  Mark Crichton  <crichton@gimp.org>
22771
22772         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
22773
22774 2002-10-20  Nick Drochak  <ndrochak@gol.com>
22775
22776         * cfold.cs: Fixed compile blocker.
22777
22778 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
22779
22780         * driver.cs: I was chekcing the key, not the file.
22781
22782 2002-10-19  Ravi Pratap  <ravi@ximian.com>
22783
22784         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
22785         message that we were generating - we just need to silently return
22786         a null.
22787
22788 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
22789
22790         * class.cs (Event.Define): Change my previous commit, as this
22791         breaks the debugger.  This is a temporary hack, as it seems like
22792         the compiler is generating events incorrectly to begin with.
22793
22794         * expression.cs (Binary.ResolveOperator): Added support for 
22795         "U operator - (E x, E y)"
22796
22797         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
22798         y)".
22799
22800         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
22801         init-only variables, but this path did not take into account that
22802         there might be also instance readonly variables.  Correct this
22803         problem. 
22804
22805         This fixes bug 32253
22806
22807         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
22808         delegates as well.
22809
22810         * driver.cs: Change the extension for modules to `netmodule'
22811
22812         * cs-parser.jay: Improved slightly the location tracking for
22813         the debugger symbols.
22814
22815         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
22816         modifiers that were specified instead of the hardcoded value
22817         (FamAndAssem).  This was basically ignoring the static modifier,
22818         and others.  Fixes 32429.
22819
22820         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
22821         fixed a bug in the process (32476)
22822
22823         * expression.cs (ArrayAccess.EmitAssign): Patch from
22824         hwang_rob@yahoo.ca that fixes bug 31834.3
22825
22826 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
22827
22828         * driver.cs: Make the module extension .netmodule.
22829
22830 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
22831
22832         * driver.cs: Report an error if the resource file is not found
22833         instead of crashing.
22834
22835         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
22836         false, like Emit does.
22837
22838 2002-10-16  Nick Drochak  <ndrochak@gol.com>
22839
22840         * typemanager.cs: Remove unused private member.  Also reported mcs
22841         bug to report this as a warning like csc.
22842
22843 2002-10-15  Martin Baulig  <martin@gnome.org>
22844
22845         * statement.cs (Statement.Emit): Made this a virtual method; emits
22846         the line number info and calls DoEmit().
22847         (Statement.DoEmit): New protected abstract method, formerly knows
22848         as Statement.Emit().
22849
22850         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
22851
22852 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
22853
22854         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
22855         have fixed a remaining problem: not every AddXXXX was adding a
22856         fully qualified name.  
22857
22858         Now everyone registers a fully qualified name in the DeclSpace as
22859         being defined instead of the partial name.  
22860
22861         Downsides: we are slower than we need to be due to the excess
22862         copies and the names being registered this way.  
22863
22864         The reason for this is that we currently depend (on the corlib
22865         bootstrap for instance) that types are fully qualified, because
22866         we dump all the types in the namespace, and we should really have
22867         types inserted into the proper namespace, so we can only store the
22868         basenames in the defined_names array.
22869
22870 2002-10-10  Martin Baulig  <martin@gnome.org>
22871
22872         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
22873         from bug #31834, see the bug report for a testcase which is
22874         miscompiled.
22875
22876 2002-10-10  Martin Baulig  <martin@gnome.org>
22877
22878         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
22879         flow analysis code for this.
22880
22881         * statement.cs (Do, While, For): Tell the flow analysis code about
22882         infinite loops.
22883         (FlowBranching.UsageVector): Added support for infinite loops.
22884         (Block.Resolve): Moved the dead code elimination here and use flow
22885         analysis to do it.
22886
22887 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
22888
22889         * class.cs (Field.Define): Catch cycles on struct type
22890         definitions. 
22891
22892         * typemanager.cs (IsUnmanagedtype): Do not recursively check
22893         fields if the fields are static.  We only need to check instance
22894         fields. 
22895
22896         * expression.cs (As.DoResolve): Test for reference type.
22897
22898         * statement.cs (Using.ResolveExpression): Use
22899         ConvertImplicitRequired, not ConvertImplicit which reports an
22900         error on failture
22901         (Using.ResolveLocalVariableDecls): ditto.
22902
22903         * expression.cs (Binary.ResolveOperator): Report errors in a few
22904         places where we had to.
22905
22906         * typemanager.cs (IsUnmanagedtype): Finish implementation.
22907
22908 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
22909
22910         * expression.cs: Use StoreFromPtr instead of extracting the type
22911         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
22912
22913         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
22914         an enumeration value to a System.Enum, but System.Enum is not a
22915         value type, but an class type, so we need to box.
22916
22917         (Expression.ConvertExplicit): One codepath could return
22918         errors but not flag them.  Fix this.  Fixes #31853
22919
22920         * parameter.cs (Resolve): Do not allow void as a parameter type.
22921
22922 2002-10-06  Martin Baulig  <martin@gnome.org>
22923
22924         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
22925         if it's a class type and not a struct.  Fixes #31815.
22926
22927 2002-10-06  Martin Baulig  <martin@gnome.org>
22928
22929         * statement.cs: Reworked the flow analysis code a bit to make it
22930         usable for dead code elimination.
22931
22932 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22933
22934         * cs-parser.jay: allow empty source files. Fixes bug #31781.
22935
22936 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
22937
22938         * expression.cs (ComposedCast.DoResolveType): A quick workaround
22939         to fix the test 165, will investigate deeper.
22940
22941 2002-10-04  Martin Baulig  <martin@gnome.org>
22942
22943         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
22944         finally blocks actually work.
22945         (Try.Resolve): We don't need to create a sibling for `finally' if
22946         there is no finally block.
22947
22948 2002-10-04  Martin Baulig  <martin@gnome.org>
22949
22950         * class.cs (Constructor.Define): The default accessibility for a
22951         non-default constructor is private, not public.
22952
22953 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
22954
22955         * class.cs (Constructor): Make AllowedModifiers public, add
22956         EXTERN.
22957
22958         * cs-parser.jay: Perform the modifiers test here, as the
22959         constructor for the Constructor class usually receives a zero
22960         because of the way we create it (first we create, later we
22961         customize, and we were never checking the modifiers).
22962
22963         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
22964         is a version of LookupTypeReflection that includes the type-name
22965         cache.  This can be used as a fast path for functions that know
22966         the fully qualified name and are only calling into *.GetType() to
22967         obtain a composed type.
22968
22969         This is also used by TypeManager.LookupType during its type
22970         composition.
22971
22972         (LookupType): We now also track the real type name, as sometimes
22973         we can get a quey for the real type name from things like
22974         ComposedCast.  This fixes bug 31422.
22975
22976         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
22977         complete type fullname, it does not have to go through the type
22978         resolution system to obtain the composed version of the type (for
22979         obtaining arrays or pointers).
22980
22981         (Conditional.Emit): Use the EmitBoolExpression to
22982         generate nicer code, as requested by Paolo.
22983
22984         (ArrayCreation.CheckIndices): Use the patch from
22985         hwang_rob@yahoo.ca to validate the array initializers. 
22986
22987 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
22988
22989         * class.cs (ConstructorInitializer.Emit): simplify code by using
22990         Invocation.EmitCall, and at the same time, fix the bugs in calling
22991         parent constructors that took variable arguments. 
22992
22993         * ecore.cs (Expression.ConvertNumericExplicit,
22994         Expression.ImplicitNumericConversion): Remove the code that
22995         manually wrapped decimal (InternalTypeConstructor call is now gone
22996         as well).
22997
22998         * expression.cs (Cast.TryReduce): Also handle decimal types when
22999         trying to perform a constant fold on the type.
23000
23001         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23002
23003         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23004         that only turned off an error report, and did nothing else. 
23005
23006 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23007
23008         * driver.cs: Handle and ignore /fullpaths
23009
23010 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23011
23012         * expression.cs (Binary.ResolveOperator): Catch the case where
23013         DoNumericPromotions returns true, 
23014
23015         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23016
23017 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23018
23019         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23020         report error 70.
23021
23022 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23023
23024         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23025         conversion exists, but it is also required that the conversion be
23026         performed.  This manifested in "(Type64Enum) 2".  
23027
23028         * class.cs (TypeManager.AddMethod): The fix is not to change
23029         AddEnum, because that one was using a fully qualified name (every
23030         DeclSpace derivative does), but to change the AddMethod routine
23031         that was using an un-namespaced name.  This now correctly reports
23032         the duplicated name.
23033
23034         Revert patch until I can properly fix it.  The issue
23035         is that we have a shared Type space across all namespaces
23036         currently, which is wrong.
23037
23038         Options include making the Namespace a DeclSpace, and merge
23039         current_namespace/current_container in the parser.
23040
23041 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23042
23043         * cs-parser.jay: Improve error reporting when we get a different
23044         kind of expression in local_variable_type and
23045         local_variable_pointer_type. 
23046
23047         Propagate this to avoid missleading errors being reported.
23048
23049         * ecore.cs (ImplicitReferenceConversion): treat
23050         TypeManager.value_type as a target just like object_type.   As
23051         code like this:
23052
23053         ValueType v = 1;
23054
23055         Is valid, and needs to result in the int 1 being boxed before it
23056         is assigned to the value type v.
23057
23058         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
23059         to validate the enumeration name.
23060
23061         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
23062         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
23063         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
23064
23065         * ecore.cs (TryImplicitIntConversion): When doing an
23066         implicit-enumeration-conversion, check if the type is 64-bits and
23067         perform a conversion before passing to EnumConstant.
23068
23069 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
23070
23071         * decl.cs (Error_AmbiguousTypeReference); New routine used to
23072         report ambiguous type references.  Unlike the MS version, we
23073         report what the ambiguity is.   Innovation at work ;-)
23074
23075         (DeclSpace.FindType): Require a location argument to
23076         display when we display an ambiguous error.
23077
23078         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
23079
23080         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
23081
23082         * expression.cs (EmitDynamicInitializers): Apply patch from
23083         hwang_rob@yahoo.ca that fixes the order in which we emit our
23084         initializers. 
23085
23086 2002-09-21  Martin Baulig  <martin@gnome.org>
23087
23088         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
23089         delegate takes no arguments.
23090
23091 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
23092
23093         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
23094         from integers.
23095
23096         * expression.cs: Extract the underlying type.
23097
23098         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
23099
23100         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
23101
23102 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
23103
23104         * class.cs (TypeContainer.DefineType): We can not use the nice
23105         PackingSize with the size set to 1 DefineType method, because it
23106         will not allow us to define the interfaces that the struct
23107         implements.
23108
23109         This completes the fixing of bug 27287
23110
23111         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
23112         means also structs.  This fixes part of the problem. 
23113         (Expresion.ImplicitReferenceConversionExists): ditto.
23114
23115         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
23116         error if there were no errors reported during the type lookup
23117         process, to avoid duplicates or redundant errors.  Without this
23118         you would get an ambiguous errors plus a type not found.  We have
23119         beaten the user enough with the first error.  
23120
23121         (DeclSparce.FindType): Emit a warning if we have an ambiguous
23122         reference. 
23123
23124         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
23125         during the resolution process, stop the lookup, this avoids
23126         repeated error reports (same error twice).
23127
23128         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
23129
23130         * typemanager.cs (LookupType): Redo the type lookup code to match
23131         the needs of System.Reflection.  
23132
23133         The issue is that System.Reflection requires references to nested
23134         types to begin with a "+" sign instead of a dot.  So toplevel
23135         types look like: "NameSpace.TopLevelClass", and nested ones look
23136         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
23137         levels. 
23138
23139 2002-09-19  Martin Baulig  <martin@gnome.org>
23140
23141         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
23142         says that a method always returns or always throws an exception,
23143         don't report the CS0161.
23144
23145         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
23146         set `Returns = new_returns'.
23147
23148 2002-09-19  Martin Baulig  <martin@gnome.org>
23149
23150         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
23151         to an enum constant, check for a CS0176.
23152
23153 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
23154
23155         * class.cs (TypeContainer.CheckPairedOperators): Now we check
23156         for operators that must be in pairs and report errors.
23157
23158         * ecore.cs (SimpleName.DoResolveType): During the initial type
23159         resolution process, when we define types recursively, we must
23160         check first for types in our current scope before we perform
23161         lookups in the enclosing scopes.
23162
23163         * expression.cs (MakeByteBlob): Handle Decimal blobs.
23164
23165         (Invocation.VerifyArgumentsCompat): Call
23166         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
23167         I thought we were supposed to always call this, but there are a
23168         few places in the code where we dont do it.
23169
23170 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
23171
23172         * driver.cs: Add support in -linkres and -resource to specify the
23173         name of the identifier.
23174
23175 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23176
23177         * ecore.cs (StandardConversionExists): Sync with the conversion
23178         code: allow anything-* to void* conversions.
23179
23180         (FindMostSpecificSource): Use an Expression argument
23181         instead of a Type, because we might be handed over a Literal which
23182         gets a few more implicit conversions that plain types do not.  So
23183         this information was being lost.
23184
23185         Also, we drop the temporary type-holder expression when not
23186         required.
23187
23188 2002-09-17  Martin Baulig  <martin@gnome.org>
23189
23190         * class.cs (PropertyBase.CheckBase): Don't check the base class if
23191         this is an explicit interface implementation.
23192
23193 2002-09-17  Martin Baulig  <martin@gnome.org>
23194
23195         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
23196         different `IndexerName' attributes.
23197
23198         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
23199         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
23200         virtual CommonResolve().
23201
23202 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23203
23204         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
23205         and convert that to the UnderlyingType.
23206
23207         * statement.cs (Foreach.Resolve): Indexers are just like variables
23208         or PropertyAccesses.
23209
23210         * cs-tokenizer.cs (consume_string): Track line numbers and columns
23211         inside quoted strings, we were not doing this before.
23212
23213 2002-09-16  Martin Baulig  <martin@gnome.org>
23214
23215         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
23216         resolve it.  This is needed for the definite assignment check of the
23217         instance expression, fixes bug #29846.
23218         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
23219
23220 2002-09-16  Nick Drochak  <ndrochak@gol.com>
23221
23222         * parameter.cs: Fix compile error.  Cannot reference static member
23223         from an instance object.  Is this an mcs bug?
23224
23225 2002-09-14  Martin Baulig  <martin@gnome.org>
23226
23227         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
23228         multiple times.  Fixes bug #30295, added test-166.cs.
23229
23230 2002-09-14  Martin Baulig  <martin@gnome.org>
23231
23232         * statement.cs (Block.Emit): Don't emit unreachable code.
23233         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
23234         `break' statements.
23235         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
23236
23237 2002-09-14  Martin Baulig  <martin@gnome.org>
23238
23239         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
23240         is set.
23241
23242 2002-09-14  Martin Baulig  <martin@gnome.org>
23243
23244         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
23245         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
23246         be false on the ms runtime.
23247
23248 2002-09-13  Martin Baulig  <martin@gnome.org>
23249
23250         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
23251         the CS0038 error message.
23252
23253 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
23254
23255         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
23256         constant inside, return it.
23257
23258 2002-09-12  Martin Baulig  <martin@gnome.org>
23259
23260         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
23261         implicit conversion can be done between enum types.
23262
23263         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
23264         check whether an implicit conversion to the current enum's UnderlyingType
23265         exists and report an error if not.
23266
23267         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
23268         without debugging support.
23269
23270         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
23271         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
23272
23273 2002-09-12  Martin Baulig  <martin@gnome.org>
23274
23275         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
23276
23277         * ecore.cs (IMemberExpr.DeclaringType): New property.
23278         (SimpleName.SimpleNameResolve): Check whether we're accessing a
23279         nonstatic member of an outer type (CS0038).
23280
23281 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
23282
23283         * driver.cs: Activate the using-error detector at warning level
23284         4 (at least for MS-compatible APIs).
23285
23286         * namespace.cs (VerifyUsing): Small buglett fix.
23287
23288         * pending.cs (PendingImplementation): pass the container pointer. 
23289
23290         * interface.cs (GetMethods): Allow for recursive definition.  Long
23291         term, I would like to move every type to support recursive
23292         definitions, not the current ordering mechanism that we have right
23293         now.
23294
23295         The situation is this: Attributes are handled before interfaces,
23296         so we can apply attributes to interfaces.  But some attributes
23297         implement interfaces, we will now handle the simple cases
23298         (recursive definitions will just get an error).  
23299
23300         * parameter.cs: Only invalidate types at the end if we fail to
23301         lookup all types.  
23302
23303 2002-09-09  Martin Baulig  <martin@gnome.org>
23304
23305         * ecore.cs (PropertyExpr.Emit): Also check for
23306         TypeManager.system_int_array_get_length so this'll also work when
23307         compiling corlib.  Fixes #30003.
23308
23309 2002-09-09  Martin Baulig  <martin@gnome.org>
23310
23311         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
23312         and throw an exception if we can't get the type's size.  Fixed #30040,
23313         added test-165.cs.
23314
23315 2002-09-09  Martin Baulig  <martin@gnome.org>
23316
23317         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
23318
23319         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
23320         context.  Fixes bug #30027.
23321
23322         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
23323         virtual functions.  Fixes bug #30043, added test-164.cs.
23324
23325 2002-09-08  Ravi Pratap  <ravi@ximian.com>
23326
23327         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
23328
23329 2002-09-08  Nick Drochak  <ndrochak@gol.com>
23330
23331         * driver.cs: Use an object to get the windows codepage since it's not a
23332         static property.
23333
23334 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
23335
23336         * statement.cs (For.Emit): for infinite loops (test == null)
23337         return whether there is a break inside, not always "true".
23338
23339         * namespace.cs (UsingEntry): New struct to hold the name of the
23340         using definition, the location where it is defined, and whether it
23341         has been used in a successful type lookup.
23342
23343         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
23344         strings.
23345
23346         * decl.cs: ditto.
23347
23348 2002-09-06  Ravi Pratap  <ravi@ximian.com>
23349
23350         * attribute.cs : Fix incorrect code which relied on catching
23351         a NullReferenceException to detect a null being passed in
23352         where an object was expected.
23353
23354 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
23355
23356         * statement.cs (Try): flag the catch variable as assigned
23357
23358         * expression.cs (Cast): Simplified by using ResolveType instead of
23359         manually resolving.
23360
23361         * statement.cs (Catch): Fix bug by using ResolveType.
23362
23363 2002-09-06  Ravi Pratap  <ravi@ximian.com>
23364
23365         * expression.cs (BetterConversion): Special case for when we have
23366         a NullLiteral as the argument and we have to choose between string
23367         and object types - we choose string the way csc does.
23368
23369         * attribute.cs (Attribute.Resolve): Catch the
23370         NullReferenceException and report error #182 since the Mono
23371         runtime no more has the bug and having this exception raised means
23372         we tried to select a constructor which takes an object and is
23373         passed a null.
23374
23375 2002-09-05  Ravi Pratap  <ravi@ximian.com>
23376
23377         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
23378         message (1502, 1503) when we can't locate a method after overload
23379         resolution. This is much more informative and closes the bug
23380         Miguel reported.
23381
23382         * interface.cs (PopulateMethod): Return if there are no argument
23383         types. Fixes a NullReferenceException bug.
23384
23385         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
23386         expressions too. Previously we were checking only in one place for
23387         positional arguments leaving out named arguments.
23388
23389         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
23390         type to the enum type is not allowed. Remove code corresponding to
23391         that.
23392
23393         (ConvertNumericExplicit): Allow explicit conversions from
23394         the underlying type to enum type. This precisely follows the spec
23395         and closes a bug filed by Gonzalo.
23396
23397 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23398
23399         * compiler.csproj:
23400         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
23401
23402 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
23403
23404         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
23405         it was important that we stored the right value after the
23406         reduction in `converted'.
23407
23408 2002-09-04  Martin Baulig  <martin@gnome.org>
23409
23410         * location.cs (Location.SymbolDocument): Use full pathnames for the
23411         source files.
23412
23413 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
23414
23415         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
23416         of the expression resolve mechanism, because that will catch the
23417         SimpleName error failures.
23418
23419         (Conditional): If we can not resolve the
23420         expression, return, do not crash.
23421
23422 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23423
23424         * cs-tokenizer.cs:
23425         (location): display token name instead of its number.
23426
23427 2002-08-28  Martin Baulig  <martin@gnome.org>
23428
23429         * expression.cs (Binary.ResolveOperator): Don't silently return
23430         but return an error if an operator cannot be applied between two
23431         enum types.
23432
23433 2002-08-28  Martin Baulig  <martin@gnome.org>
23434
23435         * class.cs (Constructor.Define): Set the permission attributes
23436         correctly instead of making all constructors public.
23437
23438 2002-08-28  Martin Baulig  <martin@gnome.org>
23439
23440         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
23441         for private members before reporting a CS0103; if we find anything,
23442         it's a CS0122.
23443
23444 2002-08-28  Martin Baulig  <martin@gnome.org>
23445
23446         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
23447         to check whether `closure_start_type == closure_invocation_type',
23448         we also need to check whether `m.DeclaringType == closure_invocation_type'
23449         before bypassing the permission checks.  We might be accessing
23450         protected/private members from the base class.
23451         (TypeManager.RealMemberLookup): Only set private_ok if private
23452         members were requested via BindingFlags.NonPublic.
23453
23454         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
23455
23456         * expression.cs (MemberAccess.ResolveMemberAccess): Set
23457         MethodGroupExpr.IsExplicitImpl if appropriate.
23458         (Invocation.DoResolve): Don't report the CS0120 for explicit
23459         interface implementations.
23460
23461 2002-08-27  Martin Baulig  <martin@gnome.org>
23462
23463         * expression.cs (Invocation.DoResolve): If this is a static
23464         method and we don't have an InstanceExpression, we must report
23465         a CS0120.
23466
23467 2002-08-25  Martin Baulig  <martin@gnome.org>
23468
23469         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
23470         `==' between a valuetype and an object.
23471
23472 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
23473
23474         * ecore.cs (TypeExpr): Provide a ToString method.
23475
23476 2002-08-24  Martin Baulig  <martin@gnome.org>
23477
23478         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
23479         now called proggie.dbg and it's a binary file.
23480
23481 2002-08-23  Martin Baulig  <martin@gnome.org>
23482
23483         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
23484
23485 2002-08-23  Martin Baulig  <martin@gnome.org>
23486
23487         * struct.cs (MyStructInfo.ctor): Make this work with empty
23488         structs; it's not allowed to use foreach() on null.
23489
23490 2002-08-23  Martin Baulig  <martin@gnome.org>
23491
23492         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
23493         writer the full pathname of the generated assembly.
23494
23495 2002-08-23  Martin Baulig  <martin@gnome.org>
23496
23497         * statements.cs (FlowBranching.UsageVector.MergeChildren):
23498         A `finally' block never returns or breaks; improved handling of
23499         unreachable code.
23500
23501 2002-08-23  Martin Baulig  <martin@gnome.org>
23502
23503         * statement.cs (Throw.Resolve): Allow `throw null'.
23504
23505 2002-08-23  Martin Baulig  <martin@gnome.org>
23506
23507         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
23508         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
23509         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
23510         MemberLookup would return a wrong event if this is an explicit
23511         interface implementation and the class has an event with the same
23512         name.
23513
23514 2002-08-23  Martin Baulig  <martin@gnome.org>
23515
23516         * statement.cs (Block.AddChildVariableNames): New public method.
23517         (Block.AddChildVariableName): Likewise.
23518         (Block.IsVariableNameUsedInChildBlock): Likewise.
23519         (Block.AddVariable): Check whether a variable name has already
23520         been used in a child block.
23521
23522         * cs-parser.jay (declare_local_variables): Mark all variable names
23523         from the current block as being used in a child block in the
23524         implicit block.
23525
23526 2002-08-23  Martin Baulig  <martin@gnome.org>
23527
23528         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
23529         find the symbol writer.
23530
23531         * driver.cs: csc also allows the arguments to /define being
23532         separated by commas, not only by semicolons.
23533
23534 2002-08-23  Martin Baulig  <martin@gnome.org>
23535
23536         * interface.cs (Interface.GetMembers): Added static check for events.
23537
23538 2002-08-15  Martin Baulig  <martin@gnome.org>
23539
23540         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
23541         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
23542
23543         * ecore.cs (Expression.MemberLookup): Added documentation and explained
23544         why the MethodData.EmitDestructor() change was necessary.
23545
23546 2002-08-20  Martin Baulig  <martin@gnome.org>
23547
23548         * class.cs (TypeContainer.FindMembers): Added static check for events.
23549
23550         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
23551
23552         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
23553         use Type.GetEvents(), not Type.FindMembers().
23554
23555 2002-08-20  Martin Baulig  <martin@gnome.org>
23556
23557         * decl.cs (MemberCache): Added a special method cache which will
23558         be used for method-only searched.  This ensures that a method
23559         search will return a MethodInfo with the correct ReflectedType for
23560         inherited methods.      
23561
23562 2002-08-20  Martin Baulig  <martin@gnome.org>
23563
23564         * decl.cs (DeclSpace.FindMembers): Made this public.
23565
23566 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23567
23568         * delegate.cs: fixed build on windows.
23569         [FIXME:  Filed as bug #29150: MCS must report these errors.]
23570
23571 2002-08-19  Ravi Pratap  <ravi@ximian.com>
23572
23573         * ecore.cs (StandardConversionExists): Return a false
23574         if we are trying to convert the void type to anything else
23575         since that is not allowed.
23576
23577         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
23578         we flag error 70 in the event an event is trying to be accessed
23579         directly from outside the declaring type.
23580
23581 2002-08-20  Martin Baulig  <martin@gnome.org>
23582
23583         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
23584         MemberCache from typemanager.cs to decl.cs.
23585
23586 2002-08-19  Martin Baulig  <martin@gnome.org>
23587
23588         * class.cs (TypeContainer): Implement IMemberContainer.
23589         (TypeContainer.DefineMembers): Create the MemberCache.
23590         (TypeContainer.FindMembers): Do better BindingFlags checking; only
23591         return public members if BindingFlags.Public was given, check
23592         whether members are static.
23593
23594 2002-08-16  Martin Baulig  <martin@gnome.org>
23595
23596         * decl.cs (DeclSpace.Define): Splitted this in Define and
23597         DefineMembers.  DefineMembers is called first and initializes the
23598         MemberCache.
23599
23600         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
23601         DefineMembers() on all our DeclSpaces.
23602
23603         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
23604         but call DefineMembers() on all nested interfaces.  We call their
23605         Define() in our new Define() function.
23606
23607         * interface.cs (Interface): Implement IMemberContainer.
23608         (Interface.Define): Moved all code except the attribute stuf to
23609         DefineMembers().
23610         (Interface.DefineMembers): Initialize the member cache.
23611
23612         * typemanager.cs (IMemberFinder): Removed this interface, we don't
23613         need this anymore since we can use MemberCache.FindMembers directly.
23614
23615 2002-08-19  Martin Baulig  <martin@gnome.org>
23616
23617         * typemanager.cs (MemberCache): When creating the cache for an
23618         interface type, add all inherited members.
23619         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
23620         to `out bool used_cache' and documented it.
23621         (TypeManager.MemberLookup): If we already used the cache in the first
23622         iteration, we don't need to do the interfaces check.
23623
23624 2002-08-19  Martin Baulig  <martin@gnome.org>
23625
23626         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
23627         here from IMemberFinder and don't implement this interface anymore.
23628         (DeclSpace.MemberCache): Moved here from IMemberFinder.
23629
23630         * typemanager.cs (IMemberFinder): This interface is now only used by
23631         classes which actually support the member cache.
23632         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
23633         since we only put DeclSpaces into this Hashtable.
23634         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
23635         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
23636
23637 2002-08-16  Martin Baulig  <martin@gnome.org>
23638
23639         * typemanager.cs (ICachingMemberFinder): Removed.
23640         (IMemberFinder.MemberCache): New property.
23641         (TypeManager.FindMembers): Merged this with RealFindMembers().
23642         This function will never be called from TypeManager.MemberLookup()
23643         so we can't use the cache here, just the IMemberFinder.
23644         (TypeManager.MemberLookup_FindMembers): Check whether the
23645         IMemberFinder has a MemberCache and call the cache's FindMembers
23646         function.
23647         (MemberCache): Rewrote larger parts of this yet another time and
23648         cleaned it up a bit.
23649
23650 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
23651
23652         * driver.cs (LoadArgs): Support quoting.
23653
23654         (Usage): Show the CSC-like command line arguments.
23655
23656         Improved a few error messages.
23657
23658 2002-08-15  Martin Baulig  <martin@gnome.org>
23659
23660         * typemanager.cs (IMemberContainer.Type): New property.
23661         (IMemberContainer.IsInterface): New property.
23662
23663         The following changes are conditional to BROKEN_RUNTIME, which is
23664         defined at the top of the file.
23665
23666         * typemanager.cs (MemberCache.MemberCache): Don't add the base
23667         class'es members, but add all members from TypeHandle.ObjectType
23668         if we're an interface.
23669         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
23670         is the current type.
23671         (MemberCache.CacheEntry.Container): Removed this field.
23672         (TypeHandle.GetMembers): Include inherited members.
23673
23674 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23675
23676         * typemanager.cs: fixed compilation and added a comment on a field that
23677         is never used.
23678
23679 2002-08-15  Martin Baulig  <martin@gnome.org>
23680
23681         * class.cs (ConstructorInitializer.Resolve): In the
23682         Expression.MemberLookup call, use the queried_type as
23683         invocation_type.
23684
23685         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
23686         declared' attribute, it's always true.
23687         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
23688         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
23689         temporary wrapper for FindMembers which tells MemberLookup whether
23690         members from the base classes are included in the return value.
23691         This will go away soon.
23692         (TypeManager.MemberLookup): Use this temporary hack here; once the
23693         new MemberCache is completed, we don't need to do the DeclaredOnly
23694         looping here anymore since the MemberCache will take care of this.
23695         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
23696         (MemberCache): When creating the MemberCache for a class, get
23697         members from the current class and all its base classes.
23698         (MemberCache.CacheEntry.Container): New field.  This is a
23699         temporary hack until the Mono runtime is fixed to distinguish
23700         between ReflectedType and DeclaringType.  It allows us to use MCS
23701         with both the MS runtime and the unfixed Mono runtime without
23702         problems and without accecting performance.
23703         (MemberCache.SearchMembers): The DeclaredOnly looping from
23704         TypeManager.MemberLookup is now done here.      
23705
23706 2002-08-14  Martin Baulig  <martin@gnome.org>
23707
23708         * statement.cs (MyStructInfo.MyStructInfo): Don't call
23709         Type.GetFields on dynamic types but get the fields from the
23710         corresponding TypeContainer.
23711         (MyStructInfo.GetStructInfo): Added check for enum types.
23712
23713         * typemanager.cs (MemberList.IsSynchronized): Implemented.
23714         (MemberList.SyncRoot): Implemented.
23715         (TypeManager.FilterWithClosure): No need to check permissions if
23716         closure_start_type == closure_invocation_type, don't crash if
23717         closure_invocation_type is null.
23718
23719 2002-08-13  Martin Baulig  <martin@gnome.org>
23720
23721         Rewrote TypeContainer.FindMembers to use a member cache.  This
23722         gives us a speed increase of about 35% for the self-hosting MCS
23723         build and of about 15-20% for the class libs (both on GNU/Linux).
23724
23725         * report.cs (Timer): New class to get enhanced profiling.  This
23726         whole class is "TIMER" conditional since it remarkably slows down
23727         compilation speed.
23728
23729         * class.cs (MemberList): New class.  This is an IList wrapper
23730         which we're now using instead of passing MemberInfo[]'s around to
23731         avoid copying this array unnecessarily.
23732         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
23733         (ICachingMemberFinder, IMemberContainer): New interface.
23734         (TypeManager.FilterWithClosure): If `criteria' is null, the name
23735         has already been checked, otherwise use it for the name comparision.
23736         (TypeManager.FindMembers): Renamed to RealMemberFinder and
23737         provided wrapper which tries to use ICachingMemberFinder.FindMembers
23738         if possible.  Returns a MemberList, not a MemberInfo [].
23739         (TypeHandle): New class, implements IMemberContainer.  We create
23740         one instance of this class per type, it contains a MemberCache
23741         which is used to do the member lookups.
23742         (MemberCache): New class.  Each instance of this class contains
23743         all members of a type and a name-based hash table.
23744         (MemberCache.FindMembers): This is our new member lookup
23745         function.  First, it looks up all members of the requested name in
23746         the hash table.  Then, it walks this list and sorts out all
23747         applicable members and returns them.
23748
23749 2002-08-13  Martin Baulig  <martin@gnome.org>
23750
23751         In addition to a nice code cleanup, this gives us a performance
23752         increase of about 1.4% on GNU/Linux - not much, but it's already
23753         half a second for the self-hosting MCS compilation.
23754
23755         * typemanager.cs (IMemberFinder): New interface.  It is used by
23756         TypeManager.FindMembers to call FindMembers on a TypeContainer,
23757         Enum, Delegate or Interface.
23758         (TypeManager.finder_to_member_finder): New PtrHashtable.
23759         (TypeManager.finder_to_container): Removed.
23760         (TypeManager.finder_to_delegate): Removed.
23761         (TypeManager.finder_to_interface): Removed.
23762         (TypeManager.finder_to_enum): Removed.
23763
23764         * interface.cs (Interface): Implement IMemberFinder.
23765
23766         * delegate.cs (Delegate): Implement IMemberFinder.
23767
23768         * enum.cs (Enum): Implement IMemberFinder.
23769
23770         * class.cs (TypeContainer): Implement IMemberFinder.
23771
23772 2002-08-12  Martin Baulig  <martin@gnome.org>
23773
23774         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
23775
23776 2002-08-12  Martin Baulig  <martin@gnome.org>
23777
23778         * ecore.cs (ITypeExpression): New interface for expressions which
23779         resolve to a type.
23780         (TypeExpression): Renamed to TypeLookupExpression.
23781         (Expression.DoResolve): If we're doing a types-only lookup, the
23782         expression must implement the ITypeExpression interface and we
23783         call DoResolveType() on it.
23784         (SimpleName): Implement the new ITypeExpression interface.
23785         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
23786         hack, the situation that we're only looking up types can't happen
23787         anymore when this method is called.  Moved the type lookup code to
23788         DoResolveType() and call it.
23789         (SimpleName.DoResolveType): This ITypeExpression interface method
23790         is now doing the types-only lookup.
23791         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
23792         (ResolveFlags): Added MaskExprClass.
23793
23794         * expression.cs (MemberAccess): Implement the ITypeExpression
23795         interface.
23796         (MemberAccess.DoResolve): Added support for a types-only lookup
23797         when we're called via ITypeExpression.DoResolveType().
23798         (ComposedCast): Implement the ITypeExpression interface.
23799
23800         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
23801         Expression.Resolve() with ResolveFlags.Type instead.
23802
23803 2002-08-12  Martin Baulig  <martin@gnome.org>
23804
23805         * interface.cs (Interface.Define): Apply attributes.
23806
23807         * attribute.cs (Attribute.ApplyAttributes): Added support for
23808         interface attributes.
23809
23810 2002-08-11  Martin Baulig  <martin@gnome.org>
23811
23812         * statement.cs (Block.Emit): Only check the "this" variable if we
23813         do not always throw an exception.
23814
23815         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
23816         whether the property has a set accessor.
23817
23818 2002-08-11  Martin Baulig  <martin@gnome.org>
23819
23820         Added control flow analysis support for structs.
23821
23822         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
23823         with control flow analysis turned off.
23824         (IVariable): New interface.
23825         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
23826         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
23827         (FieldExpr.DoResolve): Resolve the instance expression with flow
23828         analysis turned off and do the definite assignment check after the
23829         resolving when we know what the expression will resolve to.
23830
23831         * expression.cs (LocalVariableReference, ParameterReference):
23832         Implement the new IVariable interface, only call the flow analysis
23833         code if ec.DoFlowAnalysis is true.
23834         (This): Added constructor which takes a Block argument.  Implement
23835         the new IVariable interface.
23836         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
23837         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
23838         This does the definite assignment checks for struct members.
23839
23840         * class.cs (Constructor.Emit): If this is a non-static `struct'
23841         constructor which doesn't have any initializer, call
23842         Block.AddThisVariable() to tell the flow analysis code that all
23843         struct elements must be initialized before control returns from
23844         the constructor.
23845
23846         * statement.cs (MyStructInfo): New public class.
23847         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
23848         argument to this indexer.  If non-zero, check an individual struct
23849         member, not the whole struct.
23850         (FlowBranching.CheckOutParameters): Check struct members.
23851         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
23852         overloaded versions of these methods which take an additional
23853         `int field_idx' argument to check struct members.
23854         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
23855         overloaded versions of these methods which take an additional
23856         `string field_name' argument to check struct member.s
23857         (VariableInfo): Implement the IVariable interface.
23858         (VariableInfo.StructInfo): New public property.  Returns the
23859         MyStructInfo instance of the variable if it's a struct or null.
23860         (Block.AddThisVariable): New public method.  This is called from
23861         Constructor.Emit() for non-static `struct' constructor which do
23862         not have any initializer.  It creates a special variable for the
23863         "this" instance variable which will be checked by the flow
23864         analysis code to ensure that all of the struct's fields are
23865         initialized before control returns from the constructor.
23866         (UsageVector): Added support for struct members.  If a
23867         variable/parameter is a struct with N members, we reserve a slot
23868         in the usage vector for each member.  A struct is considered fully
23869         initialized if either the struct itself (slot 0) or all its
23870         members are initialized.
23871
23872 2002-08-08  Martin Baulig  <martin@gnome.org>
23873
23874         * driver.cs (Driver.MainDriver): Only report an error CS5001
23875         if there were no compilation errors.
23876
23877         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
23878         `UnsafeContext' property to determine whether the parent is in
23879         unsafe context rather than checking the parent's ModFlags:
23880         classes nested in an unsafe class are unsafe as well.
23881
23882 2002-08-08  Martin Baulig  <martin@gnome.org>
23883
23884         * statement.cs (UsageVector.MergeChildren): Distinguish between
23885         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
23886         we return.  Added test17() and test18() to test-154.cs.
23887
23888 2002-08-08  Martin Baulig  <martin@gnome.org>
23889
23890         * typemanager.cs (TypeManager.FilterWithClosure): If we have
23891         Family access, make sure the invoking type isn't a subclass of the
23892         queried type (that'd be a CS1540).
23893
23894         * ecore.cs (Expression.MemberLookup): Added overloaded version of
23895         this method which takes an additional `Type invocation_type'.
23896
23897         * expression.cs (BaseAccess.DoResolve): Use the base type as
23898         invocation and query type.
23899         (MemberAccess.DoResolve): If the lookup failed and we're about to
23900         report a CS0122, try a lookup with the ec.ContainerType - if this
23901         succeeds, we must report a CS1540.
23902
23903 2002-08-08  Martin Baulig  <martin@gnome.org>
23904
23905         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
23906         (MethodGroupExpr): Implement the IMemberExpr interface.
23907
23908         * expression (MemberAccess.ResolveMemberAccess): No need to have
23909         any special code for MethodGroupExprs anymore, they're now
23910         IMemberExprs.   
23911
23912 2002-08-08  Martin Baulig  <martin@gnome.org>
23913
23914         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
23915         Family, FamANDAssem and FamORAssem permissions.
23916         (TypeManager.IsSubclassOrNestedChildOf): New public method.
23917
23918 2002-08-08  Martin Baulig  <martin@gnome.org>
23919
23920         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
23921         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
23922         or loop block.
23923
23924 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
23925
23926         * driver.cs: implemented /resource option to embed managed resources.
23927
23928 2002-08-07  Martin Baulig  <martin@gnome.org>
23929
23930         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
23931         (FieldBase.HasFieldInitializer): New public property.
23932         (FieldBase.GetInitializerExpression): New public method.  Resolves and
23933         returns the field initializer and makes sure it is only resolved once.
23934         (TypeContainer.EmitFieldInitializers): Call
23935         FieldBase.GetInitializerExpression to get the initializer, this ensures
23936         that it isn't resolved multiple times.
23937
23938         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
23939         the resolving process (SimpleName/MemberLookup) that we're currently
23940         emitting a field initializer (which must not access any instance members,
23941         this is an error CS0236).
23942
23943         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
23944         argument, if the `IsFieldInitializer' flag is set, we must report and
23945         error CS0236 and not an error CS0120.   
23946
23947 2002-08-07  Martin Baulig  <martin@gnome.org>
23948
23949         * ecore.cs (IMemberExpr): New public interface.
23950         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
23951         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
23952         if the expression is an IMemberExpr.
23953
23954         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
23955         to be null, implicitly default to `this' if we're non-static in
23956         this case.  Simplified the code a lot by using the new IMemberExpr
23957         interface.  Also fixed bug #28176 here.
23958
23959 2002-08-06  Martin Baulig  <martin@gnome.org>
23960
23961         * cs-parser.jay (SimpleLookup): Removed.  We need to create
23962         ParameterReferences during semantic analysis so that we can do a
23963         type-only search when resolving Cast, TypeOf and SizeOf.
23964         (block): Pass the `current_local_parameters' to the Block's
23965         constructor.
23966
23967         * class.cs (ConstructorInitializer): Added `Parameters parameters'
23968         argument to the constructor.
23969         (ConstructorInitializer.Resolve): Create a temporary implicit
23970         block with the parameters.
23971
23972         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
23973         references here if we aren't doing a type-only search.
23974
23975         * statement.cs (Block): Added constructor which takes a
23976         `Parameters parameters' argument.
23977         (Block.Parameters): New public property.
23978
23979         * support.cs (InternalParameters.Parameters): Renamed `parameters'
23980         to `Parameters' and made it public readonly.
23981
23982 2002-08-06  Martin Baulig  <martin@gnome.org>
23983
23984         * ecore.cs (Expression.Warning): Made this public as well.
23985
23986         * report.cs (Report.Debug): Print the contents of collections.
23987
23988 2002-08-06  Martin Baulig  <martin@gnome.org>
23989
23990         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
23991         used to tell Resolve() which kinds of expressions it may return.
23992         (Expression.Resolve): Added overloaded version of this method which
23993         takes a `ResolveFlags flags' argument.  This can be used to tell
23994         Resolve() which kinds of expressions it may return.  Reports a
23995         CS0118 on error.
23996         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
23997         ResolveFlags.SimpleName.
23998         (Expression.Error118): Added overloaded version of this method which
23999         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24000         which kinds of expressions are allowed.
24001
24002         * expression.cs (Argument.ResolveMethodGroup): New public method.
24003         Resolves an argument, but allows a MethodGroup to be returned.
24004         This is used when invoking a delegate.
24005
24006         * TODO: Updated a bit.
24007
24008 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24009
24010         Fixed compilation with csc.
24011
24012         * ecore.cs: Expression.Error made public. Is this correct? Should
24013         Warning be made public too?
24014
24015         * expression.cs: use ea.Location instead of ea.loc.
24016         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24017
24018 2002-08-06  Martin Baulig  <martin@gnome.org>
24019
24020         * ecore.cs (Expression.loc): Moved the location here instead of
24021         duplicating it in all derived classes.
24022         (Expression.Location): New public property.
24023         (Expression.Error, Expression.Warning): Made them non-static and
24024         removed the location argument.
24025         (Expression.Warning): Added overloaded version which takes an
24026         `int level' argument.
24027         (Expression.Error118): Make this non-static and removed the
24028         expression and location arguments.
24029         (TypeExpr): Added location argument to the constructor.
24030
24031         * expression.cs (StaticCallExpr): Added location argument to
24032         the constructor.
24033         (Indirection, PointerArithmetic): Likewise.
24034         (CheckedExpr, UnCheckedExpr): Likewise.
24035         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24036         (StringPtr): Likewise.
24037
24038
24039 2002-08-05  Martin Baulig  <martin@gnome.org>
24040
24041         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24042
24043         * assign.cs (Assign.DoResolve): Check whether the source
24044         expression is a value or variable.
24045
24046         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24047         while resolving the corresponding blocks.
24048
24049         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24050         an error, don't silently return null.
24051
24052         * statement.cs (Block.AddVariable): Do the error reporting here
24053         and distinguish between CS0128 and CS0136.
24054         (Block.DoResolve): Report all unused labels (warning CS0164).
24055         (LabeledStatement): Pass the location to the constructor.
24056         (LabeledStatement.HasBeenReferenced): New property.
24057         (LabeledStatement.Resolve): Set it to true here.
24058
24059         * statement.cs (Return.Emit): Return success even after reporting
24060         a type mismatch error (CS0126 or CS0127), this is what csc does and
24061         it avoids confusing the users with any consecutive errors.
24062
24063 2002-08-05  Martin Baulig  <martin@gnome.org>
24064
24065         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
24066
24067         * const.cs (Const.LookupConstantValue): Catch circular definitions.
24068
24069         * expression.cs (MemberAccess.DoResolve): Silently return if an
24070         error has already been reported.
24071
24072         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
24073         error has already been reported.
24074
24075 2002-08-05  Martin Baulig  <martin@gnome.org>
24076
24077         * statement.cs (UsageVector): Only initialize the `parameters'
24078         vector if we actually have any "out" parameters.
24079
24080 2002-08-05  Martin Baulig  <martin@gnome.org>
24081
24082         * expression.cs (Binary.ResolveOperator): When combining delegates,
24083         they must have the same type.
24084
24085 2002-08-05  Martin Baulig  <martin@gnome.org>
24086
24087         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
24088         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
24089         work with the ms runtime and we also don't need it: if we're a
24090         PropertyBuilder and not in the `indexer_arguments' hash, then we
24091         are a property and not an indexer.
24092
24093         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
24094         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
24095         since the latter one doesn't work with the ms runtime.
24096
24097 2002-08-03  Martin Baulig  <martin@gnome.org>
24098
24099         Fixed bugs #27998 and #22735.
24100
24101         * class.cs (Method.IsOperator): New public field.
24102         (Method.CheckBase): Report CS0111 if there's already a method
24103         with the same parameters in the current class.  Report CS0508 when
24104         attempting to change the return type of an inherited method.
24105         (MethodData.Emit): Report CS0179 if a method doesn't have a body
24106         and it's not marked abstract or extern.
24107         (PropertyBase): New abstract base class for Property and Indexer.
24108         (PropertyBase.CheckBase): Moved here from Property and made it work
24109         for indexers.
24110         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
24111         the same so we can reuse it there.
24112         (Property, Indexer): Derive from PropertyBase.
24113         (MethodSignature.inheritable_property_signature_filter): New delegate
24114         to find properties and indexers.
24115
24116         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
24117         argument and improved error reporting.
24118
24119         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
24120         EmptyReadOnlyParameters and made it a property.
24121
24122         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
24123         version of this method which takes a `PropertyInfo indexer'.
24124         (TypeManager.RegisterIndexer): New method.
24125
24126         * class.cs: Added myself as author of this file :-)
24127
24128 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24129
24130         * class.cs: fixed compilation on windoze.
24131
24132 2002-08-03  Martin Baulig  <martin@gnome.org>
24133
24134         * interface.cs (Interface.GetInterfaceBases): Check whether all
24135         base interfaces are at least as accessible than the current one.
24136
24137         * class.cs (TypeContainer.GetClassBases): Check whether base types
24138         are at least as accessible than the current type.
24139         (TypeContainer.AsAccessible): Implemented and made non-static.
24140         (MemberBase.CheckParameters): Report errors if the accessibility
24141         checks fail.
24142
24143         * delegate.cs (Delegate.Delegate): The default visibility is
24144         internal for top-level types and private for nested types.
24145         (Delegate.Define): Report errors if the accessibility checks fail.
24146
24147         * enum.cs (Enum.Enum): The default visibility is internal for
24148         top-level types and private for nested types.
24149         (Enum.DefineType): Compute the correct visibility.
24150
24151         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
24152         function which takes a `bool is_toplevel' instead of a TypeContainer.
24153
24154         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
24155         builtin type.
24156
24157 2002-08-02  Martin Baulig  <martin@gnome.org>
24158
24159         * expression.cs (LocalVariableReferenc): Added constructor which
24160         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
24161         (LocalVariableReference.IsReadOnly): New property.
24162         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
24163         variable is readonly, use our own readonly flag to do this; you can
24164         use the new constructor to get a writable reference to a read-only
24165         variable.
24166
24167         * cs-parser.jay (foreach_statement, using_statement): Get a writable
24168         reference to the local variable.
24169
24170 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
24171
24172         * rootcontext.cs (ResolveCore): Also include System.Exception
24173
24174         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
24175         we reach an EmptyStatement.
24176
24177         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
24178         is also fine.
24179
24180         * expression.cs (Binary.ResolveOperator): Check error result in
24181         two places.
24182
24183         use brtrue/brfalse directly and avoid compares to null.
24184
24185 2002-08-02  Martin Baulig  <martin@gnome.org>
24186
24187         * class.cs (TypeContainer.Define): Define all nested interfaces here.
24188         Fixes bug #28407, added test-155.cs.
24189
24190 2002-08-01  Martin Baulig  <martin@gnome.org>
24191
24192         * class.cs (Event.EmitDefaultMethod): Make this work with static
24193         events.  Fixes #28311, added verify-3.cs.
24194
24195 2002-08-01  Martin Baulig  <martin@gnome.org>
24196
24197         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
24198         `is_disposable' fields.
24199         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
24200         `hm.is_disposable' if we're using the collection pattern.
24201         (Foreach.EmitCollectionForeach): Use the correct type for the
24202         enumerator's local variable, only emit the try/finally block if
24203         necessary (fixes #27713).
24204
24205 2002-08-01  Martin Baulig  <martin@gnome.org>
24206
24207         * ecore.cs (Expression.report118): Renamed to Error118 and made
24208         it public static.
24209
24210         * statement.cs (Throw.Resolve): Check whether the expression is of
24211         the correct type (CS0118) and whether the type derives from
24212         System.Exception (CS0155).
24213         (Catch.Resolve): New method.  Do the type lookup here and check
24214         whether it derives from System.Exception (CS0155).
24215         (Catch.CatchType, Catch.IsGeneral): New public properties.
24216
24217         * typemanager.cs (TypeManager.exception_type): Added.
24218
24219 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
24220
24221         * driver.cs: Updated About function.
24222
24223 2002-07-31  Martin Baulig  <martin@gnome.org>
24224
24225         Implemented Control Flow Analysis.
24226
24227         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
24228         (EmitContext.CurrentBranching): Added.
24229         (EmitContext.StartFlowBranching): Added.
24230         (EmitContext.EndFlowBranching): Added.
24231         (EmitContext.KillFlowBranching): Added.
24232         (EmitContext.IsVariableAssigned): Added.
24233         (EmitContext.SetVariableAssigned): Added.
24234         (EmitContext.IsParameterAssigned): Added.
24235         (EmitContext.SetParameterAssigned): Added.
24236         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
24237         Added control flow analysis stuff here.
24238
24239         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
24240         resolve the expression as lvalue.
24241         (LocalVariableReference.DoResolve): Check whether the variable has
24242         already been assigned.
24243         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
24244         the parameter as assigned here.
24245         (ParameterReference.DoResolve): Check whether the parameter has already
24246         been assigned.
24247         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
24248         expression as lvalue.
24249
24250         * statement.cs (FlowBranching): New class for the flow analysis code.
24251         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
24252         (LabeledStatement.IsDefined): New public property.
24253         (LabeledStatement.AddUsageVector): New public method to tell flow
24254         analyis that the label may be reached via a forward jump.
24255         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
24256         flow analysis.
24257         (VariableInfo.Number): New public field.  This is used by flow analysis
24258         to number all locals of a block.
24259         (Block.CountVariables): New public property.  This is the number of
24260         local variables in this block (including the locals from all parent
24261         blocks).
24262         (Block.EmitMeta): Number all the variables.
24263
24264         * statement.cs: Added flow analysis support to all classes.
24265
24266 2002-07-31  Martin Baulig  <martin@gnome.org>
24267
24268         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
24269         To get debugging messages, compile mcs with /define:MCS_DEBUG and
24270         then use this argument.
24271
24272         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
24273
24274         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
24275         use this to specify /define options.
24276
24277 2002-07-29  Martin Baulig  <martin@gnome.org>
24278
24279         * statement.cs (Fixed): Moved all code that does variable lookups
24280         and resolvings from Emit to Resolve.
24281
24282         * statement.cs (For): Moved all code that does variable lookups
24283         and resolvings from Emit to Resolve.
24284
24285         * statement.cs (Using): Moved all code that does variable lookups
24286         and resolvings from Emit to Resolve.
24287
24288 2002-07-29  Martin Baulig  <martin@gnome.org>
24289
24290         * attribute.cs (Attribute.Resolve): Explicitly catch a
24291         System.NullReferenceException when creating the
24292         CustromAttributeBuilder and report a different warning message.
24293
24294 2002-07-29  Martin Baulig  <martin@gnome.org>
24295
24296         * support.cs (ParameterData.ParameterName): Added method to
24297         get the name of a parameter.
24298
24299         * typemanager.cs (TypeManager.IsValueType): New public method.
24300
24301 2002-07-29  Martin Baulig  <martin@gnome.org>
24302
24303         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
24304         is a flag which specifies that it's either ref or out.
24305         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
24306         the out parameter to `out Parameter.Modifier mod', also set the
24307         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
24308
24309         * support.cs (InternalParameters.ParameterModifier): Distinguish
24310         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24311         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24312
24313         * expression.cs (Argument.GetParameterModifier): Distinguish
24314         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24315         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24316
24317 2002-07-29  Martin Baulig  <martin@gnome.org>
24318
24319         * expression.cs (ParameterReference.ParameterReference): Added
24320         `Location loc' argument to the constructor.
24321
24322         * cs-parser.jay: Pass location to ParameterReference.
24323
24324 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
24325
24326         * statement.cs (Try): Initialize the location.
24327
24328         * cs-parser.jay: pass location to Try.
24329
24330         * expression.cs (Unary.Reduce): Change the prototype to return
24331         whether a constant fold could be performed or not.  The result is
24332         returned in an out parameters.  In the case of Indirection and
24333         AddressOf, we want to perform the full tests.
24334
24335 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
24336
24337         * statement.cs (Statement.Emit): Flag dead code.
24338
24339 2002-07-27  Andrew Birkett  <andy@nobugs.org>
24340
24341         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
24342
24343 2002-07-27  Martin Baulig  <martin@gnome.org>
24344
24345         * class.cs (MethodData.Define): Put back call to
24346         TypeManager.AddMethod(), accidentally commented this out.
24347
24348         * report.cs (Debug): New public method to print debugging information,
24349         this is `[Conditional ("DEBUG")]'.
24350
24351 2002-07-26  Martin Baulig  <martin@gnome.org>
24352
24353         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
24354         (switch_statement): Push the current_block to the switch_stack and
24355         pop it again when we're done with the switch.
24356         (switch_section): The new block is a child of the current_block.
24357         Fixes bug #24007, added test-152.cs.
24358
24359 2002-07-27  Martin Baulig  <martin@gnome.org>
24360
24361         * expression.cs (Invocation.EmitArguments): When calling a varargs
24362         function with only its fixed arguments, we need to pass an empty
24363         array.
24364
24365 2002-07-27  Martin Baulig  <martin@gnome.org>
24366
24367         Mono 0.13 has been released.
24368
24369 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
24370
24371         * driver.cs: Rename --resource to --linkres, because that is what
24372         we do currently, we dont support --resource yet.
24373
24374         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
24375
24376 2002-07-25  Martin Baulig  <martin@gnome.org>
24377
24378         * class.cs (MethodData): New public class.  This is a `method builder'
24379         class for a method or one accessor of a Property/Indexer/Event.
24380         (MethodData.GetMethodFlags): Moved here from MemberBase.
24381         (MethodData.ApplyAttributes): Likewise.
24382         (MethodData.ApplyObsoleteAttribute): Likewise.
24383         (MethodData.ApplyConditionalAttribute): Likewise.
24384         (MethodData.ApplyDllImportAttribute): Likewise.
24385         (MethodData.CheckAbstractAndExternal): Likewise.
24386         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
24387         (MethodData.Emit): Formerly known as Method.Emit().
24388         (MemberBase): Moved everything which was specific to a single
24389         accessor/method to MethodData.
24390         (Method): Create a new MethodData and call Define() and Emit() on it.
24391         (Property, Indexer, Event): Create a new MethodData objects for each
24392         accessor and call Define() and Emit() on them.
24393
24394 2002-07-25  Martin Baulig  <martin@gnome.org>
24395
24396         Made MethodCore derive from MemberBase to reuse the code from there.
24397         MemberBase now also checks for attributes.
24398
24399         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
24400         (MemberBase.GetMethodFlags): Moved here from class Method and marked
24401         as virtual.
24402         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
24403         `CallingConventions cc' and `Attributes opt_attrs' arguments.
24404         (MemberBase.ApplyAttributes): New virtual method; applies the
24405         attributes to a method or accessor.
24406         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
24407         (MemberBase.ApplyConditionalAttribute): Likewise.
24408         (MemberBase.ApplyDllImportAttribute): Likewise.
24409         (MemberBase.CheckAbstractAndExternal): Likewise.
24410         (MethodCore.ParameterTypes): This is now a property instead of a
24411         method, it's initialized from DoDefineParameters().
24412         (MethodCore.ParameterInfo): Removed the set accessor.
24413         (MethodCore.DoDefineParameters): New protected virtual method to
24414         initialize ParameterTypes and ParameterInfo.
24415         (Method.GetReturnType): We can now simply return the MemberType.
24416         (Method.GetMethodFlags): Override the MemberBase version and add
24417         the conditional flags.
24418         (Method.CheckBase): Moved some code from Define() here, call
24419         DoDefineParameters() here.
24420         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
24421         here to avoid some larger code duplication.
24422         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
24423         ensure that abstract and external accessors don't declare a body.
24424
24425         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
24426         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
24427         lookup in the attribute's parent classes, so we need to abort as soon
24428         as we found the first match.
24429         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
24430         the attribute has no arguments.
24431
24432         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
24433         of a Method.
24434
24435 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24436
24437         * cs-parser.jay: reverted previous patch.
24438
24439 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24440
24441         * cs-parser.jay: fixed bug #22119.
24442
24443 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24444
24445         * attribute.cs: fixed compilation. The error was:
24446         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
24447         be assigned to before control leaves the current method."
24448         [FIXME:  Filed as bug #28186: MCS must report this error.]
24449
24450 2002-07-25  Martin Baulig  <martin@gnome.org>
24451
24452         * attribute.cs (Attribute.Conditional_GetConditionName): New static
24453         method to pull the condition name ouf of a Conditional attribute.
24454         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
24455         the obsolete message and error flag out of an Obsolete attribute.
24456
24457         * class.cs (Method.GetMethodFlags): New public method to get the
24458         TypeManager.MethodFlags for this method.
24459         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
24460         private methods.
24461         (Method.Define): Get and apply the Obsolete and Conditional attributes;
24462         if we're overriding a virtual function, set the new private variable
24463         `parent_method'; call the new TypeManager.AddMethod().
24464
24465         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
24466         the MethodBuilder and the Method in a PtrHashtable.
24467         (TypeManager.builder_to_method): Added for this purpose.
24468         (TypeManager.MethodFlags): Added IsObsoleteError.
24469         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
24470         Obsolete and Conditional arguments in MethodBuilders.  If we discover
24471         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
24472         the message from the attribute.
24473
24474 2002-07-24  Martin Baulig  <martin@gnome.org>
24475
24476         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
24477         preprocessor directives, ensure that the argument to #define/#undef is
24478         exactly one identifier and that it's actually an identifier.
24479
24480         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
24481         did not work ....
24482
24483 2002-07-24  Martin Baulig  <martin@gnome.org>
24484
24485         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
24486         initialize it to TypeManager.object_type in the constructor.
24487         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
24488         of the `hm.get_current' method if we're using the collection pattern.
24489         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
24490         for the explicit conversion to make it work when we're using the collection
24491         pattern and the `Current' property has a different return type than `object'.
24492         Fixes #27713.
24493
24494 2002-07-24  Martin Baulig  <martin@gnome.org>
24495
24496         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
24497         does not match, but don't report any errors.  This method is called in
24498         order for all methods in a MethodGroupExpr until a matching method is
24499         found, so we don't want to bail out if the first method doesn't match.
24500         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
24501         matches, report the 123.  Fixes #28070.
24502
24503 2002-07-24  Martin Baulig  <martin@gnome.org>
24504
24505         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
24506         TypeManager.TypeToCoreType() to the top of the method so the
24507         following equality checks will work.  Fixes #28107.
24508
24509 2002-07-24  Martin Baulig  <martin@gnome.org>
24510
24511         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
24512         operand is of type uint, and the other operand is of type sbyte,
24513         short or int, the operands are converted to type long." -
24514         Actually do what this comment already told us.  Fixes bug #28106,
24515         added test-150.cs.
24516
24517 2002-07-24  Martin Baulig  <martin@gnome.org>
24518
24519         * class.cs (MethodBase): New abstract class.  This is now a base
24520         class for Property, Indexer and Event to avoid some code duplication
24521         in their Define() and DefineMethods() methods.
24522         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
24523         generic methods for Define() and DefineMethods().
24524         (FieldBase): Derive from MemberBase, not MemberCore.
24525         (Property): Derive from MemberBase, not MemberCore.
24526         (Property.DefineMethod): Moved all the code from this method to the
24527         new MethodBase.DefineAccessor(), just call it with appropriate
24528         argumetnts.
24529         (Property.Define): Call the new Property.DoDefine(), this does some
24530         sanity checks and we don't need to duplicate the code everywhere.
24531         (Event): Derive from MemberBase, not MemberCore.
24532         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
24533         accessors, this will also make them work with interface events.
24534         (Indexer): Derive from MemberBase, not MemberCore.
24535         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
24536         (Indexer.Define): Use the new MethodBase functions.
24537
24538         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
24539         argument to the constructor.
24540         (Interface.FindMembers): Added support for interface events.
24541         (Interface.PopluateEvent): Implemented.
24542
24543         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
24544
24545 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
24546
24547         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
24548         but this is required to check for a method name being the same as
24549         the containing class.  
24550
24551         Handle this now.
24552
24553 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24554
24555         * interface.cs: initialize variable.
24556
24557 2002-07-23  Martin Baulig  <martin@gnome.org>
24558
24559         Implemented the IndexerName attribute in interfaces.
24560
24561         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
24562         name if this is an explicit interface implementation.
24563         (Indexer.InterfaceIndexerName): New public variable.  If we're
24564         implementing an interface indexer, this is the IndexerName in that
24565         interface.  Otherwise, it's the IndexerName.
24566         (Indexer.DefineMethod): If we're implementing interface indexer,
24567         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
24568         and Pending.ImplementIndexer methods.
24569         (Indexer.Define): Also define the PropertyBuilder if we're
24570         implementing an interface indexer and this is neither an explicit
24571         interface implementation nor do the IndexerName match the one in
24572         the interface.
24573
24574         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
24575         If a method is defined here, then we always need to create a proxy
24576         for it.  This is used when implementing interface indexers.
24577         (Pending.IsInterfaceIndexer): New public method.
24578         (Pending.ImplementIndexer): New public method.
24579         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
24580         This is used when implementing interface indexers to define a proxy
24581         if necessary.
24582         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
24583         define a proxy if necessary.
24584
24585         * interface.cs (Interface.IndexerName): New public variable.
24586         (Interface.PopulateIndexer): Set the IndexerName.
24587         (Interface.DefineIndexers): New private method.  Populate all the
24588         indexers and make sure their IndexerNames match.
24589
24590         * typemanager.cs (IndexerPropertyName): Added support for interface
24591         indexers.
24592
24593 2002-07-22  Martin Baulig  <martin@gnome.org>
24594
24595         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
24596         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
24597         ret if HasReturnLabel.
24598         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
24599         variables.
24600
24601         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
24602         and set the ec.LoopBeginTryCatchLevel.
24603         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
24604         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
24605         the current ec.TryCatchLevel, the branch goes out of an exception
24606         block.  In this case, we need to use Leave and not Br.
24607
24608 2002-07-22  Martin Baulig  <martin@gnome.org>
24609
24610         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
24611         block unless the block does not always return or it is contained in
24612         another try { ... } catch { ... } block.  Fixes bug #26506.
24613         Added verify-1.cs to the test suite.
24614
24615 2002-07-22  Martin Baulig  <martin@gnome.org>
24616
24617         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
24618         then we do not always return.  Fixes bug #24985.
24619
24620 2002-07-22  Martin Baulig  <martin@gnome.org>
24621
24622         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
24623         lookup on a per-class level; ie. walk up the class hierarchy until we
24624         found at least one applicable method, then choose the best among them.
24625         Fixes bug #24463 and test-29.cs.
24626
24627 2002-07-22  Martin Baulig  <martin@gnome.org>
24628
24629         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
24630         return types of the methods.  The return type is not part of the
24631         signature and we must not check it to make the `new' modifier work.
24632         Fixes bug #27999, also added test-147.cs.
24633         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
24634
24635         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
24636         on the method's return type.
24637
24638 2002-07-21  Martin Baulig  <martin@gnome.org>
24639
24640         * assign.cs: Make this work if the rightmost source is a constant and
24641         we need to do an implicit type conversion.  Also adding a few more tests
24642         to test-38.cs which should have caught this.
24643
24644         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
24645         target in the makefile for this.  The makefile.gnu is primarily intended
24646         for end-users who don't want to debug the compiler.
24647
24648 2002-07-21  Martin Baulig  <martin@gnome.org>
24649
24650         * assign.cs: Improved the Assign class so it can now handle embedded
24651         assignments (X = Y = Z = something).  As a side-effect this'll now also
24652         consume less local variables.  test-38.cs now passes with MCS, added
24653         a few new test cases to that test.
24654
24655 2002-07-20  Martin Baulig  <martin@gnome.org>
24656
24657         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
24658         instructions.  Fixes bug #27977, also added test-146.cs.
24659
24660 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24661
24662         * cs-tokenizer.cs: fixed getHex ().
24663
24664 2002-07-19  Martin Baulig  <martin@gnome.org>
24665
24666         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
24667         not Type.GetType() to lookup the array type.  This is needed when
24668         we're constructing an array of a user-defined type.
24669         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
24670         single-dimensional arrays, but also for single-dimensial arrays of
24671         type decimal.
24672
24673 2002-07-19  Martin Baulig  <martin@gnome.org>
24674
24675         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
24676         this function is called, it's not allowed to share LocalBuilders
24677         among ILGenerators.
24678
24679 2002-07-19  Martin Baulig  <martin@gnome.org>
24680
24681         * expression.cs (Argument.Resolve): Report an error 118 when trying
24682         to pass a type as argument.
24683
24684 2002-07-18  Martin Baulig  <martin@gnome.org>
24685
24686         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
24687         Conv_R_Un for the signed `long' type.
24688
24689 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
24690
24691         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
24692         `expr' for the temporary result, as that will fail if we do
24693         multiple resolves on the same expression.
24694
24695 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
24696
24697         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
24698         ec.TypeContainer for looking up aliases. 
24699
24700         * class.cs (TypeContainer): Remove LookupAlias from here.
24701
24702         * decl.cs (DeclSpace); Move here.
24703
24704 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
24705
24706         * class.cs (FindMembers): Only call filter if the constructor
24707         bulider is not null.
24708
24709         Also handle delegates in `NestedTypes' now.  Now we will perform
24710         type lookups using the standard resolution process.  This also
24711         fixes a bug.
24712
24713         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
24714         This uses Expressions (the limited kind that can be parsed by the
24715         tree) instead of strings.
24716
24717         * expression.cs (ComposedCast.ToString): Implement, used to flag
24718         errors since now we have to render expressions.
24719
24720         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
24721         FormArrayType. 
24722
24723         * ecore.cs (SimpleName.ToString): ditto.
24724
24725         * cs-parser.jay: Instead of using strings to assemble types, use
24726         Expressions to assemble the type (using SimpleName, ComposedCast,
24727         MemberAccess).  This should fix the type lookups in declarations,
24728         because we were using a different code path for this.
24729
24730         * statement.cs (Block.Resolve): Continue processing statements
24731         even when there is an error.
24732
24733 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
24734
24735         * class.cs (Event.Define): Also remove the `remove' method from
24736         the list of pending items.
24737
24738         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
24739         generate more compact code. 
24740
24741 2002-07-17  Martin Baulig  <martin@gnome.org>
24742
24743         * const.cs (Const.LookupConstantValue): Add support for constant
24744         `unchecked' and `checked' expressions.
24745         Also adding test case test-140.cs for this.
24746
24747 2002-07-17  Martin Baulig  <martin@gnome.org>
24748
24749         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
24750         check whether mi.ReturnType implements the IEnumerator interface; the
24751         `==' and the IsAssignableFrom() will fail in this situation.
24752
24753 2002-07-16  Ravi Pratap  <ravi@ximian.com>
24754
24755         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
24756         here too.
24757
24758 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24759
24760         * expression.cs: fixed bug #27811.
24761
24762 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
24763
24764         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
24765         Molaro: when we are a ref, the value already contains a pointer
24766         value, do not take the address of it.
24767
24768 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
24769         * removed mb-parser.jay and mb-tokenizer.cs
24770
24771 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
24772
24773         * expression.cs: check against the building corlib void type.
24774
24775 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
24776
24777         * ecore.cs: fix for valuetype static readonly fields: when 
24778         initializing them, we need their address, not the address of a copy.
24779
24780 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
24781
24782         * typemanager.cs: register also enum_type in corlib.
24783
24784 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
24785
24786         * class.cs: allow calling this (but not base) initializers in structs.
24787
24788 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
24789
24790         * ecore.cs: make sure we compare against the building base types
24791         in GetTypeSize ().
24792
24793 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
24794
24795         * typemanager.cs: fix TypeToCoreType() to handle void and object
24796         (corlib gets no more typerefs after this change).
24797
24798 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
24799
24800         * expression.cs (ArrayCreation.EmitArrayArguments): use
24801         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
24802
24803         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
24804         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
24805         array indexes, the runtime actually forbids them.
24806
24807         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
24808         for array arguments here.
24809
24810         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
24811         instead of the default for ValueTypes.
24812
24813         (New.DoEmit): Use IsValueType instead of
24814         IsSubclassOf (value_type)
24815         (New.DoResolve): ditto.
24816         (Invocation.EmitCall): ditto.
24817
24818         * assign.cs (Assign): ditto.
24819
24820         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
24821         Statements *are* currently doing part of their resolution during
24822         Emit.  
24823
24824         Expressions do always resolve during resolve, but statements are
24825         only required to propagate resolution to their children.
24826
24827 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
24828
24829         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
24830
24831         (LoadAssembly): Do not add the dll if it is already specified
24832
24833         (MainDriver): Add the System directory to the link path at the end,
24834         after all the other -L arguments. 
24835
24836         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
24837         wrong opcode for loading bytes and bools (ldelem.i1 instead of
24838         ldelem.u1) and using the opposite for sbytes.
24839
24840         This fixes Digger, and we can finally run it.
24841
24842         * driver.cs (UnixParseOption): Move the option parsing here.  
24843         (CSCParseOption): Implement CSC-like parsing of options.
24844
24845         We now support both modes of operation, the old Unix way, and the
24846         new CSC-like way.  This should help those who wanted to make cross
24847         platform makefiles.
24848
24849         The only thing broken is that /r:, /reference: and /lib: are not
24850         implemented, because I want to make those have the same semantics
24851         as the CSC compiler has, and kill once and for all the confussion
24852         around this.   Will be doing this tomorrow.
24853
24854         * statement.cs (Unsafe.Resolve): The state is checked during
24855         resolve, not emit, so we have to set the flags for IsUnsfe here.
24856
24857 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
24858
24859         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
24860         not catch the Error_ObjectRefRequired in SimpleName (as it is
24861         possible to have a class/instance variable name that later gets
24862         deambiguated), we have to check this here.      
24863
24864 2002-07-10  Ravi Pratap  <ravi@ximian.com>
24865
24866         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
24867         make static and put into Expression.
24868
24869         (Event.Define): Register the private field of the event with the 
24870         TypeManager so that GetFieldFromEvent can get at it.
24871
24872         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
24873         keep track of the private field associated with an event which
24874         has no accessors.
24875
24876         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
24877         private field.
24878
24879         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
24880
24881 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
24882
24883         * expression.cs (Binary.EmitBranchable): this routine emits the
24884         Binary expression in a branchable context.  This basically means:
24885         we need to branch somewhere, not just get the value on the stack.
24886
24887         This works together with Statement.EmitBoolExpression.
24888
24889         * statement.cs (Statement.EmitBoolExpression): Use
24890         EmitBranchable. 
24891
24892 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
24893
24894         * statement.cs (For): Reduce the number of jumps in loops.
24895
24896         (For): Implement loop inversion for the For statement.
24897
24898         (Break): We can be breaking out of a Try/Catch controlled section
24899         (foreach might have an implicit try/catch clause), so we need to
24900         use Leave instead of Br.
24901
24902         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
24903         now).  If the instace expression supports IMemoryLocation, we use
24904         the AddressOf method from the IMemoryLocation to extract the
24905         address instead of emitting the instance.
24906
24907         This showed up with `This', as we were emitting the instance
24908         always (Emit) instead of the Address of This.  Particularly
24909         interesting when This is a value type, as we dont want the Emit
24910         effect (which was to load the object).
24911
24912 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
24913
24914         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
24915
24916         * statement.cs (Checked): Set the CheckedState during the resolve
24917         process too, as the ConvCast operations track the checked state on
24918         the resolve process, and not emit.
24919
24920         * cs-parser.jay (namespace_member_declaration): Flag that we have
24921         found a declaration when we do.  This is used to flag error 1529
24922
24923         * driver.cs: Report ok when we display the help only.
24924
24925 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
24926
24927         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
24928
24929 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
24930
24931         * cs-tokenizer.cs (define): We also have to track locally the
24932         defines.  AllDefines is just used for the Conditional Attribute,
24933         but we also need the local defines for the current source code. 
24934
24935 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
24936
24937         * statement.cs (While, For, Do): These loops can exit through a
24938         Break statement, use this information to tell whether the
24939         statement is the last piece of code.
24940
24941         (Break): Flag that we break.
24942
24943         * codegen.cs (EmitContexts): New `Breaks' state variable.
24944
24945 2002-07-03  Martin Baulig  <martin@gnome.org>
24946
24947         * class.cs (TypeContainer.MethodModifiersValid): Allow override
24948         modifiers in method declarations in structs.  Otherwise, you won't
24949         be able to override things like Object.Equals().
24950
24951 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
24952
24953         * class.cs (Method, Property, Indexer): Do not allow the public
24954         modifier to be used in explicit interface implementations.
24955
24956         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
24957         override modifiers in method declarations in structs
24958
24959 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
24960
24961         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
24962         integer or real overflow, report an error
24963
24964 2002-07-02  Martin Baulig  <martin@gnome.org>
24965
24966         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
24967         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
24968         to tell the runtime about our newly created System.Object and
24969         System.ValueType types.
24970
24971 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
24972
24973         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
24974         struct instead of Ldarg/Starg.
24975
24976 2002-07-02  Martin Baulig  <martin@gnome.org>
24977
24978         * expression.cs (Indirection.Indirection): Call
24979         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
24980
24981 2002-07-02  Martin Baulig  <martin@gnome.org>
24982
24983         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
24984         ValueType, call TypeManager.TypeToCoreType() on it.
24985         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
24986         the OpCodes.Newarr argument.
24987
24988 2002-07-02  Martin Baulig  <martin@gnome.org>
24989
24990         * expression.cs (Invocation.EmitCall): When compiling corlib,
24991         replace all calls to the system's System.Array type to calls to
24992         the newly created one.
24993
24994         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
24995         System.Array methods.
24996         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
24997         from the system's System.Array type which must be replaced.
24998
24999 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25000
25001         * typemanager.cs: load unverifiable_code_ctor so we can build
25002         corlib using the correct type. Avoid using GetTypeCode() with
25003         TypeBuilders.
25004         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25005         TypeManager.object_type to allow building corlib.
25006
25007 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25008
25009         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25010
25011 2002-07-01  Martin Baulig  <martin@gnome.org>
25012
25013         * class.cs: Make the last change actually work, we need to check
25014         whether `ifaces != null' to avoid a crash.
25015
25016 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25017
25018         * class.cs: when we build structs without fields that implement
25019         interfaces, we need to add the interfaces separately, since there is
25020         no API to both set the size and add the interfaces at type creation
25021         time.
25022
25023 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25024
25025         * expression.cs: the dimension arguments to the array constructors
25026         need to be converted if they are a long.
25027
25028 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25029
25030         * class.cs: don't emit ldarg.0 if there is no parent constructor
25031         (fixes showstopper for corlib).
25032
25033 2002-06-29  Martin Baulig  <martin@gnome.org>
25034
25035         MCS now compiles corlib on GNU/Linux :-)
25036
25037         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25038         ie. check for MethodImplOptions.InternalCall.
25039
25040         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25041         and TypeManager.attribute_type are null, so we must explicitly check
25042         whether parent is not null to find out whether it's an attribute type.
25043         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25044         and SetBuilder, not only if the property is neither abstract nor external.
25045         This is necessary to set the MethodImplOptions on the accessor methods.
25046         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25047         SetBuilder, see Property.Emit().
25048
25049         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25050         populate "System.Object", "System.ValueType" and "System.Attribute" since
25051         they've already been populated from BootCorlib_PopulateCoreTypes().
25052
25053 2002-06-29  Martin Baulig  <martin@gnome.org>
25054
25055         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
25056         is the NullLiteral, we also need to make sure that target_type is not
25057         an enum type.   
25058
25059 2002-06-29  Martin Baulig  <martin@gnome.org>
25060
25061         * rootcontext.cs (RootContext.ResolveCore): We must initialize
25062         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
25063         before calling BootstrapCorlib_ResolveDelegate ().
25064
25065 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25066
25067         * statement.cs: fixed build-breaker. All tests passed ok.
25068
25069 2002-06-27  Martin Baulig  <martin@gnome.org>
25070
25071         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
25072         for System.Decimal when compiling corlib.
25073
25074 2002-06-27  Martin Baulig  <martin@gnome.org>
25075
25076         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
25077         switch blocks which contain nothing but a default clause.
25078
25079 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
25080
25081        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
25082
25083 2002-06-27  Martin Baulig  <martin@gnome.org>
25084
25085         * ecore.cs (PropertyExpr.PropertyExpr): Call
25086         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
25087
25088         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
25089         is already a TypeBuilder.
25090
25091 2002-06-27  Martin Baulig  <martin@gnome.org>
25092
25093         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
25094         `target_type == TypeManager.array_type', not IsAssignableFrom() in
25095         the "from an array-type to System.Array" case.  This makes it work
25096         when compiling corlib.
25097
25098 2002-06-27  Martin Baulig  <martin@gnome.org>
25099
25100         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
25101         non-static PropertyExpr, set its InstanceExpression.  This makes
25102         the `ICollection.Count' property work in System/Array.cs.
25103
25104 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
25105
25106         * driver.cs: Made error handling more consistent.  Errors now
25107         tracked by Report class, so many methods which used to return int
25108         now return void.  Main() now prints success/failure and 
25109         errors/warnings message.
25110
25111         Renamed '--probe' compiler argument to '--expect-error'.  Removed
25112         the magic number return values (123 and 124).  Now, if the
25113         expected error occurs, the compiler exits with success (exit value
25114         0).  If the compilation completes without seeing that particular
25115         error, the compiler exits with failure (exit value 1).  The
25116         makefile in mcs/errors has been changed to handle the new behaviour.
25117
25118         * report.cs: Made 'expected error' number a property and renamed
25119         it from 'Probe' to 'ExpectedError'.
25120
25121         * genericparser.cs: Removed error handling support, since it is
25122         now all done by Report class.
25123
25124         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
25125         class, so parse() no longer returns an int.
25126
25127         * namespace.cs: Use Report.Error instead of GenericParser.error
25128
25129 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
25130
25131         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
25132         TypeContainer.AddOperator): At the front of the list put the
25133         explicit implementations, so they get resolved/defined first. 
25134
25135 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
25136
25137         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
25138         interface type is implemented by this TypeContainer.  Used during
25139         explicit interface implementation.
25140
25141         (Property.Define, Indexer.Define, Method.Define): Validate that
25142         the given interface in the explicit implementation is one of the
25143         base classes for the containing type.
25144
25145         Also if we are explicitly implementing an interface, but there is
25146         no match in the pending implementation table, report an error.
25147
25148         (Property.Define): Only define the property if we are
25149         not explicitly implementing a property from an interface.  Use the
25150         correct name also for those properties (the same CSC uses,
25151         although that is really not needed).
25152
25153         (Property.Emit): Do not emit attributes for explicitly implemented
25154         properties, as there is no TypeBuilder.
25155
25156         (Indexer.Emit): ditto.
25157
25158         Hiding then means that we do not really *implement* a pending
25159         implementation, which makes code fail.
25160
25161 2002-06-22  Martin Baulig  <martin@gnome.org>
25162
25163         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
25164         the return value of Object.GetType().  [FIXME: we need to do this whenever
25165         we get a type back from the reflection library].
25166
25167 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
25168
25169         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
25170
25171 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
25172
25173         * attribute.cs: Return null if we can not look up the type.
25174
25175         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
25176         the interface types found.
25177
25178         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
25179         interface types found.
25180
25181         * typemanager.cs (GetInterfaces): Make this routine returns alll
25182         the interfaces and work around the lame differences between
25183         System.Type and System.Reflection.Emit.TypeBuilder in the results
25184         result for GetInterfaces.
25185
25186         (ExpandInterfaces): Given an array of interface types, expand and
25187         eliminate repeated ocurrences of an interface.  This expands in
25188         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
25189         be IA, IB, IC.
25190
25191 2002-06-21  Martin Baulig  <martin@gnome.org>
25192
25193         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
25194         on System.Enum.
25195
25196 2002-06-21  Martin Baulig  <martin@gnome.org>
25197
25198         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
25199         and called with one of the core types, return the corresponding typebuilder for
25200         that type.
25201
25202         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
25203         element type.
25204
25205 2002-06-21  Martin Baulig  <martin@gnome.org>
25206
25207         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
25208         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
25209         (Expression.ConvertReferenceExplicit): Likewise.
25210
25211         * expression.cs (ElementAccess.DoResolve): Likewise.
25212         (ElementAccess.DoResolveLValue): Likewise.
25213
25214 2002-06-10  Martin Baulig  <martin@gnome.org>
25215
25216         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
25217         add the "value" parameter to the parameter list.
25218
25219         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
25220         to our caller.
25221
25222 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
25223
25224         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
25225         the argument to an int, uint, long or ulong, per the spec.  Also
25226         catch negative constants in array creation.
25227
25228 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
25229
25230         * class.cs: do not allow the same interface to appear twice in
25231         the definition list.
25232
25233 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
25234
25235         * ecore.cs: don't use ldlen with System.Array.
25236
25237 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
25238
25239         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
25240
25241 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
25242
25243         * modifiers.cs: produce correct field attributes for protected
25244         internal. Easy fix so miguel can work on ther harder stuff:-)
25245
25246 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
25247
25248         * pending.cs: New file.  Move the code from class.cs here.
25249         Support clearning the pending flag for all methods (when not doing
25250         explicit interface implementation).
25251
25252 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
25253
25254         * rootcontext.cs: added a couple more types needed to bootstrap.
25255
25256 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
25257
25258         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
25259         constructor in the type, instead of any constructor in the type
25260         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
25261         a bug in the Mono runtime when applying the params attribute). 
25262
25263 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
25264         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
25265
25266 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
25267
25268         * expression.cs (Unary.ResolveOperator): Use TypeManager
25269         to resolve the type.
25270
25271 2002-06-13  Ravi Pratap  <ravi@ximian.com>
25272
25273         * cs-parser.jay (enum_member_declaration): Pass in the attributes
25274         attached.
25275
25276         * enum.cs (AddEnumMember): Add support to store the attributes associated 
25277         with each member too.
25278
25279         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
25280         field builders too - this takes care of the enum member case.
25281
25282 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
25283
25284         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
25285         address-of operator on both value types and pointers.
25286
25287 2002-06-10  Martin Baulig  <martin@gnome.org>
25288
25289         * interface.cs (Interface.PopulateIndexer): Add the indexer's
25290         PropertyBuilder to the `property_builders' list.
25291
25292         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
25293         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
25294         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
25295         find any indexers which are inherited from an interface.
25296
25297 2002-06-09  Martin Baulig  <martin@gnome.org>
25298
25299         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
25300         the same type as the constant if necessary.  There's also a test-130.cs
25301         for this.
25302
25303         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
25304
25305         * typemanager.cs (TypeManager.ChangeType): Previously known as
25306         Enum.ChangeEnumType().
25307
25308 2002-06-09  Martin Baulig  <martin@gnome.org>
25309
25310         * expression.cs (Cast.TryReduce): Added support for consts.
25311
25312 2002-06-08  Ravi Pratap  <ravi@ximian.com>
25313
25314         * class.cs (Accessor): Hold attributes information so we can pass
25315         it along.
25316
25317         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
25318         Modify to pass in attributes attached to the methods.
25319
25320         (add_accessor_declaration, remove_accessor_declaration): Ditto.
25321
25322         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
25323         to handle the Accessor kind :-)
25324
25325         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
25326
25327 2002-06-08  Martin Baulig  <martin@gnome.org>
25328
25329         * expression.cs (Unary.TryReduceNegative): Added support for
25330         ULongConstants.
25331
25332 2002-06-08  Martin Baulig  <martin@gnome.org>
25333
25334         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
25335         name can't be found in the `defined_names' - the caller will do a
25336         MemberLookup in this case and thus find methods in System.Enum
25337         such as Enum.IsDefined().
25338
25339 2002-06-08  Martin Baulig  <martin@gnome.org>
25340
25341         * enum.cs (Enum.ChangeEnumType): This is a custom version of
25342         Convert.ChangeType() which works with TypeBuilder created types.
25343         (Enum.LookupEnumValue, Enum.Define): Use it here.
25344
25345         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
25346         `TypeBuilder.BaseType != null' check.
25347         (TypeContainer.FindMembers): Only lookup parent members if we
25348         actually have a parent.
25349         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
25350         (ConstructorInitializer.Resolve): Likewise.
25351
25352         * interface.cs (Interface.FindMembers): Added
25353         `TypeBuilder.BaseType != null' check.
25354
25355         * rootcontext.cs (RootContext.ResolveCore): Added
25356         "System.Runtime.CompilerServices.IndexerNameAttribute" to
25357         classes_second_stage.
25358
25359         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
25360         debug_type and trace_type when compiling with --nostdlib.       
25361
25362 2002-06-07  Martin Baulig  <martin@gnome.org>
25363
25364         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
25365         (AddField): Set it to true when adding a non-static field.
25366         (DefineType): Use `have_nonstatic_fields' to find out whether we
25367         have non-static fields, not `Fields != null'.
25368
25369 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
25370
25371         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
25372         dereferencing a null on the static-field code path)
25373
25374 2002-05-30  Martin Baulig  <martin@gnome.org>
25375
25376         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
25377         to take command line arguments.  Use reflection to call the new
25378         custom `Initialize' function on the symbol writer and pass it the
25379         command line arguments.
25380
25381         * driver.cs (--debug-args): New command line argument to pass command
25382         line arguments to the symbol writer.
25383
25384 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
25385
25386         * assign.cs (DoResolve): Forgot to do the implicit conversion to
25387         the target type for indexers and properties.  Thanks to Joe for
25388         catching this.
25389
25390 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
25391
25392         * typemanager.cs (MethodFlags): returns the method flags
25393         (Obsolete/ShouldIgnore) that control warning emission and whether
25394         the invocation should be made, or ignored. 
25395
25396         * expression.cs (Invocation.Emit): Remove previous hack, we should
25397         not do this on matching a base type, we should do this based on an attribute
25398
25399         Only emit calls to System.Diagnostics.Debug and
25400         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
25401         on the command line.
25402
25403         * rootcontext.cs: Global settings for tracing and debugging.
25404
25405         * cs-tokenizer.cs (define): New utility function to track
25406         defines.   Set the global settings for TRACE and DEBUG if found.
25407
25408 2002-05-25  Ravi Pratap  <ravi@ximian.com>
25409
25410         * interface.cs (Populate*): Pass in the TypeContainer as well as
25411         the DeclSpace as parameters so that we can create EmitContexts and
25412         then use that to apply attributes etc.
25413
25414         (PopulateMethod, PopulateEvent, PopulateProperty)
25415         (PopulateIndexer): Apply attributes everywhere.
25416
25417         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
25418         etc.
25419
25420         (ApplyAttributes): Update accordingly.
25421
25422         We now apply interface attributes for all members too.
25423
25424 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
25425
25426         * class.cs (Indexer.Define); Correctly check if we are explicit
25427         implementation (instead of checking the Name for a ".", we
25428         directly look up if the InterfaceType was specified).
25429
25430         Delay the creation of the PropertyBuilder.
25431
25432         Only create the PropertyBuilder if we are not an explicit
25433         interface implementation.   This means that explicit interface
25434         implementation members do not participate in regular function
25435         lookups, and hence fixes another major ambiguity problem in
25436         overload resolution (that was the visible effect).
25437
25438         (DefineMethod): Return whether we are doing an interface
25439         implementation. 
25440
25441         * typemanager.cs: Temporary hack until we get attributes in
25442         interfaces (Ravi is working on that) and we get IndexerName
25443         support in interfaces.
25444
25445         * interface.cs: Register the indexers as properties.
25446
25447         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
25448         warning, I have verified that this is a bug in the .NET runtime
25449         (JavaScript suffers of the same problem).
25450
25451         * typemanager.cs (MemberLookup): When looking up members for
25452         interfaces, the parent of an interface is the implicit
25453         System.Object (so we succeed in searches of Object methods in an
25454         interface method invocation.  Example:  IEnumerable x;  x.ToString
25455         ()) 
25456
25457 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
25458
25459         * class.cs (Event): Events should also register if they do
25460         implement the methods that an interface requires.
25461
25462         * typemanager.cs (MemberLookup); use the new GetInterfaces
25463         method. 
25464
25465         (GetInterfaces): The code used to lookup interfaces for a type is
25466         used in more than one place, factor it here. 
25467
25468         * driver.cs: Track the errors at the bottom of the file, we kept
25469         on going.
25470
25471         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
25472         instance if the method we are calling is static!
25473
25474 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
25475
25476         * attribute.cs (ApplyAttributes): Make this function filter out
25477         the IndexerName attribute (as that attribute in reality is never
25478         applied) and return the string constant for the IndexerName
25479         attribute. 
25480
25481         * class.cs (TypeContainer.Emit): Validate that all the indexers
25482         have the same IndexerName attribute, and if so, set the
25483         DefaultName attribute on the class. 
25484
25485         * typemanager.cs: The return value might contain other stuff (not
25486         only methods).  For instance, consider a method with an "Item"
25487         property and an Item method.
25488
25489         * class.cs: If there is a problem with the parameter types,
25490         return. 
25491
25492 2002-05-24  Ravi Pratap  <ravi@ximian.com>
25493
25494         * ecore.cs (ImplicitConversionExists): Wrapper function which also
25495         looks at user defined conversion after making a call to 
25496         StandardConversionExists - we need this for overload resolution.
25497
25498         * expression.cs : Update accordingly the various method calls.
25499
25500         This fixes 2 bugs filed against implicit user defined conversions 
25501
25502 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
25503
25504         * statement.cs: Track the result of the assignment.
25505
25506 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
25507
25508         * expression.cs (MemberAccess): Improved error reporting for
25509         inaccessible members.
25510
25511 2002-05-22  Martin Baulig  <martin@gnome.org>
25512
25513         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
25514         itself with debugging support.
25515
25516 2002-05-22  Martin Baulig  <martin@gnome.org>
25517
25518         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
25519         Removed, this isn't needed anymore.
25520
25521 2002-05-20  Martin Baulig  <martin@gnome.org>
25522
25523         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
25524         be underlying type for an enum.
25525
25526 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
25527
25528         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
25529         that splits out the loading of just the core types.
25530
25531         * rootcontext.cs (ResolveCore): Split the struct resolution in
25532         two, so we can load the enumeration underlying types before any
25533         enums are used.
25534
25535         * expression.cs (Is): Bandaid until we fix properly Switch (see
25536         bug #24985 for details).
25537
25538         * typemanager.cs (ImplementsInterface): The hashtable will contain
25539         a null if there are no interfaces implemented.
25540
25541 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
25542
25543         * cs-parser.jay (indexer_declarator): It is fine to have array
25544         parameters
25545
25546 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
25547
25548         * typemanager.cs: (RegisterBuilder): New function used to register
25549         TypeBuilders that implement interfaces.  Since
25550         TypeBuilder.GetInterfaces (as usual) does not work with lame
25551         Reflection.Emit. 
25552         (AddUserType): register interfaces.
25553
25554         (ImplementsInterface): Use the builder_to_ifaces hash if we are
25555         dealing with TypeBuilder.  Also, arrays are showing up as
25556         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
25557         methods can not be invoked on them!
25558
25559         * ecore.cs (ExplicitReferenceConversionExists): Made public.
25560         (ImplicitReferenceConversionExists): Split out from
25561         StandardConversionExists. 
25562
25563         * expression.cs (As): We were only implementing one of the three
25564         cases for the as operator.  We now implement them all.
25565         (Is): Implement the various other cases for Is as well.
25566
25567         * typemanager.cs (CACHE): New define used to control if we want or
25568         not the FindMembers cache.  Seems to have a negative impact on
25569         performance currently
25570
25571         (MemberLookup): Nested types have full acess to
25572         enclosing type members
25573
25574         Remove code that coped with instance/static returns for events, we
25575         now catch this in RealFindMembers.
25576
25577         (RealFindMembers): only perform static lookup if the instance
25578         lookup did not return a type or an event.  
25579
25580 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
25581
25582         * assign.cs (CompoundAssign): We pass more semantic information
25583         now to Compound Assignments than we did before: now we have all
25584         the information at hand, and now we resolve the target *before* we
25585         do the expression expansion, which allows the "CacheValue" method
25586         to have the effect we intended (before, a [x] += 1 would generate
25587         two differen ArrayAccess expressions from the ElementAccess,
25588         during the resolution process).
25589
25590         (CompoundAssign.DoResolve): Resolve target and original_source here.
25591
25592 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
25593
25594         * expression.cs (ArrayAccess): dropped debugging information. 
25595
25596         * typemanager.cs: Small bug fix: I was always returning i_members,
25597         instead of one of i_members or s_members (depending on which had
25598         the content).
25599
25600         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
25601         method is invoked before any code generation takes place, and it
25602         is a mechanism to inform that the expression will be invoked more
25603         than once, and that the method should use temporary values to
25604         avoid having side effects
25605
25606         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
25607
25608         * ecore.cs (Expression.CacheTemporaries): Provide empty default
25609         implementation.
25610
25611         * expression.cs (Indirection, ArrayAccess): Add support for
25612         CacheTemporaries in these two bad boys. 
25613
25614         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
25615         ldobj or ldind_ref.  
25616         (StoreFromPtr): Handle stobj as well.
25617
25618         * expression.cs (UnaryMutator): Share more code.
25619
25620         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
25621         down: I was not tracking the Filter function as well, which
25622         was affecting the results of the cache.
25623
25624 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
25625
25626         * attribute.cs: Remove the hack to handle the CharSet property on
25627         StructLayouts. 
25628
25629 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
25630
25631         * attribute.cs (DoResolve): More uglyness, we now only try to
25632         resolve the attribute partially, to extract the CharSet
25633         information (only if we are a StructLayout attribute).  Otherwise 
25634
25635         (GetExtraTypeInfo): Add some code to conditionally kill in the
25636         future this.   I am more and more convinced that the .NET
25637         framework has special code to handle the attribute setting on
25638         certain elements.
25639
25640         * expression.cs (IsParamsMethodApplicable): Revert my previous
25641         foreach change here, it was wrong.
25642
25643 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
25644
25645         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
25646         (pp_expr): do not abort on unknown input, just return.
25647         (eval): abort if there are pending chars.
25648
25649         * attribute.cs (Attribute.Resolve): Positional parameters are
25650         optional.  Deal with that case.
25651
25652         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
25653         the Ansi/Unicode/Auto information for the type.
25654
25655         (TypeContainer.DefineType): instantiate the EmitContext here, as
25656         we will be using it during the type definition (to resolve
25657         attributes) and during the emit phase.
25658
25659         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
25660         to pull type information out of the attributes
25661
25662         (Attribute.Resolve): track the constructor builder, and allow for
25663         multiple invocations (structs and classes will use this).
25664
25665         * ecore.cs (MemberLookupFinal): new version with all the
25666         parameters customizable.
25667
25668         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
25669         constructors.  Return if the result value is null (as the error
25670         would have been flagged already by MemberLookupFinal)
25671
25672         Do not allow instances of abstract classes or interfaces to be
25673         created.
25674
25675         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
25676         We have to compare the assembly property here when dealing with
25677         FamANDAssem and Assembly access modifiers, because we might be
25678         creating an assembly from *modules* (that means that we are not
25679         getting TypeBuilders for types defined in other modules that are
25680         part of this assembly).
25681
25682         (Method.Emit): If the method is marked abstract and has a body,
25683         emit an error. 
25684
25685         (TypeContainer.DefineMembers): If both the defined member and the
25686         parent name match are methods, then do not emit any warnings: let
25687         the Method.Define routine take care of flagging warnings.  But if
25688         there is a mismatch (method overrides something else, or method is
25689         overriwritten by something, then emit warning).
25690
25691         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
25692         set to null, this means `do not check for the return type on the
25693         signature'. 
25694
25695         (Method.Define): set the return type for the method signature to
25696         null, so that we get methods with the same name and parameters and
25697         different return types.  This is used to flag warning 114 (you are
25698         hiding a method, and you probably want to use the new/override
25699         keywords instead).
25700
25701         * typemanager.cs (MemberLookup): Implemented proper access
25702         control, closing a long standing set of bug reports.  The problem
25703         was that the Framework only has two bits: Public and NonPublic,
25704         and NonPublic includes private and protected methods, but we need
25705         to enforce the FamANDAssem, FamOrAssem and Family. 
25706
25707 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
25708
25709         * statement.cs (GotoCase): Return true: Ammounts to giving up
25710         knowledge on whether we return or not, and letting the other case
25711         be responsible for it.
25712
25713 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
25714
25715         * driver.cs: Do not load directories for each file processed, only
25716         do it if there is a pattern.
25717
25718         * ecore.cs: Report readonly assigns here as well, as we might have
25719         been resolved only by MemberAccess.
25720
25721         (SimpleName.SimpleNameResolve): Also be useful for LValue
25722         resolution.   We need this to propagate assign to local readonly variables
25723
25724         * typemanager.cs: Use a ptrhashtable for the criteria, because we
25725         do not want to reuse potential criteria memory.
25726
25727         * class.cs (MyEventBuilder): Set reflected_type;
25728
25729         * ecore.cs (Constantify): Added support for constifying bools.
25730
25731         (RootContext.LookupType): Added a cache for values looked up in
25732         the declaration space.
25733
25734         * typemanager.cs (FindMembers): Now is a front-end to
25735         RealFindMembers, and provides a two-level hashtable-based cache to
25736         the request.  
25737
25738         15% performance improvement: from 22.5 to 19.2 seconds.
25739
25740         * expression.cs (IsParamsMethodApplicable): use foreach.
25741         (Invocation.DoResolve): ditto.
25742         (New.DoResolve): ditto.
25743         (ArrayCreation.DoResolve): ditto.
25744
25745         * ecore.cs (FindMostEncompassingType): use foreach.
25746
25747         * delegate.cs (NewDelegate.DoResolve): Use foreach
25748
25749         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
25750         (RemoveMethods): use foreach.
25751
25752         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
25753         nested foreach statements instead of for, and also break out of
25754         the inner loop once a match is found.
25755
25756         (Invocation.OverloadResolve): Use foreach, simplify the code. 
25757
25758 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
25759
25760         * cfold.cs (BinaryFold): During an enumeration evaluation context,
25761         we actually unwrap the expression to allow for extra information
25762         to be extracted. 
25763
25764         * expression.cs: Use Shr_Un on unsigned operations. 
25765
25766 2002-05-08  Ravi Pratap  <ravi@ximian.com>
25767
25768         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
25769         applicable operators was not being considered correctly. This closes
25770         the bug Miguel reported.
25771
25772 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
25773
25774         * attribute.cs: check that the type derives from System.Attribute
25775         and report the correct error in that case (moved the duplicate code to
25776         its own method, too).
25777
25778 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
25779
25780         * attribute.cs: lookup attribute type name as the spec says: first the
25781         bare attribute name and then name + "Attribute" (nant compiles with
25782         mcs after this fix).
25783
25784 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
25785
25786         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
25787         Because of the way we parse things, we should try to see if a
25788         UIntConstant can fit in an integer.
25789
25790 2002-05-07  Ravi Pratap  <ravi@ximian.com>
25791
25792         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
25793         when we are in an explicit context.
25794
25795         (ConvertReferenceExplicit): When converting from Iface type S to Class
25796         T make sure the rules are implemented as an OR.
25797
25798         * parameter.cs (ParameterType): Make it a property for now although the
25799         purpose really isn't anything immediate.
25800
25801         * expression.cs (Is*Applicable): Do better checking on the parameter type
25802         of a ref/out parameter. The ones from the system assemblies are already 
25803         marked with the correct type so we don't need to do any correction.
25804
25805         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
25806         the object type is standard too so include that.
25807
25808 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
25809
25810         * ecore.cs (StandardConversionExists): Augment with missing code:
25811         deal with IntConstant, LongConstants and Enumerations.
25812
25813         * assign.cs: Report the error, instead of failing silently
25814
25815         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
25816         typecontainer that they are declared, because the
25817         typecontainer/namespace will have the list of using clauses that
25818         need to be applied.
25819
25820         Assembly Attributes were escaping the normal registration
25821         mechanism. 
25822
25823         (EmitCode): Apply attributes within an EmitContext that represents
25824         the container they were declared on.
25825
25826         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
25827
25828 2002-05-06  Ravi Pratap  <ravi@ximian.com>
25829
25830         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
25831         Revamp completely - make much cleaner as we now operate only
25832         on a set of Types.
25833
25834         (FindMostSpecificSource, FindMostSpecificTarget): New methods
25835         to implement the logic detailed in the spec more correctly.
25836
25837         (UserDefinedConversion): Update accordingly.
25838
25839 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
25840
25841         * statement.cs: Return flow analysis information up.
25842
25843         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
25844         and the default.
25845
25846         (token): Do not consume an extra character before calling
25847         decimal_digits.
25848
25849 2002-05-06  Piers Haken <piersh@friskit.com>
25850
25851         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
25852
25853 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
25854
25855         * class.cs (Constructor.Emit): Set the IsStatic flag in the
25856         EmitContext during the instance constructor initializer
25857         resolution, to stop access to instance variables.
25858
25859         This is mandated by the spec, last paragraph of the `constructor
25860         initializers' section. 
25861
25862 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
25863
25864         * cs-parser.jay, class.cs (Accessor): new class used to represent
25865         an accessor (get or set).  In the past we used `null' to represent
25866         a missing accessor.  But this is ambiguous because there was no
25867         way to tell in abstract indexers/properties if one of them was
25868         specified.
25869
25870         Now there is a way of addressing that.
25871
25872         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
25873         instead of FindMembers.
25874
25875         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
25876         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
25877
25878         * attribute.cs: Treat indexers and properties as the same in terms
25879         of applying attributes
25880
25881         * ecore.cs (FindMostEncompassedType): Use statically initialized
25882         EmptyExpressions()s like we do elsewhere to avoid creating useless
25883         objects (and we take this out of the tight loop).
25884
25885         (GetConversionOperators): Move the code to extract the actual
25886         operators to a separate routine to clean things up.
25887
25888 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
25889
25890         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
25891         events are always registered FieldBuilders.
25892
25893         * class.cs (FieldBase): New class shared by Fields 
25894
25895         * delegate.cs: If we are a toplevel delegate, use our full name.
25896         If we are a nested delegate, then only use our tail name.
25897
25898 2002-05-02  Ravi Pratap  <ravi@ximian.com>
25899
25900         * expression.cs (IsApplicable): Ensure that we add the "&" to
25901         ref/out types before comparing it with the type of the argument.
25902
25903         (IsParamsMethodApplicable): Ditto.
25904
25905         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
25906         silly me ;-)
25907
25908         * delegate.cs : Handle the case when we have more than one applicable
25909         method. Flag an error only when we finish checking all.
25910
25911 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
25912
25913         * expression.cs: Add support for boolean static initializers.
25914
25915 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
25916
25917         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
25918
25919         * parameter.cs (ComputeParameterTypes,
25920         ComputeAndDefineParameterTypes): Better error handling: now we
25921         clear the `types' cache if we fail during any of the type lookups.
25922         We also return the status code correctly to our caller
25923
25924         * delegate.cs: If we fail to define a delegate, abort the extra
25925         steps. 
25926
25927         * expression.cs (Binary.ResolveOperator): for
25928         operator==(object,object) and operator !=(object, object) we also
25929         have to verify that there is an implicit conversion from one to
25930         the other.
25931
25932         (ArrayAccess.DoResolve): Array Access can operate on
25933         non-variables. 
25934
25935 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
25936
25937         * assign.cs (CompoundAssign): A new class used as a "flag" that
25938         the assignment actually is happening as part of a compound
25939         assignment operator.
25940
25941         During compound assignment, a few new rules exist to enable things
25942         like:
25943
25944         byte b |= 1 + 2
25945
25946         From the spec:
25947
25948         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
25949         to the type of x) if y is implicitly convertible to the type of x,
25950         and the operator is a builtin operator and the return type of the
25951         operator is explicitly convertible to the type of x. 
25952
25953         * rootcontext.cs: Reset warning level to 2.  4 catches various
25954         "interesting" features in mcs, we must clean this up at some
25955         point, but currently am trying to kill other bugs ;-)
25956
25957         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
25958         in container classes as well.  
25959
25960         * expression.cs (Binary.ResolveOperator): Handle string case
25961         before anything else (as operator overloading does emit an error
25962         before doing anything else).
25963
25964         This code could go away when we move to a table driven model, but
25965         i could not come up with a good plan last night.
25966
25967 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
25968
25969         * typemanager.cs (CSharpName): reimplementation using regex.
25970         * class.cs: added null check for fields in Emit
25971         * rootcontext.cs: set warninglevel to 4
25972
25973 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
25974
25975         * typemanager.cs (CSharpName): reimplemented with Lupus
25976         suggestion.
25977
25978 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
25979
25980         * statement.cs (If): correclty implement Resolve, because we were
25981         not catching sem errors in there.  The same process is needed
25982         everywhere else. 
25983         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
25984
25985
25986         (Statement.Warning_DeadCodeFound): Factorize code.
25987         (While): Report dead code here too.
25988
25989         (Statement): Added Resolve virtual method to allow
25990         for resolution split from the emit code.
25991
25992 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
25993
25994         * statement.cs (EmitBoolExpression): No longer try to resolve the
25995         expression here.    
25996         (MakeBoolean): New utility function that resolve, implicitly
25997         converts to boolean and tags the expression. 
25998
25999
26000         (If, Do): Implement dead code elimination.
26001         (While): Implement loop inversion
26002
26003         (Do, While, For, If): Resolve the expression prior to calling our
26004         code generation.
26005
26006 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26007
26008         * class.cs:
26009           - added method Report28 (warning: program has more than one entry point)
26010           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26011           - modified method Method.Define, the part at the end of the method
26012
26013         * rootcontext.cs: added static public Location EntryPointLocation;
26014           
26015         * ../errors/cs0028.cs : Add test case for the above warning.              
26016
26017         * typemanager.cs:
26018           - modified method CSharpName to allow arrays of primitive type to
26019             be printed nicely (e.g. instead of System.Int32[][] it now prints
26020             int[][])
26021           - added method CSharpSignature: returns the signature of a method
26022             in string format to be used in reporting errors, warnings, etc.
26023
26024         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26025         with String.Empty.
26026
26027 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26028
26029         * delegate.cs (Define): Fix extremely silly bug where I was
26030         setting the type of the 'object' parameter of the BeginInvoke
26031         method to System.IAsyncResult instead of System.Object ;-)
26032
26033 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26034
26035         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26036         here. 
26037
26038         (Constructor.Emit): return if we fail to initialize the
26039         constructor.  Another door closed!  
26040
26041         * expression.cs (New.DoResolve): Improve error message (from -6 to
26042         1501).  Use DeclaredOnly lookup to find the exact constructor.
26043
26044         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26045         loop.  This is useful.
26046
26047         * cs-parser.jay: Adjust the default parameters so that destructors
26048         have the proper signature.
26049
26050 2002-04-26  Martin Baulig  <martin@gnome.org>
26051
26052         * driver.cs (LoadAssembly): If `assembly' contains any characters
26053         which are only valid in path names and not in assembly names
26054         (currently slash, backslash and point), use Assembly.LoadFrom ()
26055         instead of Assembly.Load () on the `assembly' (before iteration
26056         over the link_paths).
26057
26058 2002-04-26  Martin Baulig  <martin@gnome.org>
26059
26060         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
26061
26062 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
26063
26064         * class.cs (Property): use the new typemanager.MemberLookup
26065
26066         (TypeContainer.MemberLookup): Implement using the
26067         TypeManager.MemberLookup now. 
26068
26069         * typemanager.cs: Make MemberLookup a function of the TypeManager,
26070         and return MemberInfos, so that these can be used without an
26071         EmitContext (what we had before).
26072
26073 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
26074
26075         * expression.cs: Fix the case where the argument to params if the
26076         type of the params.  I omitted handling this before.   Fixed
26077
26078 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26079
26080         * driver.cs: Call BootCorlib_PopulateCoreType
26081
26082         * class.cs (Property.CheckBase): Check for properties only, not
26083         for all members. 
26084
26085         * interface.cs: Temporary hack: try/catch around the
26086         CustomAttributeBuilder, because I am getting an exception that I
26087         do not understand.
26088
26089         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
26090         types whose definitions are required to be there (attributes are
26091         defined before standard types).
26092
26093         Compute definitions as we boot the various types, as they are used
26094         immediately (value_type class will need object_type, but if we do
26095         not initialize object_type, we will pass a null, which will let
26096         the runtime pick the System.Object from the existing corlib, which
26097         is not what we want).
26098
26099 2002-04-22  Patrik Torstensson <totte@labs2.com>
26100
26101         * cs-tokenizer.cs: fixed a number of trim() issues.
26102
26103 2002-04-22  Ravi Pratap  <ravi@ximian.com>
26104
26105         * expression.cs (Argument.Type): Ensure that we return the correct
26106         type when we have out or ref parameters [in which case we 
26107         append a "&"].
26108
26109 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26110
26111         * class.cs (Property, Indexer): Allow extern modifier in there. 
26112
26113         * typemanager.cs (InitBaseTypes): Initializes object_type and
26114         value_type, since those will be used early on during the bootstrap
26115         process to compile corlib.
26116
26117         (InitCoreTypes): Move code from here to InitBaseTypes.
26118
26119 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
26120
26121         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
26122         single-dimension arrays as using the ldlen opcode.  
26123
26124         Daniel Lewis discovered this optimization.  
26125
26126         * typemanager.cs: Add signature for System.Array::get_Length
26127
26128 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26129
26130         * statement.cs: report the error when the foreach does not apply to an
26131         array nor a collection.
26132
26133 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
26134
26135         * expression.cs: Add implicit conversions to the operator ~.
26136
26137         * constant.cs (DecimalConstant.Emit): Emit decimal value.
26138
26139         * typemanager.cs: Locate the decimal constructor.
26140
26141 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26142
26143         * attribute.cs: use the new property of TypeOf.
26144         * expression.cs: added 'get' property around typearg.
26145
26146         These changes fix a build breaker reported by NickD. Is this the
26147         correct way to fix?  If not, please, revert my changes and make it
26148         work :-).
26149
26150 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
26151
26152         * attribute.cs: Add support for typeof in attribute invocations.
26153         I am not sure that this is right though.
26154
26155 2002-04-14  Duncan Mak  <duncan@ximian.com>
26156
26157         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
26158         Binary.Operator.Division case.
26159
26160 2002-04-13  Ravi Pratap  <ravi@ximian.com>
26161
26162         * class.cs (DefineType): Ensure that we do a proper check on
26163         attribute types and also register it with the TypeManager.
26164
26165         (TypeContainer.Targets): The default for attribute types is
26166         AttributeTargets.All.
26167
26168         * attribute.cs (ApplyAttributes): Registering the attribute type
26169         is done elsewhere, not when we discover we have a Usage attribute.
26170
26171 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26172
26173         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
26174         and get rid of is_delegate parameter.
26175
26176         * everywhere : update.
26177
26178 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26179
26180         * cs-parser.jay (compilation_unit): Revamp completely to use
26181         some new ideas that I got from Rhys' grammar to solve the problems
26182         with assembly level attributes.
26183
26184         (outer_declaration): New grammar production.
26185
26186         (attribute_sections): Add.
26187
26188         (opt_attributes): Base on attribute_sections
26189
26190         (namespace_declaration): Allow opt_attributes to tackle the case
26191         when we have assembly level attributes - we are clever in this
26192         regard now ;-)
26193
26194         * attribute.cs (ApplyAttributes): Do not worry about assembly 
26195         attributes in the non-global context.
26196
26197         * rootcontext.cs (AddGlobalAttributes): Go back to using this
26198         instead of SetGlobalAttributes.
26199
26200         * class.cs, rootcontext.cs : Ensure we define and generate 
26201         attribute types before anything else.
26202
26203         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
26204         and flag the new error -20 for the case when the attribute type
26205         does not have valid targets specified. csc does not catch this.
26206
26207         * ../errors/errors.txt : update for error # -20
26208
26209 2002-04-11  Ravi Pratap  <ravi@ximian.com>
26210
26211         * support.cs (InternalParameters.ParameterModifier): Do some null
26212         checking and return sane values.
26213
26214         * class.cs (Method.Define): If we are a PInvoke method, ensure
26215         that we are static and extern. Report error # 601
26216
26217         * ../errors/cs0601.cs : Add test case for the above error.
26218
26219 2002-04-07  Ravi Pratap  <ravi@ximian.com>
26220
26221         * rootcontext.cs (attribute_types): We need to keep type of
26222         all attribute types separately and emit code for them first.
26223
26224         (RegisterAttribute) : Implement.
26225
26226         * class.cs (DefineType): Check if the current Type is a custom
26227         attribute type and register it accordingly.
26228
26229         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
26230         adding the first attribute twice and rename to
26231
26232         (SetGlobalAttributes): this.
26233
26234         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
26235         lookups.
26236
26237         * attribute.cs (ApplyAttributes): Take an additional argument telling us
26238         if we are processing global arguments. Hmm, I am unsure of this.
26239
26240 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26241
26242         * expression.cs: added static array of strings to avoid calling
26243         Enum.ToString () for Operator in Binary. Significant recover of
26244         performance.
26245
26246 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
26247
26248         * class.cs (FindMembers): Allow the Builders of the various
26249         members to be null.  If they are skip them.  This only happens
26250         during the PInvoke declaration.
26251
26252 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
26253
26254         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
26255         failure, so we do not keep going afterwards.
26256
26257         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
26258         wanted to pass `false' as the `is_delegate' argument.  If this is
26259         the case, why not use delegate_type == null to mean `is_delegate =
26260         false' and anything else as is_delegate = true.
26261
26262 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
26263
26264         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
26265         code for the section, not the beginning of the tests.
26266
26267 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
26268
26269         * cfold.cs: Handle operator + (Enum x, Underlying x) 
26270
26271         * expression.cs (Binary): same.  Warn about errors where we have
26272         Enum/Enum in operator + as well.
26273
26274 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
26275
26276         * statement.cs:
26277                 - added support for switch(bool)
26278                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
26279                 - add TableSwitchEmit() to handle table-based switch statements
26280
26281 2002-04-05  Ravi Pratap  <ravi@ximian.com>
26282
26283         * expression.cs (Invocation.OverloadResolve): Factor out code which
26284         does parameter compatibility checking with arguments so that we can 
26285         re-use the code even from Delegate.VerifyApplicability
26286
26287         (VerifyArgumentsCompat): Move above code here.
26288
26289         * delegate.cs (VerifyApplicability): Get rid of duplicate code
26290         and instead make a call to the above method.
26291
26292 2002-03-31  Ravi Pratap  <ravi@ximian.com>
26293
26294         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
26295         We use it to keep track of classes which are attribute types.
26296
26297 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
26298
26299         * delegate.cs (Delegate.Define): Correctly define the types in the
26300         presence of fixed and array parameters.
26301
26302         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
26303         doing FindMembers.
26304
26305         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
26306         include NonPublic after the first iteration.
26307
26308         * class.cs (Indexer.CheckBase): Only check if both parents are
26309         non-null. 
26310
26311         * cs-parser.jay (accessor_body): If empty, set to null.
26312
26313         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
26314         same code path here to resolve constants names that we did have in
26315         MemberAccess.DoResolve.  There is too much code duplicated here.
26316
26317 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
26318
26319         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
26320
26321         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
26322         to MakeUnionSet.
26323
26324         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
26325         tokens, numbers and strings.
26326
26327         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
26328         parenthesis.
26329
26330         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
26331         asyncronous parameters and the regular parameters.  
26332
26333         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
26334         specify the target directory.
26335
26336         * expression.cs: (This.DoResolve): Simplify
26337         (As.Emit): Optimize, do not generate IsInst if the expression is
26338         always of the given type.
26339
26340         (Is.DoResolve): Bug fix, we were reporting both always/never for
26341         the is expression.
26342
26343         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
26344         creating too many unnecessary arrays.
26345
26346 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
26347
26348         * class.cs (EmitFieldInitializer): Use Assign expression to assign
26349         fields instead of rolling our own initializer.   Takes care of all
26350         implicit conversions, and drops unnecessary static checks/argument.
26351
26352 2002-03-31  Dick Porter  <dick@ximian.com>
26353
26354         * driver.cs: use the GetDirectories() return values properly, and
26355         use "/" as path separator.
26356
26357 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
26358
26359         * expression.cs (Unary): Optimize - - expr into expr.
26360         (Binary): Optimize a + (-b) into a -b.
26361
26362         * codegen.cs (CodeGen): Made all methods static.
26363
26364 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
26365
26366         * rootcontext.cs: 
26367
26368         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
26369         TypeBuilder property.
26370
26371         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
26372         instead. 
26373
26374         * tree.cs: Removed the various RecordXXXX, and replaced with a
26375         single RecordDecl.  Removed all the accessor methods, and just
26376         left a single access point Type 
26377
26378         * enum.cs: Rename DefineEnum to DefineType.
26379
26380         * decl.cs: New abstract method `DefineType' used to unify the
26381         Defines for Enumerations, Interfaces, TypeContainers and
26382         Delegates.
26383
26384         (FindType): Moved LookupInterfaceOrClass here.  Moved the
26385         LookupBaseClasses method that used to live in class.cs and
26386         interface.cs here, and renamed to FindType.
26387
26388         * delegate.cs: Implement DefineType.  Take advantage of the
26389         refactored pattern for locating the parent builder without taking
26390         the parent_builder argument (which we know does not work if we are
26391         nested, and triggering a toplevel definition).
26392
26393 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26394
26395         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
26396         accessibility of a member has changed during override and report
26397         an error if so.
26398
26399         * class.cs (Method.Define, Property.Define): Only complain on
26400         overrides if the method is private, any other accessibility is
26401         fine (and since we just checked the permission is the same, we are
26402         good to go).
26403
26404         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
26405         and elif are processed always.  The other pre-processing
26406         directives are only processed if we are "taking" the path
26407
26408 2002-03-29  Martin Baulig  <martin@gnome.org>
26409
26410         * class.cs (Method.Emit): Only emit symbolic debugging info if the
26411         current location is not Null.
26412
26413         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
26414         a separate method so we can profile it.
26415
26416         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
26417         `span.Seconds' are just seconds, but no minutes or hours.
26418         (MainDriver): Profile the CodeGen.SaveSymbols calls.
26419
26420 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26421
26422         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
26423         Remove the gratuitous set of Final:
26424
26425                                 // If an interface implementation, then we can set Final.
26426                                 if (((flags & MethodAttributes.Abstract) == 0) &&
26427                                     implementing.DeclaringType.IsInterface)
26428                                         flags |= MethodAttributes.Final;
26429
26430         I do not know what I was smoking when I used that.
26431
26432
26433         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
26434         step into fixing the name resolution issues for delegates and
26435         unifying the toplevel name resolution.
26436
26437 2002-03-28  Martin Baulig  <martin@gnome.org>
26438
26439         * class.cs (Method.Emit): If we have a symbol writer, call its
26440         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
26441         tell it about the current method.
26442
26443         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
26444         writer that we're going to emit the first byte of IL code for a new
26445         statement (a new source line).
26446         (EmitContext.EmitTopBlock): If we have a symbol writer, call
26447         EmitContext.Mark() before emitting any code.
26448
26449         * location.cs (SymbolDocument): Return null when we're Null.
26450
26451         * statement.cs (Statement): Moved the `Location loc' variable here.
26452         (Statement.EmitBoolExpression): If we have a symbol writer, call
26453         ec.Mark() before emitting any code to tell it that we're at the
26454         beginning of a new statement.
26455         (StatementExpression): Added `Location' argument to the constructor.
26456         (Block): Added public readonly variable `StartLocation' and public
26457         variable `EndLocation'.  The latter is to be set using SetEndLocation().
26458         (Block): Added constructor which takes a start and end location.
26459         (Block.SetEndLocation): New method. This sets the end location.
26460         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
26461         local variables we create.
26462         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
26463         each statement and do also mark the begin and end of the block.
26464
26465         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
26466         tell it the current lexer.Location, use Location.Null for the end of the
26467         block.
26468         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
26469         current block, set its end location using SetEndLocation().
26470         (statement_expression): StatementExpression constructor now takes the
26471         lexer.Location as additional argument.
26472         (for_statement, declare_local_variables): Likewise.
26473         (declare_local_variables): When creating a new implicit block, use the
26474         new Block constructor and pass it the lexer.Location.
26475
26476 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
26477
26478         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
26479         members also on the parent interfaces recursively.
26480
26481 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
26482
26483         * report.cs: Use new formats, since Gonzalo finished the missing
26484         bits. 
26485
26486         * expression.cs (Binary.ResolveOperator): added missing operator|
26487         operator& and operator^ for bool/bool.
26488
26489         * cs-parser.jay: CheckDef now takes a Location argument that is
26490         used to report errors more precisly (instead of reporting the end
26491         of a definition, we try to track something which is a lot closer
26492         to the source of the problem).
26493
26494         * cs-tokenizer.cs: Track global token use, so we can properly flag
26495         the use of #define/#undef after the first token has been seen.
26496
26497         Also, rename the reportXXXX to Error_DescriptiveName
26498
26499         * decl.cs (DeclSpace.IsTopLevel): Move property here from
26500         TypeContainer, so that Enum and Interface can use this too.
26501
26502         * class.cs (TypeContainer.LookupInterfaceOrClass,
26503         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
26504         `builder' argument.  Typically this was used to pass the parent
26505         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
26506         the definition).  
26507
26508         The problem is that a nested class could trigger the definition of
26509         a toplevel class, and the builder would be obviously wrong in that
26510         case. 
26511
26512         So we drop this argument, and we compute dynamically the
26513         TypeBuilder/ModuleBuilder (the correct information was available
26514         to us anyways from DeclSpace.Parent)
26515
26516         * interface.cs (Interface.DefineInterface): Drop builder
26517         parameter cleanup like class.cs
26518
26519         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
26520         like class.cs
26521
26522         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
26523         values. 
26524
26525         (Try.Emit): Propagate the returns value from the statement.
26526
26527         (Return.Emit): Even if we are leavning 
26528
26529         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
26530
26531         * modifiers.cs: Fix the computation of MethodAttributes flags.
26532
26533 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
26534
26535         * driver.cs: allow compilation of files that start with '/'.
26536         Add a default case when checking the argument of --target.
26537
26538 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
26539
26540         * interface.cs: Implement the same search algorithm for types in
26541         the interface code.
26542
26543         * delegate.cs: Do not allow multiple definition.
26544
26545         * Recovered ChangeLog that got accidentally amputated
26546
26547         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
26548
26549         * rootcontext.cs: Load manually enum to allow core classes to
26550         contain enumerations.
26551
26552         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
26553         Update to new static methods in TypeManager.
26554
26555         * typemanager.cs (GetMethod, GetConstructor): Use our
26556         implementation of FindMembers to find the members, since during
26557         corlib compilation, the types are TypeBuilders and GetMethod and
26558         GetConstructor do not work.
26559
26560         Make all methods in TypeManager static.
26561
26562         (InitCodeHelpers): Split the functionality from
26563         the InitCodeTypes function.
26564
26565         * driver.cs: Call InitCodeHelpers after we have populated the
26566         types. 
26567
26568         * cs-parser.jay (delegate_declaration): we did not used to compute
26569         the delegate name correctly for void delegates.
26570
26571 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
26572
26573         * rootcontext.cs (RootContext): Init the interface_resolve_order
26574         and type_container_resolve_order always.
26575
26576         (ResolveCore, BootstrapCorlib_ResolveClass,
26577         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
26578         compiler when compiling with --nostdlib
26579
26580         * class.cs (TypeContainer.DefineType): Check that our parent is
26581         not null.  This test is most important when we are bootstraping
26582         the core types.
26583
26584         * codegen.cs: Split out the symbol writing code.
26585
26586 2002-03-25  Martin Baulig  <martin@gnome.org>
26587
26588         * driver.cs (-g): Made -g an alias for --debug.
26589
26590 2002-03-24  Martin Baulig  <martin@gnome.org>
26591
26592         * codegen.cs (SymbolWriter): New public variable. Returns the
26593         current symbol writer.
26594         (CodeGen): Added `bool want_debugging_support' argument to the
26595          constructor. If true, tell the ModuleBuild that we want debugging
26596         support and ask it for the ISymbolWriter.
26597         (Save): If we have a symbol writer, call it's Close() method after
26598         saving the assembly.
26599
26600         * driver.c (--debug): New command line argument to create a
26601         debugger information file.
26602
26603         * location.cs (SymbolDocument): New public property. Returns an
26604         ISymbolDocumentWriter object for the current source file or null
26605         if we don't have a symbol writer.
26606
26607 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
26608
26609         * driver.cs (LoadAssembly): Correctly return when all the paths
26610         have been tried and not before.
26611
26612         * statement.cs (Switch.Emit): return the actual coverage for this
26613         statement (returns/not-returns)
26614
26615         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
26616         switch of the statement if we are the last switch section.  That
26617         kills two problems: try/catch problems (we used to emit an empty
26618         nop at the end) and switch statements where all branches would
26619         return. 
26620
26621 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
26622
26623         * driver.cs: Add default assemblies (the equivalent to the
26624         Microsoft CSC.RSP file)
26625
26626         * cs-tokenizer.cs: When updating `cols and setting it to zero,
26627         also update tokens_seen and set it to false.
26628
26629         * driver.cs: Implement --recurse for Mike.
26630
26631         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
26632         correctly splitting out the paths.
26633
26634 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
26635
26636         * interface.cs (Interface.PopulateProperty): Instead of using
26637         `parent' as the declaration space for the set parameters, use
26638         `this' 
26639
26640         * support.cs (InternalParameters): InternalParameters constructor
26641         takes a DeclSpace instead of a TypeContainer.
26642
26643         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
26644         types are being initialized, load the address of it before calling
26645         the function.  
26646
26647         (New): Provide a mechanism to disable the generation of local
26648         value type temporaries when the caller will be providing us with
26649         an address to store it.
26650
26651         (ArrayCreation.EmitDynamicInitializers): Use it.
26652
26653 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
26654
26655         * expression.cs (Invocation.EmitArguments): Only probe for array
26656         property if there is more than one argument.  Sorry about that.
26657
26658         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
26659         empty param arrays.
26660
26661         * class.cs (Method.LabelParameters): Fix incorrect code path that
26662         prevented the `ParamArrayAttribute' from being applied to the
26663         params attribute.
26664
26665 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
26666
26667         * support.cs (ReflectionParameters): Correctly compute whether the
26668         last argument is a params array.  Fixes the problem with
26669         string.Split ('a')
26670
26671         * typemanager.cs: Make the assemblies array always be non-null
26672         (empty, but non-null)
26673
26674         * tree.cs (RecordDecl): New function that abstracts the recording
26675         of names.  This reports error 101, and provides a pointer to the
26676         previous declaration.  Fixes a crash in the compiler.
26677
26678         * cs-parser.jay (constructor_declaration): Update to new grammar,
26679         and provide a constructor_body that can be empty.
26680
26681 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
26682
26683         * driver.cs: Add support for --resources.
26684
26685         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
26686         Make all types for the various array helper methods be integer.
26687
26688         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
26689         CheckState to ConvCast.
26690
26691         (ConvCast): Now it takes a `checked' state argument, to avoid
26692         depending on the emit context for the conversion, and just using
26693         the resolve time setting.
26694
26695         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
26696         instead of Invocation.EmitArguments.  We do not emit the original
26697         arguments, instead we emit those which have been converted to
26698         unsigned int expressions.
26699
26700         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
26701
26702         * codegen.cs: ditto.
26703
26704         * expression.cs (LocalVariableReference): Drop the use of the
26705         Store function that depended on the variable index.
26706
26707         * statement.cs (VariableInfo): Drop the `Idx' property from this
26708         class, as this is not taking into account the indexes for
26709         temporaries tat we generate during the execution, getting the
26710         indexes wrong.
26711
26712         * class.cs: First emit class initializers, then call the parent
26713         constructor. 
26714
26715         * expression.cs (Binary): Fix opcode emision.
26716         (UnaryMutator.EmitCode): Support checked code generation
26717
26718         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
26719         matches for events for both the Static and Instance scans,
26720         pointing to the same element.   Fix that.
26721
26722 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
26723
26724         * rootcontext.cs (ResolveTree): Always set the
26725         interface_resolve_order, because nested interfaces will be calling
26726         into us.
26727
26728         * class.cs (GetInterfaceOrClass): Track the same resolution
26729         process used by TypeManager.LookupType.  This fixes the nested
26730         type lookups in class declarations (separate path from
26731         LookupType). 
26732
26733         (TypeContainer.DefineType): Also define nested interfaces.
26734         (TypeContainer.RegisterOrder): New public function used to
26735         register the order in which child interfaces need to be closed.
26736
26737         Nested interfaces need to be closed after their parents have been
26738         created. 
26739
26740         * interface.cs (InterfaceAttr): Put all the logic for computing
26741         the interface attribute here. 
26742
26743         (DefineInterface): Register our interface order with the
26744         RootContext or with the TypeContainer depending on the case.
26745
26746 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
26747
26748         * cs-parser.jay: rework foreach statement to work with the new
26749         changes to the policy on SimpleNames.
26750
26751         * report.cs: support Stacktrace on warnings as well.
26752
26753         * makefile: drop --unsafe and /unsafe from the compile.
26754
26755 2002-03-13  Ravi Pratap  <ravi@ximian.com>
26756
26757         * ecore.cs (StandardConversionExists): Modify to take an Expression
26758         as the first parameter. Ensure we do null -> reference type conversion
26759         checking.
26760
26761         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
26762         temporary Expression objects.
26763
26764 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
26765
26766         * interface.cs: workaround bug in method overloading resolution
26767         (there is already a bugzilla bug for it).
26768
26769 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
26770
26771         We could also solve this problem by having a separate path for
26772         performing type lookups, instead of DoResolve, we could have a
26773         ResolveType entry point, and only participating pieces of the
26774         production (simplename, deref, array) would implement this. 
26775
26776         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
26777         signal SimpleName to only resolve type names and not attempt to
26778         resolve anything else.
26779
26780         * expression.cs (Cast): Set the flag.
26781
26782         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
26783
26784         * class.cs: Only report 108 if there is no `new' modifier.
26785
26786         * cs-parser.jay: rework foreach statement to work with the new
26787         changes to the policy on SimpleNames.
26788
26789         * report.cs: support Stacktrace on warnings as well.
26790
26791         * makefile: drop --unsafe and /unsafe from the compile.
26792
26793 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
26794
26795         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
26796         lookups here, instead of doing that at parse time.  This means
26797         that our grammar will not introduce `LocalVariableReferences' as
26798         expressions at this point.  That solves the problem of code like
26799         this:
26800
26801         class X {
26802            static void Main ()
26803            { int X = 1;
26804             { X x = null }}}
26805
26806         This is only half the fix.  The full fix requires parameters to
26807         also be handled in this way.
26808
26809         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
26810         makes the use more obvious of the DeclSpace.  The
26811         ec.TypeContainer.TypeBuilder is now only used to pull the
26812         TypeBuilder for it.
26813
26814         My theory is that I can get rid of the TypeBuilder completely from
26815         the EmitContext, and have typecasts where it is used (from
26816         DeclSpace to where it matters).  
26817
26818         The only pending problem is that the code that implements Aliases
26819         is on TypeContainer, and probably should go in DeclSpace.
26820
26821         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
26822         lookups here, instead of doing that at parse time.  This means
26823         that our grammar will not introduce `LocalVariableReferences' as
26824         expressions at this point.  That solves the problem of code like
26825         this:
26826
26827         class X {
26828            static void Main ()
26829            { int X = 1;
26830             { X x = null }}}
26831
26832         This is only half the fix.  The full fix requires parameters to
26833         also be handled in this way.
26834
26835         * class.cs (Property.DefineMethod): When implementing an interface
26836         method, set newslot, when implementing an abstract method, do not
26837         set the flag (before we tried never setting it, or always setting
26838         it, which is the difference).
26839         (Indexer.DefineMethod): same.
26840         (Method.DefineMethod): same.
26841
26842         * ecore.cs: Only set the status used flag if we get back a Field.
26843
26844         * attribute.cs: Temporary hack, so Paolo can keep working.
26845
26846 2002-03-08  Ravi Pratap  <ravi@ximian.com>
26847
26848         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
26849         the unmanaged type in the case we have a MarshalAs attribute.
26850
26851         (Resolve): Handle the case when we are parsing the special MarshalAs
26852         attribute [we need to store the unmanaged type to use later]
26853
26854         * typemanager.cs (marshal_as_attr_type): Built in type for the 
26855         MarshalAs Attribute.
26856
26857         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
26858         on parameters and accordingly set the marshalling info.
26859
26860 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
26861
26862         * class.cs: Optimizing slightly by removing redundant code after
26863         we switched to the `NoTypes' return value.
26864         (Property.DefineMethod): use NoTypes here too.
26865
26866         This fixes the bug I introduced in my last batch of changes.
26867
26868 2002-03-05  Ravi Pratap  <ravi@ximian.com>
26869
26870         * tree.cs (RecordEnum): Add. We now keep track of enums too.
26871
26872         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
26873         Enums since those are types too. 
26874
26875         * cs-parser.jay (enum_declaration): Record enums as we parse them.
26876
26877         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
26878         thanks to a call during the lookup process.
26879
26880 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
26881
26882         * statement.cs (Foreach): Lots of work to accomodate a particular
26883         kind of foreach statement that I had not kept in mind.  It is
26884         possible to have foreachs on classes that provide a GetEnumerator
26885         method that return objects that implement the "pattern" for using
26886         a foreach, there is no need to support GetEnumerator
26887         specifically. 
26888
26889         This is needed to compile nant.
26890
26891         * decl.cs: Only report 114 if the member is not `Finalize' and if
26892         the warning level is at least 2.
26893
26894         * class.cs: Moved the compare function from Method to
26895         MethodSignature. 
26896
26897         (MethodSignature.InheritableMemberSignatureCompare): Add new
26898         filter function that is used to extract inheritable methods from a
26899         class. 
26900
26901         (Method.Define): Use the new `inheritable_method_signature_filter'
26902         delegate
26903
26904         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
26905         command. 
26906
26907 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
26908
26909         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
26910
26911         * cs-parser.jay: Add opt_semicolon to the interface declaration.
26912
26913         * expression.cs: Pass location information to
26914         ConvertImplicitStandard. 
26915
26916         * class.cs: Added debugging code to track return values from
26917         interfaces. 
26918
26919 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
26920
26921         * expression.cs (Is.DoResolve): If either side of the `is' is an
26922         interface, do not flag the warning.
26923
26924         * ecore.cs (ImplicitReferenceConversion): We need a separate test
26925         for interfaces
26926
26927         * report.cs: Allow for --fatal to be used with --probe.
26928
26929         * typemanager.cs (NoTypes): Move the definition for the empty Type
26930         array here. 
26931
26932         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
26933         properties. 
26934         (TypeContainer.DefineProxy): New function used to proxy to parent
26935         implementations when implementing interfaces.
26936         (TypeContainer.ParentImplements): used to lookup if our parent
26937         implements a public function that is required by an interface.
26938         (TypeContainer.VerifyPendingMethods): Hook this up.
26939
26940         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
26941         `modules' and `assemblies' arraylists into arrays.  We only grow
26942         these are the very early start up of the program, so this improves
26943         the speedof LookupType (nicely measured).
26944
26945         * expression.cs (MakeByteBlob): Replaced unsafe code with
26946         BitConverter, as suggested by Paolo.
26947
26948         * cfold.cs (ConstantFold.Binary): Special case: perform constant
26949         folding of string concatenation, but if either side is a string,
26950         and the other is not, then return null, and let the runtime use
26951         the concatenation on the string plus the object (using
26952         `Object.ToString'). 
26953
26954 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
26955
26956         Constant Folding has been implemented now.
26957
26958         * expression.cs (Unary.Reduce): Do not throw an exception, catch
26959         the error instead on types that are not supported in one's
26960         complement. 
26961
26962         * constant.cs (Constant and all children): New set of functions to
26963         perform implict and explicit conversions.
26964
26965         * ecore.cs (EnumConstant): Implement the new functions to perform
26966         conversion by proxying to the child expression.
26967
26968         * codegen.cs: (ConstantCheckState): Constant evaluation has its
26969         own separate setting that can not be turned off from the command
26970         line using --unchecked or --checked and is only controlled using
26971         the checked/unchecked statements and expressions.  This setting is
26972         used by the constant folder to flag errors.
26973
26974         * expression.cs (CheckedExpr, UncheckedExpr): Set the
26975         ConstantCheckState as well.   
26976
26977         During Resolve, they also have to flag the state, because the
26978         constant folder runs completely in the Resolve phase.
26979
26980         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
26981         well.
26982
26983 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
26984
26985         * cfold.cs: New file, this file contains the constant folder.
26986
26987         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
26988         argument to track whether we are using the resulting address to
26989         load or store a value and provide better error messages. 
26990
26991         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
26992         new AddressOf arguments.
26993
26994         * statement.cs (Foreach.EmitCollectionForeach): Update
26995
26996         * expression.cs (Argument.Emit): Call AddressOf with proper
26997         arguments to track usage.
26998
26999         (New.DoEmit): Call AddressOf with new arguments.
27000
27001         (Unary.Emit): Adjust AddressOf call.
27002
27003 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27004
27005         * cs-parser.jay (member_access): Change the case for pre-defined types
27006         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27007         this suggestion.
27008
27009         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27010         a method body.
27011
27012         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27013         essentially like methods and apply attributes like MethodImplOptions to them too.
27014
27015         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27016         not being null.
27017
27018         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27019         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27020         is the DeclSpace.
27021
27022         * Update code everywhere accordingly.
27023
27024         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27025
27026         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27027
27028 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27029
27030         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27031         try performing lookups against those instead of jumping straight into using
27032         the 'using' clauses.
27033
27034         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27035
27036         (LookupType): Perform lookups in implicit parents too.
27037
27038         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27039         sequence as RootContext.LookupType. 
27040
27041         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27042         the various cases of namespace lookups into this method.
27043
27044 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27045
27046         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27047         in positional arguments)
27048
27049         * class.cs (Operator): Update the AllowedModifiers to contain
27050         extern. 
27051
27052         * cs-parser.jay: Update operator declaration to allow for the
27053         operator body to be empty.
27054
27055         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
27056         values. 
27057
27058 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
27059
27060         * class.cs (Method.Emit): Label parameters.
27061
27062         * driver.cs: Return 1 or 0 as the program exit code.
27063
27064 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
27065
27066         * expression.cs: Special case the `null' object when trying to
27067         auto-compute the type, as anything can be explicitly converted to
27068         that. 
27069
27070         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
27071         spotting this Paolo.
27072
27073         (Expression.ImplicitNumericConversion): Perform comparissions of
27074         the type using the underlying type in the case of an enumeration
27075         rather than using the enumeration type for the compare.
27076
27077         Cope with the underlying == type case, which is not possible to
27078         catch before. 
27079
27080         (Expression.ConvertNumericExplicit): Perform comparissions of
27081         the type using the underlying type in the case of an enumeration
27082         rather than using the enumeration type for the compare.
27083
27084         * driver.cs: If the user does not supply an extension, assume .exe
27085
27086         * cs-parser.jay (if_statement): Rewrote so that we can track the
27087         location for the if statement.
27088
27089         * expression.cs (Binary.ConstantFold): Only concat strings when
27090         the operation is "+", not everything ;-)
27091
27092         * statement.cs (Statement.EmitBoolExpression): Take a location
27093         argument. 
27094         (If, While, Do): Track location.
27095
27096         * expression.cs (Binary.ResolveOperator): In the object + string
27097         case, I was missing a call to ConvertImplicit
27098
27099 2002-02-25  Ravi Pratap  <ravi@ximian.com>
27100
27101         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
27102         Location arguments. Ensure we use RootContext.LookupType to do our work
27103         and not try to do a direct Type.GetType and ModuleBuilder.GetType
27104
27105         * interface.cs (PopulateMethod): Handle the type of the parameter being
27106         null gracefully.
27107
27108         * expression.cs (Invocation.BetterFunction): Handle the case when we 
27109         have a params method with no fixed arguments and a call is made with no
27110         arguments.
27111
27112 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
27113
27114         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
27115         the verbatim-string-literal
27116
27117         * support.cs (InternalParameters.ParameterModifier): handle null
27118         fixed parameters.
27119         (InternalParameters.ParameterType): ditto.
27120
27121         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
27122         duplicating the name of the variable parameter.
27123         (GetParameterByName): Fix bug where we were not looking up array
27124         paramters if they were the only present (thanks Paolo!).
27125         (GetParameterInfo): We only have an empty set of types if both
27126         fixed and array are set to null.
27127         (GetParameterInfo-idx): Handle FixedParameter == null
27128
27129         * cs-parser.jay: Handle the case where there is no catch
27130         statements (missing null test).
27131
27132 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
27133
27134         * driver.cs (MainDriver): Be conservative on our command line
27135         handling.
27136
27137         Catch DirectoryNotFoundException when calling GetFiles.
27138
27139         (SplitPathAndPattern): Used to split the input specification into
27140         a path and a pattern that we can feed to Directory.GetFiles.
27141
27142 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
27143
27144         * statement.cs (Fixed): Implement the last case of the Fixed
27145         statement (string handling).
27146
27147         * expression.cs (StringPtr): New class used to return a char * to
27148         a string;  Used by the Fixed statement.
27149
27150         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
27151
27152         * expression.cs (Binary.ResolveOperator): Remove redundant
27153         MemberLookup pn parent type.
27154         Optimize union call, we do not need a union if the types are the same.
27155         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
27156         type.
27157
27158         Specialize the use of MemberLookup everywhere, instead of using
27159         the default settings. 
27160
27161         (StackAlloc): Implement stackalloc keyword.
27162
27163         * cs-parser.jay: Add rule to parse stackalloc.
27164
27165         * driver.cs: Handle /h, /help, /?
27166
27167         * expression.cs (MakeByteBlob): Removed the hacks we had in place
27168         before we supported unsafe code.
27169
27170         * makefile: add --unsafe to the self compilation of mcs.
27171
27172 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
27173
27174         * expression.cs (PointerArithmetic): New class that is used to
27175         perform pointer arithmetic.
27176         (Binary.Resolve): Handle pointer arithmetic
27177         Handle pointer comparission.
27178         (ArrayPtr): Utility expression class that is used to take the
27179         address of an array.
27180
27181         (ElementAccess): Implement array access for pointers
27182
27183         * statement.cs (Fixed): Implement fixed statement for arrays, we
27184         are missing one more case before we are done.
27185
27186         * expression.cs (Indirection): Implement EmitAssign and set the
27187         ExprClass to Variable.  This allows pointer dereferences to be
27188         treated as variables, and to have values assigned to them.
27189
27190         * ecore.cs (Expression.StoreFromPtr): New utility function to
27191         store values dereferencing.
27192
27193 2002-02-20  Ravi Pratap  <ravi@ximian.com>
27194
27195         * expression.cs (Binary.ResolveOperator): Ensure that we are
27196         not trying to operate on a void type - this fixes the reported
27197         bug.
27198
27199         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
27200         the parent implementation is sealed.
27201
27202         * ../errors/cs0239.cs : Add.
27203
27204         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
27205
27206         * typemanager.cs (unverifiable_code_type): Corresponds to 
27207         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
27208         which have unsafe code in them.
27209
27210         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
27211         unsafe context.
27212
27213 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
27214
27215         * cs-tokenizer.cs: Add support for @"litreal strings"
27216
27217         Make tokenizer accept pre-processor directives
27218         on any column (remove the old C-like limitation). 
27219
27220         * rootcontext.cs (EmitCode): Emit any global attributes.
27221         (AddGlobalAttributes): Used to keep track of assembly attributes. 
27222
27223         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
27224
27225         * cs-parser.jay: Add support for global attributes.  
27226
27227 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
27228
27229         * expression.cs (Indirection): New helper class.  Unary will
27230         create Indirection classes to be able to implement the
27231         IMemoryLocation interface on it.
27232
27233 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
27234
27235         * cs-parser.jay (fixed_statement): reference the right statement.
27236
27237         * statement.cs (Fixed.Emit): Finish implementing the fixed
27238         statement for the &x case.
27239
27240 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
27241
27242         * class.cs (Property.Define, Method.Define): Remove newslot when
27243         `implementing'.  
27244
27245         * modifiers.cs: My use of NewSlot when `Abstract' was set was
27246         wrong.  NewSlot should only be used if the `new' keyword is present.
27247
27248         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
27249         locating our system dir.  Sorry about this.
27250
27251 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27252
27253         * driver.cs (GetSystemDir): Compute correctly the location of our
27254         system assemblies.  I was using the compiler directory instead of
27255         the library directory.
27256
27257 2002-02-13  Ravi Pratap  <ravi@ximian.com>
27258
27259         * expression.cs (BetterFunction): Put back in what Miguel commented out
27260         since it is the correct fix. The problem is elsewhere ;-)
27261
27262         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
27263         parameters of the parms method are themselves compatible or not !
27264
27265         (StandardConversionExists): Fix very dangerous bug where we were forgetting
27266         to check that a class implements an interface before saying that an implicit
27267         conversion was allowed. Use ImplementsInterface to do the checking.
27268
27269 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27270
27271         * class.cs (Method.Define): Track whether we are an explicit
27272         implementation or not.  And only call DefineMethodOverride if we
27273         are an explicit implementation.
27274
27275         (Property.DefineMethod): Ditto.
27276
27277 2002-02-11  Ravi Pratap  <ravi@ximian.com>
27278
27279         * expression.cs (BetterFunction): Catch hideous bug which was
27280          preventing us from detecting ambiguous calls due to implicit casts i.e
27281         cs0121.
27282
27283 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
27284
27285         * support.cs (Pair): Remove un-needed method.  I figured why I was
27286         getting the error in cs-parser.jay, the variable in a foreach loop
27287         is readonly, and the compiler does not really treat this as a variable.
27288
27289         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
27290         instead of EQUALS in grammar.  
27291
27292         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
27293
27294         * expression.cs (Unary.DoResolve): Check whether the argument is
27295         managed or not.
27296
27297 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
27298
27299         * support.cs: Api for Pair to set a value.  Despite the fact that
27300         the variables are public the MS C# compiler refuses to compile
27301         code that accesses the field if the variable is part of a foreach
27302         statement. 
27303
27304         * statement.cs (Fixed): Begin implementation of the fixed
27305         statement.
27306
27307         (Block.AddVariable): Return the VariableInfo on success and null
27308         on failure instead of true/false. 
27309
27310         * cs-parser.jay (foreach): Catch errors on variables already
27311         defined (we were ignoring this value before) and properly unwind
27312         the block hierarchy
27313
27314         (fixed_statement): grammar for the fixed statement.
27315
27316 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
27317
27318         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
27319         pointer types to be incretemented.
27320
27321         (SizeOf): Implement.
27322
27323         * cs-parser.jay (pointer_member_access): Implement
27324         expr->IDENTIFIER production.
27325
27326         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
27327         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
27328         on safe contexts.
27329
27330         (Unary): Implement indirection.
27331
27332         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
27333         use in non-unsafe context).
27334
27335         (SimpleName.DoResolve): Check for pointers in field access on safe
27336         contexts. 
27337
27338         (Expression.LoadFromPtr): Factor the load-indirect code in this
27339         function.  This was duplicated in UnboxCast and ParameterReference
27340
27341 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
27342
27343         * expression.cs (ComposedCast): report an error if a pointer cast
27344         is used in a safe region.
27345
27346         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
27347         pointer type casts in unsafe context.
27348
27349         * codegen.cs (EmitContext): Set up IsUnsafe.
27350
27351         * cs-parser.jay (non_expression_type): Add productions for pointer
27352         casts. 
27353
27354         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
27355         code.  We should not use force into static mode if the method is
27356         not virtual.  Fixes bug in MIS
27357
27358         * statement.cs (Do.Emit, While.Emit, For.Emit,
27359         Statement.EmitBoolExpression): Add support to Do and While to
27360         propagate infinite loop as `I do return' semantics.
27361
27362         Improve the For case to also test for boolean constants.
27363
27364         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
27365         to the list of attributes we can add.
27366
27367         Remove `EmitContext' argument.
27368
27369         * class.cs (Method.Define): Apply parameter attributes.
27370         (Constructor.Define): Apply parameter attributes.
27371         (MethodCore.LabelParameters): Move here the core of labeling
27372         parameters. 
27373
27374         * support.cs (ReflectionParameters.ParameterModifier,
27375         InternalParameters.ParameterModifier): Use IsByRef on the type and
27376         only return the OUT bit for these parameters instead of in/out/ref
27377         flags.
27378
27379         This is because I miss-understood things.  The ParameterInfo.IsIn
27380         and IsOut represent whether the parameter has the [In] and [Out]
27381         attributes set.  
27382
27383 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
27384
27385         * ecore.cs (FieldExpr.Emit): Release temporaries.
27386
27387         * assign.cs (LocalTemporary.Release): new function.
27388
27389         * codegen.cs (EmitContext.GetTemporaryStorage,
27390         EmitContext.FreeTemporaryStorage): Rework the way we deal with
27391         temporary storage.  Now we can "put back" localbuilders when we
27392         are done with them
27393
27394 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
27395
27396         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
27397         need to make a copy of the variable to generate verifiable code.
27398
27399 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
27400
27401         * driver.cs: Compute dynamically the system directory.
27402
27403         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
27404         Slower, but more generally useful.  Used by the abstract
27405         registering implementation. 
27406
27407         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
27408         the rules for the special rule on Type/instances.  First check if
27409         we have the same name, and if so, try that special static path
27410         rather than the instance path.
27411
27412 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
27413
27414         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
27415         for, while and if.
27416
27417         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
27418         Enum, ValueType, Delegate or Array for non-corlib compiles.
27419
27420         * cs-tokenizer.cs: Catch long identifiers (645)
27421
27422         * typemanager.cs (IndexerPropetyName): Ravi never tested this
27423         piece of code.
27424
27425         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
27426         fix, we were returning too early, so we were not registering
27427         pending methods from abstract classes.
27428
27429         Do not register pending methods if the class is abstract.
27430
27431         * expression.cs (Conditional.DoResolve): Report circular implicit
27432         conversions when we neecd to compute it for conditional
27433         expressions. 
27434
27435         (Is.DoResolve): If the expression is always of the provided type,
27436         flag warning 183.  If the expression can not ever be of the
27437         provided type flag warning 184.
27438
27439         * class.cs: Catch 169 as well.
27440
27441         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
27442         read. 
27443
27444 2002-01-18  Nick Drochak  <ndrochak@gol.com>
27445
27446         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
27447
27448 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
27449
27450         * interface.cs: (PopulateMethod): Check for pointers being defined
27451         only if the unsafe context is active.
27452         (PopulateProperty): ditto.
27453         (PopulateIndexer): ditto.
27454
27455         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
27456         specified.  If pointers are present, make sure that they are
27457         present in an unsafe context.
27458         (Constructor, Constructor.Define): ditto.
27459         (Field, Field.Define): ditto.
27460         (Property, Property.Define): ditto.
27461         (Event, Event.Define): ditto.
27462
27463         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
27464         hashtable if there are classes or structs defined.
27465
27466         * expression.cs (LocalVariableReference.DoResolve): Simplify this
27467         code, as the constant resolution moved.
27468
27469         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
27470         the metadata, so we can flag error 133. 
27471
27472         * decl.cs (MemberCore.UnsafeOK): New function to test that a
27473         pointer is being declared in an unsafe context.
27474
27475 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
27476
27477         * modifiers.cs (Modifiers.Check): Require a Location argument.
27478         Report error 227 for Unsafe use.
27479
27480         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
27481
27482         * statement.cs (For.Emit): If the test is null, then report that
27483         we do `return', as we wont reach anything afterwards.
27484
27485         (Switch.SwitchGoverningType): Track the expression that matched
27486         the conversion.
27487
27488         * driver.cs: Allow negative numbers as an error code to flag.
27489
27490         * cs-parser.jay: Handle 1551.
27491
27492         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
27493
27494 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
27495
27496         * cs-parser.jay: Report 1518 (type declaration can only contain
27497         class, struct, interface, enum or delegate)
27498
27499         (switch_label): Report 1523 (keywords `case' or `default' must
27500         preced code)
27501
27502         (opt_switch_sections): Report 1522 (empty switch)
27503
27504         * driver.cs: Report 1515 (response file specified multiple times)
27505         Report 1516 (Source file specified multiple times).
27506
27507         * expression.cs (Argument.Resolve): Signal 1510
27508
27509         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
27510         access not allowed in static code)
27511
27512 2002-01-11  Ravi Pratap  <ravi@ximian.com>
27513
27514         * typemanager.cs (IsPointerType): Utility method which we are going
27515         to need a lot.
27516
27517         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
27518         the object type, so we take care of that.
27519
27520         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
27521
27522         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
27523         added to non-params parameters :-)
27524
27525         * typemanager.cs (CSharpName): Include 'void' type too. 
27526
27527         (void_ptr_type): Include in the set of core types.
27528
27529         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
27530         duplicating code.
27531
27532         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
27533         an unsafe context.
27534
27535         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
27536         completely forgotten about it.
27537
27538 2002-01-10  Ravi Pratap  <ravi@ximian.com>
27539
27540         * cs-parser.jay (pointer_type): Add. This begins our implementation
27541         of parsing rules for unsafe code.
27542
27543         (unsafe_statement): Implement.
27544
27545         (embedded_statement): Modify to include the above.
27546
27547         * statement.cs (Unsafe): Implement new class for unsafe blocks.
27548
27549         * codegen.cs (EmitContext.InUnsafe): Add. This determines
27550         if the current context is an unsafe one.
27551
27552         * cs-parser.jay (local_variable_pointer_type): Since local variable types
27553         are handled differently, we need separate rules for them.
27554
27555         (local_variable_declaration): Update to use local_variable_pointer_type
27556         to allow variable declarations of unmanaged pointer types.
27557
27558         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
27559         in unsafe contexts.
27560
27561         * ../errors/cs0214.cs : Add.
27562
27563 2002-01-16  Nick Drochak  <ndrochak@gol.com>
27564
27565         * makefile: remove 'response' file when cleaning.
27566
27567 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
27568
27569         * cs-parser.jay: Report 1524.
27570
27571 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
27572
27573         * typemanager.cs (RegisterMethod): drop checking if we have
27574         registered this from here
27575
27576 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
27577
27578         * class.cs (Method.EmitDestructor): Implement calling our base
27579         destructor. 
27580
27581         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
27582         value of InFinally.
27583
27584         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
27585         this routine and will wrap the call in a try/catch block.  Deal
27586         with the case.
27587
27588 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
27589
27590         * ecore.cs (Expression.MemberLookup): instead of taking a
27591         parameter `same_type' that was used to tell whether we could
27592         access private members we compute our containing type from the
27593         EmitContext.
27594
27595         (FieldExpr): Added partial support for volatile fields.  This does
27596         not work for volatile fields exposed from assemblies, as I can not
27597         figure out how to extract the modreq from it.
27598
27599         Updated all the source files to use this.
27600
27601         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
27602         because it is referenced by MemberLookup very often. 
27603
27604 2002-01-09  Ravi Pratap  <ravi@ximian.com>
27605
27606         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
27607         TypeBuilder.GetCustomAttributes to retrieve what we need.
27608
27609         Get rid of redundant default_member_attr_type as this is the same as
27610         default_member_type which already exists.
27611
27612         * interface.cs, attribute.cs : Update accordingly.
27613
27614 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
27615
27616         * typemanager.cs: Enable IndexerPropertyName again.  It does not
27617         work for TYpeBuilders though.  Ravi, can you please fix this?
27618
27619         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
27620
27621         * expression.cs (Argument.Emit): Handle the case of ref objects
27622         being passed to ref functions;  
27623
27624         (ParameterReference.EmitLoad): Loads the content of the pointer
27625         without dereferencing.
27626
27627 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
27628
27629         * cs-tokenizer.cs: Implemented the pre-processing expressions.
27630
27631 2002-01-08  Ravi Pratap  <ravi@ximian.com>
27632
27633         * class.cs (Indexer.DefineMethod): Incorporate the interface
27634         type in the name of the method if we are doing explicit interface
27635         implementation.
27636
27637         * expression.cs (ConversionExists): Remove as it is completely obsolete.
27638
27639         (BetterConversion): Fix extremely trivial bug where we were referring to
27640         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
27641         again !
27642
27643         * ../errors/bug16.cs : Add although we have fixed it.
27644
27645 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
27646
27647         * expression.cs (BaseIndexer): Begin implementation.
27648
27649         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
27650
27651         * cs-parser.jay (indexer_declarator): Use qualified_identifier
27652         production directly to remove a shift/reduce, and implement
27653         explicit interface implementation.
27654
27655         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
27656         after a floating point suffix.
27657
27658         * expression.cs (DoNumericPromotions): Improved the conversion for
27659         uint/uint.  If we have a constant, we avoid doing a typecast to a
27660         larger type.
27661
27662         * class.cs (Indexer): Implement explicit interface implementation
27663         for indexers.
27664
27665 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
27666
27667         * class.cs: make the default instance constructor public and hidebysig.
27668
27669 2001-01-03  Ravi Pratap  <ravi@ximian.com>
27670
27671         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
27672         so we can call it from elsewhere.
27673
27674         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
27675         we emit it internally if the class has a defined indexer; otherwise the user
27676         emits it by decorating the class definition with the DefaultMemberAttribute.
27677
27678         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
27679         attribute is not used on a type which defines an indexer.
27680
27681         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
27682         character when we skip whitespace.
27683
27684         * ../errors/cs0646.cs : Add.
27685
27686 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
27687
27688         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
27689         again. 
27690
27691         * makefile: Add practical target `mcs3.exe' which builds the third
27692         generation compiler. 
27693
27694         * expression.cs (New): Fix structures constructor calling.
27695
27696         * class.cs (Property, Method, Indexer): Emit Final flag on the
27697         method if we are an interface implementation and we are not
27698         abstract. 
27699
27700         * ecore.cs (PropertyExpr): New public field `IsBase', tells
27701         whether this property is referencing a `base' method.
27702
27703         * expression.cs (Invocation.EmitCall): take an extra argument:
27704         is_base, this is used to determine whether the `call' or
27705         `callvirt' opcode should be used.
27706
27707
27708         * delegate.cs: update EmitCall.
27709
27710         * class.cs (Method.Define): Set NewSlot for the cases where we are
27711         not implementing an interface method.
27712
27713         (Property.Define): ditto.
27714
27715 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
27716
27717         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
27718         'r'.  Allows mcs to parse itself fully.
27719
27720 2002-01-02  Ravi Pratap  <ravi@ximian.com>
27721
27722         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
27723         of the number of initializers that require the InitializeArray method.
27724
27725         (CheckIndices): Store the Expression in all cases - not the plain value. Also
27726         update the above field where necessary.
27727
27728         (MakeByteBlob): Update accordingly.
27729
27730         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
27731         greater than 2.
27732
27733         (EmitDynamicInitializers): Update in accordance with the new optimization.
27734
27735         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
27736         same OpCode applies.
27737
27738         * cs-parser.jay : Fix some glaring errors I introduced.
27739
27740 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
27741
27742         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
27743         so that we can check for name clashes there too.
27744
27745         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
27746         for interface indexers.
27747
27748         * interfaces.cs (Define): Emit the default member attribute.
27749
27750         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
27751         variable was being referred to while setting the value ;-)
27752
27753 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
27754
27755         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
27756         byte-by-byte information when we know the data is zero.
27757
27758         Make the block always a multiple of 4, because
27759         DefineInitializedData has a bug.
27760
27761         * assign.cs: Fix, we should assign from the temporary, not from
27762         the source. 
27763
27764         * expression.cs (MakeByteBlob): Fix my incorrect code.
27765
27766 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
27767
27768         * typemanager.cs (EnumToUnderlying): This function is used to get
27769         the underlying type from an enumeration, because it does not
27770         always work. 
27771
27772         * constant.cs: Use the I4_S form for values between -128 and 127.
27773
27774         * statement.cs (Block.LookupLabel): Looks up a label.
27775         (Block): Drop support for labeled blocks.
27776
27777         (LabeledStatement): New kind of statement that represents a label
27778         only.
27779
27780         (Goto): Finally implement this bad boy.
27781
27782         * cs-parser.jay: Update to reflect new mechanism to implement
27783         labels.
27784
27785 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
27786
27787         * codegen.cs (EmitContext.This): a codegen property that keeps the
27788         a single instance of this instead of creating many different this
27789         instances. 
27790
27791         * delegate.cs (Delegate.DoResolve): Update to use the property;
27792
27793         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
27794
27795         * expression.cs (BaseAccess.DoResolve): Ditto.
27796
27797 2001-12-29  Ravi Pratap  <ravi@ximian.com>
27798
27799         * typemanager.cs (methodimpl_attr_type): Add to hold the type
27800         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
27801
27802         (InitCoreTypes): Update accordingly.
27803
27804         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
27805         so we can quickly store the state.
27806
27807         (ApplyAttributes): Set the correct implementation flags
27808         for InternalCall methods.
27809
27810 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
27811
27812         * expression.cs (EmitCall): if a method is not virtual, then do
27813         not use callvirt on it.
27814
27815         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
27816         user defined stuff) requires the use of stobj, which takes an
27817         address on the stack instead of an array and an index.  So emit
27818         the Ldelema operation for it.
27819
27820         (EmitStoreOpcode): Use stobj for valuetypes.
27821
27822         (UnaryMutator.EmitCode): Use the right 1 value depending on
27823         whether we are dealing with int64/uint64, float or doubles.
27824
27825         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
27826         constructors that I implemented last night.
27827
27828         (Constructor.IsDefault): Fix to work properly for static
27829         constructors.
27830
27831         * cs-parser.jay (CheckDef): report method signature errors.
27832         Update error number 103 to be 132.
27833
27834         * decl.cs: New AdditionResult enumeration value: MethodExists.
27835         Although we do this check for methods later on in the semantic
27836         analysis, catching repeated default constructors is so easy that
27837         we catch these here. 
27838
27839         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
27840         promotions code.
27841
27842         (ParameterReference.EmitAssign, Emit): handle
27843         bools as bytes.
27844
27845         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
27846         (ArrayAccess.EmitStoreOpcode): ditto.
27847
27848         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
27849
27850         * expression.cs (MakeByteBlob): Complete all the missing types
27851         (uint, short, ushort, byte, sbyte)
27852
27853         * class.cs: Only init instance field initializers on instance
27854         constructors. 
27855
27856         Rename `constructors' to instance_constructors. 
27857
27858         (TypeContainer.AddConstructor): Only add constructors to the list
27859         if it is not static.
27860
27861         Make sure that we handle default_static_constructor independently
27862         everywhere where we handle instance_constructors
27863
27864 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
27865
27866         * class.cs: Do not lookup or create a base initializer for a
27867         static constructor.
27868
27869         (ConstructorInitializer.Resolve): use the proper type to lookup
27870         for constructors.
27871
27872         * cs-parser.jay: Report error 1585 (modifiers between type and name).
27873
27874         * enum.cs, interface.cs: Remove CloseType, this is taken care by
27875         in DeclSpace. 
27876
27877         * decl.cs: CloseType is now an virtual method, the default
27878         implementation just closes this type.
27879
27880 2001-12-28  Ravi Pratap  <ravi@ximian.com>
27881
27882         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
27883         to PreserveSig by default. Also emit HideBySig on such methods.
27884
27885         Basically, set the defaults to standard values.
27886
27887         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
27888         argument, if candidate is better, it can't be worse than the best !
27889
27890         (Invocation): Re-write bits to differentiate between methods being
27891         applicable in their expanded form and their normal form - for params
27892         methods of course.
27893
27894         Get rid of use_standard everywhere as only standard conversions are allowed
27895         in overload resolution. 
27896
27897         More spec conformance.
27898
27899 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
27900
27901         * driver.cs: Add --timestamp, to see where the compiler spends
27902         most of its time.
27903
27904         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
27905         `this' in static code.
27906
27907         (SimpleName.DoResolve): Implement in terms of a helper function
27908         that allows static-references to be passed upstream to
27909         MemberAccess.
27910
27911         (Expression.ResolveWithSimpleName): Resolve specially simple
27912         names when called by MemberAccess to implement the special
27913         semantics. 
27914
27915         (Expression.ImplicitReferenceConversion): Handle conversions from
27916         Null to reference types before others, as Null's type is
27917         System.Object. 
27918
27919         * expression.cs (Invocation.EmitCall): Handle the special case of
27920         calling methods declared on a reference type from a ValueType
27921         (Base classes System.Object and System.Enum)
27922
27923         (MemberAccess.Resolve): Only perform lookups on Enumerations if
27924         the left hand side is a TypeExpr, not on every enumeration. 
27925
27926         (Binary.Resolve): If types are reference types, then do a cast to
27927         object on operators != and == of both arguments.
27928
27929         * typemanager.cs (FindMembers): Extract instance and static
27930         members if requested.
27931
27932         * interface.cs (PopulateProperty): Use void_type instead of null
27933         as the return type for the setter method.
27934
27935         (PopulateIndexer): ditto.
27936
27937 2001-12-27  Ravi Pratap  <ravi@ximian.com>
27938
27939         * support.cs (ReflectionParameters): Fix minor bug where we
27940         were examining the wrong parameter for the ParamArray attribute.
27941
27942         Cope with requests for the type of the parameter at position
27943         greater than the params parameter's. We now return the element
27944         type of the params array as that makes more sense.
27945
27946         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
27947         accordingly as we no longer have to extract the element type
27948         ourselves.
27949
27950         (Invocation.OverloadResolve): Update.
27951
27952 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
27953
27954         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
27955         against IEnumerator, test whether the return value is a descendant
27956         of the IEnumerator interface.
27957
27958         * class.cs (Indexer.Define): Use an auxiliary method to implement
27959         the other bits of the method definition.  Begin support for
27960         explicit interface implementation.
27961
27962         (Property.DefineMethod): Use TypeManager.void_type instead of null
27963         for an empty return value.
27964
27965 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
27966
27967         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
27968         dealing with a FieldExpr which is composed of a FieldBuilder, in
27969         the code path we did extract the constant, but we should have
27970         obtained the underlying value to be able to cast it (otherwise we
27971         end up in an infinite loop, this is what Ravi was running into).
27972
27973         (ArrayCreation.UpdateIndices): Arrays might be empty.
27974
27975         (MemberAccess.ResolveMemberAccess): Add support for section
27976         14.5.4.1 that deals with the special case of E.I when E is a type
27977         and something else, that I can be a reference to a static member.
27978
27979         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
27980         handle a particular array type to create byte blobs, it is just
27981         something we dont generate byteblobs for.
27982
27983         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
27984         arguments. 
27985
27986         * location.cs (Push): remove the key from the hashtable that we
27987         are about to add.   This happens for empty files.
27988
27989         * driver.cs: Dispose files after we have parsed them.
27990
27991         (tokenize): new function that only runs the tokenizer on its
27992         input, for speed testing.
27993
27994 2001-12-26  Ravi Pratap  <ravi@ximian.com>
27995
27996         * class.cs (Event.Define): Define the private field only if there
27997         are no accessors defined.
27998
27999         * expression.cs (ResolveMemberAccess): If there is no associated
28000         field with the event, that means we have an event defined with its
28001         own accessors and we should flag error cs0070 since transforming
28002         ourselves into a field is not valid in that case.
28003
28004         * ecore.cs (SimpleName.DoResolve): Same as above.
28005
28006         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28007         and charset to sane values.
28008
28009 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28010
28011         * assign.cs (DoResolve): Perform check on events only if they 
28012         are being accessed outside the declaring type.
28013
28014         * cs-parser.jay (event_declarations): Update rules to correctly
28015         set the type of the implicit parameter etc.
28016
28017         (add_accessor, remove_accessor): Set current local parameters.
28018
28019         * expression.cs (Binary): For delegate addition and subtraction,
28020         cast the return value from the method into the appropriate delegate
28021         type.
28022
28023 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28024
28025         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28026         of these as the workaround is unnecessary.
28027
28028         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28029         delegate data - none of that is needed at all.
28030
28031         Re-write bits to extract the instance expression and the delegate method
28032         correctly.
28033
28034         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28035         on delegates too.
28036
28037         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28038         of attaching attributes instead of duplicating code everywhere.
28039
28040         * everywhere : Update code to do attribute emission using the above method.
28041
28042 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28043
28044         * expression.cs (IsParamsMethodApplicable): if there are not
28045         parameters, return immediately.
28046
28047         * ecore.cs: The 0 literal can be implicity converted to an enum
28048         type. 
28049
28050         (SimpleName.DoResolve): First lookup the type, then lookup the
28051         members. 
28052
28053         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28054         want to get its address.  If the InstanceExpression is not
28055         addressable, store the result in a temporary variable, then get
28056         the address of it.
28057
28058         * codegen.cs: Only display 219 errors on warning level or above. 
28059
28060         * expression.cs (ArrayAccess): Make it implement the
28061         IMemoryLocation interface.
28062
28063         (Binary.DoResolve): handle the operator == (object a, object b)
28064         and operator != (object a, object b) without incurring into a
28065         BoxedCast (because 5 != o should never be performed).
28066
28067         Handle binary enumerator operators.
28068
28069         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
28070         value type, otherwise use Ldelem_ref.
28071
28072         Use precomputed names;
28073
28074         (AddressOf): Implement address of
28075
28076         * cs-parser.jay (labeled_statement): Fix recursive block
28077         addition by reworking the production.
28078
28079         * expression.cs (New.DoEmit): New has a special case:
28080                 
28081                  If we are dealing with a ValueType, we have a few
28082                  situations to deal with:
28083                 
28084                     * The target of New is a ValueType variable, that is
28085                       easy, we just pass this as the variable reference
28086                 
28087                     * The target of New is being passed as an argument,
28088                       to a boxing operation or a function that takes a
28089                       ValueType.
28090                 
28091                       In this case, we need to create a temporary variable
28092                       that is the argument of New.
28093
28094
28095 2001-12-23  Ravi Pratap  <ravi@ximian.com>
28096
28097         * rootcontext.cs (LookupType): Check that current_type is not null before
28098         going about looking at nested types.
28099
28100         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
28101         not implement the IAssignMethod interface any more.
28102
28103         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
28104         where we tranform them into FieldExprs if they are being resolved from within
28105         the declaring type.
28106
28107         * ecore.cs (SimpleName.DoResolve): Do the same here.
28108
28109         * assign.cs (DoResolve, Emit): Clean up code considerably. 
28110
28111         * ../errors/bug10.cs : Add.
28112
28113         * ../errors/cs0070.cs : Add.
28114
28115         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
28116
28117         * assign.cs : Get rid of EventIsLocal everywhere.
28118
28119 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28120
28121         * ecore.cs (ConvertIntLiteral): finished the implementation.
28122
28123         * statement.cs (SwitchLabel): Convert the value we are using as a
28124         key before looking up the table.
28125
28126 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28127
28128         * codegen.cs (EmitTopBlock): Require a Location argument now.
28129
28130         * cs-parser.jay (constructor_declarator): We need to setup
28131         current_local_parameters before we parse the
28132         opt_constructor_initializer, to allow the variables to be bound
28133         to the constructor arguments.
28134
28135         * rootcontext.cs (LookupType): First lookup nested classes in our
28136         class and our parents before we go looking outside our class.
28137
28138         * expression.cs (ConstantFold): Extract/debox the values at the
28139         beginnning. 
28140
28141         * rootcontext.cs (EmitCode): Resolve the constants first before we
28142         resolve the types.  This is not really needed, but it helps debugging.
28143
28144         * statement.cs: report location.
28145
28146         * cs-parser.jay: pass location to throw statement.
28147
28148         * driver.cs: Small bug fix.
28149
28150         * report.cs: Updated format to be 4-zero filled digits.
28151
28152 2001-12-22  Ravi Pratap  <ravi@ximian.com>
28153
28154         * expression.cs (CheckIndices): Fix minor bug where the wrong
28155         variable was being referred to ;-)
28156
28157         (DoEmit): Do not call EmitStaticInitializers when the 
28158         underlying type is System.Object.
28159
28160 2001-12-21  Ravi Pratap  <ravi@ximian.com>
28161
28162         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
28163         and do the usual workaround for SRE.
28164
28165         * class.cs (MyEventBuilder.EventType): New member to get at the type
28166         of the event, quickly.
28167
28168         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
28169
28170         * assign.cs (Assign.DoResolve): Handle the case when the target
28171         is an EventExpr and perform the necessary checks.
28172
28173         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
28174         interface.
28175
28176         (SimpleName.MemberStaticCheck): Include check for EventExpr.
28177
28178         (EventExpr): Set the type in the constructor itself since we 
28179         are meant to be born fully resolved.
28180
28181         (EventExpr.Define): Revert code I wrote earlier.
28182                 
28183         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
28184         instance expression is null. The instance expression is a This in that case
28185         or a null, depending on whether it is a static method or not.
28186
28187         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
28188         refers to more than one method.
28189
28190         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
28191         and accordingly flag errors.
28192
28193 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28194
28195         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
28196
28197 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28198
28199         * location.cs (ToString): Provide useful rutine.
28200
28201 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28202
28203         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
28204         objects, return the actual integral boxed.
28205
28206         * statement.cs (SwitchLabel): define an ILLabel for each
28207         SwitchLabel. 
28208
28209         (Switch.CheckSwitch): If the value is a Literal, extract
28210         the underlying literal.
28211
28212         Also in the unused hashtable we had, add the SwitchLabel so we can
28213         quickly look this value up.
28214
28215         * constant.cs: Implement a bunch of new constants.  Rewrite
28216         Literal based on this.  Made changes everywhere to adapt to this.
28217
28218         * expression.cs (Expression.MakeByteBlob): Optimize routine by
28219         dereferencing array only once, and also copes with enumrations.
28220
28221         bytes are two bytes wide, not one.
28222
28223         (Cast): Perform constant conversions.
28224
28225         * ecore.cs (TryImplicitIntConversion): Return literals instead of
28226         wrappers to the literals here.
28227
28228         * expression.cs (DoNumericPromotions): long literals can converted
28229         to ulong implicity (this is taken care of elsewhere, but I was
28230         missing this spot).
28231
28232         * ecore.cs (Expression.Literalize): Make the return type Literal,
28233         to improve type checking.
28234
28235         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
28236
28237 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28238
28239         * literal.cs: Revert code from ravi that checked the bounds.  The
28240         bounds are sane by the definition of the type itself. 
28241
28242         * typemanager.cs: Fix implementation of ImplementsInterface.  We
28243         need to actually look up in our parent hierarchy for interfaces
28244         implemented. 
28245
28246         * const.cs: Use the underlying type for enumerations
28247
28248         * delegate.cs: Compute the basename for the delegate creation,
28249         that should fix the delegate test case, and restore the correct
28250         Type Lookup semantics in rootcontext
28251
28252         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
28253         referencing a nested type with the Reflection API is using the "+"
28254         sign. 
28255
28256         * cs-parser.jay: Do not require EOF token at the end.
28257
28258 2001-12-20  Ravi Pratap  <ravi@ximian.com>
28259
28260         * rootcontext.cs (LookupType): Concatenate type names with
28261         a '.' instead of a '+' The test suite passes again.
28262
28263         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
28264         field of the enumeration.
28265
28266         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
28267         the case when the member is an EventExpr.
28268
28269         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
28270         static has an associated instance expression.
28271
28272         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
28273
28274         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
28275
28276         * class.cs (Event.Define): Register event and perform appropriate checks
28277         for error #111.
28278
28279         We define the Add and Remove methods even if the use provides none because
28280         in that case, we provide default implementations ourselves.
28281
28282         Define a private field of the type of the event. This is done by the CSC compiler
28283         and we should be doing it too ;-)
28284
28285         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
28286         More methods we use in code we generate.
28287
28288         (multicast_delegate_type, delegate_type): Two separate types since the distinction
28289         is important.
28290
28291         (InitCoreTypes): Update accordingly for the above.
28292
28293         * class.cs (Event.Emit): Generate code for default accessors that we provide
28294
28295         (EmitDefaultMethod): Do the job in the above.
28296
28297         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
28298         appropriate place.
28299
28300 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28301
28302         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
28303         builders even if we were missing one.
28304
28305         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
28306         pass the Basename as our class name instead of the Name.  The
28307         basename will be correctly composed for us.
28308
28309         * parameter.cs (Paramters): Now takes a Location argument.
28310
28311         * decl.cs (DeclSpace.LookupType): Removed convenience function and
28312         make all the code call directly LookupType in RootContext and take
28313         this chance to pass the Location information everywhere.
28314
28315         * Everywhere: pass Location information.
28316
28317 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
28318
28319         * class.cs (Constructor.Define): Updated way of detecting the
28320         length of the parameters.
28321
28322         (TypeContainer.DefineType): Use basename as the type name for
28323         nested types.
28324
28325         (TypeContainer.Define): Do not recursively define types here, as
28326         definition is taken care in order by the RootContext.
28327
28328         * tree.cs: Keep track of namespaces in a per-file basis.
28329
28330         * parameter.cs (Parameter.ComputeSignature): Update to use
28331         DeclSpace. 
28332
28333         (Parameters.GetSignature): ditto.
28334
28335         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
28336         instead of a TypeContainer.
28337
28338         (Interface.SemanticAnalysis): Use `this' instead of our parent to
28339         resolve names.  Because we need to be resolve in our context, not
28340         our parents.
28341
28342         * driver.cs: Implement response files.
28343
28344         * class.cs (TypeContainer.DefineType): If we are defined, do not
28345         redefine ourselves.
28346
28347         (Event.Emit): Emit the code for add/remove handlers.
28348         (Event.Define): Save the MethodBuilders for add/remove.
28349
28350         * typemanager.cs: Use pair here too.
28351
28352         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
28353         DictionaryEntry requires the first argument to be non-null.  
28354
28355         (enum_declaration): Compute full name for registering the
28356         enumeration.
28357
28358         (delegate_declaration): Instead of using
28359         formal_parameter_list, use opt_formal_parameter_list as the list
28360         can be empty.
28361
28362         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
28363         (EventParsing): New property that controls whether `add' and
28364         `remove' are returned as tokens or identifiers (for events);
28365
28366 2001-12-19  Ravi Pratap  <ravi@ximian.com>
28367
28368         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
28369         use MyEventBuilder only and let it wrap the real builder for us.
28370
28371         (MyEventBuilder): Revamp constructor etc.
28372
28373         Implement all operations that we perform on EventBuilder in precisely the same
28374         way here too.
28375
28376         (FindMembers): Update to use the EventBuilder member.
28377
28378         (Event.Emit): Update accordingly.
28379
28380 2001-12-18  Ravi Pratap  <ravi@ximian.com>
28381
28382         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
28383         by calling the appropriate methods.
28384
28385         (GetCustomAttributes): Make stubs as they cannot possibly do anything
28386         useful.
28387
28388         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
28389
28390 2001-12-17  Ravi Pratap  <ravi@ximian.com>
28391
28392         * delegate.cs (Delegate.Populate): Check that the return type
28393         and various parameters types are indeed accessible.
28394
28395         * class.cs (Constructor.Define): Same here.
28396
28397         (Field.Define): Ditto.
28398
28399         (Event.Define): Ditto.
28400
28401         (Operator.Define): Check that the underlying Method defined itself
28402         correctly - so it's MethodBuilder should not be null.
28403
28404         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
28405         expression happens to be null.
28406
28407         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
28408         members but as of now we don't seem to be able to do anything really useful with it.
28409
28410         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
28411         not the EventBuilder.
28412
28413 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
28414
28415         * cs-tokenizer.cs: Add support for defines.
28416         Add support for #if, #elif, #else, #endif
28417
28418         (eval_var): evaluates a variable.
28419         (eval): stubbed for evaluating functions.
28420
28421         * cs-parser.jay: Pass the defines information
28422
28423         * driver.cs: Add --define command line option.
28424
28425         * decl.cs: Move MemberCore here.
28426
28427         Make it the base class for DeclSpace.  This allows us to catch and
28428         report 108 and 109 for everything now.
28429
28430         * class.cs (TypeContainer.Define): Extract all the members
28431         before populating and emit the warning 108 (new keyword required
28432         to override) instead of having each member implement this.
28433
28434         (MemberCore.Define): New abstract method, we will be using this in
28435         the warning reporting engine in Populate.
28436
28437         (Operator.Define): Adjust to new MemberCore protocol. 
28438
28439         * const.cs (Const): This does not derive from Expression, it is a
28440         temporary object we use to create fields, it is a MemberCore. 
28441
28442         * class.cs (Method.Define): Allow the entry point to be in a
28443         specific class.
28444
28445         * driver.cs: Rewrite the argument handler to clean it up a bit.
28446
28447         * rootcontext.cs: Made it just an auxiliary namespace feature by
28448         making everything static.
28449
28450         * driver.cs: Adapt code to use RootContext type name instead of
28451         instance variable.
28452
28453         * delegate.cs: Remove RootContext argument.
28454
28455         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
28456         argument. 
28457
28458         * class.cs (Event.Define): The lookup can fail.
28459
28460         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
28461
28462         * expression.cs: Resolve the this instance before invoking the code.
28463
28464 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
28465
28466         * cs-parser.jay: Add a production in element_access that allows
28467         the thing to become a "type" reference.  This way we can parse
28468         things like "(string [])" as a type.
28469
28470         Note that this still does not handle the more complex rules of
28471         casts. 
28472
28473
28474         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
28475
28476         * ecore.cs: (CopyNewMethods): new utility function used to
28477         assemble the list of methods from running FindMembers.
28478
28479         (MemberLookup): Rework FindMembers so that 
28480
28481 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
28482
28483         * class.cs (TypeContainer): Remove Delegates who fail to be
28484         defined.
28485
28486         * delegate.cs (Populate): Verify that we dont get null return
28487         values.   TODO: Check for AsAccessible.
28488
28489         * cs-parser.jay: Use basename to emit error 574 (destructor should
28490         have the same name as container class), not the full name.
28491
28492         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
28493         possible representation.  
28494
28495         Also implements integer type suffixes U and L.
28496
28497 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
28498
28499         * expression.cs (ArrayCreation.DoResolve): We need to do the
28500         argument resolution *always*.
28501
28502         * decl.cs: Make this hold the namespace.  Hold the root context as
28503         well.
28504         (LookupType): Move here.
28505
28506         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
28507
28508         * location.cs (Row, Name): Fixed the code, it was always returning
28509         references to the first file.
28510
28511         * interface.cs: Register properties defined through interfaces.
28512
28513         * driver.cs: Add support for globbing on the command line
28514
28515         * class.cs (Field): Make it derive from MemberCore as well.
28516         (Event): ditto.
28517
28518 2001-12-15  Ravi Pratap  <ravi@ximian.com>
28519
28520         * class.cs (Event::Define): Check that the type of the event is a delegate
28521         type else flag error #66.
28522
28523         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
28524         same.
28525
28526         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
28527         values of EntryPoint, CharSet etc etc.
28528
28529         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
28530
28531         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
28532         be null and we should ignore this. I am not sure if this is really clean. Apparently,
28533         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
28534         which needs this to do its work.
28535
28536         * ../errors/cs0066.cs : Add.
28537
28538 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
28539
28540         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
28541         helper functions.
28542
28543         * class.cs: (MethodSignature.MethodSignature): Removed hack that
28544         clears out the parameters field.
28545         (MemberSignatureCompare): Cleanup
28546
28547         (MemberCore): New base class used to share code between MethodCore
28548         and Property.
28549
28550         (RegisterRequiredImplementations) BindingFlags.Public requires
28551         either BindingFlags.Instace or Static.  Use instance here.
28552
28553         (Property): Refactored code to cope better with the full spec.
28554
28555         * parameter.cs (GetParameterInfo): Return an empty array instead
28556         of null on error.
28557
28558         * class.cs (Property): Abstract or extern properties have no bodies.
28559
28560         * parameter.cs (GetParameterInfo): return a zero-sized array.
28561
28562         * class.cs (TypeContainer.MethodModifiersValid): Move all the
28563         method modifier validation to the typecontainer so we can reuse
28564         this on properties.
28565
28566         (MethodCore.ParameterTypes): return an empty sized array of types.
28567
28568         (Property.Define): Test property modifier validity.
28569
28570         Add tests for sealed/override too.
28571
28572         (Method.Emit): abstract or extern methods have no bodies.
28573
28574 2001-12-14  Ravi Pratap  <ravi@ximian.com>
28575
28576         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
28577         thing.
28578
28579         (Method::Define, ::Emit): Modify accordingly.
28580
28581         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
28582
28583         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
28584
28585         * makefile: Pass in /unsafe.
28586
28587 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
28588
28589         * class.cs (MakeKey): Kill routine.
28590
28591         * class.cs (TypeContainer.Define): Correctly define explicit
28592         method implementations (they require the full interface name plus
28593         the method name).
28594
28595         * typemanager.cs: Deply the PtrHashtable here and stop using the
28596         lame keys.  Things work so much better.
28597
28598         This of course broke everyone who depended on `RegisterMethod' to
28599         do the `test for existance' test.  This has to be done elsewhere.
28600
28601         * support.cs (PtrHashtable): A hashtable that avoid comparing with
28602         the object stupid Equals method (because, that like fails all over
28603         the place).  We still do not use it.
28604
28605         * class.cs (TypeContainer.SetRequiredInterface,
28606         TypeContainer.RequireMethods): Killed these two routines and moved
28607         all the functionality to RegisterRequiredImplementations.
28608
28609         (TypeContainer.RegisterRequiredImplementations): This routine now
28610         registers all the implementations required in an array for the
28611         interfaces and abstract methods.  We use an array of structures
28612         which can be computed ahead of time to reduce memory usage and we
28613         also assume that lookups are cheap as most classes will not
28614         implement too many interfaces.
28615
28616         We also avoid creating too many MethodSignatures.
28617
28618         (TypeContainer.IsInterfaceMethod): Update and optionally does not
28619         clear the "pending" bit if we find that there are problems with
28620         the declaration.
28621
28622         (TypeContainer.VerifyPendingMethods): Update to report errors of
28623         methods that look like implementations but are not.
28624
28625         (TypeContainer.Define): Add support for explicit interface method
28626         implementation. 
28627
28628 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
28629
28630         * typemanager.cs: Keep track of the parameters here instead of
28631         being a feature of the TypeContainer.
28632
28633         * class.cs: Drop the registration of parameters here, as
28634         InterfaceMethods are also interface declarations.
28635
28636         * delegate.cs: Register methods with the TypeManager not only with
28637         the TypeContainer.  This code was buggy.
28638
28639         * interface.cs: Full registation here.
28640
28641 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
28642
28643         * expression.cs: Remove reducer for binary expressions, it can not
28644         be done this way.
28645
28646         * const.cs: Put here the code that used to go into constant.cs
28647
28648         * constant.cs: Put here the code for constants, this is a new base
28649         class for Literals.
28650
28651         * literal.cs: Make Literal derive from Constant.
28652
28653 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
28654
28655         * statement.cs (Return.Emit): Report error 157 if the user
28656         attempts to return from a finally block.
28657
28658         (Return.Emit): Instead of emitting a return, jump to the end of
28659         the function.
28660
28661         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
28662         LocalBuilder to store the result of the function.  ReturnLabel is
28663         the target where we jump.
28664
28665
28666 2001-12-09  Radek Doulik  <rodo@ximian.com>
28667
28668         * cs-parser.jay: remember alias in current namespace
28669
28670         * ecore.cs (SimpleName::DoResolve): use aliases for types or
28671         namespaces
28672
28673         * class.cs (LookupAlias): lookup alias in my_namespace
28674
28675         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
28676         aliases hashtable
28677         (LookupAlias): lookup alias in this and if needed in parent
28678         namespaces
28679
28680 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
28681
28682         * support.cs: 
28683
28684         * rootcontext.cs: (ModuleBuilder) Made static, first step into
28685         making things static.  I need this to avoid passing the
28686         TypeContainer when calling ParameterType.
28687
28688         * support.cs (InternalParameters.ParameterType): Remove ugly hack
28689         that did string manipulation to compute the type and then call
28690         GetType.  Use Parameter.ParameterType instead.
28691
28692         * cs-tokenizer.cs: Consume the suffix for floating values.
28693
28694         * expression.cs (ParameterReference): figure out whether this is a
28695         reference parameter or not.  Kill an extra variable by computing
28696         the arg_idx during emission.
28697
28698         * parameter.cs (Parameters.GetParameterInfo): New overloaded
28699         function that returns whether a parameter is an out/ref value or not.
28700
28701         (Parameter.ParameterType): The type of the parameter (base,
28702         without ref/out applied).
28703
28704         (Parameter.Resolve): Perform resolution here.
28705         (Parameter.ExternalType): The full type (with ref/out applied).
28706
28707         * statement.cs (Using.Emit, Using.EmitExpression): Implement
28708         support for expressions on the using statement.
28709
28710 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
28711
28712         * statement.cs (Using.EmitLocalVariableDecls): Split the
28713         localvariable handling of the using statement.
28714
28715         (Block.EmitMeta): Keep track of variable count across blocks.  We
28716         were reusing slots on separate branches of blocks.
28717
28718         (Try.Emit): Emit the general code block, we were not emitting it. 
28719
28720         Check the type of the declaration to be an IDisposable or
28721         something that can be implicity converted to it. 
28722
28723         Emit conversions if required.
28724
28725         * ecore.cs (EmptyExpression): New utility class.
28726         (Expression.ImplicitConversionExists): New utility function.
28727
28728 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
28729
28730         * statement.cs (Using): Implement.
28731
28732         * expression.cs (LocalVariableReference): Support read only variables.
28733
28734         * statement.cs: Remove the explicit emit for the Leave opcode.
28735         (VariableInfo): Add a readonly field.
28736
28737 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
28738
28739         * ecore.cs (ConvCast): new class used to encapsulate the various
28740         explicit integer conversions that works in both checked and
28741         unchecked contexts.
28742
28743         (Expression.ConvertNumericExplicit): Use new ConvCast class to
28744         properly generate the overflow opcodes.
28745
28746 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
28747
28748         * statement.cs: The correct type for the EmptyExpression is the
28749         element_type, not the variable type.  Ravi pointed this out.
28750
28751 2001-12-04  Ravi Pratap  <ravi@ximian.com>
28752
28753         * class.cs (Method::Define): Handle PInvoke methods specially
28754         by using DefinePInvokeMethod instead of the usual one.
28755
28756         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
28757         above to do the task of extracting information and defining the method.
28758
28759 2001-12-04  Ravi Pratap  <ravi@ximian.com>
28760
28761         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
28762         of the condition for string type.
28763
28764         (Emit): Move that here. 
28765
28766         (ArrayCreation::CheckIndices): Keep string literals in their expression
28767         form.
28768
28769         (EmitDynamicInitializers): Handle strings appropriately.
28770
28771 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
28772
28773         * codegen.cs (EmitContext): Replace multiple variables with a
28774         single pointer to the current Switch statement.
28775
28776         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
28777         EmitContext.
28778
28779 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
28780
28781         * statement.cs 
28782
28783         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
28784         default'.
28785
28786         (Foreach.Emit): Foreach on arrays was not setting
28787         up the loop variables (for break/continue).
28788
28789         (GotoCase): Semi-implented.
28790
28791 2001-12-03  Ravi Pratap  <ravi@ximian.com>
28792
28793         * attribute.cs (CheckAttribute): Handle system attributes by using
28794         Attribute.GetAttributes to examine information we need.
28795
28796         (GetValidPlaces): Same here.
28797
28798         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
28799
28800         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
28801
28802         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
28803
28804         (Method::Define): Set appropriate flags if we have a DllImport attribute.
28805
28806         (Method::Emit): Handle the case when we are a PInvoke method.
28807
28808 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
28809
28810         * expression.cs: Use ResolveWithSimpleName on compound names.
28811
28812 2001-12-02  Ravi Pratap  <ravi@ximian.com>
28813
28814         * constant.cs (EmitConstant): Make sure we resolve the associated expression
28815         before trying to reduce it.
28816
28817         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
28818
28819         * constant.cs (LookupConstantValue): Implement.
28820
28821         (EmitConstant): Use the above in emitting the constant.
28822
28823         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
28824         that are user-defined by doing a LookupConstantValue on them.
28825
28826         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
28827         too, like above.
28828
28829 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
28830
28831         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
28832
28833         (BaseAccess.DoResolve): Implement.
28834
28835         (MemberAccess.DoResolve): Split this routine into a
28836         ResolveMemberAccess routine that can be used independently
28837
28838 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
28839
28840         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
28841         As that share bits of the implementation.  Is returns a boolean,
28842         while As returns the Type that is being probed.
28843
28844 2001-12-01  Ravi Pratap  <ravi@ximian.com>
28845
28846         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
28847         instead of a Literal - much easier.
28848
28849         (EnumInTransit): Remove - utterly useless :-)
28850
28851         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
28852
28853         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
28854
28855         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
28856         chain when we have no associated expression.
28857
28858 2001-11-30  Ravi Pratap  <ravi@ximian.com>
28859
28860         * constant.cs (Define): Use Location while reporting the errror.
28861
28862         Also emit a warning when 'new' is used and there is no inherited
28863         member to hide.
28864
28865         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
28866         populated.
28867
28868         (LookupEnumValue): Implement to lookup an enum member's value and define it
28869         if necessary.
28870
28871         (Populate): Re-write accordingly to use the above routine.
28872
28873 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
28874
28875         * expression.cs (This): Fix prototype for DoResolveLValue to
28876         override the base class DoResolveLValue.
28877
28878         * cs-parser.cs: Report errors cs574 and cs575 (destructor
28879         declarations) 
28880
28881         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
28882         (we need to load the address of the field here).  This fixes
28883         test-22. 
28884
28885         (FieldExpr.DoResolveLValue): Call the DoResolve
28886         function to initialize the Instance expression.
28887
28888         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
28889         correctly the GetEnumerator operation on a value type.
28890
28891         * cs-parser.jay: Add more simple parsing error catches.
28892
28893         * statement.cs (Switch): Add support for string switches.
28894         Handle null specially.
28895
28896         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
28897
28898 2001-11-28  Ravi Pratap  <ravi@ximian.com>
28899
28900         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
28901
28902         (declare_local_constant): New helper function.
28903
28904         * statement.cs (AddConstant): Keep a separate record of constants
28905
28906         (IsConstant): Implement to determine if a variable is a constant.
28907
28908         (GetConstantExpression): Implement.
28909
28910         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
28911
28912         * statement.cs (IsVariableDefined): Re-write.
28913
28914 2001-11-27  Ravi Pratap  <ravi@ximian.com>
28915
28916         * class.cs (TypeContainer::FindMembers): Look for constants
28917         in the case when we are looking for MemberTypes.Field
28918
28919         * expression.cs (MemberAccess::DoResolve): Check that in the
28920         case we are a FieldExpr and a Literal, we are not being accessed
28921         by an instance reference.
28922
28923         * cs-parser.jay (local_constant_declaration): Implement.
28924
28925         (declaration_statement): Implement for constant declarations.
28926
28927 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
28928
28929         * statement.cs (Switch): Catch double defaults.
28930
28931         (Switch): More work on the switch() statement
28932         implementation.  It works for integral values now, need to finish
28933         string support.
28934
28935
28936 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
28937
28938         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
28939         integer literals into other integer literals.  To be used by
28940         switch. 
28941
28942 2001-11-24  Ravi Pratap  <ravi@ximian.com>
28943
28944         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
28945         some memory.
28946
28947         (EmitDynamicInitializers): Cope with the above since we extract data
28948         directly from ArrayData now.
28949
28950         (ExpectInitializers): Keep track of whether initializers are mandatory
28951         or not.
28952
28953         (Bounds): Make it a hashtable to prevent the same dimension being 
28954         recorded for every element in that dimension.
28955
28956         (EmitDynamicInitializers): Fix bug which prevented the Set array method
28957         from being found.
28958
28959         Also fix bug which was causing the indices to be emitted in the reverse
28960         order.
28961
28962 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
28963
28964         * expression.cs (ArrayCreation): Implement the bits that Ravi left
28965         unfinished.  They do not work, because the underlying code is
28966         sloppy.
28967
28968 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
28969
28970         * cs-parser.jay: Remove bogus fixme.
28971
28972         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
28973         on Switch statement.
28974
28975 2001-11-23  Ravi Pratap  <ravi@ximian.com>
28976
28977         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
28978         the same. 
28979
28980         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
28981         parameter. Apparently, any expression is allowed. 
28982
28983         (ValidateInitializers): Update accordingly.
28984
28985         (CheckIndices): Fix some tricky bugs thanks to recursion.
28986
28987         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
28988         I was being completely brain-dead.
28989
28990         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
28991         and re-write acordingly.
28992
28993         (DelegateInvocation): Re-write accordingly.
28994
28995         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
28996
28997         (MakeByteBlob): Handle types more correctly.
28998
28999         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29000         initialization from expressions but it is incomplete because I am a complete
29001         Dodo :-|
29002
29003 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29004
29005         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29006         on If.  Basically, we have to return `true' (ie, we do return to
29007         our caller) only if both branches of the if return.
29008
29009         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29010         short-circuit operators, handle them as short circuit operators. 
29011
29012         (Cast.DoResolve): Resolve type.
29013         (Cast.Cast): Take an expression as the target type.
29014
29015         * cs-parser.jay (cast_expression): Remove old hack that only
29016         allowed a limited set of types to be handled.  Now we take a
29017         unary_expression and we resolve to a type during semantic
29018         analysis.
29019
29020         Use the grammar productions from Rhys to handle casts (this is
29021         not complete like Rhys syntax yet, we fail to handle that corner
29022         case that C# has regarding (-x), but we will get there.
29023
29024 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29025
29026         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29027         field which is an array type.
29028
29029         * cs-parser.jay (declare_local_variables): Support array initialization too.
29030
29031         * typemanager.cs (MakeKey): Implement.
29032
29033         (everywhere): Use the above appropriately.
29034
29035         * cs-parser.jay (for_statement): Update for array initialization while
29036         declaring variables.
29037
29038         * ecore.cs : The error message was correct, it's the variable's names that
29039         were misleading ;-) Make the code more readable.
29040
29041         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29042         the correct type etc.
29043
29044         (ConvertExplicit): Handle Enum types by examining the underlying type.
29045
29046 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29047
29048         * parameter.cs (GetCallingConvention): Always return
29049         CallingConventions.Standard for now.
29050
29051 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29052
29053         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29054         and `r' after calling DoNumericPromotions.
29055
29056         * ecore.cs: Fix error message (the types were in the wrong order).
29057
29058         * statement.cs (Foreach.ProbeCollectionType): Need to pass
29059         BindingFlags.Instance as well 
29060
29061         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
29062         implicit int literal conversion in an empty cast so that we
29063         propagate the right type upstream.
29064
29065         (UnboxCast): new class used to unbox value types.
29066         (Expression.ConvertExplicit): Add explicit type conversions done
29067         by unboxing.
29068
29069         (Expression.ImplicitNumericConversion): Oops, forgot to test for
29070         the target type before applying the implicit LongLiterals to ULong
29071         literal cast.
29072
29073 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
29074
29075         * cs-parser.jay (for_statement): Reworked the way For works: now
29076         we declare manually any variables that are introduced in
29077         for_initializer to solve the problem of having out-of-band code
29078         emition (that is what got for broken).
29079
29080         (declaration_statement): Perform the actual variable declaration
29081         that used to be done in local_variable_declaration here.
29082
29083         (local_variable_declaration): Do not declare anything, just pass
29084         the information on a DictionaryEntry
29085
29086 2001-11-20  Ravi Pratap  <ravi@ximian.com>
29087
29088         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
29089         re-write of the logic to now make it recursive.
29090
29091         (UpdateIndices): Re-write accordingly.
29092
29093         Store element data in a separate ArrayData list in the above methods.
29094
29095         (MakeByteBlob): Implement to dump the array data into a byte array.
29096
29097 2001-11-19  Ravi Pratap  <ravi@ximian.com>
29098
29099         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
29100         into CheckIndices.
29101
29102         * constant.cs (Define): Implement.
29103
29104         (EmitConstant): Re-write fully.
29105
29106         Pass in location info.
29107
29108         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
29109         respectively.
29110
29111         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
29112         DictionaryEntry since we need location info too.
29113
29114         (constant_declaration): Update accordingly.
29115
29116         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
29117         code into another method : UpdateIndices.
29118
29119 2001-11-18  Ravi Pratap  <ravi@ximian.com>
29120
29121         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
29122         some type checking etc.
29123
29124 2001-11-17  Ravi Pratap  <ravi@ximian.com>
29125
29126         * expression.cs (ArrayCreation::ValidateInitializers): Implement
29127         bits to provide dimension info if the user skips doing that.
29128
29129         Update second constructor to store the rank correctly.
29130
29131 2001-11-16  Ravi Pratap  <ravi@ximian.com>
29132
29133         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
29134         and try to implement.
29135
29136         * ../errors/cs0150.cs : Add.
29137
29138         * ../errors/cs0178.cs : Add.
29139
29140 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
29141
29142         * statement.cs: Implement foreach on multi-dimensional arrays. 
29143
29144         * parameter.cs (Parameters.GetParameterByName): Also lookup the
29145         name of the params argument.
29146
29147         * expression.cs: Use EmitStoreOpcode to get the right opcode while
29148         initializing the array.
29149
29150         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
29151         we can use this elsewhere.
29152
29153         * statement.cs: Finish implementation of foreach for single
29154         dimension arrays.
29155
29156         * cs-parser.jay: Use an out-of-band stack to pass information
29157         around, I wonder why I need this.
29158
29159         foreach_block: Make the new foreach_block the current_block.
29160
29161         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
29162         function used to return a static Parameters structure.  Used for
29163         empty parameters, as those are created very frequently.
29164
29165         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
29166
29167 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29168
29169         * interface.cs : Default modifier is private, not public. The
29170         make verify test passes again.
29171
29172 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29173
29174         * support.cs (ReflectionParameters): Fix logic to determine
29175         whether the last parameter is a params one. Test 9 passes again.
29176
29177         * delegate.cs (Populate): Register the builders we define with
29178         RegisterParameterForBuilder. Test 19 passes again.
29179
29180         * cs-parser.jay (property_declaration): Reference $6 instead
29181         of $$ to get at the location.
29182
29183         (indexer_declaration): Similar stuff.
29184
29185         (attribute): Ditto.
29186
29187         * class.cs (Property): Register parameters for the Get and Set methods
29188         if they exist. Test 23 passes again.
29189
29190         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
29191         call to EmitArguments as we are sure there aren't any params arguments. 
29192         Test 32 passes again.
29193
29194         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
29195         IndexOutOfRangeException. 
29196
29197         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
29198         Test 33 now passes again.
29199
29200 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
29201
29202         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
29203         broke a bunch of things.  Will have to come up with a better way
29204         of tracking locations.
29205
29206         * statement.cs: Implemented foreach for single dimension arrays.
29207
29208 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29209
29210         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
29211         an error.  This removes the lookup from the critical path.
29212
29213         * cs-parser.jay: Removed use of temporary_loc, which is completely
29214         broken. 
29215
29216 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
29217
29218         * support.cs (ReflectionParameters.ParameterModifier): Report
29219         whether the argument is a PARAMS argument or not.
29220
29221         * class.cs: Set the attribute `ParamArrayAttribute' on the
29222         parameter argument.
29223
29224         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
29225         and cons_param_array_attribute (ConstructorInfo for
29226         ParamArrayAttribute)., 
29227
29228         * codegen.cs: Emit the return using the `Return' statement, that
29229         way we can report the error correctly for missing return values. 
29230
29231         * class.cs (Method.Emit): Clean up.
29232
29233         * expression.cs (Argument.Resolve): Take another argument: the
29234         location where this argument is used.  Notice that this is not
29235         part of the "Argument" class as to reduce the size of the
29236         structure (we know the approximate location anyways).
29237
29238         Test if the argument is a variable-reference, if not, then
29239         complain with a 206.
29240
29241         (Argument.Emit): Emit addresses of variables.
29242
29243         (Argument.FullDesc): Simplify.
29244
29245         (Invocation.DoResolve): Update for Argument.Resolve.
29246
29247         (ElementAccess.DoResolve): ditto.
29248
29249         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
29250         method should be virtual, as this method is always virtual.
29251
29252         (NewDelegate.DoResolve): Update for Argument.Resolve.
29253
29254         * class.cs (ConstructorInitializer.DoResolve): ditto.
29255
29256         * attribute.cs (Attribute.Resolve): ditto.
29257
29258 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
29259
29260         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
29261
29262         * expression.cs (ParameterReference): Drop IStackStorage and implement
29263         IAssignMethod instead. 
29264
29265         (LocalVariableReference): ditto.
29266
29267         * ecore.cs (FieldExpr): Drop IStackStorage and implement
29268         IAssignMethod instead. 
29269
29270 2001-11-13  Miguel de Icaza <miguel@ximian.com>
29271
29272         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
29273         enumerations that are used in heavily used structures derive from
29274         byte in a laughable and pathetic attempt to reduce memory usage.
29275         This is the kind of pre-optimzations that you should not do at
29276         home without adult supervision.
29277
29278         * expression.cs (UnaryMutator): New class, used to handle ++ and
29279         -- separatedly from the other unary operators.  Cleans up the
29280         code, and kills the ExpressionStatement dependency in Unary.
29281
29282         (Unary): Removed `method' and `Arguments' from this class, making
29283         it smaller, and moving it all to SimpleCall, so I can reuse this
29284         code in other locations and avoid creating a lot of transient data
29285         strucutres when not required.
29286
29287         * cs-parser.jay: Adjust for new changes.
29288
29289 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
29290
29291         * enum.cs (Enum.Populate): If there is a failure during
29292         definition, return
29293
29294         * cs-parser.jay (opt_enum_base): we used to catch type errors
29295         here, but this is really incorrect.  The type error should be
29296         catched during semantic analysis.
29297
29298 2001-12-11  Ravi Pratap  <ravi@ximian.com>
29299
29300         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
29301         current_local_parameters as expected since I, in my stupidity, had forgotten
29302         to do this :-)
29303
29304         * attribute.cs (GetValidPlaces): Fix stupid bug.
29305
29306         * class.cs (Method::Emit): Perform check on applicability of attributes.
29307
29308         (Constructor::Emit): Ditto.
29309
29310         (Field::Emit): Ditto.
29311
29312         (Field.Location): Store location information.
29313
29314         (Property, Event, Indexer, Operator): Ditto.
29315
29316         * cs-parser.jay (field_declaration): Pass in location for each field.
29317
29318         * ../errors/cs0592.cs : Add.
29319
29320 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29321
29322         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
29323
29324         (InitCoreTypes): Update accordingly.
29325
29326         (RegisterAttrType, LookupAttr): Implement.
29327
29328         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
29329         info about the same.
29330
29331         (Resolve): Update to populate the above as necessary.
29332
29333         (Error592): Helper.
29334
29335         (GetValidPlaces): Helper to the above.
29336
29337         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
29338
29339         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
29340
29341 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29342
29343         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
29344
29345         * ../errors/cs0617.cs : Add.
29346
29347 2001-11-11  Ravi Pratap  <ravi@ximian.com>
29348
29349         * enum.cs (Emit): Rename to Populate to be more consistent with what
29350         we expect it to do and when exactly it is called.
29351
29352         * class.cs, rootcontext.cs : Update accordingly.
29353
29354         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
29355         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
29356
29357         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
29358
29359         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
29360         of a fieldinfo using the above, when dealing with a FieldBuilder.
29361
29362 2001-11-10  Ravi Pratap  <ravi@ximian.com>
29363
29364         * ../errors/cs0031.cs : Add.
29365
29366         * ../errors/cs1008.cs : Add.
29367
29368         * ../errrors/cs0543.cs : Add.
29369
29370         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
29371         enum type.
29372
29373         (FindMembers): Implement.
29374
29375         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
29376         enums and delegates too.
29377
29378         (enum_types): Rename to builder_to_enum.
29379
29380         (delegate_types): Rename to builder_to_delegate.
29381
29382         * delegate.cs (FindMembers): Implement.
29383
29384 2001-11-09  Ravi Pratap  <ravi@ximian.com>
29385
29386         * typemanager.cs (IsEnumType): Implement.
29387
29388         * enum.cs (Emit): Re-write parts to account for the underlying type
29389         better and perform checking etc.
29390
29391         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
29392         of the underlying type.
29393
29394         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
29395         value
29396
29397         * enum.cs (error31): Helper to report error #31.
29398
29399         * cs-parser.jay (enum_declaration): Store location of each member too.
29400
29401         * enum.cs (member_to_location): New hashtable. 
29402
29403         (AddEnumMember): Update location hashtable.
29404
29405         (Emit): Use the location of each member while reporting errors.
29406
29407 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29408
29409         * cs-parser.jay: A for_initializer if is a
29410         local_variable_declaration really ammount to have an implicit
29411         block with the variable declaration and no initializer for for.
29412
29413         * statement.cs (For.Emit): Cope with null initializers.
29414
29415         This fixes the infinite loop on for initializers.
29416
29417 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
29418
29419         * enum.cs: More cleanup.
29420
29421         * ecore.cs: Remove dead code.
29422
29423         * class.cs (Property.Emit): More simplification.
29424         (Event.Emit): ditto.
29425
29426         Reworked to have less levels of indentation.
29427
29428 2001-11-08  Ravi Pratap  <ravi@ximian.com>
29429
29430         * class.cs (Property): Emit attributes.
29431
29432         (Field): Ditto.
29433
29434         (Event): Ditto.
29435
29436         (Indexer): Ditto.
29437
29438         (Operator): Ditto.
29439
29440         * enum.cs (Emit): Ditto.
29441
29442         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
29443         Enums too.
29444
29445         * class.cs (Field, Event, etc.): Move attribute generation into the
29446         Emit method everywhere.
29447
29448         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
29449         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
29450         as we had no way of defining nested enums !
29451
29452         * rootcontext.cs : Adjust code accordingly.
29453
29454         * typemanager.cs (AddEnumType): To keep track of enum types separately.
29455
29456 2001-11-07  Ravi Pratap  <ravi@ximian.com>
29457
29458         * expression.cs (EvalConstantExpression): Move into ecore.cs
29459
29460         * enum.cs (Enum): Rename some members and make them public and readonly
29461         according to our convention.
29462
29463         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
29464         nothing else.
29465
29466         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
29467
29468         (Enum::Emit): Write a simple version for now which doesn't try to compute
29469         expressions. I shall modify this to be more robust in just a while.
29470
29471         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
29472
29473         (TypeContainer::CloseType): Create the Enum types too.
29474
29475         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
29476
29477         * expression.cs (EvalConstantExpression): Get rid of completely.
29478
29479         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
29480         user-defined values and other cases.
29481
29482         (IsValidEnumLiteral): Helper function.
29483
29484         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
29485         out there in the case we had a literal FieldExpr.
29486
29487         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
29488
29489         (Literalize): Revamp a bit to take two arguments.
29490
29491         (EnumLiteral): New class which derives from Literal to wrap enum literals.
29492
29493 2001-11-06  Ravi Pratap  <ravi@ximian.com>
29494
29495         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
29496
29497         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
29498
29499         (Resolve): Use the above to ensure we have proper initializers.
29500
29501 2001-11-05  Ravi Pratap  <ravi@ximian.com>
29502
29503         * expression.cs (Expression::EvalConstantExpression): New method to 
29504         evaluate constant expressions.
29505
29506         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
29507
29508 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
29509
29510         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
29511         in an array.
29512
29513         (Binary.ResolveOperator): Handle operator != (object a, object b)
29514         and operator == (object a, object b);
29515
29516         (Binary.DoNumericPromotions): Indicate whether the numeric
29517         promotion was possible.
29518
29519         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
29520         Implement.  
29521
29522         Made the ArrayAccess implement interface IAssignMethod instead of
29523         IStackStore as the order in which arguments are passed reflects
29524         this.
29525
29526         * assign.cs: Instead of using expr.ExprClass to select the way of
29527         assinging, probe for the IStackStore/IAssignMethod interfaces.
29528
29529         * typemanager.cs: Load InitializeArray definition.
29530
29531         * rootcontext.cs (RootContext.MakeStaticData): Used to define
29532         static data that can be used to initialize arrays. 
29533
29534 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
29535
29536         * expression.cs: Handle operator== and operator!= for booleans.
29537
29538         (Conditioal.Reduce): Implement reducer for the ?: operator.
29539
29540         (Conditional.Resolve): Implement dead code elimination.
29541
29542         (Binary.Resolve): Catch string literals and return a new
29543         concatenated string.
29544
29545         (Unary.Reduce): Implement reduction of unary expressions.
29546
29547         * ecore.cs: Split out the expression core handling here.
29548
29549         (Expression.Reduce): New method used to perform constant folding
29550         and CSE.  This is needed to support constant-expressions. 
29551
29552         * statement.cs (Statement.EmitBoolExpression): Pass true and false
29553         targets, and optimize for !x.
29554
29555 2001-11-04  Ravi Pratap  <ravi@ximian.com>
29556
29557         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
29558         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
29559         set custom atttributes.
29560
29561         * literal.cs (Literal::GetValue): New abstract method to return the actual
29562         value of the literal, cast as an object.
29563
29564         (*Literal): Implement GetValue method.
29565
29566         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
29567         expressions to the arraylist but objects of type Argument.
29568
29569         * class.cs (TypeContainer::Emit): Emit our attributes too.
29570
29571         (Method::Emit, Constructor::Emit): Ditto.
29572
29573         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
29574         to be ignoring earlier.
29575
29576 2001-11-03  Ravi Pratap  <ravi@ximian.com>
29577
29578         * attribute.cs (AttributeSection::Define): Implement to do the business
29579         of constructing a CustomAttributeBuilder.
29580
29581         (Attribute): New trivial class. Increases readability of code.  
29582
29583         * cs-parser.jay : Update accordingly.
29584
29585         (positional_argument_list, named_argument_list, named_argument): New rules
29586
29587         (attribute_arguments): Use the above so that we are more correct.
29588
29589 2001-11-02  Ravi Pratap  <ravi@ximian.com>
29590
29591         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
29592         to perform all checks for a method with a params parameter.
29593
29594         (Invocation::OverloadResolve): Update to use the above method and therefore
29595         cope correctly with params method invocations.
29596
29597         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
29598         params too.
29599
29600         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
29601         constructors in our parent too because we can't afford to miss out on 
29602         protected ones ;-)
29603
29604         * attribute.cs (AttributeSection): New name for the class Attribute
29605
29606         Other trivial changes to improve readability.
29607
29608         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
29609         use the new class names.
29610
29611 2001-11-01  Ravi Pratap  <ravi@ximian.com>
29612
29613         * class.cs (Method::Define): Complete definition for params types too
29614
29615         (Indexer::Define): Ditto.
29616
29617         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
29618         Cope everywhere with a request for info about the array parameter.
29619
29620 2001-11-01  Ravi Pratap  <ravi@ximian.com>
29621
29622         * tree.cs (RecordNamespace): Fix up to check for the correct key.
29623
29624         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
29625         local_variable_type to extract the string corresponding to the type.
29626
29627         (local_variable_type): Fixup the action to use the new helper method.
29628
29629         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
29630         go.
29631
29632         * expression.cs : Clean out code which uses the above.
29633
29634 2001-10-31  Ravi Pratap  <ravi@ximian.com>
29635
29636         * typemanager.cs (RegisterMethod): Check if we already have an existing key
29637         and bale out if necessary by returning a false.
29638
29639         (RegisterProperty): Ditto.
29640
29641         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
29642         and print out appropriate error messages.
29643
29644         * interface.cs (everywhere): Ditto.
29645
29646         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
29647         location to constructor.
29648
29649         * class.cs (Property, Event, Indexer): Update accordingly.
29650
29651         * ../errors/cs111.cs : Added.
29652
29653         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
29654         of a method, as laid down by the spec.
29655
29656         (Invocation::OverloadResolve): Use the above method.
29657
29658 2001-10-31  Ravi Pratap  <ravi@ximian.com>
29659
29660         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
29661         now take a TypeContainer and a Parameters object.
29662
29663         (ParameterData): Modify return type of ParameterModifier method to be 
29664         Parameter.Modifier and not a string.
29665
29666         (ReflectionParameters, InternalParameters): Update accordingly.
29667
29668         * expression.cs (Argument::GetParameterModifier): Same here.
29669
29670         * support.cs (InternalParameters::ParameterType): Find a better way of determining
29671         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
29672         symbol in it at all so maybe this is only for now.
29673
29674 2001-10-30  Ravi Pratap  <ravi@ximian.com>
29675
29676         * support.cs (InternalParameters): Constructor now takes an extra argument 
29677         which is the actual Parameters class.
29678
29679         (ParameterDesc): Update to provide info on ref/out modifiers.
29680
29681         * class.cs (everywhere): Update call to InternalParameters to pass in
29682         the second argument too.
29683
29684         * support.cs (ParameterData): Add ParameterModifier, which is a method 
29685         to return the modifier info [ref/out etc]
29686
29687         (InternalParameters, ReflectionParameters): Implement the above.
29688
29689         * expression.cs (Argument::ParameterModifier): Similar function to return
29690         info about the argument's modifiers.
29691
29692         (Invocation::OverloadResolve): Update to take into account matching modifiers 
29693         too.
29694
29695         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
29696         a new SetFormalParameters object which we pass to InternalParameters.
29697
29698 2001-10-30  Ravi Pratap  <ravi@ximian.com>
29699
29700         * expression.cs (NewArray): Merge into the ArrayCreation class.
29701
29702 2001-10-29  Ravi Pratap  <ravi@ximian.com>
29703
29704         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
29705         NewUserdefinedArray into one as there wasn't much of a use in having
29706         two separate ones.
29707
29708         * expression.cs (Argument): Change field's name to ArgType from Type.
29709
29710         (Type): New readonly property which returns the proper type, taking into 
29711         account ref/out modifiers.
29712
29713         (everywhere): Adjust code accordingly for the above.
29714
29715         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
29716         whether we are emitting for a ref or out parameter.
29717
29718         * expression.cs (Argument::Emit): Use the above field to set the state.
29719
29720         (LocalVariableReference::Emit): Update to honour the flag and emit the
29721         right stuff.
29722
29723         * parameter.cs (Attributes): Set the correct flags for ref parameters.
29724
29725         * expression.cs (Argument::FullDesc): New function to provide a full desc.
29726
29727         * support.cs (ParameterData): Add method ParameterDesc to the interface.
29728
29729         (ReflectionParameters, InternalParameters): Implement the above method.
29730
29731         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
29732         reporting errors.
29733
29734         (Invocation::FullMethodDesc): Ditto. 
29735
29736 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
29737
29738         * cs-parser.jay: Add extra production for the second form of array
29739         creation. 
29740
29741         * expression.cs (ArrayCreation): Update to reflect the above
29742         change. 
29743
29744         * Small changes to prepare for Array initialization.
29745
29746 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
29747
29748         * typemanager.cs (ImplementsInterface): interface might be null;
29749         Deal with this problem;
29750
29751         Also, we do store negative hits on the cache (null values), so use
29752         this instead of calling t.GetInterfaces on the type everytime.
29753
29754 2001-10-28  Ravi Pratap  <ravi@ximian.com>
29755
29756         * typemanager.cs (IsBuiltinType): New method to help determine the same.
29757
29758         * expression.cs (New::DoResolve): Get rid of array creation code and instead
29759         split functionality out into different classes.
29760
29761         (New::FormArrayType): Move into NewBuiltinArray.
29762
29763         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
29764         quite useless.
29765
29766         (NewBuiltinArray): New class to handle creation of built-in arrays.
29767
29768         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
29769         account creation of one-dimensional arrays.
29770
29771         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
29772
29773         (NewUserdefinedArray::DoResolve): Implement.
29774
29775         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
29776
29777         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
29778         we maintain inside the TypeManager. This is necessary to perform lookups on the
29779         module builder.
29780
29781         (LookupType): Update to perform GetType on the module builders too.     
29782
29783         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
29784
29785         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
29786
29787 2001-10-23  Ravi Pratap  <ravi@ximian.com>
29788
29789         * expression.cs (New::DoResolve): Implement guts of array creation.
29790
29791         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
29792
29793 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
29794
29795         * expression.cs: Fix bug I introduced lsat night that broke
29796         Delegates. 
29797
29798         (Expression.Resolve): Report a 246 error (can not resolve name)
29799         if we find a SimpleName in the stream.
29800
29801         (Expression.ResolveLValue): Ditto.
29802
29803         (Expression.ResolveWithSimpleName): This function is a variant of
29804         ResolveName, this one allows SimpleNames to be returned without a
29805         warning.  The only consumer of SimpleNames is MemberAccess
29806
29807 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
29808
29809         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
29810         might arrive here.  I have my doubts that this is correct.
29811
29812         * statement.cs (Lock): Implement lock statement.
29813
29814         * cs-parser.jay: Small fixes to support `lock' and `using'
29815
29816         * cs-tokenizer.cs: Remove extra space
29817
29818         * driver.cs: New flag --checked, allows to turn on integer math
29819         checking. 
29820
29821         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
29822         Threading.Monitor.Exit 
29823
29824 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
29825
29826         * expression.cs (IndexerAccess::DoResolveLValue): Set the
29827         Expression Class to be IndexerAccess.
29828
29829         Notice that Indexer::DoResolve sets the eclass to Value.
29830
29831 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
29832
29833         * class.cs (TypeContainer::Emit): Emit code for indexers.
29834
29835         * assign.cs (IAssignMethod): New interface implemented by Indexers
29836         and Properties for handling assignment.
29837
29838         (Assign::Emit): Simplify and reuse code. 
29839
29840         * expression.cs (IndexerAccess, PropertyExpr): Implement
29841         IAssignMethod, clean up old code. 
29842
29843 2001-10-22  Ravi Pratap  <ravi@ximian.com>
29844
29845         * typemanager.cs (ImplementsInterface): New method to determine if a type
29846         implements a given interface. Provides a nice cache too.
29847
29848         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
29849         method.
29850
29851         (ConvertReferenceExplicit): Ditto.
29852
29853         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
29854         various methods, with correct names etc.
29855
29856         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
29857         Operator.UnaryNegation.
29858
29859         * cs-parser.jay (operator_declarator): Be a little clever in the case where
29860         we have a unary plus or minus operator.
29861
29862         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
29863         UnaryMinus.
29864
29865         * everywhere : update accordingly.
29866
29867         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
29868         respectively.
29869
29870         * class.cs (Method::Define): For the case where we are implementing a method
29871         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
29872         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
29873
29874 2001-10-21  Ravi Pratap  <ravi@ximian.com>
29875
29876         * interface.cs (FindMembers): Implement to work around S.R.E
29877         lameness.
29878
29879         * typemanager.cs (IsInterfaceType): Implement.
29880
29881         (FindMembers): Update to handle interface types too.
29882
29883         * expression.cs (ImplicitReferenceConversion): Re-write bits which
29884         use IsAssignableFrom as that is not correct - it doesn't work.
29885
29886         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
29887         and accordingly override EmitStatement.
29888
29889         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
29890         using the correct logic :-)
29891
29892 2001-10-19  Ravi Pratap  <ravi@ximian.com>
29893
29894         * ../errors/cs-11.cs : Add to demonstrate error -11 
29895
29896 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
29897
29898         * assign.cs (Assign::Resolve): Resolve right hand side first, and
29899         then pass this as a hint to ResolveLValue.
29900
29901         * expression.cs (FieldExpr): Add Location information
29902
29903         (FieldExpr::LValueResolve): Report assignment to readonly
29904         variable. 
29905
29906         (Expression::ExprClassFromMemberInfo): Pass location information.
29907
29908         (Expression::ResolveLValue): Add new method that resolves an
29909         LValue. 
29910
29911         (Expression::DoResolveLValue): Default invocation calls
29912         DoResolve. 
29913
29914         (Indexers): New class used to keep track of indexers in a given
29915         Type. 
29916
29917         (IStackStore): Renamed from LValue, as it did not really describe
29918         what this did.  Also ResolveLValue is gone from this interface and
29919         now is part of Expression.
29920
29921         (ElementAccess): Depending on the element access type
29922
29923         * typemanager.cs: Add `indexer_name_type' as a Core type
29924         (System.Runtime.CompilerServices.IndexerNameAttribute)
29925
29926         * statement.cs (Goto): Take a location.
29927
29928 2001-10-18  Ravi Pratap  <ravi@ximian.com>
29929
29930         * delegate.cs (Delegate::VerifyDelegate): New method to verify
29931         if two delegates are compatible.
29932
29933         (NewDelegate::DoResolve): Update to take care of the case when
29934         we instantiate a delegate from another delegate.
29935
29936         * typemanager.cs (FindMembers): Don't even try to look up members
29937         of Delegate types for now.
29938
29939 2001-10-18  Ravi Pratap  <ravi@ximian.com>
29940
29941         * delegate.cs (NewDelegate): New class to take care of delegate
29942         instantiation.
29943
29944         * expression.cs (New): Split the delegate related code out into 
29945         the NewDelegate class.
29946
29947         * delegate.cs (DelegateInvocation): New class to handle delegate 
29948         invocation.
29949
29950         * expression.cs (Invocation): Split out delegate related code into
29951         the DelegateInvocation class.
29952
29953 2001-10-17  Ravi Pratap  <ravi@ximian.com>
29954
29955         * expression.cs (New::DoResolve): Implement delegate creation fully
29956         and according to the spec.
29957
29958         (New::DoEmit): Update to handle delegates differently.
29959
29960         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
29961         because of which we were printing out arguments in reverse order !
29962
29963         * delegate.cs (VerifyMethod): Implement to check if the given method
29964         matches the delegate.
29965
29966         (FullDelegateDesc): Implement.
29967
29968         (VerifyApplicability): Implement.
29969
29970         * expression.cs (Invocation::DoResolve): Update to accordingly handle
29971         delegate invocations too.
29972
29973         (Invocation::Emit): Ditto.
29974
29975         * ../errors/cs1593.cs : Added.
29976
29977         * ../errors/cs1594.cs : Added.
29978
29979         * delegate.cs (InstanceExpression, TargetMethod): New properties.
29980
29981 2001-10-16  Ravi Pratap  <ravi@ximian.com>
29982
29983         * typemanager.cs (intptr_type): Core type for System.IntPtr
29984
29985         (InitCoreTypes): Update for the same.
29986
29987         (iasyncresult_type, asynccallback_type): Ditto.
29988
29989         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
29990         correct.
29991
29992         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
29993         too.
29994
29995         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
29996         the builders for the 4 members of a delegate type :-)
29997
29998         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
29999         type.
30000
30001         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30002
30003         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30004
30005 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30006
30007         * statement.cs (Break::Emit): Implement.   
30008         (Continue::Emit): Implement.
30009
30010         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30011         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30012         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30013         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30014         end loop
30015
30016         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30017         properties that track the label for the current loop (begin of the
30018         loop and end of the loop).
30019
30020 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30021
30022         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30023         use of emitting anything at all.
30024
30025         * class.cs, rootcontext.cs : Get rid of calls to the same.
30026
30027         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30028
30029         (Populate): Define the constructor correctly and set the implementation
30030         attributes.
30031
30032         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30033         have been defined.
30034
30035         (AddDelegateType): Implement.
30036
30037         (IsDelegateType): Implement helper method.
30038
30039         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30040
30041         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30042         and accordingly handle it.
30043
30044         * delegate.cs (Populate): Take TypeContainer argument.
30045         Implement bits to define the Invoke method. However, I still haven't figured out
30046         how to take care of the native int bit :-(
30047
30048         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30049         Qualify the name of the delegate, not its return type !
30050
30051         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30052         conversion.
30053
30054         (StandardConversionExists): Checking for array types turns out to be recursive.
30055
30056         (ConvertReferenceExplicit): Implement array conversion.
30057
30058         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
30059
30060 2001-10-12  Ravi Pratap  <ravi@ximian.com>
30061
30062         * cs-parser.jay (delegate_declaration): Store the fully qualified
30063         name as it is a type declaration.
30064
30065         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
30066         readonly.
30067
30068         (DefineDelegate): Renamed from Define. Does the same thing essentially,
30069         as TypeContainer::DefineType.
30070
30071         (Populate): Method in which all the definition of the various methods (Invoke)
30072         etc is done.
30073
30074         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
30075         see.
30076
30077         (CloseDelegate): Finally creates the delegate.
30078
30079         * class.cs (TypeContainer::DefineType): Update to define delegates.
30080         (Populate, Emit and CloseType): Do the same thing here too.
30081
30082         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
30083         delegates in all these operations.
30084
30085 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
30086
30087         * expression.cs: LocalTemporary: a new expression used to
30088         reference a temporary that has been created.
30089
30090         * assign.cs: Handle PropertyAccess back here, so that we can
30091         provide the proper semantic access to properties.
30092
30093         * expression.cs (Expression::ConvertReferenceExplicit): Implement
30094         a few more explicit conversions. 
30095
30096         * modifiers.cs: `NEW' modifier maps to HideBySig.
30097
30098         * expression.cs (PropertyExpr): Make this into an
30099         ExpressionStatement, and support the EmitStatement code path. 
30100
30101         Perform get/set error checking, clean up the interface.
30102
30103         * assign.cs: recognize PropertyExprs as targets, and if so, turn
30104         them into toplevel access objects.
30105
30106 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
30107
30108         * expression.cs: PropertyExpr::PropertyExpr: use work around the
30109         SRE.
30110
30111         * typemanager.cs: Keep track here of our PropertyBuilders again to
30112         work around lameness in SRE.
30113
30114 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
30115
30116         * expression.cs (LValue::LValueResolve): New method in the
30117         interface, used to perform a second resolution pass for LValues. 
30118
30119         (This::DoResolve): Catch the use of this in static methods.
30120
30121         (This::LValueResolve): Implement.
30122
30123         (This::Store): Remove warning, assigning to `this' in structures
30124         is 
30125
30126         (Invocation::Emit): Deal with invocation of
30127         methods on value types.  We need to pass the address to structure
30128         methods rather than the object itself.  (The equivalent code to
30129         emit "this" for structures leaves the entire structure on the
30130         stack instead of a pointer to it). 
30131
30132         (ParameterReference::DoResolve): Compute the real index for the
30133         argument based on whether the method takes or not a `this' pointer
30134         (ie, the method is static).
30135
30136         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
30137         value types returned from functions when we need to invoke a
30138         method on the sturcture.
30139
30140
30141 2001-10-11  Ravi Pratap  <ravi@ximian.com>
30142
30143         * class.cs (TypeContainer::DefineType): Method to actually do the business of
30144         defining the type in the Modulebuilder or Typebuilder. This is to take
30145         care of nested types which need to be defined on the TypeBuilder using
30146         DefineNestedMethod.
30147
30148         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
30149         methods in RootContext, only ported to be part of TypeContainer.
30150
30151         (TypeContainer::GetInterfaceOrClass): Ditto.
30152
30153         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
30154
30155         * interface.cs (Interface::DefineInterface): New method. Does exactly
30156         what RootContext.CreateInterface did earlier, only it takes care of nested types 
30157         too.
30158
30159         (Interface::GetInterfaces): Move from RootContext here and port.
30160
30161         (Interface::GetInterfaceByName): Same here.
30162
30163         * rootcontext.cs (ResolveTree): Re-write.
30164
30165         (PopulateTypes): Re-write.
30166
30167         * class.cs (TypeContainer::Populate): Populate nested types too.
30168         (TypeContainer::Emit): Emit nested members too.
30169
30170         * typemanager.cs (AddUserType): Do not make use of the FullName property,
30171         instead just use the name argument passed in as it is already fully
30172         qualified.
30173
30174         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
30175         to TypeContainer mapping to see if a type is user-defined.
30176
30177         * class.cs (TypeContainer::CloseType): Implement. 
30178
30179         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
30180         the default constructor.
30181
30182         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
30183         twice.
30184
30185         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
30186
30187         * interface.cs (CloseType): Create the type here.
30188
30189         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
30190         the hierarchy.
30191
30192         Remove all the methods which are now in TypeContainer.
30193
30194 2001-10-10  Ravi Pratap  <ravi@ximian.com>
30195
30196         * delegate.cs (Define): Re-write bits to define the delegate
30197         correctly.
30198
30199 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
30200
30201         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
30202
30203         * expression.cs (ImplicitReferenceConversion): handle null as well
30204         as a source to convert to any reference type.
30205
30206         * statement.cs (Return): Perform any implicit conversions to
30207         expected return type.  
30208
30209         Validate use of return statement.  
30210
30211         * codegen.cs (EmitContext): Pass the expected return type here.
30212
30213         * class.cs (Method, Constructor, Property): Pass expected return
30214         type to EmitContext.
30215
30216 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
30217
30218         * expression.cs: Make DoResolve take an EmitContext instead of a
30219         TypeContainer.
30220
30221         Replaced `l' and `location' for `loc', for consistency.
30222
30223         (Error, Warning): Remove unneeded Tc argument.
30224
30225         * assign.cs, literal.cs, constant.cs: Update to new calling
30226         convention. 
30227
30228         * codegen.cs: EmitContext now contains a flag indicating whether
30229         code is being generated in a static method or not.
30230
30231         * cs-parser.jay: DecomposeQI, new function that replaces the old
30232         QualifiedIdentifier.  Now we always decompose the assembled
30233         strings from qualified_identifier productions into a group of
30234         memberaccesses.
30235
30236 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
30237
30238         * rootcontext.cs: Deal with field-less struct types correctly now
30239         by passing the size option to Define Type.
30240
30241         * class.cs: Removed hack that created one static field. 
30242
30243 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30244
30245         * statement.cs: Moved most of the code generation here. 
30246
30247 2001-10-09  Ravi Pratap  <ravi@ximian.com>
30248
30249         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
30250         seem very right.
30251
30252         (ElementAccess): Remove useless bits for now - keep checks as the spec
30253         says.
30254
30255 2001-10-08  Ravi Pratap  <ravi@ximian.com>
30256
30257         * expression.cs (ElementAccess::DoResolve): Remove my crap code
30258         and start performing checks according to the spec.
30259
30260 2001-10-07  Ravi Pratap  <ravi@ximian.com>
30261
30262         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
30263         rank_specifiers instead.
30264
30265         (rank_specifiers): Change the order in which the rank specifiers are stored
30266
30267         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
30268
30269         * expression.cs (ElementAccess): Implement the LValue interface too.
30270
30271 2001-10-06  Ravi Pratap  <ravi@ximian.com>
30272
30273         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
30274         except that user defined conversions are not included.
30275
30276         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
30277         perform the conversion of the return type, if necessary.
30278
30279         (New::DoResolve): Check whether we are creating an array or an object
30280         and accordingly do the needful.
30281
30282         (New::Emit): Same here.
30283
30284         (New::DoResolve): Implement guts of array creation.
30285
30286         (New::FormLookupType): Helper function.
30287
30288 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30289
30290         * codegen.cs: Removed most of the code generation here, and move the
30291         corresponding code generation bits to the statement classes. 
30292
30293         Added support for try/catch/finalize and throw.
30294
30295         * cs-parser.jay: Added support for try/catch/finalize.
30296
30297         * class.cs: Catch static methods having the flags override,
30298         virtual or abstract.
30299
30300         * expression.cs (UserCast): This user cast was not really doing
30301         what it was supposed to do.  Which is to be born in fully resolved
30302         state.  Parts of the resolution were being performed at Emit time! 
30303
30304         Fixed this code.
30305
30306 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30307
30308         * expression.cs: Implicity convert the result from UserCast.
30309
30310 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30311
30312         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
30313         prevented it from working correctly. 
30314
30315         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
30316         merely ConvertImplicit.
30317
30318 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30319
30320         * typemanager.cs: Make the LookupTypeContainer function static,
30321         and not per-instance.  
30322
30323         * class.cs: Make static FindMembers (the one that takes a Type
30324         argument). 
30325
30326         * codegen.cs: Add EmitForeach here.
30327
30328         * cs-parser.jay: Make foreach a toplevel object instead of the
30329         inline expansion, as we need to perform semantic analysis on it. 
30330
30331 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30332
30333         * expression.cs (Expression::ImplicitUserConversion): Rename to
30334         UserDefinedConversion.
30335
30336         (Expression::UserDefinedConversion): Take an extra argument specifying 
30337         whether we look for explicit user conversions too.
30338
30339         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
30340
30341         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
30342
30343         (ExplicitUserConversion): Make it a call to UserDefinedConversion
30344         with the appropriate arguments.
30345
30346         * cs-parser.jay (cast_expression): Record location too.
30347
30348         * expression.cs (Cast): Record location info.
30349
30350         (Expression::ConvertExplicit): Take location argument.
30351
30352         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
30353         to determine if we are doing explicit conversions.
30354
30355         (UserCast::Emit): Update accordingly.
30356
30357         (Expression::ConvertExplicit): Report an error if everything fails.
30358
30359         * ../errors/cs0030.cs : Add.
30360
30361 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
30362
30363         * modifiers.cs: If the ABSTRACT keyword is present, also set the
30364         virtual and newslot bits. 
30365
30366         * class.cs (TypeContainer::RegisterRequiredImplementations):
30367         Record methods we need.
30368
30369         (TypeContainer::MakeKey): Helper function to make keys for
30370         MethodBases, since the Methodbase key is useless.
30371
30372         (TypeContainer::Populate): Call RegisterRequiredImplementations
30373         before defining the methods.   
30374
30375         Create a mapping for method_builders_to_methods ahead of time
30376         instead of inside a tight loop.
30377
30378         (::RequireMethods):  Accept an object as the data to set into the
30379         hashtable so we can report interface vs abstract method mismatch.
30380
30381 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
30382
30383         * report.cs: Make all of it static.
30384
30385         * rootcontext.cs: Drop object_type and value_type computations, as
30386         we have those in the TypeManager anyways.
30387
30388         Drop report instance variable too, now it is a global.
30389
30390         * driver.cs: Use try/catch on command line handling.
30391
30392         Add --probe option to debug the error reporting system with a test
30393         suite. 
30394
30395         * report.cs: Add support for exiting program when a probe
30396         condition is reached.
30397
30398 2001-10-03  Ravi Pratap  <ravi@ximian.com>
30399
30400         * expression.cs (Binary::DoNumericPromotions): Fix the case when
30401         we do a forcible conversion regardless of type, to check if 
30402         ForceConversion returns a null.
30403
30404         (Binary::error19): Use location to report error.
30405
30406         (Unary::error23): Use location here too.
30407
30408         * ../errors/cs0019.cs : Check in.
30409
30410         * ../errors/cs0023.cs : Check in.
30411
30412         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
30413         case of a non-null MethodInfo object with a length of 0 !
30414
30415         (Binary::ResolveOperator): Flag error if overload resolution fails to find
30416         an applicable member - according to the spec :-)
30417         Also fix logic to find members in base types.
30418
30419         (Unary::ResolveOperator): Same here.
30420
30421         (Unary::report23): Change name to error23 and make first argument a TypeContainer
30422         as I was getting thoroughly confused between this and error19 :-)
30423
30424         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
30425         (::FindMostEncompassedType): Implement.
30426         (::FindMostEncompassingType): Implement.
30427         (::StandardConversionExists): Implement.
30428
30429         (UserImplicitCast): Re-vamp. We now need info about most specific
30430         source and target types so that we can do the necessary conversions.
30431
30432         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
30433         mathematical union with no duplicates.
30434
30435 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
30436
30437         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
30438         in order from base classes to child classes, so that we can in
30439         child classes look up in our parent for method names and
30440         attributes (required for handling abstract, virtual, new, override
30441         constructs: we need to instrospect our base class, and if we dont
30442         populate the classes in order, the introspection might be
30443         incorrect.  For example, a method could query its parent before
30444         the parent has any methods and would determine that the parent has
30445         no abstract methods (while it could have had them)).
30446
30447         (RootContext::CreateType): Record the order in which we define the
30448         classes.
30449
30450 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
30451
30452         * class.cs (TypeContainer::Populate): Also method definitions can
30453         fail now, keep track of this.
30454
30455         (TypeContainer::FindMembers): Implement support for
30456         DeclaredOnly/noDeclaredOnly flag.
30457
30458         (Constructor::Emit) Return the ConstructorBuilder.
30459
30460         (Method::Emit) Return the MethodBuilder. 
30461         Check for abstract or virtual methods to be public.
30462
30463         * rootcontext.cs (RootContext::CreateType): Register all the
30464         abstract methods required for the class to be complete and the
30465         interface methods that must be implemented. 
30466
30467         * cs-parser.jay: Report error 501 (method requires body if it is
30468         not marked abstract or extern).
30469
30470         * expression.cs (TypeOf::Emit): Implement.
30471
30472         * typemanager.cs: runtime_handle_type, new global type.
30473
30474         * class.cs (Property::Emit): Generate code for properties.
30475
30476 2001-10-02  Ravi Pratap  <ravi@ximian.com>
30477
30478         * expression.cs (Unary::ResolveOperator): Find operators on base type
30479         too - we now conform exactly to the spec.
30480
30481         (Binary::ResolveOperator): Same here.
30482
30483         * class.cs (Operator::Define): Fix minor quirk in the tests.
30484
30485         * ../errors/cs0215.cs : Added.
30486
30487         * ../errors/cs0556.cs : Added.
30488
30489         * ../errors/cs0555.cs : Added.
30490
30491 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
30492
30493         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
30494         single integer which is really efficient
30495
30496 2001-10-01  Ravi Pratap  <ravi@ximian.com>
30497
30498         *  expression.cs (Expression::ImplicitUserConversion): Use location
30499         even in the case when we are examining True operators.
30500  
30501         * class.cs (Operator::Define): Perform extensive checks to conform
30502         with the rules for operator overloading in the spec.
30503
30504         * expression.cs (Expression::ImplicitReferenceConversion): Implement
30505         some of the other conversions mentioned in the spec.
30506
30507         * typemanager.cs (array_type): New static member for the System.Array built-in
30508         type.
30509
30510         (cloneable_interface): For System.ICloneable interface.
30511
30512         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
30513         we start resolving the tree and populating types.
30514
30515         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
30516  
30517 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
30518
30519         * expression.cs (Expression::ExprClassFromMemberInfo,
30520         Expression::Literalize): Create literal expressions from
30521         FieldInfos which are literals.
30522
30523         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
30524         type casts, because they were wrong.  The test suite in tests
30525         caught these ones.
30526
30527         (ImplicitNumericConversion): ushort to ulong requires a widening
30528         cast. 
30529
30530         Int32 constant to long requires widening cast as well.
30531
30532         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
30533         for integers because the type on the stack is not i4.
30534
30535 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
30536
30537         * expression.cs (report118): require location argument. 
30538
30539         * parameter.cs: Do not dereference potential null value.
30540
30541         * class.cs: Catch methods that lack the `new' keyword when
30542         overriding a name.  Report warnings when `new' is used without
30543         anything being there to override.
30544
30545         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
30546
30547         * class.cs: Only add constructor to hashtable if it is non-null
30548         (as now constructors can fail on define).
30549
30550         (TypeManager, Class, Struct): Take location arguments.
30551
30552         Catch field instance initialization in structs as errors.
30553
30554         accepting_filter: a new filter for FindMembers that is static so
30555         that we dont create an instance per invocation.
30556
30557         (Constructor::Define): Catch errors where a struct constructor is
30558         parameterless 
30559
30560         * cs-parser.jay: Pass location information for various new
30561         constructs. 
30562
30563         * delegate.cs (Delegate): take a location argument.
30564
30565         * driver.cs: Do not call EmitCode if there were problesm in the
30566         Definition of the types, as many Builders wont be there. 
30567
30568         * decl.cs (Decl::Decl): Require a location argument.
30569
30570         * cs-tokenizer.cs: Handle properly hex constants that can not fit
30571         into integers, and find the most appropiate integer for it.
30572
30573         * literal.cs: Implement ULongLiteral.
30574
30575         * rootcontext.cs: Provide better information about the location of
30576         failure when CreateType fails.
30577
30578 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
30579
30580         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
30581         as well.
30582
30583         * expression.cs (Binary::CheckShiftArguments): Add missing type
30584         computation.
30585         (Binary::ResolveOperator): Add type to the logical and and logical
30586         or, Bitwise And/Or and Exclusive Or code paths, it was missing
30587         before.
30588
30589         (Binary::DoNumericPromotions): In the case where either argument
30590         is ulong (and most signed types combined with ulong cause an
30591         error) perform implicit integer constant conversions as well.
30592
30593 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
30594
30595         * expression.cs (UserImplicitCast): Method should always be
30596         non-null. 
30597         (Invocation::BetterConversion): Simplified test for IntLiteral.
30598
30599         (Expression::ImplicitNumericConversion): Split this routine out.
30600         Put the code that performs implicit constant integer conversions
30601         here. 
30602
30603         (Expression::Resolve): Become a wrapper around DoResolve so we can
30604         check eclass and type being set after resolve.
30605
30606         (Invocation::Badness): Remove this dead function
30607
30608         (Binary::ResolveOperator): Do not compute the expensive argumnets
30609         unless we have a union for it.
30610
30611         (Probe::Emit): Is needs to do an isinst and then
30612         compare against null.
30613
30614         (::CanConvert): Added Location argument.  If the Location argument
30615         is null (Location.Null), then we do not report errors.  This is
30616         used by the `probe' mechanism of the Explicit conversion.  We do
30617         not want to generate an error for something that the user
30618         explicitly requested to be casted.  But the pipeline for an
30619         explicit cast first tests for potential implicit casts.
30620
30621         So for now, if the Location is null, it means `Probe only' to
30622         avoid adding another argument.   Might have to revise this
30623         strategy later.
30624
30625         (ClassCast): New class used to type cast objects into arbitrary
30626         classes (used in Explicit Reference Conversions).
30627
30628         Implement `as' as well.
30629
30630         Reverted all the patches from Ravi below: they were broken:
30631
30632                 * The use of `level' as a mechanism to stop recursive
30633                   invocations is wrong.  That was there just to catch the
30634                   bug with a strack trace but not as a way of addressing
30635                   the problem.
30636
30637                   To fix the problem we have to *understand* what is going
30638                   on and the interactions and come up with a plan, not
30639                   just get things going.
30640
30641                 * The use of the type conversion cache that I proposed
30642                   last night had an open topic: How does this work across
30643                   protection domains.  A user defined conversion might not
30644                   be public in the location where we are applying the
30645                   conversion, a different conversion might be selected
30646                   (ie, private A->B (better) but public B->A (worse),
30647                   inside A, A->B applies, but outside it, B->A will
30648                   apply).
30649
30650                 * On top of that (ie, even if the above is solved),
30651                   conversions in a cache need to be abstract.  Ie, `To
30652                   convert from an Int to a Short use an OpcodeCast', not
30653                   `To convert from an Int to a Short use the OpcodeCast on
30654                   the variable 5' (which is what this patch was doing).
30655
30656 2001-09-28  Ravi Pratap  <ravi@ximian.com>
30657
30658         * expression.cs (Invocation::ConversionExists): Re-write to use
30659         the conversion cache
30660
30661         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
30662         cache all conversions done, not just user-defined ones.
30663
30664         (Invocation::BetterConversion): The real culprit. Use ConversionExists
30665         to determine if a conversion exists instead of acutually trying to 
30666         perform the conversion. It's faster too.
30667
30668         (Expression::ConvertExplicit): Modify to use ConversionExists to check
30669         and only then attempt the implicit conversion.
30670
30671 2001-09-28  Ravi Pratap  <ravi@ximian.com>
30672
30673         * expression.cs (ConvertImplicit): Use a cache for conversions
30674         already found. Check level of recursion and bail out if necessary.
30675
30676 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
30677
30678         * typemanager.cs (string_concat_string_string, string_concat_object_object):
30679         Export standard methods that we expect for string operations.
30680
30681         * statement.cs (Block::UsageWarning): Track usage of variables and
30682         report the errors for not used variables.
30683
30684         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
30685         operator. 
30686
30687 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
30688
30689         * codegen.cs: remove unnneded code 
30690
30691         * expression.cs: Removed BuiltinTypeAccess class
30692
30693         Fix the order in which implicit conversions are
30694         done.  
30695
30696         The previous fixed dropped support for boxed conversions (adding a
30697         test to the test suite now)
30698
30699         (UserImplicitCast::CanConvert): Remove test for source being null,
30700         that code is broken.  We should not feed a null to begin with, if
30701         we do, then we should track the bug where the problem originates
30702         and not try to cover it up here.
30703
30704         Return a resolved expression of type UserImplicitCast on success
30705         rather than true/false.  Ravi: this is what I was talking about,
30706         the pattern is to use a static method as a "constructor" for
30707         objects. 
30708
30709         Also, do not create arguments until the very last minute,
30710         otherwise we always create the arguments even for lookups that
30711         will never be performed. 
30712
30713         (UserImplicitCast::Resolve): Eliminate, objects of type
30714         UserImplicitCast are born in a fully resolved state. 
30715
30716         * typemanager.cs (InitCoreTypes): Init also value_type
30717         (System.ValueType). 
30718
30719         * expression.cs (Cast::Resolve): First resolve the child expression.
30720
30721         (LValue): Add new method AddressOf to be used by
30722         the `&' operator.  
30723
30724         Change the argument of Store to take an EmitContext instead of an
30725         ILGenerator, because things like FieldExpr need to be able to call
30726         their children expression to generate the instance code. 
30727
30728         (Expression::Error, Expression::Warning): Sugar functions for
30729         reporting errors.
30730
30731         (Expression::MemberLookup): Accept a TypeContainer instead of a
30732         Report as the first argument.
30733
30734         (Expression::ResolvePrimary): Killed.  I still want to improve
30735         this as currently the code is just not right.
30736
30737         (Expression::ResolveMemberAccess): Simplify, but it is still
30738         wrong. 
30739
30740         (Unary::Resolve): Catch errors in AddressOf operators.
30741
30742         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
30743         index to a byte for the short-version, or the compiler will choose
30744         the wrong Emit call, which generates the wrong data.
30745
30746         (ParameterReference::Emit, ::Store): same.
30747
30748         (FieldExpr::AddressOf): Implement.
30749
30750         * typemanager.cs: TypeManager: made public variable instead of
30751         property.
30752
30753         * driver.cs: document --fatal.
30754
30755         * report.cs (ErrorMessage, WarningMessage): new names for the old
30756         Error and Warning classes.
30757
30758         * cs-parser.jay (member_access): Turn built-in access to types
30759         into a normal simplename
30760
30761 2001-09-27  Ravi Pratap  <ravi@ximian.com>
30762
30763         * expression.cs (Invocation::BetterConversion): Fix to cope
30764         with q being null, since this was introducing a bug.
30765
30766         * expression.cs (ConvertImplicit): Do built-in conversions first.
30767
30768 2001-09-27  Ravi Pratap  <ravi@ximian.com>
30769
30770         * expression.cs (UserImplicitCast::Resolve): Fix bug.
30771
30772 2001-09-27  Ravi Pratap  <ravi@ximian.com>
30773
30774         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
30775         I had introduced long ago (what's new ?).
30776
30777         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
30778         the work of all the checking. 
30779         (ConvertImplicit): Call CanConvert and only then create object if necessary.
30780         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
30781
30782         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
30783         that is the right way. 
30784
30785         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
30786         overloading resolution. Use everywhere instead of cutting and pasting code.
30787
30788         (Binary::ResolveOperator): Use MakeUnionSet.
30789
30790         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
30791         we have to convert to bool types. Not complete yet.
30792
30793 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
30794
30795         * typemanager.cs (TypeManager::CSharpName): support ushort.
30796
30797         * expression.cs (Expression::TryImplicitIntConversion): Attempts
30798         to provide an expression that performsn an implicit constant int
30799         conversion (section 6.1.6).
30800         (Expression::ConvertImplicitRequired): Reworked to include
30801         implicit constant expression conversions.
30802
30803         (Expression::ConvertNumericExplicit): Finished.
30804
30805         (Invocation::Emit): If InstanceExpression is null, then it means
30806         that we perform a call on this.
30807
30808 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
30809
30810         * expression.cs (Unary::Emit): Remove some dead code.
30811         (Probe): Implement Resolve and Emit for `is'.
30812         (Expression::ConvertImplicitRequired): Attempt to do constant
30813         expression conversions here.  Maybe should be moved to
30814         ConvertImplicit, but I am not sure.
30815         (Expression::ImplicitLongConstantConversionPossible,
30816         Expression::ImplicitIntConstantConversionPossible): New functions
30817         that tell whether is it possible to apply an implicit constant
30818         expression conversion.
30819
30820         (ConvertNumericExplicit): Started work on explicit numeric
30821         conversions.
30822
30823         * cs-parser.jay: Update operator constants.
30824
30825         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
30826         (Parameters::GetSignature): Hook up VerifyArgs here.
30827         (Parameters::VerifyArgs): Verifies that no two arguments have the
30828         same name. 
30829
30830         * class.cs (Operator): Update the operator names to reflect the
30831         ones that the spec expects (as we are just stringizing the
30832         operator names).
30833
30834         * expression.cs (Unary::ResolveOperator): Fix bug: Use
30835         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
30836         previous usage did only work for our methods.
30837         (Expression::ConvertImplicit): Handle decimal implicit numeric
30838         conversions as well.
30839         (Expression::InternalTypeConstructor): Used to invoke constructors
30840         on internal types for default promotions.
30841
30842         (Unary::Emit): Implement special handling for the pre/post
30843         increment/decrement for overloaded operators, as they need to have
30844         the same semantics as the other operators.
30845
30846         (Binary::ResolveOperator): ditto.
30847         (Invocation::ConversionExists): ditto.
30848         (UserImplicitCast::Resolve): ditto.
30849
30850 2001-09-26  Ravi Pratap  <ravi@ximian.com>
30851
30852         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
30853         operator, return after emitting body. Regression tests pass again !
30854
30855         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
30856         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
30857         (Invocation::OverloadResolve): Ditto.
30858         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
30859
30860         * everywhere : update calls to the above methods accordingly.
30861
30862 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
30863
30864         * assign.cs (Assign): Make it inherit from ExpressionStatement.
30865
30866         * expression.cs (ExpressionStatement): New base class used for
30867         expressions that can appear in statements, so that we can provide
30868         an alternate path to generate expression that do not leave a value
30869         on the stack.
30870
30871         (Expression::Emit, and all the derivatives): We no longer return
30872         whether a value is left on the stack or not.  Every expression
30873         after being emitted leaves a single value on the stack.
30874
30875         * codegen.cs (EmitContext::EmitStatementExpression): Use the
30876         facilties of ExpressionStatement if possible.
30877
30878         * cs-parser.jay: Update statement_expression.
30879
30880 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
30881
30882         * driver.cs: Change the wording of message
30883
30884 2001-09-25  Ravi Pratap  <ravi@ximian.com>
30885
30886         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
30887         the type of the expression to the return type of the method if
30888         we have an overloaded operator match ! The regression tests pass again !
30889         (Unary::ResolveOperator): Ditto.
30890
30891         * expression.cs (Invocation::ConversionExists): Correct the member lookup
30892         to find "op_Implicit", not "implicit" ;-)
30893         (UserImplicitCast): New class to take care of user-defined implicit conversions.
30894         (ConvertImplicit, ForceConversion): Take TypeContainer argument
30895
30896         * everywhere : Correct calls to the above accordingly.
30897
30898         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
30899         (ConvertImplicit): Do user-defined conversion if it exists.
30900
30901 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
30902
30903         * assign.cs: track location.
30904         (Resolve): Use implicit conversions on assignment.
30905
30906         * literal.cs: Oops.  Not good, Emit of short access values should
30907         pass (Bytes) or the wrong argument will be selected.
30908
30909         * expression.cs (Unary::Emit): Emit code for -expr.
30910
30911         (Unary::ResolveOperator): Handle `Substract' for non-constants
30912         (substract from zero from the non-constants).
30913         Deal with Doubles as well. 
30914
30915         (Expression::ConvertImplicitRequired): New routine that reports an
30916         error if no implicit conversion exists. 
30917
30918         (Invocation::OverloadResolve): Store the converted implicit
30919         expressions if we make them
30920
30921 2001-09-24  Ravi Pratap  <ravi@ximian.com>
30922
30923         * class.cs (ConstructorInitializer): Take a Location argument.
30924         (ConstructorBaseInitializer): Same here.
30925         (ConstructorThisInitializer): Same here.
30926
30927         * cs-parser.jay : Update all calls accordingly.
30928
30929         * expression.cs (Unary, Binary, New): Take location argument.
30930         Update accordingly everywhere.
30931
30932         * cs-parser.jay : Update all calls to the above to take a location
30933         argument.
30934
30935         * class.cs : Ditto.
30936
30937 2001-09-24  Ravi Pratap  <ravi@ximian.com>
30938
30939         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
30940         (Invocation::BetterConversion): Same here
30941         (Invocation::ConversionExists): Ditto.
30942
30943         (Invocation::ConversionExists): Implement.
30944
30945 2001-09-22  Ravi Pratap  <ravi@ximian.com>
30946
30947         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
30948         Also take an additional TypeContainer argument.
30949
30950         * All over : Pass in TypeContainer as argument to OverloadResolve.
30951
30952         * typemanager.cs (CSharpName): Update to check for the string type and return
30953         that too.
30954
30955         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
30956         a given method.
30957
30958 2001-09-21  Ravi Pratap  <ravi@ximian.com>
30959
30960         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
30961         (Invocation::BetterFunction): Implement.
30962         (Invocation::BetterConversion): Implement.
30963         (Invocation::ConversionExists): Skeleton, no implementation yet.
30964
30965         Okay, things work fine !
30966
30967 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
30968
30969         * typemanager.cs: declare and load enum_type, delegate_type and
30970         void_type. 
30971
30972         * expression.cs (Expression::Emit): Now emit returns a value that
30973         tells whether a value is left on the stack or not.  This strategy
30974         might be reveted tomorrow with a mechanism that would address
30975         multiple assignments.
30976         (Expression::report118): Utility routine to report mismatches on
30977         the ExprClass.
30978
30979         (Unary::Report23): Report impossible type/operator combination
30980         utility function.
30981
30982         (Unary::IsIncrementableNumber): Whether the type can be
30983         incremented or decremented with add.
30984         (Unary::ResolveOperator): Also allow enumerations to be bitwise
30985         complemented. 
30986         (Unary::ResolveOperator): Implement ++, !, ~,
30987
30988         (Invocation::Emit): Deal with new Emit convetion.
30989
30990         * All Expression derivatives: Updated their Emit method to return
30991         whether they leave values on the stack or not.
30992
30993         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
30994         stack for expressions that are statements. 
30995
30996 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
30997
30998         * expression.cs (LValue): New interface.  Must be implemented by
30999         LValue objects.
31000         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31001         LValue interface.
31002
31003         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31004         interface for generating code, simplifies the code.
31005
31006 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31007
31008         * expression.cs (everywhere): Comment out return statements in ::Resolve
31009         methods to avoid the warnings.
31010
31011 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31012
31013         * driver.cs (parse): Report error 2001 if we can not open the
31014         source file.
31015
31016         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31017         not resolve it.
31018
31019         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31020         object. 
31021
31022         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31023         otherwise nested blocks end up with the same index.
31024
31025         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31026
31027         * expression.cs:  Instead of having FIXMEs in the Resolve
31028         functions, throw exceptions so it is obvious that we are facing a
31029         bug. 
31030
31031         * cs-parser.jay (invocation_expression): Pass Location information.
31032
31033         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31034         Use a basename for those routines because .NET does not like paths
31035         on them. 
31036
31037         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31038         already defined.
31039
31040 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31041
31042         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31043         are loading the correct data types (throws an exception if not).
31044         (TypeManager::InitCoreTypes): Use CoreLookupType
31045
31046         * expression.cs (Unary::ResolveOperator): return the child
31047         expression for expressions which are just +expr.
31048         (Unary::ResolveOperator): Return negative literals for -LITERAL
31049         expressions (otherwise they are Unary {Literal}).
31050         (Invocation::Badness): Take into account `Implicit constant
31051         expression conversions'.
31052
31053         * literal.cs (LongLiteral): Implement long literal class.
31054         (IntLiteral): export the `Value' of the intliteral. 
31055
31056 2001-09-19  Ravi Pratap  <ravi@ximian.com>
31057
31058         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
31059
31060         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
31061         instead of 'Operator'
31062
31063         * expression.cs (Binary::ResolveOperator): Update accordingly.
31064         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
31065         and 'Minus'
31066
31067         * cs-parser.jay (unary_expression): Update to use the new names.
31068
31069         * gen-treedump.cs (GetUnary): Same here.
31070
31071         * expression.cs (Unary::Resolve): Implement.
31072         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
31073         operators are found instead of making noise ;-)
31074         (Unary::ResolveOperator): New method to do precisely the same thing which
31075         Binary::ResolveOperator does for Binary expressions.
31076         (Unary.method, .Arguments): Add.
31077         (Unary::OperName): Implement.   
31078         (Unary::ForceConversion): Copy and Paste !
31079
31080         * class.cs (Operator::Define): Fix a small bug for the case when we have 
31081         a unary operator.
31082
31083         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
31084         for the inbuilt operators. Only overloading works for now ;-)
31085
31086 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
31087
31088         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
31089         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
31090
31091         * expression.cs (This::Emit): Implement. 
31092         (This::Resolve): Implement.
31093         (TypeOf:Resolve): Implement.
31094         (Expression::ResolveSimpleName): Add an implicit this to instance
31095         field references. 
31096         (MemberAccess::Resolve): Deal with Parameters and Fields. 
31097         Bind instance variable to Field expressions.
31098         (FieldExpr::Instance): New field used to track the expression that
31099         represents the object instance.
31100         (FieldExpr::Resolve): Track potential errors from MemberLookup not
31101         binding 
31102         (FieldExpr::Emit): Implement.
31103
31104         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
31105         the last instruction contains a return opcode to avoid generating
31106         the last `ret' instruction (this generates correct code, and it is
31107         nice to pass the peverify output).
31108
31109         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
31110         initializer for static and instance variables.
31111         (Constructor::Emit): Allow initializer to be null in the case of
31112         static constructors.  Only emit initializer for instance
31113         constructors. 
31114
31115         (TypeContainer::FindMembers): Return a null array if there are no
31116         matches.
31117
31118         Also fix the code for the MemberTypes.Method branch, as it was not
31119         scanning that for operators (or tried to access null variables before).
31120
31121         * assign.cs (Assign::Emit): Handle instance and static fields. 
31122
31123         * TODO: Updated.
31124
31125         * driver.cs: Stop compilation if there are parse errors.
31126
31127         * cs-parser.jay (constructor_declaration): Provide default base
31128         initializer for non-static constructors.
31129         (constructor_declarator): Do not provide a default base
31130         initializers if none was specified.
31131         Catch the fact that constructors should not have parameters.
31132
31133         * class.cs: Do not emit parent class initializers for static
31134         constructors, that should be flagged as an error.
31135
31136 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31137
31138         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
31139         Move back code into TypeContainer::Populate.
31140
31141 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31142
31143         * class.cs (TypeContainer::AddConstructor): Fix the check to
31144         compare against Name, not Basename. 
31145         (Operator::OpType): Change Plus and Minus to Add and Subtract.
31146
31147         * cs-parser.jay : Update accordingly.
31148
31149         * class.cs (TypeContainer::FindMembers): For the case where we are searching
31150         for methods, don't forget to look into the operators too.
31151         (RegisterMethodBuilder): Helper method to take care of this for
31152         methods, constructors and operators.
31153         (Operator::Define): Completely revamp.
31154         (Operator.OperatorMethod, MethodName): New fields.
31155         (TypeContainer::Populate): Move the registering of builders into
31156         RegisterMethodBuilder.
31157         (Operator::Emit): Re-write.
31158
31159         * expression.cs (Binary::Emit): Comment out code path to emit method
31160         invocation stuff for the case when we have a user defined operator. I am
31161         just not able to get it right !
31162
31163 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31164
31165         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
31166         argument. 
31167
31168         (Expression::MemberLookup): Provide a version that allows to
31169         specify the MemberTypes and BindingFlags. 
31170
31171         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
31172         so it was not fetching variable information from outer blocks.
31173
31174         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
31175         Beforefieldinit as it was buggy.
31176
31177         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
31178         that Ravi put here.  
31179
31180         * class.cs (Constructor::Emit): Only emit if block is not null.
31181         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
31182         deal with this by semantically definining it as if the user had
31183         done it.
31184
31185         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
31186         constructors as we now "emit" them at a higher level.
31187
31188         (TypeContainer::DefineDefaultConstructor): Used to define the
31189         default constructors if none was provided.
31190
31191         (ConstructorInitializer): Add methods Resolve and Emit. 
31192
31193         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
31194
31195 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31196
31197         * class.cs (TypeContainer::EmitDefaultConstructor): Register
31198         the default constructor builder with our hashtable for methodbuilders
31199         to methodcores.
31200
31201         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
31202         and argument_count is 0 in which case we have a match.
31203         (Binary::ResolveOperator): More null checking and miscellaneous coding
31204         style cleanup.
31205
31206 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31207
31208         * rootcontext.cs (IsNameSpace): Compare against null.
31209
31210         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
31211
31212         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
31213         and Unary::Operator.
31214
31215         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
31216         accordingly.
31217
31218         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
31219         we have overloaded operators.
31220         (Binary::ResolveOperator): Implement the part which does the operator overload
31221         resolution.
31222
31223         * class.cs (Operator::Emit): Implement.
31224         (TypeContainer::Emit): Emit the operators we have too.
31225
31226         * expression.cs (Binary::Emit): Update to emit the appropriate code for
31227         the case when we have a user-defined operator.
31228
31229 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31230
31231         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
31232
31233 2001-09-16  Ravi Pratap  <ravi@ximian.com>
31234
31235         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
31236         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
31237         (Constructor::Emit): Implement.
31238         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
31239         if we have no work to do. 
31240         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
31241         Emit method.
31242
31243         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
31244         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
31245
31246         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
31247         of parent.parent.
31248
31249 2001-09-15  Ravi Pratap  <ravi@ximian.com>
31250
31251         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
31252         in the source.
31253         (Tree::RecordNamespace): Method to do what the name says ;-)
31254         (Tree::Namespaces): Property to get at the namespaces hashtable.
31255
31256         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
31257         keep track.
31258
31259         * rootcontext.cs (IsNamespace): Fixed it :-)
31260
31261 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31262
31263         * class.cs (TypeContainer::FindMembers): Add support for
31264         constructors. 
31265         (MethodCore): New class that encapsulates both the shared aspects
31266         of a Constructor and a Method.  
31267         (Method, Constructor): Factored pieces into MethodCore.
31268
31269         * driver.cs: Added --fatal which makes errors throw exceptions.
31270         Load System assembly as well as part of the standard library.
31271
31272         * report.cs: Allow throwing exceptions on errors for debugging.
31273
31274         * modifiers.cs: Do not use `parent', instead use the real type
31275         container to evaluate permission settings.
31276
31277         * class.cs: Put Ravi's patch back in.  He is right, and we will
31278         have to cope with the
31279
31280 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31281
31282         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
31283         FamORAssem, not FamANDAssem.
31284
31285 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31286
31287         * driver.cs: Added --parse option that only parses its input files
31288         and terminates.
31289
31290         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
31291         incorrect.  IsTopLevel is not used to tell whether an object is
31292         root_types or not (that can be achieved by testing this ==
31293         root_types).  But to see if this is a top-level *class* (not
31294         necessarly our "toplevel" container). 
31295
31296 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31297
31298         * enum.cs (Enum::Define): Modify to call the Lookup method on the
31299         parent instead of a direct call to GetType.
31300
31301 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31302
31303         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
31304         Modifiers.TypeAttr. This should just be a call to that method.
31305
31306         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
31307         object so that we can determine if we are top-level or not.
31308
31309         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
31310         TypeContainer too.
31311
31312         * enum.cs (Enum::Define): Ditto.
31313
31314         * modifiers.cs (FieldAttr): Re-write.
31315
31316         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
31317         (TypeContainer::HaveStaticConstructor): New property to provide access
31318         to precisely that info.
31319
31320         * modifiers.cs (MethodAttr): Re-write.
31321         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
31322
31323         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
31324         of top-level types as claimed.
31325
31326 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31327
31328         * expression.cs (MemberLookup): Fruitless attempt to lookup
31329         constructors.  Maybe I need to emit default constructors?  That
31330         might be it (currently .NET emits this for me automatically).
31331         (Invocation::OverloadResolve): Cope with Arguments == null.
31332         (Invocation::EmitArguments): new function, shared by the new
31333         constructor and us.
31334         (Invocation::Emit): Handle static and instance methods.  Emit
31335         proper call instruction for virtual or non-virtual invocations.
31336         (New::Emit): Implement.
31337         (New::Resolve): Implement.
31338         (MemberAccess:Resolve): Implement.
31339         (MethodGroupExpr::InstanceExpression): used conforming to the spec
31340         to track instances.
31341         (FieldExpr::Resolve): Set type.
31342
31343         * support.cs: Handle empty arguments.
31344                 
31345         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
31346         SimpleLookup): Auxiliary routines to help parse a qualifier
31347         identifier.  
31348
31349         Update qualifier_identifier rule.
31350
31351         * codegen.cs: Removed debugging messages.
31352
31353         * class.cs: Make this a global thing, this acts just as a "key" to
31354         objects that we might have around.
31355
31356         (Populate): Only initialize method_builders_to_methods once.
31357
31358         * expression.cs (PropertyExpr): Initialize type from the
31359         PropertyType. 
31360
31361         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
31362         Resolve pattern.  Attempt to implicitly convert value to boolean.
31363         Emit code.
31364
31365         * expression.cs: Set the type for the int32/int32 argument case.
31366         (Binary::ResolveOperator): Set the return type to boolean for
31367         comparission operators
31368
31369         * typemanager.cs: Remove debugging print code.
31370
31371         (Invocation::Resolve): resolve type.
31372
31373         * class.cs: Allocate a MemberInfo of the correct size, as the code
31374         elsewhere depends on the test to reflect the correct contents.
31375
31376         (Method::) Keep track of parameters, due to System.Reflection holes
31377
31378         (TypeContainer::Populate): Keep track of MethodBuilders to Method
31379         mapping here.
31380
31381         (TypeContainer::FindMembers): Use ArrayList and then copy an array
31382         of the exact size and return that.
31383
31384         (Class::LookupMethodByBuilder): New function that maps
31385         MethodBuilders to its methods.  Required to locate the information
31386         on methods because System.Reflection bit us again.
31387
31388         * support.cs: New file, contains an interface ParameterData and
31389         two implementations: ReflectionParameters and InternalParameters
31390         used to access Parameter information.  We will need to grow this
31391         as required.
31392
31393         * expression.cs (Invocation::GetParameterData): implement a cache
31394         and a wrapper around the ParameterData creation for methods. 
31395         (Invocation::OverloadResolve): Use new code.
31396
31397 2001-09-13  Ravi Pratap  <ravi@ximian.com>
31398
31399         * class.cs (TypeContainer::EmitField): Remove and move into 
31400         (Field::Define): here and modify accordingly.
31401         (Field.FieldBuilder): New member.
31402         (TypeContainer::Populate): Update accordingly.
31403         (TypeContainer::FindMembers): Implement.
31404
31405 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31406
31407         * statement.cs: (VariableInfo::VariableType): New field to be
31408         initialized with the full type once it is resolved. 
31409
31410 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
31411
31412         * parameter.cs (GetParameterInfo): Use a type cache to compute
31413         things only once, and to reuse this information
31414
31415         * expression.cs (LocalVariableReference::Emit): Implement.
31416         (OpcodeCast::Emit): fix.
31417
31418         (ParameterReference::Resolve): Implement.
31419         (ParameterReference::Emit): Implement.
31420
31421         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
31422         that are expressions need to stay as Expressions.
31423
31424         * typemanager.cs (CSharpName): Returns the C# name of a type if
31425         possible. 
31426
31427         * expression.cs (Expression::ConvertImplicit): New function that
31428         implements implicit type conversions.
31429
31430         (Expression::ImplicitReferenceConversion): Implements implicit
31431         reference conversions.
31432
31433         (EmptyCast): New type for transparent casts.
31434
31435         (OpcodeCast): New type for casts of types that are performed with
31436         a sequence of bytecodes.
31437
31438         (BoxedCast): New type used for casting value types into reference
31439         types.  Emits a box opcode.
31440
31441         (Binary::DoNumericPromotions): Implements numeric promotions of
31442         and computation of the Binary::Type.
31443
31444         (Binary::EmitBranchable): Optimization.
31445
31446         (Binary::Emit): Implement code emission for expressions.
31447
31448         * typemanager.cs (TypeManager): Added two new core types: sbyte
31449         and byte.
31450
31451 2001-09-12  Ravi Pratap  <ravi@ximian.com>
31452
31453         * class.cs (TypeContainer::FindMembers): Method which does exactly
31454         what Type.FindMembers does, only we don't have to use reflection. No
31455         implementation yet.
31456
31457         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
31458         typecontainer objects as we need to get at them.
31459         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
31460
31461         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
31462         typecontainer object.
31463
31464         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
31465         of just a Report object.
31466
31467 2001-09-11  Ravi Pratap  <ravi@ximian.com>
31468
31469         * class.cs (Event::Define): Go back to using the prefixes "add_" and
31470         "remove_"
31471         (TypeContainer::Populate): Now define the delegates of the type too.
31472         (TypeContainer.Delegates): Property to access the list of delegates defined
31473         in the type.
31474
31475         * delegates.cs (Delegate::Define): Implement partially.
31476
31477         * modifiers.cs (TypeAttr): Handle more flags.
31478
31479 2001-09-11  Ravi Pratap  <ravi@ximian.com>
31480
31481         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
31482         and not <=
31483         (Operator::Define): Re-write logic to get types by using the LookupType method
31484         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
31485         (Indexer::Define): Ditto.
31486         (Event::Define): Ditto.
31487         (Property::Define): Ditto.
31488
31489 2001-09-10  Ravi Pratap  <ravi@ximian.com>
31490
31491         * class.cs (TypeContainer::Populate): Now define operators too. 
31492         (TypeContainer.Operators): New property to access the list of operators
31493         in a type.
31494         (Operator.OperatorMethodBuilder): New member to hold the method builder
31495         for the operator we are defining.
31496         (Operator::Define): Implement.
31497
31498 2001-09-10  Ravi Pratap  <ravi@ximian.com>
31499
31500         * class.cs (Event::Define): Make the prefixes of the accessor methods
31501         addOn_ and removeOn_ 
31502
31503         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
31504         of the location being passed in too. Ideally, this should go later since all
31505         error reporting should be done through the Report object.
31506
31507         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
31508         (Populate): Iterate thru the indexers we have and define them too.
31509         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
31510         for the get and set accessors.
31511         (Indexer::Define): Implement.
31512
31513 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
31514
31515         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
31516         my previous implementation, did not work.
31517
31518         * typemanager.cs: Add a couple of missing types (the longs).
31519
31520         * literal.cs: Use TypeManager.bool_type instead of getting it.
31521
31522         * expression.cs (EventExpr): New kind of expressions.
31523         (Expressio::ExprClassFromMemberInfo): finish
31524
31525 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
31526
31527         * assign.cs: Emit stores to static fields differently.
31528
31529 2001-09-08  Ravi Pratap  <ravi@ximian.com>
31530
31531         * Merge in changes and adjust code to tackle conflicts. Backed out my
31532         code in Assign::Resolve ;-) 
31533
31534 2001-09-08  Ravi Pratap  <ravi@ximian.com>
31535
31536         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
31537         instead Report.Error and also pass in the location.
31538         (CSharpParser::Lexer): New readonly property to return the reference
31539         to the Tokenizer object.
31540         (declare_local_variables): Use Report.Error with location instead of plain 
31541         old error.
31542         (CheckDef): Ditto.
31543
31544         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
31545         (Operator.CheckBinaryOperator): Ditto.
31546
31547         * cs-parser.jay (operator_declarator): Update accordingly.
31548
31549         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
31550         (CheckBinaryOperator): Same here.
31551
31552         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
31553         on the name without any prefixes of namespace names etc. This is because we
31554         already might have something already fully qualified like 
31555         'System.Console.WriteLine'
31556
31557         * assign.cs (Resolve): Begin implementation. Stuck ;-)
31558
31559 2001-09-07  Ravi Pratap  <ravi@ximian.com>
31560
31561         * cs-tokenizer.cs (location): Return a string which also contains
31562         the file name.
31563
31564         * expression.cs (ElementAccess): New class for expressions of the
31565         type 'element access.'
31566         (BaseAccess): New class for expressions of the type 'base access.'
31567         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
31568         respectively.
31569
31570         * cs-parser.jay (element_access): Implement action.
31571         (base_access): Implement actions.
31572         (checked_expression, unchecked_expression): Implement.
31573
31574         * cs-parser.jay (local_variable_type): Correct and implement.
31575         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
31576
31577         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
31578
31579         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
31580         name and the specifiers.
31581
31582         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
31583
31584         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
31585         making them all public ;-)
31586
31587         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
31588         class anyways.
31589
31590 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
31591
31592         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
31593         PropertyExprs.
31594         (FieldExpr, PropertyExprs): New resolved expressions.
31595         (SimpleName::MemberStaticCheck): Perform static checks for access
31596         to non-static fields on static methods. Maybe this should be
31597         generalized for MemberAccesses. 
31598         (SimpleName::ResolveSimpleName): More work on simple name
31599         resolution. 
31600
31601         * cs-parser.jay (primary_expression/qualified_identifier): track
31602         the parameter index.
31603
31604         * codegen.cs (CodeGen::Save): Catch save exception, report error.
31605         (EmitContext::EmitBoolExpression): Chain to expression generation
31606         instead of temporary hack.
31607         (::EmitStatementExpression): Put generic expression code generation.
31608
31609         * assign.cs (Assign::Emit): Implement variable assignments to
31610         local variables, parameters and fields.
31611
31612 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
31613
31614         * statement.cs (Block::GetVariableInfo): New method, returns the
31615         VariableInfo for a variable name in a block.
31616         (Block::GetVariableType): Implement in terms of GetVariableInfo
31617
31618         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
31619         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
31620
31621 2001-09-06  Ravi Pratap  <ravi@ximian.com>
31622
31623         * cs-parser.jay (operator_declaration): Continue on my quest : update
31624         to take attributes argument.
31625         (event_declaration): Ditto.
31626         (enum_declaration): Ditto.
31627         (indexer_declaration): Ditto.
31628
31629         * class.cs (Operator::Operator): Update constructor accordingly.
31630         (Event::Event): Ditto.
31631
31632         * delegate.cs (Delegate::Delegate): Same here.
31633
31634         * enum.cs (Enum::Enum): Same here.
31635
31636 2001-09-05  Ravi Pratap  <ravi@ximian.com>
31637
31638         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
31639
31640         * ../tests/cs0658.cs : New file to demonstrate error 0658.
31641
31642         * attribute.cs (Attributes): New class to encapsulate all attributes which were
31643         being passed around as an arraylist.
31644         (Attributes::AddAttribute): Method to add attribute sections.
31645
31646         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
31647         (struct_declaration): Update accordingly.
31648         (constant_declaration): Update.
31649         (field_declaration): Update.
31650         (method_header): Update.
31651         (fixed_parameter): Update.
31652         (parameter_array): Ditto.
31653         (property_declaration): Ditto.
31654         (destructor_declaration): Ditto.
31655
31656         * class.cs (Struct::Struct): Update constructors accordingly.
31657         (Class::Class): Ditto.
31658         (Field::Field): Ditto.
31659         (Method::Method): Ditto.
31660         (Property::Property): Ditto.
31661         (TypeContainer::OptAttribute): update property's return type.
31662
31663         * interface.cs (Interface.opt_attributes): New member.
31664         (Interface::Interface): Update to take the extra Attributes argument.
31665
31666         * parameter.cs (Parameter::Parameter): Ditto.
31667
31668         * constant.cs (Constant::Constant): Ditto.
31669
31670         * interface.cs (InterfaceMemberBase): New OptAttributes field.
31671         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
31672         the attributes as a parameter.
31673         (InterfaceProperty): Update constructor call.
31674         (InterfaceEvent): Ditto.
31675         (InterfaceMethod): Ditto.
31676         (InterfaceIndexer): Ditto.
31677
31678         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
31679         pass the attributes too.
31680         (interface_event_declaration): Ditto.
31681         (interface_property_declaration): Ditto.
31682         (interface_method_declaration): Ditto.
31683         (interface_declaration): Ditto.
31684
31685 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
31686
31687         * class.cs (Method::Define): Track the "static Main" definition to
31688         create an entry point. 
31689
31690         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
31691         EntryPoint if we find it. 
31692
31693         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
31694         (EmitContext::ig): Make this variable public.
31695
31696         * driver.cs: Make the default output file be the first file name
31697         with the .exe extension.  
31698
31699         Detect empty compilations
31700
31701         Handle various kinds of output targets.  Handle --target and
31702         rename -t to --dumper.
31703
31704         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
31705         methods inherited from Expression return now an Expression.  This
31706         will is used during the tree rewriting as we resolve them during
31707         semantic analysis.
31708
31709         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
31710         the spec.  Missing entirely is the information about
31711         accessability of elements of it.
31712
31713         (Expression::ExprClassFromMemberInfo): New constructor for
31714         Expressions that creates a fully initialized Expression based on
31715         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
31716         a Type.
31717
31718         (Invocation::Resolve): Begin implementing resolution of invocations.
31719
31720         * literal.cs (StringLiteral):  Implement Emit.
31721
31722 2001-09-05  Ravi Pratap  <ravi@ximian.com>
31723
31724         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
31725         member.
31726
31727 2001-09-04  Ravi Pratap  <ravi@ximian.com>
31728
31729         * cs-parser.jay (attribute_arguments): Implement actions.
31730         (attribute): Fix bug in production. Implement action.
31731         (attribute_list): Implement.
31732         (attribute_target): Implement.
31733         (attribute_target_specifier, opt_target_specifier): Implement
31734         (CheckAttributeTarget): New method to check if the attribute target
31735         is valid.
31736         (attribute_section): Implement.
31737         (opt_attributes): Implement.
31738
31739         * attribute.cs : New file to handle attributes.
31740         (Attribute): Class to hold attribute info.
31741
31742         * cs-parser.jay (opt_attribute_target_specifier): Remove production
31743         (attribute_section): Modify production to use 2 different rules to 
31744         achieve the same thing. 1 s/r conflict down !
31745         Clean out commented, useless, non-reducing dimension_separator rules.
31746
31747         * class.cs (TypeContainer.attributes): New member to hold list
31748         of attributes for a type.
31749         (Struct::Struct): Modify to take one more argument, the attribute list.
31750         (Class::Class): Ditto.
31751         (Field::Field): Ditto.
31752         (Method::Method): Ditto.
31753         (Property::Property): Ditto.
31754
31755         * cs-parser.jay (struct_declaration): Update constructor call to
31756         pass in the attributes too.
31757         (class_declaration): Ditto.
31758         (constant_declaration): Ditto.
31759         (field_declaration): Ditto.
31760         (method_header): Ditto.
31761         (fixed_parameter): Ditto.
31762         (parameter_array): Ditto.
31763         (property_declaration): Ditto.
31764
31765         * constant.cs (Constant::Constant): Update constructor similarly.
31766         Use System.Collections.
31767
31768         * parameter.cs (Parameter::Parameter): Update as above.
31769
31770 2001-09-02  Ravi Pratap  <ravi@ximian.com>
31771
31772         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
31773         (TypeContainer.delegates): New member to hold list of delegates.
31774
31775         * cs-parser.jay (delegate_declaration): Implement the action correctly 
31776         this time as I seem to be on crack ;-)
31777
31778 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
31779
31780         * rootcontext.cs (RootContext::IsNamespace): new function, used to
31781         tell whether an identifier represents a namespace.
31782
31783         * expression.cs (NamespaceExpr): A namespace expression, used only
31784         temporarly during expression resolution.
31785         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
31786         utility functions to resolve names on expressions.
31787
31788 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
31789
31790         * codegen.cs: Add hook for StatementExpressions. 
31791
31792         * class.cs: Fix inverted test for static flag in methods.
31793
31794 2001-09-02  Ravi Pratap  <ravi@ximian.com>
31795
31796         * class.cs (Operator::CheckUnaryOperator): Correct error number used
31797         to make it coincide with MS' number.
31798         (Operator::CheckBinaryOperator): Ditto.
31799
31800         * ../errors/errors.txt : Remove error numbers added earlier.
31801
31802         * ../errors/cs1019.cs : Test case for error # 1019
31803
31804         * ../errros/cs1020.cs : Test case for error # 1020
31805
31806         * cs-parser.jay : Clean out commented cruft.
31807         (dimension_separators, dimension_separator): Comment out. Ostensibly not
31808         used anywhere - non-reducing rule.
31809         (namespace_declarations): Non-reducing rule - comment out.
31810
31811         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
31812         with TypeContainer::AddEnum.
31813
31814         * delegate.cs : New file for delegate handling classes.
31815         (Delegate): Class for declaring delegates.
31816
31817         * makefile : Update.
31818
31819         * cs-parser.jay (delegate_declaration): Implement.
31820
31821 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
31822
31823         * class.cs (Event::Define): Implement.
31824         (Event.EventBuilder): New member.
31825
31826         * class.cs (TypeContainer::Populate): Update to define all enums and events
31827         we have.
31828         (Events): New property for the events arraylist we hold. Shouldn't we move to using
31829         readonly fields for all these cases ?
31830
31831 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
31832
31833         * class.cs (Property): Revamp to use the convention of making fields readonly.
31834         Accordingly modify code elsewhere.
31835
31836         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
31837         the Define method of the Property class.
31838
31839         * class.cs : Clean up applied patch and update references to variables etc. Fix 
31840         trivial bug.
31841         (TypeContainer::Populate): Update to define all the properties we have. Also
31842         define all enumerations.
31843
31844         * enum.cs (Define): Implement.
31845
31846 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
31847
31848         * cs-parser.jay (overloadable_operator): The semantic value is an
31849         enum of the Operator class.
31850         (operator_declarator): Implement actions.
31851         (operator_declaration): Implement.
31852
31853         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
31854         validity of definitions.
31855         (Operator::CheckBinaryOperator): Static method to check for binary operators
31856         (TypeContainer::AddOperator): New method to add an operator to a type.
31857
31858         * cs-parser.jay (indexer_declaration): Added line to actually call the
31859         AddIndexer method so it gets added ;-)
31860
31861         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
31862         already taken care of by the MS compiler ?  
31863
31864 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
31865
31866         * class.cs (Operator): New class for operator declarations.
31867         (Operator::OpType): Enum for the various operators.
31868
31869 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
31870
31871         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
31872         ostensibly handle this in semantic analysis.
31873
31874         * cs-parser.jay (general_catch_clause): Comment out
31875         (specific_catch_clauses, specific_catch_clause): Ditto.
31876         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
31877         (catch_args, opt_catch_args): New productions.
31878         (catch_clause): Rewrite to use the new productions above
31879         (catch_clauses): Modify accordingly.
31880         (opt_catch_clauses): New production to use in try_statement
31881         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
31882         and re-write the code in the actions to extract the specific and
31883         general catch clauses by being a little smart ;-)
31884
31885         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
31886         Hooray, try and catch statements parse fine !
31887
31888 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
31889
31890         * statement.cs (Block::GetVariableType): Fix logic to extract the type
31891         string from the hashtable of variables.
31892
31893         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
31894         I end up making that mistake ;-)
31895         (catch_clauses): Fixed gross error which made Key and Value of the 
31896         DictionaryEntry the same : $1 !!
31897
31898 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
31899
31900         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
31901
31902         * cs-parser.jay (event_declaration): Correct to remove the semicolon
31903         when the add and remove accessors are specified. 
31904
31905 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
31906
31907         * cs-parser.jay (IndexerDeclaration): New helper class to hold
31908         information about indexer_declarator.
31909         (indexer_declarator): Implement actions.
31910         (parsing_indexer): New local boolean used to keep track of whether
31911         we are parsing indexers or properties. This is necessary because 
31912         implicit_parameters come into picture even for the get accessor in the 
31913         case of an indexer.
31914         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
31915
31916         * class.cs (Indexer): New class for indexer declarations.
31917         (TypeContainer::AddIndexer): New method to add an indexer to a type.
31918         (TypeContainer::indexers): New member to hold list of indexers for the
31919         type.
31920
31921 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
31922
31923         * cs-parser.jay (add_accessor_declaration): Implement action.
31924         (remove_accessor_declaration): Implement action.
31925         (event_accessors_declaration): Implement
31926         (variable_declarators): swap statements for first rule - trivial.
31927
31928         * class.cs (Event): New class to hold information about event
31929         declarations.
31930         (TypeContainer::AddEvent): New method to add an event to a type
31931         (TypeContainer::events): New member to hold list of events.
31932
31933         * cs-parser.jay (event_declaration): Implement actions.
31934
31935 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
31936
31937         * cs-parser.jay (dim_separators): Implement. Make it a string
31938         concatenating all the commas together, just as they appear.
31939         (opt_dim_separators): Modify accordingly
31940         (rank_specifiers): Update accordingly. Basically do the same
31941         thing - instead, collect the brackets here.
31942         (opt_rank_sepcifiers): Modify accordingly.
31943         (array_type): Modify to actually return the complete type string
31944         instead of ignoring the rank_specifiers.
31945         (expression_list): Implement to collect the expressions
31946         (variable_initializer): Implement. We make it a list of expressions
31947         essentially so that we can handle the array_initializer case neatly too.
31948         (variable_initializer_list): Implement.
31949         (array_initializer): Make it a list of variable_initializers
31950         (opt_array_initializer): Modify accordingly.
31951
31952         * expression.cs (New::NType): Add enumeration to help us
31953         keep track of whether we have an object/delegate creation
31954         or an array creation.
31955         (New:NewType, New::Rank, New::Indices, New::Initializers): New
31956         members to hold data about array creation.
31957         (New:New): Modify to update NewType
31958         (New:New): New Overloaded contructor for the array creation
31959         case.
31960
31961         * cs-parser.jay (array_creation_expression): Implement to call
31962         the overloaded New constructor.
31963
31964 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
31965
31966         * class.cs (TypeContainer::Constructors): Return member
31967         constructors instead of returning null.
31968
31969 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
31970
31971         * typemanager.cs (InitCoreTypes): Initialize the various core
31972         types after we have populated the type manager with the user
31973         defined types (this distinction will be important later while
31974         compiling corlib.dll)
31975
31976         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
31977         on Expression Classification.  Now all expressions have a method
31978         `Resolve' and a method `Emit'.
31979
31980         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
31981         generation from working.     Also add some temporary debugging
31982         code. 
31983
31984 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
31985
31986         * codegen.cs: Lots of code generation pieces.  This is only the
31987         beginning, will continue tomorrow with more touches of polish.  We
31988         handle the fundamentals of if, while, do, for, return.  Others are
31989         trickier and I need to start working on invocations soon.
31990
31991         * gen-treedump.cs: Bug fix, use s.Increment here instead of
31992         s.InitStatement. 
31993
31994         * codegen.cs (EmitContext): New struct, used during code
31995         emission to keep a context.   Most of the code generation will be
31996         here. 
31997
31998         * cs-parser.jay: Add embedded blocks to the list of statements of
31999         this block.  So code generation proceeds in a top down fashion.
32000
32001 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32002
32003         * statement.cs: Add support for multiple child blocks.
32004
32005 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32006
32007         * codegen.cs (EmitCode): New function, will emit the code for a
32008         Block of code given a TypeContainer and its ILGenerator. 
32009
32010         * statement.cs (Block): Standard public readonly optimization.
32011         (Block::Block constructors): Link children. 
32012         (Block::Child): Child Linker.
32013         (Block::EmitVariables): Emits IL variable declarations.
32014
32015         * class.cs: Drop support for MethodGroups here, delay until
32016         Semantic Analysis.
32017         (Method::): Applied the same simplification that I did before, and
32018         move from Properties to public readonly fields.
32019         (Method::ParameterTypes): Returns the parameter types for the
32020         function, and implements a cache that will be useful later when I
32021         do error checking and the semantic analysis on the methods is
32022         performed.
32023         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32024         and made a method, optional argument tells whether this is a class
32025         or a structure to apply the `has-this' bit.
32026         (Method::GetCallingConvention): Implement, returns the calling
32027         convention. 
32028         (Method::Define): Defines the type, a second pass is performed
32029         later to populate the methods.
32030
32031         (Constructor::ParameterTypes): implement a cache similar to the
32032         one on Method::ParameterTypes, useful later when we do semantic
32033         analysis. 
32034
32035         (TypeContainer::EmitMethod):  New method.  Emits methods.
32036
32037         * expression.cs: Removed MethodGroup class from here.
32038
32039         * parameter.cs (Parameters::GetCallingConvention): new method.
32040
32041 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32042
32043         * class.cs (TypeContainer::Populate): Drop RootContext from the
32044         argument. 
32045
32046         (Constructor::CallingConvention): Returns the calling convention.
32047         (Constructor::ParameterTypes): Returns the constructor parameter
32048         types. 
32049
32050         (TypeContainer::AddConstructor): Keep track of default constructor
32051         and the default static constructor.
32052
32053         (Constructor::) Another class that starts using `public readonly'
32054         instead of properties. 
32055
32056         (Constructor::IsDefault): Whether this is a default constructor. 
32057
32058         (Field::) use readonly public fields instead of properties also.
32059
32060         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
32061         track of static constructors;  If none is used, turn on
32062         BeforeFieldInit in the TypeAttributes. 
32063
32064         * cs-parser.jay (opt_argument_list): now the return can be null
32065         for the cases where there are no arguments. 
32066
32067         (constructor_declarator): If there is no implicit `base' or
32068         `this', then invoke the default parent constructor. 
32069
32070         * modifiers.cs (MethodAttr): New static function maps a set of
32071         modifiers flags into a MethodAttributes enum
32072         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
32073         MethodAttr, TypeAttr to represent the various mappings where the
32074         modifiers are used.
32075         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
32076
32077 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
32078
32079         * parameter.cs (GetParameterInfo): Fix bug where there would be no
32080         method arguments.
32081
32082         * interface.cs (PopulateIndexer): Implemented the code generator
32083         for interface indexers.
32084
32085 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
32086
32087         * interface.cs (InterfaceMemberBase): Now we track the new status
32088         here.  
32089
32090         (PopulateProperty): Implement property population.  Woohoo!  Got
32091         Methods and Properties going today. 
32092
32093         Removed all the properties for interfaces, and replaced them with
32094         `public readonly' fields. 
32095
32096 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
32097
32098         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
32099         initialize their hashtables/arraylists only when they are needed
32100         instead of doing this always.
32101
32102         * parameter.cs: Handle refs and out parameters.
32103
32104         * cs-parser.jay: Use an ArrayList to construct the arguments
32105         instead of the ParameterCollection, and then cast that to a
32106         Parameter[] array.
32107
32108         * parameter.cs: Drop the use of ParameterCollection and use
32109         instead arrays of Parameters.
32110
32111         (GetParameterInfo): Use the Type, not the Name when resolving
32112         types. 
32113
32114 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
32115
32116         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
32117         and instead use public readonly fields.
32118
32119         * class.cs: Put back walking code for type containers.
32120
32121 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
32122
32123         * class.cs (MakeConstant): Code to define constants.
32124
32125         * rootcontext.cs (LookupType): New function.  Used to locate types 
32126
32127
32128 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
32129
32130         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
32131         this System.Reflection code is.  Kudos to Microsoft
32132
32133         * typemanager.cs: Implement a type cache and avoid loading all
32134         types at boot time.  Wrap in LookupType the internals.  This made
32135         the compiler so much faster.  Wow.  I rule!
32136
32137         * driver.cs: Make sure we always load mscorlib first (for
32138         debugging purposes, nothing really important).
32139
32140         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
32141         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
32142
32143         * rootcontext.cs: Lookup types on their namespace;  Lookup types
32144         on namespaces that have been imported using the `using' keyword.
32145
32146         * class.cs (TypeContainer::TypeAttr): Virtualize.
32147         (Class::TypeAttr): Return attributes suitable for this bad boy.
32148         (Struct::TypeAttr): ditto.
32149         Handle nested classes.
32150         (TypeContainer::) Remove all the type visiting code, it is now
32151         replaced with the rootcontext.cs code
32152
32153         * rootcontext.cs (GetClassBases): Added support for structs. 
32154
32155 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
32156
32157         * interface.cs, statement.cs, class.cs, parameter.cs,
32158         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
32159         Drop use of TypeRefs, and use strings instead.
32160
32161 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
32162
32163         * rootcontext.cs: 
32164
32165         * class.cs (Struct::Struct): set the SEALED flags after
32166         checking the modifiers.
32167         (TypeContainer::TypeAttr): new property, returns the
32168         TypeAttributes for a class.  
32169
32170         * cs-parser.jay (type_list): Oops, list production was creating a
32171         new list of base types.
32172
32173         * rootcontext.cs (StdLib): New property.
32174         (GetInterfaceTypeByName): returns an interface by type name, and
32175         encapsulates error handling here.
32176         (GetInterfaces): simplified.
32177         (ResolveTree): Encapsulated all the tree resolution here.
32178         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
32179         types. 
32180
32181         * driver.cs: Add support for --nostdlib, to avoid loading the
32182         default assemblies.
32183         (Main): Do not put tree resolution here. 
32184
32185         * rootcontext.cs: Beginning of the class resolution.
32186
32187 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
32188
32189         * rootcontext.cs: Provide better error reporting. 
32190
32191         * cs-parser.jay (interface_base): set our $$ to be interfaces.
32192
32193         * rootcontext.cs (CreateInterface): Handle the case where there
32194         are no parent interfaces.
32195
32196         (CloseTypes): Routine to flush types at the end.
32197         (CreateInterface): Track types.
32198         (GetInterfaces): Returns an array of Types from the list of
32199         defined interfaces.
32200
32201         * typemanager.c (AddUserType): Mechanism to track user types (puts
32202         the type on the global type hash, and allows us to close it at the
32203         end). 
32204
32205 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
32206
32207         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
32208         RecordInterface instead.
32209
32210         * cs-parser.jay: Updated to reflect changes above.
32211
32212         * decl.cs (Definition): Keep track of the TypeBuilder type that
32213         represents this type here.  Not sure we will use it in the long
32214         run, but wont hurt for now.
32215
32216         * driver.cs: Smaller changes to accomodate the new code.
32217
32218         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
32219         when done. 
32220
32221         * rootcontext.cs (CreateInterface):  New method, used to create
32222         the System.TypeBuilder type for interfaces.
32223         (ResolveInterfaces): new entry point to resolve the interface
32224         hierarchy. 
32225         (CodeGen): Property, used to keep track of the code generator.
32226
32227 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
32228
32229         * cs-parser.jay: Add a second production for delegate_declaration
32230         with `VOID'.
32231
32232         (enum_body): Put an opt_comma here instead of putting it on
32233         enum_body or enum_member_declarations so we can handle trailing
32234         commas on enumeration members.  Gets rid of a shift/reduce.
32235
32236         (type_list): Need a COMMA in the middle.
32237
32238         (indexer_declaration): Tell tokenizer to recognize get/set
32239
32240         * Remove old targets.
32241
32242         * Re-add the parser target.
32243
32244 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32245
32246         * cs-parser.jay: Add precendence rules for a number of operators
32247         ot reduce the number of shift/reduce conflicts in the grammar.
32248
32249 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
32250
32251         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
32252         and put it here.
32253
32254         Get rid of old crufty code.
32255
32256         * rootcontext.cs: Use this to keep track of the parsed
32257         representation and the defined types available to the program. 
32258
32259         * gen-treedump.cs: adjust for new convention.
32260
32261         * type.cs: Split out the type manager, and the assembly builder
32262         from here. 
32263
32264         * typemanager.cs: the type manager will live here now.
32265
32266         * cil-codegen.cs: And the code generator here. 
32267
32268 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
32269
32270         * makefile: Fixed up for easy making.
32271
32272 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32273
32274         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
32275         the 
32276
32277         (unary_expression): Expand pre_increment_expression and
32278         post_decrement_expression to reduce a shift/reduce.
32279
32280 2001-07-11  Simon Cozens
32281
32282         * cs-tokenizer.cs: Hex numbers should begin with a 0.
32283
32284         Improve allow_keyword_as_indent name.
32285
32286 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
32287
32288         * Adjustments for Beta2. 
32289
32290 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
32291
32292         * decl.cs: Added `Define' abstract method.
32293         (InTransit): new property, used to catch recursive definitions. 
32294
32295         * interface.cs: Implement `Define'. 
32296
32297         * modifiers.cs: Map Modifiers.constants to
32298         System.Reflection.TypeAttribute flags.
32299
32300         * class.cs: Keep track of types and user-defined types.
32301         (BuilderInit): New method for creating an assembly
32302         (ResolveType): New function to launch the resolution process, only
32303         used by interfaces for now.
32304
32305         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
32306         that are inserted into the name space. 
32307
32308 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
32309
32310         * ARGH.  I have screwed up my tree so many times due to the use of
32311         rsync rather than using CVS.  Going to fix this at once. 
32312
32313         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
32314         load types.
32315
32316 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
32317
32318         * Experiment successful: Use System.Type rather that our own
32319         version of Type.  
32320
32321 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
32322
32323         * cs-parser.jay: Removed nsAliases from here.
32324
32325         Use new namespaces, handle `using XXX;' 
32326
32327         * namespace.cs: Reimplemented namespace handling, use a recursive
32328         definition of the class.  Now we can keep track of using clauses
32329         and catch invalid using clauses.
32330
32331 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
32332
32333         * gen-treedump.cs: Adapted for all the renaming.
32334
32335         * expression.cs (Expression): this class now has a Type property
32336         which returns an expression Type.
32337
32338         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
32339         `Type', as this has a different meaning now in the base
32340
32341 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
32342
32343         * interface.cs, class.cs: Removed from all the sources the
32344         references to signature computation, as we can not do method
32345         signature computation during the parsing time, as we are not
32346         trying to solve at that point distinguishing:
32347
32348         class X {
32349                 void a (Blah x) {}
32350                 void a (NS.Blah x) {}
32351         }
32352
32353         Which depending on the context might be valid or not, as we do not
32354         know if Blah is the same thing as NS.Blah at that point.
32355
32356         * Redid everything so the code uses TypeRefs now instead of
32357         Types.  TypeRefs are just temporary type placeholders, that need
32358         to be resolved.  They initially have a pointer to a string and the
32359         current scope in which they are used.  This is used later by the
32360         compiler to resolve the reference to an actual Type. 
32361
32362         * DeclSpace is no longer a CIR.Type, and neither are
32363         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
32364         are all DeclSpaces, but no Types. 
32365
32366         * type.cs (TypeRefManager): This implements the TypeRef manager,
32367         which keeps track of all the types that need to be resolved after
32368         the parsing has finished. 
32369
32370 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
32371
32372         * ARGH.  We are going to have to store `foreach' as a class rather
32373         than resolving it, as we need to verify error 1579 after name
32374         resolution.   *OR* we could keep a flag that says `This request to
32375         IEnumerator comes from a foreach statement' which we can then use
32376         to generate the error.
32377
32378 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
32379
32380         * class.cs (TypeContainer.AddMethod): we now add methods to the
32381         MethodGroup instead of the method hashtable.  
32382
32383         * expression.cs: Add MethodGroup abstraction, which gets us one
32384         step closer to the specification in the way we handle method
32385         declarations.  
32386
32387         * cs-parser.jay (primary_expression): qualified_identifier now
32388         tried to match up an identifier to a local variable reference or
32389         to a parameter reference.
32390
32391         current_local_parameters is now a parser global variable that
32392         points to the current parameters for the block, used during name
32393         lookup.
32394
32395         (property_declaration): Now creates an implicit `value' argument to
32396         the set accessor.
32397
32398 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
32399
32400         * parameter.cs: Do not use `param' arguments as part of the
32401         signature, per the spec.
32402
32403 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
32404
32405         * decl.cs: Base class for classes, structs and interfaces.  This
32406         is the "Declaration Space" 
32407
32408         * cs-parser.jay: Use CheckDef for checking declaration errors
32409         instead of having one on each function.
32410
32411         * class.cs: Factor out some code for handling error handling in
32412         accordance to the "Declarations" section in the "Basic Concepts"
32413         chapter in the ECMA C# spec.
32414
32415         * interface.cs: Make all interface member classes derive from
32416         InterfaceMemberBase.
32417
32418 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
32419
32420         * Many things: all interfaces are parsed and generated in
32421         gen-treedump.  Support for member variables, constructors,
32422         destructors, properties, constants is there.
32423
32424         Beginning of the IL backend, but very little done, just there for
32425         testing purposes. 
32426
32427 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
32428
32429         * cs-parser.jay: Fix labeled statement.
32430
32431         * cs-tokenizer.cs (escape): Escape " and ' always.
32432         ref_line, ref_name: keep track of the line/filename as instructed
32433         by #line by the compiler.
32434         Parse #line.
32435
32436 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
32437
32438         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
32439         to match the values in System.CodeDOM.
32440
32441         Divid renamed to Divide.
32442
32443         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
32444         statements. 
32445         (Statements.set): remove.
32446
32447         * System.CodeDOM/CodeCatchClause.cs: always have a valid
32448         statements. 
32449
32450         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
32451         falseStatements always have valid values. 
32452
32453         * cs-parser.jay: Use System.CodeDOM now.
32454